0

オーディオ グラフでリモート I/O ユニットからオーディオをキャプチャしようとしているコールバックがあります。コールバック内には、2 つのチャネルからのインターリーブされていないデータを格納する必要が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 に答える