#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