我想用 Java 读取 wav 文件,我将用 K-means 对它们进行分类。
如何在 Java 中读取 wav 文件并将它们分配到数组或类似的东西中(您可以提出建议)以对它们进行分类?
编辑:我想使用 API 来读取 wav 文件和 K-means。
官方的Java Sound Programmer Guide介绍了音频文件的读写。
A Greensted 的这篇文章:在 java 中读取和编写 Wav 文件应该会有所帮助。WavFile 类非常有用,可以对其进行调整以返回整个数据数组而不是缓冲片段。
您可以使用 javax 声音库和 FileInputStream 读取声音文件(在此处找到一个很好的示例)并将波形文件视为位 (0,1) 或字节的向量.. 使用多序列对齐 ( Wiki ) 创建一个距离矩阵每个位/字节流,从那里开始,聚类应该是直截了当的。
问题是,这种方法对噪音等非常敏感,但值得一试......
相当于matlab的wavread函数:
http://web.archive.org/web/20120531113946/http://www.builogic.com/java/javasound-read-write.html
不确定这是否会帮助某人。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
}
我希望这会以某种方式对某些人有所帮助。如果您有什么不明白的地方,请告诉我。