首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >finch的音频回调播放完毕

finch的音频回调播放完毕
EN

Stack Overflow用户
提问于 2010-08-17 04:24:58
回答 3查看 434关注 0票数 0

有没有和finch玩完的回调?类似于视频播放器中的- audioPlayerDidFinishPlaying吗?浏览代码时,我找不到任何引用它的内容。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-05 01:21:28

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

代码语言:javascript
复制
- (void) playSoundWithCallback {
    [someSound play];
    [someDelegate performSelector:@selector(soundDidFinishPlaying:)
        withObject:someSound afterDelay:someSound.duration];
}

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

票数 1
EN

Stack Overflow用户

发布于 2011-07-17 21:04:25

@zoul:我知道这是一个很晚的回复。但是我注意到答案是不正确的。如果我暂停了声音或者系统中断了,该怎么办?在这种情况下,即使声音还没有结束,也会收到回调。请阅读openAL规范中的"4.3.6.管理源代码执行“一节,以获得正确的处理。

票数 0
EN

Stack Overflow用户

发布于 2012-02-23 03:33:42

如果你不关心中断,这里有一个解决音高问题的技巧。

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

音调范围从0.5到2.0f。因此,如果我们假设间距为0.5的两倍,而间距为2.0的一半,我们应该能够使用间距作为乘法器:

代码语言:javascript
复制
- (void) playSoundWithCallback {
    [someSound play]; 
    [someDelegate performSelector:@selector(soundDidFinishPlaying:) 
        withObject:someSound afterDelay: someSound.duration * (1.0/someSound.pitch) ]; 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3497023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档