0

オーディオグラフのリモートI/Oユニットからオーディオをキャプチャしようとしているコールバックがあります。私のコールバックの中には、私がというAudioUnitRenderの機能を持っていて、2つのチャンネルからインターリーブされていないデータを保存する必要があります。インターリーブされていないオーディオデータを格納するようにバッファリストを設定しますか?

はここコンテキストのコードスニペットです:

//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; 

誰もがこれを行う方法を知っていますか?

ありがとうございました。

答えて

2

float**配列を作成し、レンダリングコールバックで遅延を初期化して、渡されたのと同じバッファサイズにする必要があります(必要に応じて再割り当てします)。そこから、必要なチャンネルにコピーして、そのデータを他のチャンネルで使用することができます(チャンネル間でやりとりする必要のある種類のエフェクトを作っていると思います)。

残念ながら、これは必然的にグローバル変数になりますが、iOSのAudioUnitsの制限により、おそらくそれだけで生活する必要があります。

+0

ありがとうございます。 +1。私はちょうど間違った木を吠えるだろうと気付いた。私の研究では、ExtAudioFileWriteAsyncは、ステレオを渡す場合、インタリーブされたデータのバッファを1つ必要とすることを示唆しています。多分あなたは、関連する質問を手伝うことができるでしょう:http://stackoverflow.com/questions/10511272/turn-non-interleaved-audio-data-into-interleaved –

+0

そうです。この場合、おそらく多くのインターレースとデインターレースが必要になるでしょう。 :) –

+0

Audio Unitコールバックにパラメータの構造体を渡すことができます。あなたのスタイルガイドがそのようなものを好まない場合は、グローバルを使う必要はありません。 – hotpaw2

0

あなたのバッファリストは、AppleによってMixerHost例を確認し、作業例えば

myBufferList.mNumberBuffers = 2; 

で初期化する必要があります。

関連する問題