如何减少nodejs服务器端音频文件的音高?

时间:2017-01-24 23:52:32

标签: node.js audio npm data-manipulation

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

我尝试过使用节点网络音频api和音库音调转换,但前者似乎没有音高转换功能(AFAIK),而后者似乎是针对客户设计的

我需要在节点范围内的解决方案 - 这意味着没有外部程序等,并且它也需要自动化,所以我无法手动调整移位。

理想的解决方案是将文件/文件路径作为输入,然后创建(或覆盖)另一个MP3文件但音高偏移reg_cost量的函数,但实际上,任何产生的解决方案有效的东西比原始的低,有效。

我完全迷失在这里。请帮忙。

3 个答案:

答案 0 :(得分:2)

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

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

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

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

其他音高变换的方法可能需要涉及使用ffts,并且至少可以说是更复杂的事情。

我不熟悉nodejs,我很害怕。

答案 1 :(得分:1)

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

我以前不知道采样率会影响速度,但多亏了Ollie,突然间这个问题变得更加简单了。

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

然而,奥利完美地描述了这种方法的缺点

  

在任何一种情况下,这种技术的缺点是声音会   也可以以较慢的速度播放,也可以以较低的音调播放。如果它   是一个问题,声音已经减慢和降低   由于你的处理,你也将不得不使用一个   时间拉伸算法来修复播放速度。

我目前没有特别需要实现时间拉伸算法(幸运的是,因为这是另外一种蠕虫),因为我有能力改变文件的初始速度,但其他人可能在将来。

答案 2 :(得分:0)

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