Как прочитать амплитуду mp3-файла в java

#java #audio #signal-processing #mp3 #amplitude

#java #Аудио #обработка сигналов #mp3 #амплитуда

Вопрос:

Я могу прочитать амплитуду wav-файла, используя следующий код

 AudioInputStream in = AudioSystem.getAudioInputStream(file);
AudioFormat baseFormat = in.getFormat();
AudioFormat decodedFormat = new AudioFormat(Encoding.PCM_FLOAT, 44100, 32, 1, 4, 44100, false);
AudioInputStream din = AudioSystem.getAudioInputStream(decodedFormat, in);

byte[] array = new byte[4];
int read = din.read(array);
while (read != -1) {
    ByteBuffer bb = ByteBuffer.wrap(array);
    bb.order(ByteOrder.LITTLE_ENDIAN);
    float amplitude = bb.asFloatBuffer().get();

    System.out.println(amplitude);

    read = din.read(array);
}
  

Как мне прочитать ту же дату для эквивалентного файла mp3.
Я попытался включить библиотеку MP3 SPI

Однако амплитуды, которые я получаю, — это просто фиктивные числа, которые колеблются случайным образом без какой-либо естественной плавности правильного массива амплитуд.

Могу ли я что-нибудь сделать, чтобы прочитать амплитуду mp3-файла?

Комментарии:

1. вам необходимо декодировать mp3 в формат PCM, чтобы получить доступ к эквивалентному необработанному аудио

2. @ScottStensland он сказал, что попробовал SPI MP3. Я просто не вижу этой попытки в его примере. Поэтому вопрос является неполным.

3. чтобы стать самодостаточным в цифровом аудио, я настоятельно рекомендую сначала написать некоторый код для синтеза простого синусоидального wav, который вы затем сохраняете как WAV-файл, а также сохраняете в MP3-файл… затем напишите больше кода для чтения в WAV-файле и другую функцию для чтения в MP3-файле… сделайте это для mono, который является одноканальным звуком… это даст вам критический известный хороший входной сигнал, с которым вы можете работать, чтобы получить известный хороший результат… также выберите выше, используя разрядность 16 бит и частоту дискретизации 44100 Герц. уделите особое внимание порядковому порядку вашего двухбайтового аудио

4. в приведенном выше коде имейте в виду, что parms передается в аудиоформат, особенно там, где вы присваиваете ему значение 32 и его последствия … обычно люди используют разрядность 16 бит, а не 32