有没有和finch玩完的回调?类似于视频播放器中的- audioPlayerDidFinishPlaying吗?浏览代码时,我找不到任何引用它的内容。
发布于 2010-09-05 01:21:28
Finch中没有这样的回调,因为OpenAL不支持它。(或者至少在我最后一次查看时它不支持它。)你可以这样伪装它:
- (void) playSoundWithCallback {
[someSound play];
[someDelegate performSelector:@selector(soundDidFinishPlaying:)
withObject:someSound afterDelay:someSound.duration];
}我没有尝试过,但它是一个简单的代码,它应该可以很好地工作。Well…至少在你开始弄乱音高和音速之前:)
发布于 2011-07-17 21:04:25
@zoul:我知道这是一个很晚的回复。但是我注意到答案是不正确的。如果我暂停了声音或者系统中断了,该怎么办?在这种情况下,即使声音还没有结束,也会收到回调。请阅读openAL规范中的"4.3.6.管理源代码执行“一节,以获得正确的处理。
发布于 2012-02-23 03:33:42
如果你不关心中断,这里有一个解决音高问题的技巧。
当pitch不为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) ];
} https://stackoverflow.com/questions/3497023
复制相似问题