如何将样本写入Core Audio中的AudioBuffer?

时间:2015-01-03 22:18:16

标签: ios objective-c audio core-audio ezaudio

我的代码需要将16位PCM样本从内存写入AudioBuffer。

// Completely override the output callback function
- (void)
                 output:(EZOutput *)output
callbackWithActionFlags:(AudioUnitRenderActionFlags *)ioActionFlags
            inTimeStamp:(const AudioTimeStamp *)inTimeStamp
            inBusNumber:(UInt32)inBusNumber
         inNumberFrames:(UInt32)inNumberFrames
                 ioData:(AudioBufferList *)ioData {
    for (int i = 0; i < ioData->mNumberBuffers; i++) {
        AudioBuffer audioBuffer = ioData->mBuffers[i];
        for (int j = 0; j < audioBuffer.mDataByteSize; j++) {
            audioBuffer.mData[j];  //void* how do I know what this expects??
        }
    }
    // Fill the ioData with your audio data from anywhere
}

我正在使用https://github.com/syedhali/EZAudio中的EZAUdio框架来帮助播放我使用适当机制下载的一些PCM音频数据。

我应该如何提交void *类型的缓冲区?不仅仅是指向任意位置的指针。

1 个答案:

答案 0 :(得分:0)

缓冲区所需的数据格式由-audioStreamBasicDescription中的EZOutput给出。这将返回一个AudioStreamBasicDescription结构,您可以读取该结构以确定通道数,每通道位数等。

如果您正在处理个别样本,或者如果您的音频已经准备好,请拨打void *,以便写入memcpy,然后在写入之前将其投射到适当的类型。