2011-08-01 8 views
1

我试图完成基本如下:如何快速循环播放音频块并在Core Audio中确定其采样值(幅度/功率电平/等)?

  1. 打开一个文件,确定我会用多少个“样品”需要根据其持续时间
  2. 将文件分成X个抽样;确定每个样品的(平均)功率水平/幅度。
  3. 利用这些样本值,继续绘制表示音频的波形(以下these guidelines,也许)

我花了三天左右,通过网上论坛,书籍和API与无济于事精心搜索。我被困在最关键的一步 - >确定音频块(缓冲区)的功率电平。

在阅读了大部分即将推出的Core Audio book之后,我已经习惯了AudioQueue,音频单元的低级环境,并且在某种程度上适用于OpenAL。但是,我所见过的所有示例和解释(在本书中以及网络上的其他地方)都涉及在音频文件正在播放或录制(即实时)时确定功率级别值。

但是,我的目的是快速高效地确定磁盘上给定文件的这些值,而无需实时播放它。对于我需要查看的库,函数的任何指导都将不胜感激。

谢谢。

+0

你有没有想到这一点,我坚持在同一问题。 – tommys

回答

1

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

0

你卡在哪一部分?我还没有阅读或写作文件,所以别人可以帮助你在这方面。但就实际处理音频流而言,您会希望使用加速框架。这包含用于获取所需数据的功能。为了获得功率级别,我不确定是否需要首先对信号进行FFT。

如果你这样做,我已经写了一个关于如何用加速框架做FFT的冗长的回答Using the Apple FFT and Accelerate Framework

我记得浏览功能列表 - 有功能可以查找信号的峰值功率和平均功率。您可能想要将音频信号读取为一堆浮标,以便使用这些功能。