似乎AVAudioPlayer没有重新启用。因此,在下面将soundfx播放完成,延迟1秒,然后再次播放,而不是1秒延迟 - 并由此产生重叠播放:
// ...
AVAudioPlayer* soundfx = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:nil];
(void) makeSomeNoise {
[soundfx play];
sleep(1);
[soundfx play];
}
我是否必须采用NSOperation - 线程 - 来实现重叠播放的目标?
注意:我使用的是IMA4 / ADPCM格式,这显然是分层声音播放的正确格式。
干杯, 道格
答案 0 :(得分:1)
AVAudioPlayer不是可重入的。这是AVAudioPlayer在runloop结束后开始播放你的声音,而不是你的makeSomeNoise函数。如果您想以一秒钟的延迟播放声音,可以这样做:
(void) makeSomeNoise {
[soundfx play];
[soundfx performSelector:play withObject: nil afterDelay:1.0];
}