在阿里云的CentOS 6.5 上面安装 timidity++ 和 ffmpeg(含libmp3lame) 实现命令行将midi转换为mp3

首先使用yum安装需要的组件

yum install -y automake autoconf libtool gcc gcc-c++ yasm yasm-devel

然后从sourceforge下载timidity++并解压(默认用root用户在~目录操作)

wget http://sourceforge.net/projects/timidity/files/TiMidity%2B%2B/TiMidity%2B%2B-2.13.0/TiMidity%2B%2B-2.13.0.tar.gz/download
tar -zxvf download  
cd T* 
  • 压缩包被重命名为download了,不过不影响解压

timidity不光能把midi转成wav格式的音乐,还能实现播放,网络播放等很多功能,所以只是想做midi转wav的转换器的话,需要配置,官方文档说只想做转换器的话,设置 –enable-audio=no 即不使用声卡进行播放,实际上阿里云的云主机根本没有声卡,所以第一次安装按照坑爹的官方指引,如下configure

./configure --prefix=/usr/local/timidity --without-x --enable-audio=no

 


按照这个configure最后能安装成功,但是不管运行什么命令都报错,提示打不开输出设备,然后参考stackoverflow的帖子 [http://stackoverflow.com/questions/4235140/timidity-couldnt-open-output-device]
由于坑爹的timidity++哪怕只用来转换,也需要声卡,所以我们设置一个虚拟的声卡即可

cd /dev
ln -s null dsp

 


然后

vim /etc/udev/rules.d/z42_fake_dsp.rules

 


在其中写入

KERNEL=="null", SYMLINK+="dsp", OPTIONS+="link_priority=99"

 

并保存退出,这样重启后虚拟的声卡就不会消失了

 

由于设置的虚拟声卡挂载为 /dev/dsp 所以根据官方安装指引如下配置

./configure --prefix=/usr/local/timidity --enable-audio=oss

 

然后就是安装两部曲

make
make install

 

 

注意:我这配置的时候把默认安装路径 /usr/local/ 修改到了/usr/local/timidity 所以后面还要配置 $PATH 不然shell 会找不到 command

按照–prefix=/usr/local/timidity 配置安装成功后,需要一个配置文件,配置文件在

/usr/local/timidity/share/timidity/timidity.cfg

 


默认可以到

http://www.onicos.com/staff/iz/timidity/dist/cfg/timidity.cfg

 


下载到,还有其他的补充配置文件(如有补充配置文件,需要主配置文件source包含进来),例如

http://www.onicos.com/staff/iz/timidity/dist/cfg/xgmap.cfg

 


在默认的配置文件中,最后面加上一句

soundfont /usr/local/timidity/share/soundfont/gm.sf2

 


我默认把音色文件放到了 /usr/local/timidity/share/soundfont ,实际放在哪配置文件中就写哪

 

然后就是安装lame,比较简单

wget http://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz/download
tar -zxvf download
cd lame*
./configure --prefix=/usr/local --enable-shared
make
make install

 


然后安装ffmpeg (非全部安装,我只要用到音频转换)

wget http://ffmpeg.org/releases/ffmpeg-2.8.tar.bz2
tar -jxvf ffmpeg-2.8.tar.bz2 
cd ff*

 


ffmpeg默认安装在 /usr/local 我将其改到了 /usr/local/ffmpeg 中,所以如下配置

./configure --prefix=/usr/local/ffmpeg --enable-shared --enable-libmp3lame
make
make install

 


然后ffmpeg就安装完了

 

接着配置 $PATH 让系统加载 timidity++ 和 ffmpeg 的lib

cd ~
vim .bash_profile

 


将其中的PATH后面加上两个库的lib,我修改为如下

PATH=$PATH:$HOME/bin:/usr/local/timidity/bin:/usr/local/ffmpeg/bin

 


然后保存生效

source ~/.bash_profile

 

 

timidity++ 的用法如下

timidity input.mid -Ow -o output.wav

 

 

备注:需要自己找sf2格式的音色库并配置好,否则不能转换

接着试一下ffmpeg能否运行

ffmpeg -version

 


果然报错了

ffmpeg: error while loading shared libraries: libavdevice.so.56: cannot open shared object file: No such file or directory

 

除了找不到 libavdevice.so.56 这个库,其实还有可能找不到 libmp3lame.so.0
解决方法如下:(以libavdevice.so.56为例)
首先用find找到库在哪

find / -name libavdevice.so.56

 

发现在

/usr/local/ffmpeg/lib/libavdevice.so.56

 

然后即可对症下药

cd /etc/ld.so.conf.d
vim libavdevice.conf

 


写入

/usr/local/ffmpeg/lib/

 


保存退出
然后

ldconfig -v

 


确认是否加载成功

 

全部正确安装后使用以下命令即可将midi转换为mp3

timidity input.mid -Ow -o - | ffmpeg -i - -acodec libmp3lame -ab 256k out.mp3

 

单独使用的方法

timidity input.mid -Ow -o middleoutput.wav

 

 
ffmpeg -i middleoutput.wav -acodec libmp3lame -ab 256k finaloutput-256k.mp3

 

posted @ 2015-09-27 17:44  抠脚怒汉  阅读(3326)  评论(0编辑  收藏  举报