Reading wav file in Java

南笙酒味 提交于 2019-11-26 12:19:28

问题


I want to read wav files in Java and I am going to classify them with K-means.

How can I read wav files in Java and assign them into an array or something like that(you can suggest ideas for it) to classify them?

EDIT: I want to use APIs for reading wav files and for K-means.


回答1:


This article by A Greensted: Reading and Writing Wav Files in java should be helpful. The WavFile class is very useful and it can be tweaked to return the entire data array instead of buffered fragments.




回答2:


Equivalent to matlab's wavread function:

http://web.archive.org/web/20120531113946/http://www.builogic.com/java/javasound-read-write.html




回答3:


You could read the sound files using javax sound library and FileInputStream (found a nice example here) and treat the wave files as a vector of bits (0,1) or bytes.. using multiple sequence alignment (Wiki) create a distance matrix between every stream of bits/bytes, and from there, the clustering should be straight forward.

The Problem is, that this method is very sensitive to noise, etc, but it is worth a shot...




回答4:


Not sure if this will help someone. Java JDK already provides AudioSystem class.

I used this as part of my tests to check generated WAV properties,

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());



回答5:


I did some research and found many ways to read wav files. I think the simplest way to read wav files from specific folder is:

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
}

I hope somehow this would help for some people. Let me know if you don't understand something.



来源:https://stackoverflow.com/questions/5210147/reading-wav-file-in-java

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!