5

我打算使用我的整个音乐收藏并将音高从原始录制的 a=440hz 更改为更自然的声音/感觉 a=432hz。

对于那些不熟悉这个概念或这样做的“为什么”的人,我强烈建议你进行谷歌搜索,看看它是怎么回事。但这并不完全相关。

我知道我什至可以使用 Audacity 并一个接一个地转换并重新导出具有新音调的文件。我已经尝试过了,是的,它确实有效。但是,我的集合非常大,我很高兴能找到更合适的命令行选项 SOX。任何想法 ?

4

3 回答 3

7
$ sox your_440Hz_music_file.wav your_432Hz_music_file.wav pitch -31
于 2013-12-22T20:27:04.103 回答
4

这不仅仅是一个问题。将其分解为子问题,例如:

  • 如何批处理文件(使用您喜欢的任何语言:perl、bash、.bat、ruby)
  • 如何构建一组目录以简化该任务
  • 如何更改单个音频文件的音高(有或没有改变持续时间)
  • 如何通过使用宽 FFT 检测音调音乐录音的平均音高(音乐会、巴洛克或其他),这样您就不会意外地将已经 432 的内容更改为 424

当您完成这些工作时,当您遇到困难时,请以“最简单的示例”的形式提出问题(SO 提供了更多关于如何提问的建议)。通常,在提出这样的问题时,您会在 SO 提供给您的相关问题中找到答案。

于 2014-04-02T21:50:29.687 回答
0

sox的音高过滤器仅接受“分”(半音的 100 个),因此您必须以“分”计算 432Hz 和 440Hz 之间的距离。这涉及以下对数计算:

2 x/12 = 432/440
x/12 = 对数(432/440)/对数(2)
   x = log(432/440) / log(2) * 12
   x = -0.3176665363342927165015877324608 个半音
   x = -31.76665363342927165015877324608 '美分'

所以这个sox命令应该工作:

sox input.wav output.wav pitch -31.76665363342927165015877324608

对于那些感兴趣的人;这也可以通过sox的开源对应来完成:

ffmpeg -i input.wav -af "asetrate=44100*432/440,aresample=44100,atempo=440/432" output.wav

或者如果ffmpeg使用 Rubberband 库编译:

ffmpeg -i input.wav -af "rubberband=pitch=432/440" output.wav
于 2021-05-08T16:14:14.130 回答