Мне нужна помощь в чтении файла WAV с помощью java и определении его различных амплитуд.

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

Я провел безумное исследование таких вещей, как частота дискретизации, и даже смог найти какой-то код, но это не помогло мне в этой задаче.

Если бы кто-то был так любезен, чтобы предоставить грубый план и некоторое количество кода, я был бы признателен. Спасибо


person casparcedro    schedule 12.04.2013    source источник
comment
Спецификации формата аудиофайлов: www-mmsp.ece.mcgill.ca /Documents/AudioFormats/WAVE/WAVE.html   -  person Gilbert Le Blanc    schedule 12.04.2013
comment
Полезно, но я бы предпочел не изобретать велосипед в отношении java-кода и был бы признателен за готовый код.   -  person casparcedro    schedule 13.04.2013


Ответы (1)


Этот код не тестировался, но это примерно то, что вы должны сделать:

File fileIn = new File("C:\\path\\to\\your\\file.wav");
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(fileIn);
int size = audioInputStream.available();
byte[] b = new byte[size];
if (size == audioInputStream.read(b)) {
  // Do what you have to do
}
person madgangmixers    schedule 13.04.2013
comment
Хм, я где-то видел подобный код, однако ваш код, похоже, читает только 0 из моего wav-файла... Интересно, что когда я печатаю b.length, я получаю 16, следовательно, это может оказаться полезным. Спасибо, что предоставили мне отличную отправную точку. Я признателен за это! - person casparcedro; 14.04.2013
comment
Если в начале файла тишина, то значение 0 является нормальным, вы полностью прочитали свой файл? - person madgangmixers; 14.04.2013
comment
Я сделал. Однако я считаю, что это читает только 1 образец, а файл Wav имеет 44100 образцов в секунду? Хорошо, вот какой-то новый код, но я не знаю, что я делаю, к сожалению. Файл fileIn = новый файл (yolo1.wav); AudioInputStream audioInputStream = AudioSystem.getAudioInputStream (fileIn); int sampleSize = audioInputStream.getFormat().getSampleSizeInBits(); byte[] b = новый байт[sampleSize]; длинная длина кадра = audioInputStream.getFrameLength(); интервал я = 0; for (i=0; i ‹= framelength; i++){ while (audioInputStream.read(b) != -1) { //Читает 1 образец System.out.println(i+:++b[i]); - person casparcedro; 14.04.2013
comment
Ok. Я вижу, что размер файла SampleSize составляет 16 бит, теперь вопрос в том, как мне прочитать файл полностью? Позвольте мне попробовать математику, 44100 выборок в секунду для 5-минутного 1-секундного файла означает всего 13274100 выборок. Каждый имеет 16 бит правильно? - person casparcedro; 14.04.2013