ios - 核心音频 AudioBuffer mData

标签 ios objective-c core-audio

我正在尝试学习如何在 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/

相关文章:

ios - UITextView 使键盘永久化?

ios - AudioQueueNewOutput 与 AudioQueueRef?总是展开 nil

iphone - 测试应用内购买可以在一台设备上运行,但不能在另一台设备上运行

objective-c - 报亭应用订阅(应用内购买)困惑

ios - AVPlayerViewController 完成时淡出

ios - UIPopoverPresentationController 是 popoverVisible

ios - 离开 ViewController 时停止 AVCaptureSession

ios - 定位服务不会在 iPad 上激活

iphone - 在 iOS 上播放 MP3 或 AAC 文件有哪些音频播放选项?

iphone - iPhone 5s 扬声器模式下的 iOS 7 机器人/乱码