FluidSynth

出自 ArchWiki

FluidSynth 是一个基于 SoundFont 2 规范的实时软件合成器。它被 gst-plugins-bad 可选地使用。

安装

安装 fluidsynth 软件包。

还需要一个 SoundFont。请参阅 MIDI#SoundFont 列表 以获取 SoundFont 列表。

用法

使用 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 获取帮助。

可能希望使用 pipewirepulseaudio 而不是 alsa 作为 -a 选项的参数。

提示: 如果为默认 SoundFont 创建了符号链接,则无需每次都指定 SoundFont,例如:
ln -s FluidR3_GM.sf2 /usr/share/soundfonts/default.sf2

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

注意: 如果您正在使用 pulseaudio 驱动程序,则不能使用 root 用户启动 fluidsynth 服务。 Pulseaudio 将不允许 root 用户连接,因为 pulseaudio 服务器通常由用户(而不是 root 用户)启动。 因此,该服务作为 用户单元 提供。

以下内容将为您提供一个输出软件 MIDI 端口(除了系统上的硬件 MIDI 端口,如果有的话)

$ aconnect -o
client 128: 'FLUID Synth (5117)' [type=user]
   0 'Synth input port (5117:0)'

一个使用示例是 aplaymidi

$ aplaymidi -p128:0 example.mid
注意: 为了在实时设置中实现低延迟,设置 FluidSynth wiki 中描述的 RATE/NUM/SIZE 参数非常重要。 专业音频#JACK 参数 也列出了这些参数的常用值和其他技巧。

SDL_Mixer

要将 fluidsynth 与使用 SDL_Mixer 的程序一起使用,您需要将 soundfont 指定为

 $ SDL_SOUNDFONTS=/usr/share/soundfonts/FluidR3_GM.sf2 ./program

技巧与窍门

将 MIDI 转换为 MP3/OGG

需要 soundfont-fluid 或任何其他您选择的 SoundFont。

/usr/share/soundfonts 是 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'