web-dev-qa-db-ja.com

MP3からオーディオデータを取得するにはどうすればよいですか?

私はオーディオファイルを処理しなければならないアプリケーションに取り組んでいます。 mp3ファイルを使用する場合、データの処理方法がわかりません(関心のあるデータは、音声バイトであり、私たちが聞くものを表すものです)。

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

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

17
dedalo

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ブロックを使用してください。)

28
Jon Skeet

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

1
sybreon

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

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

0
sleske