Чтение wav-файла на Java
Я хочу читать wav-файлы на Java, и я собираюсь классифицировать их с помощью K-средних.
Как я могу прочитать файлы WAV на Java и назначить их в массив или что-то в этом роде (вы можете предложить идеи для них), чтобы классифицировать их?
РЕДАКТИРОВАТЬ: я хочу использовать API для чтения файлов WAV и для K-средних.
4 ответа
Эта статья A Greensted: чтение и запись WAV-файлов на Java должна быть полезной. Класс WavFile очень полезен, и его можно настроить так, чтобы он возвращал весь массив данных вместо буферизованных фрагментов.
Эквивалент Wavread-функции Matlab:
http://web.archive.org/web/20120531113946/http://www.builogic.com/java/javasound-read-write.html
Вы можете читать звуковые файлы, используя звуковую библиотеку javax и FileInputStream ( нашел хороший пример здесь), и обрабатывать волновые файлы как вектор битов (0,1) или байтов. Используя множественное выравнивание последовательностей ( Wiki), создайте матрицу расстояний между каждый поток битов / байтов, и оттуда кластеризация должна быть прямой.
Проблема в том, что этот метод очень чувствителен к шуму и т. Д., Но стоит попробовать...
Не уверен, что это кому-то поможет. Java JDK уже предоставляет класс AudioSystem.
Я использовал это как часть своих тестов для проверки сгенерированных свойств WAV,
AudioFileFormat audioFileFormat = AudioSystem.getAudioFileFormat(new File(response.get()));
assertEquals(1, audioFileFormat.getFormat().getChannels());
assertEquals(8000.0, audioFileFormat.getFormat().getSampleRate(), 0.0f);
assertEquals(8, audioFileFormat.getFormat().getSampleSizeInBits());
Я провел некоторое исследование и нашел много способов чтения файлов WAV. Я думаю, что самый простой способ чтения файлов WAV из определенной папки:
private final String directoryOfSamples = "./res/semplai";
private ArrayList<File> samplesArray = new ArrayList<File>();
private final File folder = new File(directoryOfSamples);
public ReadSample()
{
samplesArray.addAll(Arrays.asList(folder.listFiles()));
testSample(getSamplesArray().get(0)); // testing if sample can be played from arrayList
}
Я надеюсь, что это как-то поможет некоторым людям. Дайте мне знать, если вы чего-то не понимаете.