【问题标题】:Converting and segmenting a collection of 44100hz, 16-bit mono wav files into 16kHz, 16-bit mono wav files将 44100hz、16 位单声道 wav 文件的集合转换和分段为 16kHz、16 位单声道 wav 文件
【发布时间】: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做吗?如果您可以使用/调用外部程序,我会选择 soxsox.sourceforge.net
  • 我和我的队友正在考虑使用 Audacity 手动完成,但这需要太长时间。我选择 Java 的原因是因为它是我最强的语言,但只要我可以自动转换文件,我不介意打破分段并转换为两个单独的运行。
  • 嗯,sox 是一个命令行程序,你可以自动化这个过程。您还可以使用sox 进行分段
  • 我现在也刚刚读了那部分。我真的希望我早点问这个哈哈哈!我将坚持使用 Java 的 Sound API,因为我已经花了 3 天时间学习、吸收和理解 wav 文件格式的基础知识。由于它,我最终审查了字节顺序、位和字节,以及各种低级的东西。感谢您推荐 SoX。我真的很感激。不过,我真的不能选择这个作为答案,因为它不是基于 Java 的,而其他一些人可能需要基于 Java 的答案。尽管如此,还是非常感谢你。
  • ProcessBuilder 是最简单的方法。

标签: java audio wav javasound


【解决方案1】:

我相信您的任务中最困难的部分是每秒从 44.1K 重新采样到 16K 样本。从那里下采样到 22K 或 11K 会简单得多!你需要在那里做一些插值。

编辑:在与 OP 进一步审查和讨论后,我相信这种情况的正确选择是使用 Java Sound API,因为它提供了不同声音文件格式之间的转换方法,包括不同的采样率.坚持使用 WavFile API 需要重新采样,这在 44.1K 到 16K 的转换案例中实现起来相当复杂。

【讨论】:

  • 我不知道插值是什么。我正在阅读 Java 的 Sound API 以了解它,但我最初浏览了暗示它支持转换的部分。这是我找到它的地方:download.oracle.com/javase/tutorial/sound/…
  • 好的。我现在看到它允许在从一种格式转换为另一种格式期间重新采样。我不相信我在您提到的其他 API 中看到过该功能。那么,我想,选择就很明确了。
  • 是的,我会使用 Sound API,如果我太懒了,我会使用 SoX。如果您愿意编辑您的答案以反映这一新信息,我将很高兴点击神奇的绿色复选标记。
【解决方案2】:

http://www.jsresources.org/examples/SampleRateConverter.html。我想这会对你有所帮助......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多