Я обнаружил, что если вам не требуются какие-либо расширенные аудиофункции, AVAudioPlayer
и NSOperationQueue
работают очень хорошо.
Примечание: этот пример адаптирован для проекта и может содержать некоторые ошибки
//sound1 and sound2 are NSData objects
NSOperationQueue *queue = [[NSOperationQueue alloc] init];
NSError *error = nil;
AVAudioPlayer *player1 = [[AVAudioPlayer alloc] initWithData:sound1 error:&error];
AVAudioPlayer *player2 = [[AVAudioPlayer alloc] initWithData:sound2 error:&error];
if(error)
{
//Handle errors...
}
NSInvocationOperation *op1 = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(playSounds:) object:player1] autorelease];
NSInvocationOperation *op2 = [[[NSInvocationOperation alloc] initWithTarget:self selector:@selector(playSounds:) object:player2] autorelease];
[queue addOperation:op1];
[queue addOperation:op2];
Методы playSounds
будут выглядеть примерно так:
- (void)playSounds:(id)data
{
AVAudioPlayer *player = (AVAudioPlayer *)data;
[player prepareToPlay];
[player play];
}
Замечание по эффективности , на симуляторе это будет нормально работать, но дорогая операция на устройстве - создание объекта AVAudioPlayer
, т. Е .:
AVAudioPlayer *player1 = [[AVAudioPlayer alloc] initWithData:sound1 error:&error];
Поэтому лучше всего хранить все свои звуки в одном файле и использовать свойство currentTime
и методы play
и stop
для воспроизведения правильного фрагмента звукового файла.