この場合、どのオーディオファイル/フォーマットを使用する必要がありますか?.aviファイルを使用できますか?
圧縮形式または非圧縮形式を選択できます。一般的な非圧縮形式には、WavとAIFFが含まれます。CAFは、圧縮データと非圧縮データを表すことができます。.aviはオプションではありません(OSによって提供されます)。
ファイルが大きく、(ディスク上の)ストレージスペースが問題になる場合は、CAF(または単に.m4a)に保存されたAAC形式を検討してください。ほとんどのアプリケーションでは、16ビットのサンプルで十分です。また、これらのファイルを適切なサンプルレートで保存することで、スペース、メモリ、CPUを節約できます(参照:CDは44.1kHzです)。
ExtAudioFileインターフェースは変換プロセスを抽象化するため、プログラムを変更して、ディストリビューションの圧縮形式と非圧縮形式のサイズと速度の違いを比較する必要はありません(通常のアプリケーションでは、CAFのAACで問題ありません)。
非圧縮CD品質のオーディオは、チャネルごとに1分あたり約5.3MBを消費します。したがって、それぞれ3分の長さの2つのステレオオーディオファイルと3分の宛先バッファがある場合、メモリ要件は約50MBになります。
「数分」のオーディオがあるため、すべてのオーディオデータを一度にメモリにロードしないようにすることを検討する必要があるかもしれません。オーディオを読み取り、操作し、組み合わせるには、メモリ内で機能する非圧縮表現が必要になるため、ここでは圧縮形式は役に立ちません。同様に、圧縮された表現をpcmに変換するには、かなりの量のリソースが必要です。圧縮ファイルの読み取りは、バイト数は少なくなりますが、より多くの(またはより少ない)時間がかかる可能性があります。
プログラムで最初のオーディオファイルに設定された動的時間の後に2番目のオーディオを追加するにはどうすればよいですか?例:最初のオーディオの合計時間が2分である場合、2番目のオーディオファイル(3秒のオーディオ)を最初のファイルの1分または1.5分または55秒のどこかにミックスする必要がある場合があります。そのダイナミック。
ファイルを読み取り、使用する形式に変換するには、ExtAudioFile APIを使用します。これにより、目的のサンプル形式に変換されます。メモリ内の一般的なPCMサンプル表現には、、、およびが含まれますSInt32
がSInt16
、float
これはアプリケーションとハードウェア(iOS以外)によって大きく異なる可能性があります。ExtAudioFile APIは、必要に応じて、圧縮形式をPCMに変換します。
入力オーディオファイルのサンプルレートは同じである必要があります。そうでない場合は、オーディオをリサンプリングする必要があります。これは、多くのリソースを必要とする複雑なプロセスです(正しく/正確に行われた場合)。リサンプリングをサポートする必要がある場合は、このタスクを完了するために割り当てた時間を2倍にします(ここではプロセスの詳細は説明しません)。
サウンドを追加するには、ファイルからPCMサンプルを要求し、処理して、出力ファイル(またはメモリ内のバッファ)に書き込みます。
他のサウンドをいつ追加するかを決定するには、(ExtAudioFileGetPropertyを介して)入力ファイルのサンプルレートを取得する必要があります。55秒で2番目のサウンドを宛先バッファーに書き込みたい場合は、サンプル番号SampleRate * 55
でサウンドの追加を開始します。ここで、SampleRate
は、読み取っているファイルのサンプルレートです。
オーディオをミキシングするには、次のフォーム(擬似コード)を使用します。
mixed[i] = fileA[i] + fileB[i];
ただし、オーバーフロー/アンダーフローやその他の算術エラーを回避する必要があります。通常、浮動小数点の計算には時間がかかる可能性があるため(非常に多い場合)、整数値を使用してこのプロセスを実行します。一部のアプリケーションでは、オーバーフローの心配なしにシフトして追加することができます。これにより、追加する前に各入力を効果的に半分に減らすことができます。結果の振幅は半分になります。ファイルのコンテンツを制御できる場合(たとえば、ファイルがすべてリソースとしてバンドルされている場合)、ファイルのピークサンプルがフルスケール値の半分(約-6dBFS)を超えないようにすることができます。もちろん、floatとして保存すると、CPU、メモリ、およびファイルのI / O要求が高くなるという犠牲を払って、この問題が解決されます。
この時点で、2つのファイルを読み取り用に開き、1つを書き込み用に開いてから、出力ファイルに書き込む前に入力を処理およびミキシングするためのいくつかの小さな一時バッファーを用意します。効率を上げるために、これらの要求をブロック単位で実行する必要があります(たとえば、各ファイルから1024サンプルを読み取り、サンプルを処理し、1024サンプルを書き込みます)。APIは、効率のためのキャッシングとバッファリングに関して多くを保証しません。
最終出力オーディオファイルをデバイスに保存するにはどうすればよいですか?プログラムでオーディオファイルをどこかに保存した場合、もう一度再生できますか?
ExtAudioFile APIは、読み取りと書き込みのニーズに対応します。はい、後で読んだり再生したりできます。