14

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

如何在 Java 中读取 wav 文件并将它们分配到数组或类似的东西中(您可以提出建议)以对它们进行分类?

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

4

5 回答 5

21

官方的Java Sound Programmer Guide介绍了音频文件的读写

A Greensted 的这篇文章:在 java 中读取和编写 Wav 文件应该会有所帮助。WavFile 类非常有用,可以对其进行调整以返回整个数据数组而不是缓冲片段。

于 2011-03-06T15:19:17.207 回答
3

您可以使用 javax 声音库和 FileInputStream 读取声音文件(在此处找到一个很好的示例)并将波形文件视为位 (0,1) 或字节的向量.. 使用多序列对齐 ( Wiki ) 创建一个距离矩阵每个位/字节流,从那里开始,聚类应该是直截了当的。

问题是,这种方法对噪音等非常敏感,但值得一试......

于 2011-03-06T11:27:58.463 回答
3

相当于matlab的wavread函数:

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

于 2011-07-15T16:37:20.407 回答
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());
于 2019-09-27T10:05:52.293 回答
-2

我做了一些研究,发现了很多读取 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
}

我希望这会以某种方式对某些人有所帮助。如果您有什么不明白的地方,请告诉我。

于 2016-10-27T09:28:02.957 回答