我正在使用 Finch 声音引擎从 AVAudioPlayer 切换到 OpenAL。我需要进行计量,即获得平均峰值电平。Finch 声音引擎不提供此功能,我对 OpenAL 完全陌生。我怎样才能做到这一点?任何示例将不胜感激。
问问题
968 次
1 回答
2
我假设您正在寻找 AVAudioPlayerpeakPowerForChannel:
方法的替代品。不幸的是,没有。你必须自己动手。
OpenAL“声音”是“缓冲区”(您的样本数据,加载到内存中)和“源”的组合,它表示您希望应用于样本数据的属性之类的东西。
OpenAL 播放的简单方法是将整个文件加载到内存中,然后一次调用即可播放整个文件。但是,您可以使用 NSInputStream 将文件中的 PCM 样本数据块读入 OpenAL 缓冲区,使用 alBufferData() 使用自己的函数计算峰值功率,使用源播放块,然后重复直到 EOF .
我知道您打算使用 Finch,但您应该给 AudioQueues 一个真正的仔细查看(如果计量对您来说是一个关键功能)。它更适合这种类型的应用程序。特别是,kAudioQueueProperty_CurrentLevelMeterDB 属性将为您提供峰值 RMS (mPeakPower) 或平均 RMS 电平 (mAveragePower),您可以随时阅读。
祝你好运,编码愉快!
一些可能有用的资源:
- http://kcat.strangesoft.net/openal-tutorial.html
- http://connect.creativelabs.com/openal/Documentation/OpenAL_Programmers_Guide.pdf
- http://www.hydrogenaudio.org/forums/index.php?showtopic=78578
- http://developer.apple.com/mac/library/documentation/MusicAudio/Reference/AudioQueueReference/Reference/reference.html
于 2010-04-02T21:17:18.443 回答