作者个人网站链接 jiguangchao.com
为音频加点料就是实现音频的特效,可以实现音频的倍数播放,以及音乐的升降调、响度增加等功能。很多音频的倍数播放功能,如喜马拉雅,就是通过这项技术实现的。最近在一个项目中涉及音频的特效处理,感觉挺有意思,因此写篇文章总结一下。
SoundTouch是一个用C++编写的开源的音频处理库,可以改变音频文件或实时音频流的节拍(Tempo)、音调(Pitch)、回放率(Playback Rates),还支持估算音轨的稳定节拍率(BPM rate)。ST的3个效果互相独立,也可以一起使用。这些效果通过采样率转换、时间拉伸结合实现。
注意:SoundTouch只能处理wav格式的文件,其它格式的文件需要结合lame(一个mp3和wav相互转换的工具)进行处理。
在官网的http://soundtouch.surina.net/download.html有windows、linux、mac os的下载链接,windows和mac os有现成的编译好的执行文件,直接下载zip格式文件解压使用就可以。
下载 SoundStretch 2.1.1 for Windows ,下载后是一个zip文件,然后解压该文件得到一个soundstretch.exe,把这个exe文件的路径加入path环境变量即可以使用。例如实现把 input.wav 音频文件的声调增加3个半音(semi-tones):
#Pitch raised by +3 semi-tones.command syntax:
soundstretch input.wav output.wav -pitch=+3
linux建议直接yum或者apt-get安装,亲试centos 7x可以,源码编译太麻烦。
#没错,安装 soundtouch 得到 soundstretch
yum install soundtouch
#使用 soundstretch
soundstretch input.wav output.wav -pitch=+3
疑问:我要用 SoundTouch下载 SoundStretch 干嘛用?答:SoundTouch是音频处理库,而SoundStretch 是命令行工具,反正用 SoundStretch 就对了。具体解释如下
SoundStretch is a command-line program that performs SoundTouch library effects on WAV audio files. The program provides a source code example how SoundTouch library routines can be used to process sound in other programs, but it can be used as a stand-alone audio processing tool as well.
#Tempo reduced by -50%.
soundstretch input.wav output.wav -tempo=-50
#Beats-Per-Second rate adjusted to 60 BPM (original is 73.9 BPM). Note: This is equivalent to decreasing tempo by -18.8 %.
soundstretch input.wav output.wav -bpm=60
#Beats-Per-Second rate adjusted to 100 BPM (original is 73.9 BPM). Note This is equivalent to increasing tempo by +35.3%
soundstretch input.wav output.wav -bpm=100
#Pitch lowered by -3 semi-tones.
soundstretch input.wav output.wav -pitch=-3
#Pitch raised by +3 semi-tones
soundstretch input.wav output.wav -pitch=+3
#Playback rate increased by +35%. Note: This would be equivalent to playing a 331/3RPM vinyl LP audio disc at 45 RPM...
soundstretch input.wav output.wav -rate=+35
lame是一个mp3和wav相互转换的工具,windows和linux下都可以使用。SoundTouch只能处理wav格式的文件,需要使用lame进行 .mp3 => .wav 和 .wav => .mp3 转换。当然你也可以使用大名鼎鼎的ffmpeg,但是没有lame简单。
lame官网只提供源码编译安装,windows上下载安装lame比较麻烦,不再介绍。linux上直接yum或者atp-get即可:
# 安装lame
yum install lame
# 测试是否安装成功
lame
# 下载一个MP3
wget http://soundtouch.surina.net/sample_orig.mp3
# Then, a bash command example for processing myfle.mp3 into myfile_fast.mp3 with
# SoundStretch parameters -tempo=30 -pitch=-0318. Notice that whitespaces around sole
# minus characters '-' are important:
lame -S --decode sample_orig.mp3 - | ./soundstretch stdin stdout -tempo=30 -pitch=-0.318 | lame -vS - myfile_fast.mp3