Существует два источника задержки. Первый больше и может быть устранен с помощью prepareToPlay
метода AVAudioPlayer
. Это означает, что вы должны объявить myExampleSound
как переменную класса и инициализировать ее некоторое время, прежде чем она понадобится (и, конечно, вызвать prepareToPlay
после инициализации):
- (void) viewDidLoadOrSomethingLikeThat
{
NSString *myExamplePath = [[NSBundle mainBundle]
pathForResource:@"myaudiofile" ofType:@"caf"];
myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
[NSURL fileURLWithPath:myExamplePath] error:NULL];
myExampleSound.delegate = self;
[myExampleSound prepareToPlay];
}
- (IBAction) playSound {
[myExampleSound play];
}
Это должно уменьшить задержку примерно до 20 миллисекунд, что, вероятно, подходит для ваших нужд. Если нет, вам придется отказаться от AVAudioPlayer
и переключиться на другой способ воспроизведения звуков (например, Finch sound engine ).
См. Также мой собственный вопрос о лагах в AVAudioPlayer .