【问题标题】:How to decrease pitch of audio file in nodejs server side?如何降低nodejs服务器端音频文件的音高?
【发布时间】:2017-01-24 23:52:31
【问题描述】:

我的服务器上存储了一个 .MP3 文件,我想将其修改为音调低一点。我知道这可以通过增加音频的长度来实现,但是,我不知道 node 中有任何库可以做到这一点。

我尝试过使用node web audio api和soundbank-pitch-shift,但前者似乎没有变音(AFAIK)的功能,而后者似乎是为客户端设计的

我只需要节点范围内的解决方案——这意味着没有外部程序等,而且它也需要自动化,所以我不能手动调整音调。

理想的解决方案是一个函数,它将文件/文件路径作为输入,然后创建(或覆盖)另一个 MP3 文件,但音高移动了 x 数量,但实际上,任何产生以下内容的解决方案比原来的音调低,有效。

我完全迷路了。请帮忙。

【问题讨论】:

  • this one 呢?
  • @moonwave99 我认为这是另一个基于网络的,考虑到它使用 WebAudio :(
  • 在无头浏览器中运行它然后^^
  • 您有 PCM 格式的音频吗?哪个是原始音频曲线?这是此类工具更改音频的规范格式

标签: node.js audio npm data-manipulation


【解决方案1】:

音频文件基本上是一个数字列表。这些数字以称为“采样率”的特定速度一次读取一个。采样率被定义为每秒读取的音频样本数,例如如果音频文件的采样率为 44100,则每秒读取 44100 个样本(或数字)。

到目前为止,如果您和我在一起,降低音频文件音高的最简单方法是以较低的采样率(通常固定到位)播放文件。在大多数情况下,您将无法做到这一点,因此您需要通过重新采样文件来达到相同的效果,即将新样本添加到旧样本之间的文件中以使其字面上更长。为此,您需要了解插值。

在任何一种情况下,这种技术的缺点是声音也会以较慢的速度和较低的音高播放。如果您的处理导致声音变慢以及音调降低是一个问题,那么您还必须使用时间拉伸算法来修复播放速度。

您在使用 MP3 文件时也可能遇到问题。在这种情况下,您可能必须先解压缩 MP3 文件中的数据,然后才能以改变文件音高的方式对其进行操作。 WAV 文件在音频处理中更为理想。无论如何,您基本上需要将文件转换为浮点数列表,并将这些数字更改为以较慢的速度有效地读回。

其他音高转换方法可能需要使用 fft,至少可以说是一件更复杂的事情。

恐怕我不熟悉nodejs。

【讨论】:

    【解决方案2】:

    Ollie M's answernode-lame 的帮助下,我设法让它工作了。

    我之前不知道采样率会影响速度,但是感谢 Ollie,这个问题突然变得简单了很多。

    使用 node-lame,我所做的只是取其中一个示例(mp32wav.js),并使其更改format 对象的参数sampleRate,使其低于基数采样率,在我的应用程序中始终是静态的 24,000。我也可以让它动态化,因为 node-lame 可以在 format 对象中获取输入文件的参数。

    Ollie,但是完美地描述了这种方法的缺点

    在这两种情况下,这种技术的缺点是声音会 也可以以较慢的速度和较低的音高播放。如果它 是声音变慢和降低的问题 由于您的处理,音高,那么您还必须使用 时间拉伸算法来固定播放速度。

    目前我没有特别需要实现时间拉伸算法(谢天谢地,因为那是完全不同的蠕虫),因为我有能力改变文件的初始速度,但其他人可能未来。

    【讨论】:

      【解决方案3】:

      请参阅音频缓冲区自述文件底部的https://www.npmjs.com/package/audio-decodehttps://github.com/audiojs/audio-buffer 和相关链接。

      【讨论】:

        猜你喜欢
        • 2012-05-17
        • 2013-05-30
        • 1970-01-01
        • 2015-07-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-30
        相关资源
        最近更新 更多