私のiOSアプリでは、いくつかの短波ファイルを再生し、最後に再生したすべてのものをWAVやCAFファイルなどの単一のオーディオファイルにエクスポートしようとしています。AUFilePlayerを使用して再生することができました。AUFilePlayerを介して再生されたオーディオをWAVまたはCAFファイルに保存するにはどうすればよいですか?
1 に答える
おそらく、ExtAudioFile API を調べる必要があるでしょう。ExtAudioFileWrite
これにより、Audio Unit が受け渡しているデータとうまく連携するように設計された関数が公開されます。ExtAudioFileWrite の署名は次のとおりです。
OSStatus ExtAudioFileWrite (
ExtAudioFileRef inExtAudioFile,
UInt32 inNumberFrames,
const AudioBufferList *ioData
);
これは、次のような Audio Unit レンダリング コールバックとうまく一致します。
OSStatus (*AURenderCallback)(
void * inRefCon,
AudioUnitRenderActionFlags * ioActionFlags,
const AudioTimeStamp * inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList * ioData
);
sharedUInt32 inNumberFrames
とAudioBufferList * ioData
args に注目してください。
したがって、ワークフローは次のようになります。
- ExtAudioFile を書き込み用にセットアップする
- AUGraph をセットアップしてオーディオをレンダリングする
- AudioUnits が渡している AudioBufferLists をキャプチャします
3 を使用するには、アプリの設定方法についてもう少し知識が必要なので、あまり詳しく説明することはできません。オーディオをファイルに書き込むだけでなくスピーカーにも送りたい場合は、おそらく を利用したいと思うでしょう。AUGraphAddRenderNotify
これにより、レンダリングが発生するたびに通知されます (また、独自の AURenderCallback をフックして書き込みます)。あなたのExtAudioFileに)。
この方法で処理を行っている場合 (つまり、レンダー コールバックを使用している場合) ExtAudioFileWriteAsync
、レンダー スレッドをブロックしないように を使用してください。