如何降低nodejs服务器端音频文件的音调?
How to decrease pitch of audio file in nodejs server side?
我的服务器上存储了一个 .MP3 文件,我想将其修改为音调低一点。我知道这可以通过增加音频的长度来实现,但是,我不知道节点中的任何库可以做到这一点。
我试过使用 node web audio api 和 soundbank-pitch-shift,但前者似乎没有变调功能(据我所知),而后者似乎是专门设计的走向客户
我只需要节点领域内的解决方案——这意味着没有外部程序等,它也需要自动化,所以我不能手动移调。
理想的解决方案是将 file/filepath 作为输入的函数,然后创建(或覆盖)另一个 MP3 文件,但音高移动 x
量,但实际上,任何产生音调低于原始音调的解决方案都有效。
我完全迷失在这里。请帮忙。
音频文件基本上是一个数字列表。这些数字以称为 'sample rate' 的特定速度一次读取一个。采样率另外定义为每秒读取的音频样本数,例如如果音频文件采样率为 44100,则每秒读取 44100 个样本(或数字)。
如果到目前为止你和我一样,降低音频文件音调的最简单方法是以较低的采样率播放文件(通常是固定的)。在大多数情况下,您无法做到这一点,因此您需要通过对文件重新采样来达到相同的效果,即将新样本添加到旧样本之间的文件中,使其字面上更长。为此,您需要了解插值。
在这两种情况下,这种技术的缺点是声音也会以较慢的速度和较低的音调播放。如果由于您的处理导致声音变慢和音调降低是一个问题,那么您还必须使用时间拉伸算法来固定播放速度。
您在使用 MP3 文件时也可能会遇到问题。在这种情况下,您可能必须先解压缩 MP3 文件中的数据,然后才能以更改文件音高的方式对其进行操作。 WAV 文件在音频处理中更为理想。在任何情况下,您基本上都需要将文件转换为浮点数列表,并更改这些数字以便以较慢的速度有效地读回。
其他变调方法可能需要使用 ffts,至少可以说是一件更复杂的事情。
恐怕我对nodejs不熟悉。
请参阅 https://www.npmjs.com/package/audio-decode, https://github.com/audiojs/audio-buffer,以及 audio-buffer 自述文件底部的相关链接。
在 and node-lame 的帮助下,我设法使它工作。
我以前不知道采样率会影响速度,但多亏了奥利,这个问题突然变得简单了很多。
使用 node-lame,我所做的只是采用其中一个示例 (mp32wav.js),然后更改 format
的参数 sampleRate
对象,因此它低于基本采样率,在我的应用程序中基本采样率始终是静态的 24,000。我也可以让它动态化,因为 node-lame 可以在 format
对象中获取输入文件的参数。
Ollie,但是完美地描述了这种方法的缺点
The drawback to this technique in either case is that the sound will
also play back at a slower speed, as well as at a lower pitch. If it
is a problem that the sound has slowed down as well as lowered in
pitch as a result of your processing, then you will also have to use a
timestretching algorithm to fix the playback speed.
我目前没有特别需要实施时间拉伸算法(谢天谢地,因为那是另一回事),因为我有能力改变文件的初始速度,但是其他人可能会在未来。
我的服务器上存储了一个 .MP3 文件,我想将其修改为音调低一点。我知道这可以通过增加音频的长度来实现,但是,我不知道节点中的任何库可以做到这一点。
我试过使用 node web audio api 和 soundbank-pitch-shift,但前者似乎没有变调功能(据我所知),而后者似乎是专门设计的走向客户
我只需要节点领域内的解决方案——这意味着没有外部程序等,它也需要自动化,所以我不能手动移调。
理想的解决方案是将 file/filepath 作为输入的函数,然后创建(或覆盖)另一个 MP3 文件,但音高移动 x
量,但实际上,任何产生音调低于原始音调的解决方案都有效。
我完全迷失在这里。请帮忙。
音频文件基本上是一个数字列表。这些数字以称为 'sample rate' 的特定速度一次读取一个。采样率另外定义为每秒读取的音频样本数,例如如果音频文件采样率为 44100,则每秒读取 44100 个样本(或数字)。
如果到目前为止你和我一样,降低音频文件音调的最简单方法是以较低的采样率播放文件(通常是固定的)。在大多数情况下,您无法做到这一点,因此您需要通过对文件重新采样来达到相同的效果,即将新样本添加到旧样本之间的文件中,使其字面上更长。为此,您需要了解插值。
在这两种情况下,这种技术的缺点是声音也会以较慢的速度和较低的音调播放。如果由于您的处理导致声音变慢和音调降低是一个问题,那么您还必须使用时间拉伸算法来固定播放速度。
您在使用 MP3 文件时也可能会遇到问题。在这种情况下,您可能必须先解压缩 MP3 文件中的数据,然后才能以更改文件音高的方式对其进行操作。 WAV 文件在音频处理中更为理想。在任何情况下,您基本上都需要将文件转换为浮点数列表,并更改这些数字以便以较慢的速度有效地读回。
其他变调方法可能需要使用 ffts,至少可以说是一件更复杂的事情。
恐怕我对nodejs不熟悉。
请参阅 https://www.npmjs.com/package/audio-decode, https://github.com/audiojs/audio-buffer,以及 audio-buffer 自述文件底部的相关链接。
在
我以前不知道采样率会影响速度,但多亏了奥利,这个问题突然变得简单了很多。
使用 node-lame,我所做的只是采用其中一个示例 (mp32wav.js),然后更改 format
的参数 sampleRate
对象,因此它低于基本采样率,在我的应用程序中基本采样率始终是静态的 24,000。我也可以让它动态化,因为 node-lame 可以在 format
对象中获取输入文件的参数。
Ollie,但是完美地描述了这种方法的缺点
The drawback to this technique in either case is that the sound will also play back at a slower speed, as well as at a lower pitch. If it is a problem that the sound has slowed down as well as lowered in pitch as a result of your processing, then you will also have to use a timestretching algorithm to fix the playback speed.
我目前没有特别需要实施时间拉伸算法(谢天谢地,因为那是另一回事),因为我有能力改变文件的初始速度,但是其他人可能会在未来。