2010-04-02 92 views
1

我正在使用Finch聲音引擎從AVAudioPlayer切換到OpenAL。我需要做計量,即得到平均峯值水平。 Finch聲音引擎不提供此功能,而且我對OpenAL完全陌生。我怎樣才能做到這一點?任何例子將非常感激。如何在OpenAL中測量/平均峯值功率水平?

回答

2

我假設您正在尋找AVAudioPlayer的peakPowerForChannel:方法的簡單替換方法。不幸的是,沒有。你將不得不推出自己的。

OpenAL「聲音」是「緩衝區」(您的樣本數據,加載到內存中)和「源代碼」的組合,代表您想要應用於樣本數據的屬性。

OpenAL播放的簡單方法是將整個文件加載到內存中,然後在一次調用中播放整個文件。但是,您可以使用NSInputStream將一段PCM樣本數據從文件讀入OpenAL緩衝區,使用alBufferData()使用您自己的函數計算峯值功率,使用您的源播放該塊,然後重複,直到EOF 。

我知道您打算使用Finch,但您應該給AudioQueues一個真正的近距離查看(如果測量對您來說是一個關鍵功能)。它更適合這種類型的應用程序。特別是,kAudioQueueProperty_CurrentLevelMeterDB屬性將爲您提供峯值RMS(mPeakPower)或平均RMS水平(mAveragePower),您可以隨時隨地閱讀它們。

祝你好運,快樂的編碼!

有些資源可能會有所幫助:

+1

唉,我希望避免AudioQueues。永遠不可能真正理解它。但是,感謝您的回覆,我找不到任何信息! – Thaurin 2010-04-03 14:17:09