5

AMR-NB ファイルからサンプル レート、ビット レートなどの情報を抽出する方法を教えてください。厳密に言えば、サンプルレート、またはピッチやテンポを変更する可能性のあるその他のデータが必要です。

WAV ファイルの場合は簡単でしたが、ここでは AMR-NB 形式 (J2me デバイス) に制限されています。

グーグルでいろいろ調べたのですが、なかなか出てきません...

AMR-NBは8Khz固定ですか?それともサンプルごとに異なりますか?

4

1 に答える 1

2

AMR ファイル形式によると: http://developer.nokia.com/community/wiki/AMR_formatAMR ファイルには 6 バイトのヘッダーがあり、その後に一連のオーディオ フレームが続き、それぞれに 1 バイトのヘッダーがあります。各オーディオ フレームの長さは 20 ミリ秒で、サンプル レートは各フレームのヘッダーに示されています。したがって、最初のフレームのサンプル レートを読み取るには、ファイルの 7 番目のバイトを読み取る必要があります。7 番目のバイトを右に 3 ビット シフトし、新しい値の下位 4 ビットをマスクします。Java では、これは "((value>>3)& 0x0F)" で、value はフレームの 1 バイトのヘッダーです。次に、その数値を下の表と照合して、そのフレームのビットレートを決定します。次に、各フレームの長さは 20 ミリ秒なので、ビットレート (kb/s として与えられるので、その数値に 1000 を掛けて 1 秒あたりのビット数を取得します) を 20 倍し、((8 ビット/バイト) * 1000 ミリ秒/秒) で割る必要があります。 second) = 8000 は、次のフレーム ヘッダーのためにスキップするバイト数を取得します。フレームの内容を変更したい場合は、フレームを順番に新しいファイルに再コピーし、新しいフレームを古いフレームに置き換えます。これには一時ファイルが適しています。参照用に、以下のソース ページからビットレート テーブルをコピーしました。

0 - AMR 4.75 - 4.75kbit/s でエンコード

1 - AMR 5.15 - 5.15kbit/s でエンコード

2 - AMR 5.9 - 5.9kbit/s でエンコード

3 - AMR 6.7 - 6.7kbit/s でエンコード

4 - AMR 7.4 - 7.4kbit/s でエンコード

5 - AMR 7.95 - 7.95kbit/s でエンコード

6 - AMR 10.2 - 10.2kbit/s でエンコード

7 - AMR 12.2 - 12.2kbit/s でエンコード

于 2012-11-15T14:01:38.213 に答える