【发布时间】:2011-10-08 15:18:53
【问题描述】:
我需要将大量 wav 文件分解为更小的片段,并将它们转换为 16 khz、16 位单声道 wav 文件。为了分割 wav 文件,我从以下站点下载了一个 WavFile 类:WavFile Class。我对其进行了一些调整,以允许跳过任意数量的帧。使用该类,我创建了一个WavSegmenter 类,它将读取源 wav 文件,并将时间 x 和时间 y 之间的帧复制到新的 wav 文件中。我可以从提供的 XML 文件中获取开始时间和结束时间,并且可以使用 sample rate * time 获取帧。我的问题是我不知道如何将采样率从 44,100 转换为 16,000。
目前,我正在为此研究 Java 的 Sound API。我最初没有查阅它,因为我发现指南很长,但如果它是现有的最佳选择,我愿意通过它。不过,我仍然想知道是否有其他方法可以做到这一点。最后,我想知道我是否应该完全适应Java的Sound API,并放弃我目前使用的WavFile类。对我来说,它看起来不错,但我想确定一下。
非常感谢您抽出宝贵时间。
【问题讨论】:
-
你真的想用Java做吗?如果您可以使用/调用外部程序,我会选择 sox :sox.sourceforge.net
-
我和我的队友正在考虑使用 Audacity 手动完成,但这需要太长时间。我选择 Java 的原因是因为它是我最强的语言,但只要我可以自动转换文件,我不介意打破分段并转换为两个单独的运行。
-
嗯,
sox是一个命令行程序,你可以自动化这个过程。您还可以使用sox进行分段 -
我现在也刚刚读了那部分。我真的希望我早点问这个哈哈哈!我将坚持使用 Java 的 Sound API,因为我已经花了 3 天时间学习、吸收和理解 wav 文件格式的基础知识。由于它,我最终审查了字节顺序、位和字节,以及各种低级的东西。感谢您推荐 SoX。我真的很感激。不过,我真的不能选择这个作为答案,因为它不是基于 Java 的,而其他一些人可能需要基于 Java 的答案。尽管如此,还是非常感谢你。
-
ProcessBuilder 是最简单的方法。