我正在使用Finch声音引擎从AVAudioPlayer切换到OpenAL。我需要进行计量,即获得平均峰值水平。 Finch声音引擎不提供此功能,而且我对OpenAL完全不熟悉。我怎样才能做到这一点?任何例子都会非常感激。
答案 0 :(得分:2)
我假设您正在寻找AVAudioPlayer的peakPowerForChannel:
方法的替代品。不幸的是,没有。你必须自己动手。
OpenAL“声音”是“缓冲区”(您的样本数据,加载到内存中)和“源”的组合,它表示您希望应用于样本数据的属性。
OpenAL播放的简单方法是将整个文件加载到内存中,并在一次调用中播放整个文件。但是,您可以使用NSInputStream将一大块PCM样本数据从文件读入OpenAL缓冲区,使用alBufferData()使用您自己的函数计算峰值功率,使用您的源播放块,然后重复直到EOF
我知道你打算使用Finch,但你应该给AudioQueues一个真正的近距离观察(如果测量对你来说是一个关键特征)。它更适合这种类型的应用程序。特别是,kAudioQueueProperty_CurrentLevelMeterDB属性将为您提供峰值RMS(mPeakPower)或平均RMS级别(mAveragePower),您可以根据需要随时阅读。
祝你好运,编码愉快!
可能有用的一些资源: