1

トラックの最後から操作されたバッファを取得し、それらを出力ファイルの最初に書き込むことで、オーディオを介した後処理パスを保存できる状況があります。

私はもともと、を使用して書き込みポインタをリセットすることでこれを実行できると考えていExtAudioFileSeekましたが、ドキュメントでこの行を見たときに実装しようとしていました

Ensure that the file you are seeking in is open for reading only. This function’s behavior with files open for writing is undefined.

これで、書き込み用にファイルを閉じてから再度開くことができることがわかりましたが、プロセスはそれよりも少し複雑です。私が行っている操作の一部は、書き込みを行っているファイルにあるバッファーからの読み取りです。全体的なプロセスは次のようになります。

  1. 読み取ったファイルの最後からバッファを読み取ります
  2. 書き込みファイルの先頭からバッファを読み取ります
  3. バッファを処理します
  4. 手順2で読み取ったバッファを上書きして、書き込みファイルの先頭にバッファを書き戻します。

論理的には、これは1パスで問題なく実行できます。プログラム的に、データを破壊したり、効率を低下させたり(目標の反対)、宇宙を爆縮させたりすることなく、同じことをどのように達成できますか?

4

1 に答える 1

1

はい、読み取りと書き込みの両方に単一のオーディオファイルを使用すると、あなたが言うように、宇宙を崩壊させるか、少なくとも他の厄介なことにつながる可能性があります。この問題を解決するための鍵は、最初の書き込みファイルを「リサイクル」するのではなく、出力を新しいファイルに書き込む必要があるステップ4にあると思います。処理が完了したら、中間書き込みファイルを破棄するだけです。

それとも私は問題を誤解しましたか?

また、これをリアルタイムで行う場合は、書き込みExtAudioFileWriteAsyncの代わりにを使用する必要があります。ExtAudioFileWriteそうしないと、I/O負荷によってオーディオドロップアウトが発生します。

于 2010-11-11T08:43:16.413 に答える