如何快速循环播放音频块并确定Core Audio中的样本值(幅度/功率电平/等)?

时间:2011-08-01 08:38:56

标签: core-audio openal audioqueue decibel

我想要完成的工作基本如下:

  1. 打开一个文件,根据持续时间确定我需要多少'样本'
  2. 将文件分成x个样本;确定每个样本的(平均)功率水平/振幅。
  3. 使用这些样本值,继续绘制代表音频的波形(可能跟随these guidelines
  4. 我花了大约三天时间,通过在线论坛,书籍和API仔细搜索无济于事。我陷入了最关键的一步 - >确定音频块(缓冲区)的功率电平。

    阅读了大部分即将到来的Core Audio book后,我对AudioQueues,Audio Units的低级环境以及某种程度上的OpenAL感到满意。但是,我所看到的所有示例和解释(在本书和网络上的其他地方)都涉及在播放或录制音频文件时(即实时)确定功率电平值。

    然而,我的目的是快速有效地确定磁盘上给定文件的这些值,而无需实时回放。我非常感谢您对我需要查看的库,功能的任何指导。

    感谢。

2 个答案:

答案 0 :(得分:1)

有几种方法可以实现这一目标。您可以将整个文件读入内存,然后应用分析。或者读取文件的块并使用AudioFile.h中的AudioFileReadPackets(...)获取每个块的平均级别。

答案 1 :(得分:0)

你坚持哪一部分?我还没有玩过阅读或写入文件,所以其他人可以帮助你解决这个问题。但就实际处理音频流而言,您将需要使用加速框架。它包含用于获取所需数据的函数。为了获得功率水平,我不确定你是否需要首先对信号进行FFT。

如果你这样做,我就如何使用加速框架进行FFT编写了一篇冗长的答案Using the Apple FFT and Accelerate Framework

我记得通过功能列表查看 - 有功能可以找到信号中的峰值功率和平均功率。您可能希望将音频信号作为一组浮点读入,以便利用这些功能。

相关问题