【发布时间】:2011-07-09 18:29:18
【问题描述】:
我想用 Java 读取 wav 文件,我打算用 K-means 对它们进行分类。
如何在 Java 中读取 wav 文件并将它们分配到数组或类似的东西(您可以提出建议)以对它们进行分类?
编辑:我想使用 API 来读取 wav 文件和 K-means。
【问题讨论】:
-
我认为thread 将帮助您入门。
我想用 Java 读取 wav 文件,我打算用 K-means 对它们进行分类。
如何在 Java 中读取 wav 文件并将它们分配到数组或类似的东西(您可以提出建议)以对它们进行分类?
编辑:我想使用 API 来读取 wav 文件和 K-means。
【问题讨论】:
官方Java Sound Programmer Guide遍历reading和writing音频文件。
A Greensted 的这篇文章:Reading and Writing Wav Files in java 应该会有所帮助。 WavFile 类非常有用,可以对其进行调整以返回整个数据数组而不是缓冲片段。
【讨论】:
【讨论】:
您可以使用 javax 声音库和 FileInputStream 读取声音文件 (found a nice example here) 并将波形文件视为位 (0,1) 或字节的向量。使用多序列对齐 (Wiki) 在每个位/字节流之间创建一个距离矩阵,从那里开始,聚类应该是直截了当的.
问题是,这种方法对噪音等非常敏感,但值得一试...
【讨论】:
不确定这是否会对某人有所帮助。 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
}
我希望这对某些人有所帮助。 如果您有不明白的地方,请告诉我。
【讨论】: