AVAudioPlayer即时更改声音URL

时间:2015-04-17 11:42:49

标签: ios iphone avaudioplayer

在我的init方法中,我像这样初始化sound_a.wav。

    AVAudioPlayer *snd = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle] 
    URLForResource:@"sound_a" withExtension:@"wav"] error: nil];

根据场景我需要播放不同的声音(让我们假设声音是sound_b)。

我需要哪些代码才能动态更改?

3 个答案:

答案 0 :(得分:4)

首先如果AVAudioPlayer仍然在播放,请将其停止:

if([snd isPlaying]){
    [snd stop];
}

然后,使用新网址重新创建新的AVAudioPlayer我重新启动播放器的第一个建议是行不通的。您必须创建一个新实例。

snd = [[AVAudioPlayer alloc] initWithContentsOfURL:[[NSBundle mainBundle]URLForResource:@"sound_b" withExtension:@"wav"] error: nil];
[snd play];

更好的解决方案是将AVQueuePlayer用于多个声音:

AVPlayerItem *item1 = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"sound_a"]];
AVPlayerItem *item2 = [AVPlayerItem playerItemWithURL:[NSURL URLWithString:@"sound_b"]];
AVQueuePlayer *player = [[AVQueuePlayer alloc] initWithItems:@[item1, item2]];

[player play];

[...]

[player advanceToNextItem];

答案 1 :(得分:0)

不确定" Scenario"在这里意味着但是,您可以通过创建一个包含声音列表的数组并每次生成一个随机索引来播放随机声音。

答案 2 :(得分:0)

您可以为要播放的所有声音创建AVAudioPlayer实例,并使用prepareToPlay预加载缓冲区。然后当你需要播放另一个声音时,只需使用stop方法停止前一个播放器,然后使用playAtTime:播放另一个播放器(用于下一个声音)。