【问题标题】:How can I write samples to an AudioBuffer in Core Audio?如何将样本写入 Core Audio 中的 AudioBuffer?
【发布时间】:2015-03-01 20:17:41
【问题描述】:

我的代码需要将 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* 类型的缓冲区?这不就是一个指向任意位置的指针吗?

【问题讨论】:

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


    【解决方案1】:

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

    要写入void *,如果您正在处理单个样本,请在写入之前将其转换为适当的类型,或者如果您的音频已经准备好,请致电memcpy

    【讨论】:

      猜你喜欢
      • 2011-11-10
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多