我想用Java读取wav文件,我将用K-means对它们进行分类。
如何用Java读取wav文件并将它们分配到数组或类似的东西(你可以建议它的想法)来对它们进行分类?
编辑:我想使用API来阅读wav文件和K-means。
答案 0 :(得分:18)
A Greensted的这篇文章:Reading and Writing Wav Files in java应该会有所帮助。 WavFile类非常有用,可以调整它来返回整个数据数组而不是缓冲的片段。
答案 1 :(得分:3)
您可以使用javax声音库和FileInputStream读取声音文件 (found a nice example here) 并将波形文件视为位(0,1)或字节的向量...使用多序列对齐(Wiki)在每个位/字节流之间创建一个距离矩阵,从那里,聚类应该是直截了当。
问题是,这种方法对噪音等非常敏感,但值得一试......
答案 2 :(得分:2)
相当于matlab的wavread函数:
http://web.archive.org/web/20120531113946/http://www.builogic.com/java/javasound-read-write.html
答案 3 :(得分:0)
不确定这是否对某人有帮助。 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());
答案 4 :(得分:-1)
我做了一些研究,发现了很多方法来阅读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
}
我希望不知怎的,这会对某些人有所帮助。 如果你不了解某些事情,请告诉我。