zou*_*oul 28 iphone audio performance avaudioplayer finch
我有一个性能密集的iPhone游戏,我想添加声音.似乎有三个主要选择:(1)AVAudioPlayer
,(2)音频队列和(3)OpenAL.我讨厌编写低级代码页面来播放样本,所以我想使用它AVAudioPlayer
.问题是它似乎杀死了性能 - 我做了一个简单的测量使用CFAbsoluteTimeGetCurrent
,play
消息似乎需要9到30毫秒才能完成.考虑到25毫秒== 40 fps,这非常悲惨.
当然有一种prepareToPlay
方法可以加快速度.这就是为什么我写了一个简单的类,它可以保留几个AVAudioPlayer
s,预先准备它们然后使用准备好的播放器播放样本.没有雪茄,仍然需要上面提到的约20毫秒.
这样的性能对于游戏来说是无法使用的,那么你在iPhone上使用什么来播放声音效果不错的声音呢?我做错了AVAudioPlayer
吗?你用音频队列播放声音吗?(在2.2出现之前,我写了一些类似于AVAudioPlayer的内容,我很乐意放弃这种体验.)你使用OpenAL吗?如果是,是否有一种简单的方法可以使用OpenAL播放声音,还是必须编写代码页?
更新:是的,使用OpenAL播放声音非常简单.
AVAudioPlayer在游戏音频方面非常有优势.通过调整其中一个示例来解决AudioQueue或OpenAL绝对是可行的方法.这种延迟更加可控.
如果您正在调用play
主线程,请尝试在单独的线程上运行它.我最终做的是:
#include <dispatch/dispatch.h>
dispatch_queue_t playQueue = dispatch_queue_create("com.example.playqueue", NULL);
AVAudioPlayer* player = ...
dispatch_async(playQueue, ^{
[player play];
});
Run Code Online (Sandbox Code Playgroud)
这解决了我遇到的最糟糕的帧率口吃问题.
归档时间: |
|
查看次数: |
9539 次 |
最近记录: |