用Java读取wav文件
Posted
技术标签:
【中文标题】用Java读取wav文件【英文标题】:Reading wav file in Java 【发布时间】:2011-07-09 18:29:18 【问题描述】:我想用 Java 读取 wav 文件,我打算用 K-means 对它们进行分类。
如何在 Java 中读取 wav 文件并将它们分配到数组或类似的东西(您可以提出建议)以对它们进行分类?
编辑:我想使用 API 来读取 wav 文件和 K-means。
【问题讨论】:
我认为thread 将帮助您入门。 【参考方案1】:官方Java Sound Programmer Guide遍历reading和writing音频文件。
A Greensted 的这篇文章:Reading and Writing Wav Files in java 应该会有所帮助。 WavFile 类非常有用,可以对其进行调整以返回整个数据数组而不是缓冲片段。
【讨论】:
【参考方案2】:相当于matlab的wavread函数:
http://web.archive.org/web/20120531113946/http://www.builogic.com/java/javasound-read-write.html
【讨论】:
【参考方案3】:您可以使用 javax 声音库和 FileInputStream 读取声音文件 (found a nice example here) 并将波形文件视为位 (0,1) 或字节的向量。使用多序列对齐 (Wiki) 在每个位/字节流之间创建一个距离矩阵,从那里开始,聚类应该是直截了当的.
问题是,这种方法对噪音等非常敏感,但值得一试...
【讨论】:
做一些降噪和下采样可能是个好主意。 +1。【参考方案4】:不确定这是否会对某人有所帮助。 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());
【讨论】:
【参考方案5】:我做了一些研究,发现了很多读取 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
我希望这对某些人有所帮助。 如果您有不明白的地方,请告诉我。
【讨论】:
这是什么黑客行为? getSamplesArray() 有什么作用?这是什么?以上是关于用Java读取wav文件的主要内容,如果未能解决你的问题,请参考以下文章