0

我需要将大量 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我目前使用的类。对我来说,它看起来不错,但我想确定一下。

非常感谢您抽出宝贵的时间。

4

2 回答 2

1

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

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

于 2011-07-19T15:25:08.937 回答
1

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

于 2011-07-28T06:07:23.093 回答