2012-06-18 4 views
5

AMR-NBファイルからサンプルレート、ビットレートなどの情報をどのように抽出できますか? 厳密に言えば、サンプルレートやピッチやテンポを変える可能性のあるデータが必要です。amrオーディオファイルのデータを読み取って変更する方法は?

それはWAVファイルのための簡単だったけど、ここで私は、AMR-NB形式(J2MEデバイス)を制約しています

私はGoogleで多くのことを検索しましたが、その上に何かを得ることができない...

AMR-NBは8Khzに固定されていますか?またはそれは各サンプルによって異なりますか?

答えて

2

AMRファイルフォーマットによると:http://developer.nokia.com/community/wiki/AMR_format AMRファイルには6バイトのヘッダーがあり、その後に1バイトのヘッダーを含む一連のオーディオフレームが続きます。各オーディオフレームは20msの長さであり、サンプルレートは各フレームのヘッダに与えられる。最初のフレームのサンプルレートを読み取るには、ファイルの7番目のバイトを読み取る必要があります。 7バイト目を右に3ビットシフトし、新しい値の下位4ビットをマスクします。 javaでは、これは "((value >> 3)& 0x0F)"です。ここで、valueはフレームの1バイトのヘッダです。次に、その数を下の表と照合して、そのフレームのビットレートを決定します。各フレームは20msの長さであるため、ビットレートを掛ける必要があります(ビット/秒として与えるため、その数に1000を掛けてビット/秒を20倍にし、(8ビット/バイト)* 1000msごとに割ります次のフレームヘッダーでスキップするバイト数を取得するには、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 /秒

に符号化します

6 - AMR 10.2 - 10.2kbit/sで

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

でエンコード