Iphone 已完成使用finch播放音频回调

Iphone 已完成使用finch播放音频回调,iphone,audio,finch,Iphone,Audio,Finch,芬奇有没有完成回叫?类似于-AudioPlayerDifinishPlaying在avaudioplayer中的内容?查看代码时,我找不到任何引用它的东西。Finch中没有这样的回调,因为OpenAL不支持它。(或者至少我上次看的时候它不支持。)你可以这样假装: - (void) playSoundWithCallback { [someSound play]; [someDelegate performSelector:@selector(soundDidFinishPlayi

芬奇有没有完成回叫?类似于-AudioPlayerDifinishPlaying在avaudioplayer中的内容?查看代码时,我找不到任何引用它的东西。

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

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

我没有试过,但它是一个简单的代码,应该可以正常工作。嗯……至少在你开始弄乱音高和音速之前:)

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

如果您不关心中断,这里有一个带有音调修正的黑客程序

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

俯仰范围从0.5到2.0华氏度。所以,如果我们假设0.5的音高是原来的两倍, 音高2.0正好是音高的一半,我们应该能够将音高用作乘法器:

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

我还没有深入研究Finch/OpenAL,但可能有一种方法可以进行民意调查,看看是否有声音在播放?这会稍微复杂一点,但即使音高在变化也会起作用。