Я бьюсь головой о всех, пытающихся выяснить странную проблему звука в моей программе.Я выложу код ниже.В качестве краткого описания у меня есть функция, которая передает переменную, и она принимает ее и решает, какую категорию звука она должна воспроизводить, в рамках этой функции у меня есть несколько звуков достижимой категории, поэтому я использую инструкцию arc4random, а затем запускаю ее через инструкцию switch.,Что продолжает происходить, так это то, что он будет воспроизводить два звука из оператора case вместо одного, чаще всего, если я вызываю его дважды, нажимая кнопку во второй раз, он будет воспроизводить звук с первого раза и новый звук, а иногда -играет одинаково поверх друг друга, но с небольшой задержкой.Я установил точку останова в коммутаторе, и когда он дважды проигрывает, он проходит через коммутатор только один раз, что очень запутанно.Стоит отметить, что перед этим я проигрываю другой звук, но он использует отдельный AVAudioplayer и переменную пути, так что это не должно быть проблемой, так как он никогда не воспроизводит второй звук, как другой звук, который я играю.Я вызываю функцию только один раз, когда нажимаю кнопку, поэтому не уверен, почему она это делает.Я попытался поместить переменные * path и * avaudioplayer в функцию, но она не будет воспроизводиться вообще.При поиске здесь кажется, что дуга освобождает его до того, как он получит шанс сыграть.В итоге я попытался поместить его в верхнюю часть моего файла .m как глобальную переменную, а затем просто установить фактический путь и воспроизвести звук в коммутаторе.Звук будет звучать, но он играет дважды. Надеюсь, кто-нибудь может мне помочь.Я попытался поместить определение avaudioplayer как свойство, и оно делает то же самое.Вот мой фрагмент кода.И заранее спасибо ...
в файле .m
// Just below my synthesize statements
NSString *path;
AVAudioPlayer *theSound
// My code that I call when the button is pressed
[self playVoice:@"buyVoice"];
// The playVoice function
- (void)playVoice:(NSString*)voiceNum;
if ([voiceNum isEqualToString:@"buyVoice"]) // Bought an Item Time for a voice
{
// play coin sound
[self coinSound];
// play random buy phrase and coin sound
int phraseNumber = 0;
phraseNumber = arc4random() %(3);
switch (phraseNumber)
{
case 0:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy1" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}
case 1:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy2" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}
case 2:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy3" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}
case 3:
{
path = [[NSBundle mainBundle] pathForResource:@"sndBuy4" ofType:@"m4a"];
theSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: path] error:NULL];
[theSound setNumberOfLoops:0];
[theSound play];
break;
}
}
}