如何在iPhone SDK中一次播放多个声音?

时间:2009-11-15 17:06:23

标签: iphone core-audio

如何在iPhone SDK中一次播放多个声音?

2 个答案:

答案 0 :(得分:1)

here是使用AudioUnits的示例。它们可能对您的要求有点复杂,但之后您从未说明过您的要求。

答案 1 :(得分:1)

我发现如果您不需要任何高级音频功能,AVAudioPlayerNSOperationQueue工作得非常好。

注意:此示例已根据项目进行调整,可能包含一些错误

//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属性以及playstop方法播放声音文件的正确部分。< / p>