我正在为我使用远程音频单元的 iPhone 构建一个录音应用程序。在对传入缓冲区执行一些音频分析后,我使用以下方法将缓冲区写入磁盘:
ExtAudioFileWriteAsync
但是,我遇到的问题是记录的缓冲区比我想要的要安静。
我想通过在写入磁盘之前手动将它们乘以体积因子来增加缓冲区的体积。任何人都可以向我解释最好的方法吗?
(由于各种原因,在最后阶段进行手动调整比更改任何音频单元属性更有吸引力,否则这对我的应用程序来说效果很好。)
提前致谢!!
我正在为我使用远程音频单元的 iPhone 构建一个录音应用程序。在对传入缓冲区执行一些音频分析后,我使用以下方法将缓冲区写入磁盘:
ExtAudioFileWriteAsync
但是,我遇到的问题是记录的缓冲区比我想要的要安静。
我想通过在写入磁盘之前手动将它们乘以体积因子来增加缓冲区的体积。任何人都可以向我解释最好的方法吗?
(由于各种原因,在最后阶段进行手动调整比更改任何音频单元属性更有吸引力,否则这对我的应用程序来说效果很好。)
提前致谢!!
您可以使用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);
}
你可能想多了这个问题。:-) 您只需要遍历缓冲区中的值并将每个值乘以所需的增益因子。