20

私は、オーディオ ファイルを処理する必要があるアプリケーションに取り組んでいます。mp3 ファイルを使用する場合、データの処理方法がわかりません (私が興味を持っているデータは、私たちが聞いているものを表すオーディオ バイトです)。

wav ファイルを使用している場合、44 バイトのヘッダーとデータがあることがわかっています。mp3に関しては、フレームで構成されており、各フレームにはヘッダーとオーディオデータが含まれていると読んだことがあります。mp3 ファイルからすべてのオーディオ データを取得することは可能ですか?

私は Java を使用しており (MP3SPI、Jlayer、および Tritonus を追加しました)、ファイルからバイトを取得できますが、これらのバイトが何を表しているのか、またはそのときの処理方法についてはわかりません。

4

3 に答える 3

32

MP3SPIのドキュメントから:

File file = new File(filename);
AudioInputStream in= AudioSystem.getAudioInputStream(file);
AudioInputStream din = null;
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 
                                            baseFormat.getSampleRate(),
                                            16,
                                            baseFormat.getChannels(),
                                            baseFormat.getChannels() * 2,
                                            baseFormat.getSampleRate(),
                                            false);
din = AudioSystem.getAudioInputStream(decodedFormat, in);

次に、からデータを読み取るだけです。dinこれは、 に従って「生」データになりますdecodedFormat。(詳細については、ドキュメントをAudioFormat参照してください。)

(このサンプル コードは、ストリームなどを閉じないことに注意してください。通常どおり、適切な try/finally ブロックを使用してください。)

于 2009-06-02T07:27:25.550 に答える
1

必要なデータは実際のサンプルですが、MP3 ではデータの表現が異なります。したがって、他の人が言っているように、MP3 データを実際のサンプルにデコードするためのライブラリが必要です。

于 2009-06-02T07:53:55.137 に答える
0

他の回答で述べたように、MP3 を通常のオーディオ サンプルにデコードするにはデコーダが必要です。

一般的なオプションの 1 つは、JavaLayer (LGPL) です。

于 2009-06-02T08:12:10.873 に答える