音频单元记录:增加缓冲区的容量

时间:2012-07-20 06:14:05

标签: ios xcode core-audio audiounit

我正在为iPhone制作一个录音应用程序,我在其中使用远程音频设备。在对传入缓冲区执行某些音频分析后,我使用以下命令将缓冲区写入磁盘:

ExtAudioFileWriteAsync

但是,我遇到的问题是录制的缓冲区比我想要的更安静。

我想通过在写入磁盘之前手动将它们乘以体积因子来增加缓冲区的容量。任何人都可以向我解释最好的方法吗?

(由于各种原因,在最后阶段进行手动调整比改变任何音频单元属性更有吸引力,否则这些属性对我的应用程序来说非常有用。)

提前致谢!!

3 个答案:

答案 0 :(得分:5)

您可以使用Accelerate.framework快速轻松地执行此操作。由于你使用的是AudioUnits,我假设你有一个解交错的浮点缓冲区,所以这样的东西应该可以工作:

float desiredGain = 1.06f; // or whatever linear gain you'd like
AudioBufferList *ioData; // audio from somewhere
for(UInt32 bufferIndex = 0; bufferIndex < ioData->mNumberBuffers; ++bufferIndex) {
  float *rawBuffer = (float *)ioData->mBuffers[bufferIndex].mData;
  vDSP_Length frameCount = ioData->mBuffers[bufferIndex].mDataByteSize / sizeof(float); // if you don't have it already
  vDSP_vsmul(rawBuffer, 1, &desiredGain, rawBuffer, 1, frameCount);
}

答案 1 :(得分:1)

此链接提供了如何解决我的问题的极好演示:

http://www.stefanpopp.de/2011/capture-iphone-microphone/

答案 2 :(得分:0)

你可能在想这个问题。 :-)你只需要循环缓冲区中的值并将每个值乘以所需的增益因子。