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

标签 node.js audio npm data-manipulation

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

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

我只需要 Node 领域内的解决方案 - 这意味着没有外部程序等,并且它也需要自动化,所以我无法手动进行音高转换。

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

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

最佳答案

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

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

在这两种情况下,这种技术的缺点是声音也会以较慢的速度和较低的音调播放。如果由于您的处理而出现声音减慢以及音调降低的问题,那么您还必须使用时间拉伸(stretch)算法来修复播放速度。

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

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

恐怕我对nodejs不熟悉。

关于node.js - 如何降低nodejs服务器端音频文件的音调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41841055/

相关文章:

javascript - 如何从sequelize关联模型中获取值(value)?

sql-server - 将数据从node.js存储到sql数据库

javascript - Express 中间件中对 request.url 的更改是否会持续到下一个中​​间件?

javascript audio API -- 分析音频文件以检测准确的声音,用于唇形同步

ios - 如何创建实现多个音频单元的 AUAudioUnit?

用于声音处理的 Java 库

node.js - 在 npm 和 git 中同步版本管理

javascript - 打包前清理 package.json

javascript - npm update 不更新某些包

node.js - promise 待定