我正在尝试学习如何在 iOS 上操作音频,并且我在 Apple 的开发者页面上阅读了很多内容。但是,我已经达到了拥有 AudioBuffer 的地步,但我不确定如何处理它。我知道它包含一个 mData 缓冲区,但我不知道它包含什么。正如引用资料所描述的那样,我四处寻找什么是“音频数据缓冲区”,但我似乎仍然不明白那是什么。
此外,我收集到的 mData 似乎是 void 类型,可能会被转换为包含的特定音频的类型。我想我也不确定如何知道将其转换为什么。
最佳答案
你不需要施放它。可以作为 (void *)。它包含 8.24 位定点整数值的样本。我知道一开始可能会让人望而生畏。 AudioBuffer 的其他属性描述了是否有多个 channel 。如果是这样,它们就会交错。
您可以用它做的是编写渲染回调函数,如 Audio Unit Hosting Guide 中所述。 ,并开始将缓冲中的帧馈送到输出中,从而实现音频播放。强大的是,您可以在将缓冲区数据发送到输出之前对其进行操作,从而实现特殊效果,如播放速率变化、音高移动、延迟、回声等。
简单情况下渲染函数的输出是这样的:
OSStatus renderInput(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
float *outA = (float*)ioData->mBuffers[0].mData;
float *outB = (float*)ioData->mBuffers[1].mData;
for (int i=0; i<inNumberFrames; i++) {
outA[i] = myBuffer.mData[i];
outB[i] = myBuffer.mData[i];
}
}
这不一定是一个有效的代码示例,我现在只是从头脑中写出来的。但它传达了基本思想。
关于ios - 核心音频 AudioBuffer mData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7300568/