用Java读取wav文件

时间:2011-03-06 11:18:32

标签: java audio wav k-means

我想用Java读取wav文件,我将用K-means对它们进行分类。

如何用Java读取wav文件并将它们分配到数组或类似的东西(你可以建议它的想法)来对它们进行分类?

编辑:我想使用API​​来阅读wav文件和K-means。

5 个答案:

答案 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)

答案 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
}

我希望不知怎的,这会对某些人有所帮助。 如果你不了解某些事情,请告诉我。