Node.js 如何在nodejs服务器端降低音频文件的音调?

Node.js 如何在nodejs服务器端降低音频文件的音调?,node.js,audio,npm,data-manipulation,Node.js,Audio,Npm,Data Manipulation,我有一个.MP3文件存储在我的服务器上,我想把它的音高修改得低一点。我知道这可以通过增加音频的长度来实现,但是,我不知道node中有任何库可以做到这一点 我尝试过使用node-web-audioapi和soundbank-pitch-shift,但前者似乎没有AFAIK的基音转换功能,后者似乎是针对客户端设计的 我只需要节点领域内的解决方案——这意味着没有外部程序,等等,它也需要自动化,所以我不能手动改变音调 理想的解决方案是使用一个函数,将文件/文件路径作为输入,然后创建或覆盖另一个MP3文件

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

我尝试过使用node-web-audioapi和soundbank-pitch-shift,但前者似乎没有AFAIK的基音转换功能,后者似乎是针对客户端设计的

我只需要节点领域内的解决方案——这意味着没有外部程序,等等,它也需要自动化,所以我不能手动改变音调

理想的解决方案是使用一个函数,将文件/文件路径作为输入,然后创建或覆盖另一个MP3文件,但音高偏移了x个数量,但实际上,任何产生比原始音高更低音高的内容的解决方案都可以工作


我在这里完全迷路了。请帮助。

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

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

无论是哪种情况,这种技术的缺点都是声音也会以较慢的速度以及较低的音调播放。如果由于您的处理而导致声音变慢和音调降低是一个问题,那么您还必须使用时间收缩算法来固定播放速度

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

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


恐怕我不熟悉nodejs

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

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

无论是哪种情况,这种技术的缺点都是声音也会以较慢的速度以及较低的音调播放。如果由于您的处理而导致声音变慢和音调降低是一个问题,那么您还必须使用时间收缩算法来固定播放速度

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

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


恐怕我不熟悉nodejs

请参阅,并在音频缓冲区自述文件底部链接相关内容。

请参阅,并在音频缓冲区自述文件底部链接相关内容。

在和的帮助下,我设法使其正常工作

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

使用node lame,我所做的只是选取其中一个示例mp32wav.js,这样我就可以更改format对象的参数sampleRate,使其低于基本采样率,在我的应用程序中,基本采样率始终是静态的24000。我还可以使其动态,因为节点lame可以 ab格式对象中输入文件的参数

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

无论哪种情况,这种技术的缺点都是声音会 同时以较慢的速度和较低的音高进行回放。如果是 是一个问题,声音已经慢下来,以及降低了 由于你的音高处理,那么你还必须使用 用于固定播放速度的时间收缩算法


谢天谢地,目前我没有特别需要实现时间拉伸算法,因为这是一个完全不同的蠕虫程序,因为我有能力更改文件的初始速度,但其他人将来可能会更改。在和的帮助下,我成功地使它工作

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

使用node lame,我所做的只是选取其中一个示例mp32wav.js,这样我就可以更改format对象的参数sampleRate,使其低于基本采样率,在我的应用程序中,基本采样率始终是静态的24000。我还可以使其动态化,因为节点lame可以在format对象中获取输入文件的参数

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

无论哪种情况,这种技术的缺点都是声音会 同时以较慢的速度和较低的音高进行回放。如果是 是一个问题,声音已经慢下来,以及降低了 由于你的音高处理,那么你还必须使用 用于固定播放速度的时间收缩算法


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

那怎么办?@moonwave99我想这是另一个基于网络的程序,考虑到它使用WebAudio:在无头浏览器中运行它,那么^^您的音频是PCM格式的吗?哪个是原始音频曲线?这就是这些工具改变音频的标准格式。那又如何?@moonwave99我认为这是另一种基于网络的格式,考虑到它使用WebAudio:在无头浏览器中运行它,然后^^^你的音频是PCM格式的吗?哪个是原始音频曲线?这就是这些工具改变音频的标准格式