0

我有一个回调,我试图从音频图中的远程 I/O 单元捕获音频。在我的回调中,我有AudioBufferList一个AudioUnitRender函数,我需要存储来自两个通道的非交错数据。

这是上下文的代码片段:

//audiounit render function inside of a callback    
OSStatus status;
        status = AudioUnitRender(THIS.ioUnit,    
                                 ioActionFlags,
                                 inTimeStamp,
                                 0,
                                 inNumberFrames,
                                 &bufferList);

//want to initialize and configure bufferList to store non-interleaved data from both channels
...

//write audio data to disk 
    OSStatus result;
        if (*ioActionFlags == kAudioUnitRenderAction_PostRender) {
            result =  ExtAudioFileWriteAsync(THIS.extAudioFileRef, inNumberFrames, &bufferList);
            if(result) printf("ExtAudioFileWriteAsync  %ld \n", result);}
        return noErr; 

有谁知道如何做到这一点?

谢谢。

4

2 回答 2

2

您应该创建一个float**数组并在您的渲染回调中延迟初始化它,使其具有与您传递的相同的缓冲区大小(根据需要重新调整它)。从那里您可以简单地复制到您需要的通道并在另一个通道中使用该数据(我猜您正在制作某种需要在通道之间进行交互的效果)。

不幸的是,这必然是一个全局变量,但由于 iOS 中对 AudioUnits 的限制,您可能只需要忍受它。

于 2012-05-09T07:05:03.477 回答
0

您的缓冲区列表应初始化为

myBufferList.mNumberBuffers = 2;

有关工作示例,请查看 Apple 的 MixerHost 示例。

于 2013-02-07T02:35:31.427 回答