Java Media Framework: извлечение аудио информации из mp3 файла - PullRequest
3 голосов
/ 05 января 2010

Я анализирую музыкальные mp3-файлы. Что я делаю, так это извлекаю аудиоданные из файла и вычисляю сходство музыки.

Я использую javazoom для обработки mp3 файлов. С помощью audioFormat я извлекаю необработанные данные из mp3-файла:

byte[] audioBytes = new byte[numBytes];
in_format_init = AudioSystem.getAudioInputStream(musicFile);
AudioFormat formatInit = in_format_init.getFormat(); 
AudioFormat formatFinal = new AudioFormat(
            AudioFormat.Encoding.PCM_SIGNED,
            formatInit.getSampleRate(),
            16,
            formatInit.getChannels(),
            formatInit.getChannels()*2,
            formatInit.getSampleRate(),
            false);
AudioInputStream streamIn = AudioSystem.getAudioInputStream(formatFinal,     in_format_init);
while (((numBytesRead = streamIn.read(audioBytes)) != -1))
{...}

При этом я сохраняю аудиоданные (без заголовков и тегов) в audioBytes, а затем обрабатывается информация, хранящаяся в массиве.

Мой вопрос: возможно ли извлечь аудиоинформацию из аудиофайла mp3 и сохранить ее, как я делаю в моем примере? Я читал о JMF, но это сбивает меня с толку.

Спасибо.

1 Ответ

3 голосов
/ 11 января 2010

Я только что быстро взглянул на JMF API, так что я не уверен на 100%, что это будет правильно или вообще сработает, но попробуйте что-то вроде этого:

try {
  File f = new File ("/path/to/my/audio.mp3");
  DataSource ds = Manager.createDataSource(f.toURI().toURL());
  ds.connect();
  ds.start();
  ...
} catch (java.io.IOException e) {
  ...
} catch (NoDataSourceException e) {
  ...
}

После этого попробуйте получить элементы управления от DataSource: ds.getControls() и посмотрите, позволяет ли какой-либо из элементов управления считывать необработанные аудиоданные.

Вам, вероятно, придется также проводить все виды очистки, например, ds.disconnect(), после того, как вы закончите читать аудио.

Также не забудьте установить плагин JMF MP3

- Лаури

...