用finch完成了音频回调

时间:2010-08-16 20:24:58

标签: iphone audio finch

有没有完成与雀科的回放?类似于 - audioPlayerDidFinishPlaying avaudioplayer的东西?通过代码查找我找不到引用它的任何内容。

3 个答案:

答案 0 :(得分:1)

Finch中没有这样的回调,因为OpenAL不支持它。 (或者至少它在我上次看的时候不支持它。)你可以这样假装它:

- (void) playSoundWithCallback {
    [someSound play];
    [someDelegate performSelector:@selector(soundDidFinishPlaying:)
        withObject:someSound afterDelay:someSound.duration];
}

我没有尝试过,但这是一个简单的代码,应该可以正常工作。嗯......至少在你开始搞乱音高并因此声音速度之前:)

答案 1 :(得分:0)

@zoul:我知道这是一个迟到的回复。但我注意到答案是不正确的。如果我暂停声音或系统中断,该怎么办?在这种情况下,即使声音尚未完成,您也会收到回叫。请阅读openAL规范中的“4.3.6。管理源执行”一节,以便正确处理。

答案 2 :(得分:0)

如果你不关心中断,这是一个修正音调的黑客。

当音高不是1.0时,OpenAL会改变播放声音的播放长度。 (似乎无法从OpenAL查询这个新长度, 因为AL参数返回与之前相同的值)

音高范围从0.5到2.0f。所以,如果我们假设0.5的音高恰好是两倍, 并且在2.0处的音高是准确的一半,我们应该能够使用音高作为乘法器:

- (void) playSoundWithCallback {
    [someSound play]; 
    [someDelegate performSelector:@selector(soundDidFinishPlaying:) 
        withObject:someSound afterDelay: someSound.duration * (1.0/someSound.pitch) ]; 
}