2011-12-15 32 views
2

我正在爲iOS平臺製作遊戲,並且我想使用openAL在遊戲中播放音頻效果(背景音樂除外)。我想要例如20-30個持續時間爲1-3秒的聲音。因爲我希望這些聲音能夠毫不拖延地播放,我必須從文件加載,解壓縮並存儲在內存中。但解壓縮音頻(據我所知)使用了大量的內存。那麼我是否正確?或者有另一種方式?謝謝在iOS中使用openAL預先播放音頻文件的好方法

回答

3

加載聲音會導致延遲,並可能導致應用程序的其餘部分抖動。爲了獲得最佳性能,您一定要預先加載聲音效果。

內存使用是一個問題,但只要你不是一次加載太多的音頻數據到內存,你會沒事的。

未壓縮時,44KHz單聲道音頻數據將佔用每秒88,000字節。立體聲是雙倍的,但通常對於不想立體聲的音效而言。所以如果你有30個聲音加載,每個持續3秒,你將有90秒的聲音使用7.5MB的內存。在將其壓縮到AAC(保留源採樣率)之前,您可以使用22050 Hz的信號源將內存使用量減半。

我要做的就是保持音頻緩衝區高速緩存,我可以刷新,當應用程序開始使用過多內存,就像這樣:https://github.com/kstenerud/ObjectAL-for-iPhone/blob/master/ObjectAL/ObjectAL/OALSimpleAudio.m#L441

1

對於最低延遲聲音效果,您將需要播放已經存儲在內存中的未壓縮音頻。 2或3兆字節並不是分配給低延遲聲音效果的大量內存。