Как получить аудиоданные из MP3? - PullRequest
17 голосов
/ 02 июня 2009

Я работаю над приложением, которое должно обрабатывать аудиофайлы. При использовании mp3-файлов я не уверен, как обращаться с данными (данные, которые меня интересуют, это аудио-байты, которые представляют то, что мы слышим).

Если я использую файл wav, я знаю, что у меня есть 44-байтовый заголовок, а затем данные. Когда дело доходит до mp3, я читал, что они состоят из кадров, каждый кадр содержит заголовок и аудиоданные. Можно ли получить все аудиоданные из mp3-файла?

Я использую Java (я добавил MP3SPI, Jlayer и Tritonus), и я могу получить байты из файла, но я не уверен, что представляют эти байты или как их обрабатывать.

Ответы [ 3 ]

29 голосов
/ 02 июня 2009

Из документации для 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 как обычно.)

1 голос
/ 02 июня 2009

Данные, которые вы хотите, являются фактическими выборками, в то время как MP3 представляет данные по-другому Итак, как и все остальные - вам нужна библиотека для декодирования данных MP3 в реальные сэмплы для ваших целей.

0 голосов
/ 02 июня 2009

Как уже упоминалось в других ответах, вам нужен декодер для декодирования MP3 в обычные аудиосэмплы.

Один из популярных вариантов будет JavaLayer (LGPL).

...