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'