Как я могу воспроизводить несколько звуков одновременно в iPhone SDK? - PullRequest
0 голосов
/ 15 ноября 2009

Как воспроизвести несколько звуков одновременно в iPhone SDK?

Ответы [ 2 ]

1 голос
/ 09 декабря 2009

Я обнаружил, что если вам не требуются какие-либо расширенные аудиофункции, 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 для воспроизведения правильного фрагмента звукового файла.

1 голос
/ 09 декабря 2009

здесь - пример использования AudioUnits. они могут быть немного сложными для ваших требований, но тогда вы никогда не указали свои требования.

...