2010-09-14 73 views
0

我最近一直在试图融入一个强大的声音管理课程,在那里声音播放的精度是必须的。 我在寻找的是加载声音,设置播放开始位置(或播放头),播放一段时间,暂停声音,将'播放头'位置设置为新的间隔并再次恢复播放的选项。 (动态间隔)。 我已经尝试过使用AVAudioPlayer - 但它似乎太慢了。性能不符合您的预期,因此在拨打pausesetCurrentTime:时会滞后。带有setCurrentTimeFunction功能的iPhone/iPad声音播放。非AVAudioPlayer

这是最容易使用的库,也是唯一具有setCurrentTime:功能的库。

我来这里要求您的帮助,一个体面的开源SoundEngine的建议,可以处理低延迟的间隔设置(播放头移动),或者提到OpenAL或AudioUnit工具可以处理播放位置的地方设置。

预先感谢您,
〜Natanavra。

回答

1

这将是值得你花时间去看看SDK附带的openAL程序员指南。它有各种各样的好东西! 来自:

根据来源:由alGenSources生成的每个来源具有可以设置或检索的属性。 的alSource并[f,3F,FV,i]和alGetSource并[f,3F,FV,I]可以使用的功能的家庭设置或检索下面的源属性: ...

AL_SEC_OFFSET f, fv, i, iv the playback position, expressed in seconds 
AL_SAMPLE_OFFSET f, fv, i, iv the playback position, expressed in samples 
AL_BYTE_OFFSET f, fv, i, iv the playback position, expressed in bytes 

所以您可以在几秒钟内获得播放位置并除以60来获得标准化时间。

float pos = 0; alGetSourcef(sourceID, AL_SEC_OFFSET, &pos); 
float normalizedPos = pos/60.0f; 

OpenAL绝对有能力播放声音暂停任何你喜欢的。请记住,OpenAL经常用于游戏,因为它可提供低延迟和按需播放的声音播放。你对声音有很多控制权。与AVAudioPlayer类相比。 希望这有助于 你们的答复

PK

+0

非常感谢你。我一定会尝试一下。同时,我设法使AVAudioPlayer类更加有效,并通过继承它并为其添加各种方法来降低延迟。 – natanavra 2010-09-19 12:37:38

+0

这听起来很棒。我很高兴你能够减少延迟,因为这对于播放声音非常重要。 至于你的问题在哪里你要求提供的地方说明OpenAL或AudioUnit工具可以处理播放位置设置;我已经提供给你,所以请试试这个问题,这样可以关闭这个问题。谢谢。 – Pavan 2010-09-19 16:04:53