FluidSynth
FluidSynth 是一款基于 SoundFont 2 规范的实时软件合成器。gst-plugins-bad包 可选择使用它。
OpenTTD 默认依赖于 FluidSynth。
安装[编辑 | 编辑源代码]
安装 fluidsynth包 软件包。
还需要一个 SoundFont。参见 MIDI#SoundFont 列表以获取 SoundFonts 列表。
用法[编辑 | 编辑源代码]
使用 FluidSynth 有两种方式。要么作为 MIDI 播放器,要么作为向 ALSA 添加 MIDI 支持的守护进程。
独立模式[编辑 | 编辑源代码]
您可以简单地使用 fluidsynth 播放 MIDI 文件:
$ fluidsynth -a alsa -m alsa_seq -l -i /usr/share/soundfonts/FluidR3_GM.sf2 example.mid
假设你安装了 soundfont-fluid包。
FluidSynth 还有许多其他选项,请参见 fluidsynth(1) 或使用 -h
获取帮助。
用户可能希望使用 pipewire
或 pulseaudio
代替 alsa
作为 -a 选项的参数。
ln -s FluidR3_GM.sf2 /usr/share/soundfonts/default.sf2),则无需每次都指定 SoundFont。
ALSA 守护进程模式[编辑 | 编辑源代码]
如果希望 fluidsynth 作为 ALSA 音序器客户端运行,请编辑 /etc/conf.d/fluidsynth
并添加 SoundFont 和其他修改。例如,Fluid:
SOUND_FONT=/usr/share/soundfonts/FluidR3_GM.sf2 OTHER_OPTS='-a alsa -m alsa_seq -r 48000'
然后,您就可以启动/启用 fluidsynth.service
。
下面将提供一个软件 MIDI 输出端口(除了系统上的硬件 MIDI 端口(如果有的话)):
$ aconnect -o
client 128: 'FLUID Synth (5117)' [type=user] 0 'Synth input port (5117:0)'
aplaymidi 就是一个用法例子:
$ aplaymidi -p128:0 example.mid
SDL_Mixer[编辑 | 编辑源代码]
要在使用 SDL_Mixer 的程序中使用 fluidsynth,需要指定 soundfont:
$ SDL_SOUNDFONTS=/usr/share/soundfonts/FluidR3_GM.sf2 ./program
提示与技巧[编辑 | 编辑源代码]
将 MIDI 转换为 MP3/OGG[编辑 | 编辑源代码]
需要 soundfont-fluid包 或其他任意 SoundFont。
/usr/share/soundfonts
is the default location of FluidR3_GM
用简单的命令行将 midi 转为 mp3:
$ fluidsynth -l -T raw -F - /usr/share/soundfonts/FluidR3_GM.sf2 example.mid | twolame -b 256 -r - example.mp3
需要 twolame包。
用简单的命令行将 midi 转为 ogg:
$ fluidsynth -nli -r 48000 -o synth.cpu-cores=2 -T oga -F example.ogg /usr/share/soundfonts/FluidR3_GM.sf2 example.MID
这是一个将多个 midi 文件并行转换为 ogg 的小脚本:
#!/bin/bash maxjobs=$(grep processor /proc/cpuinfo | wc -l) midi2ogg() { name=$(echo $@ | sed -r s/[.][mM][iI][dD][iI]?$//g | sed s/^[.][/]//g) for arg; do fluidsynth -nli -r 48000 -o synth.cpu-cores=$maxjobs -F "/dev/shm/$name.raw" /usr/share/soundfonts/FluidR3_GM.sf2 "$@" oggenc -r -B 16 -C 2 -R 48000 "/dev/shm/$name.raw" -o "$name.ogg" rm "/dev/shm/$name.raw" ## Uncomment for replaygain tagging #vorbisgain -f "$name.ogg" done } export -f midi2ogg find . -regex '.*[.][mM][iI][dD][iI]?$' -print0 | xargs -0 -n 1 -P $maxjobs bash -c 'midi2ogg "$@"' --
问题解决[编辑 | 编辑源代码]
与 PulseAudio 冲突[编辑 | 编辑源代码]
如果 fluidsynth 应用程序被设置为使用 alsa
作为驱动程序,声卡将被直接访问,PulseAudio 和使用 PulseAudio 的应用程序将无法正常工作。您可以修改配置文件 /etc/conf.d/fluidsynth
,将驱动程序更改为 pulseaudio
,然后重启 fluidsynth和 PulseAudio:
/etc/conf.d/fluidsynth
OTHER_OPTS='-a pulseaudio -m alsa_seq -r 48000'