FluidSynth 是一个用 C 语言开发的开源 MIDI 音乐合成软件,它支持播放 MIDI 音乐文件(多线程)、响应 MIDI 输入事件,甚至还支持将 MIDI 文件(.mid 格式)转换为音频格式。下文将详细讲解它的使用方法。
命令行参数详解
首先,我们需要在系统的命令行中为 FluidSynth 指定一个或多个 SF2 音色库,以及0个、一个或多个 MIDI 音乐文件,FluidSynth 将会按照从前到后的顺序依次将每个 SF2 音色库加载到内存中(后加载的音色库将会覆盖先加载的),然后按顺序依次播放每个 MIDI 文件。例如使用如下命令:
fluidsynth FluidR3_GM.sf2 SGM-v2.01.sf2 flourish.mid onestop.mid
这个命令将会加载 FluidR3_GM.sf2
(已被覆盖,实际上不会被使用)和 SGM-v2.01.sf2
两个音色库文件,然后依次从扬声器播放 flourish.mid
和 onestop.mid
这两个 MIDI 文件。
若不指定任何 SF2 音色库文件名,则 FluidSynth 将会加载默认的 SF2 文件。若默认 SF2 也加载失败,FluidSynth 将会抛出三个错误:
fluidsynth: error: fluid_sfloader_load(): Failed to open 'XXX.sf2': File does not exist.
fluidsynth: error: Unable to open file 'XXX.sf2'
fluidsynth: error: Failed to load SoundFont "XXX.sf2"
同时,FluidSynth 将不会有任何声音输出。
在系统命令行输入 fluidsynth -h
可以查看命令行参数帮助,将会输出类似于下面的文本:
FluidSynth runtime version 2.3.4
Copyright (C) 2000-2023 Peter Hanappe and others.
Distributed under the LGPL license.
SoundFont(R) is a registered trademark of Creative Technology Ltd.
Usage:
fluidsynth [options] [soundfonts] [midifiles]
Possible options:
-a, --audio-driver=[label]
The name of the audio driver to use.
Valid values: dsound, file, wasapi
-c, --audio-bufcount=[count]
Number of audio buffers
......篇幅过长,已省略......
-z, --audio-bufsize=[size]
Size of each audio buffer
下面依次讲解各种参数的含义:
- -a[驱动名]:指定要使用的音频驱动名称,如
dsound
、wasapi
、jack
、file
等。当值为file
时,FluidSynth 将会把音频写入文件,而不是播放到扬声器。 - -c[数量]:设置音频缓冲区个数,一般无需设置,保持默认即可。
- -C[1/0/yes或no]:设置 MIDI 合唱(Chorus)效果是否开启,若不设置则默认是开启的。如参数
-C1
或-Cyes
表示开启。 - -d:启用向 stdout(标准输出)实时输出 MIDI events 的功能,输出的文本形如
event_post_cc 0 7 76
。 - -E[auto/big/cpu或little]:指定写入音频文件的字节序。当值为
auto
时将会使用默认的字节序;值为cpu
时将会使用当前 CPU 的字节序。 - -f[文件名]:指定 FluidSynth shell 脚本的文件名。当您运行 FluidSynth 时,将会立即逐行执行这个文件内的命令。FluidSynth 内置了一个 Shell 脚本处理程序(请注意这与 Windows BAT、Linux SH 等都不一样,FluidSynth 的 Shell 位于 FluidSynth 内部,与外界是隔离的),用于控制软件的各项功能。
- -F[文件名]:指定写入音频的文件名。
- -g[音量]:设置播放或写入音频的振幅,取值范围为 (0, 10)。默认值为
0.2
,一般不高于0.5
。 - -G[数量]:指定 LADSPA 音频节点数。
- -i:禁用 FluidSynth 的内置 Shell,播放完所有 MIDI 文件立即退出程序。
- -j:尝试将 JACK 的输出链接到物理端口。
- -K[数量]:设置 MIDI channels 的个数,默认为 16 个。
- -L[数量]:设置声道数量,值为
1
时表示立体声,为2
时表示四声道,为3
时表示六声道……默认值为1
,表示使用立体声。 - -m[驱动名]:指定 MIDI driver 的名称。
- -n:禁用 MIDI input。
- -o[键=值]:这是一个高级功能,用于设置 FluidSynth 的一些内置变量的值。
使用-ohelp
以查看所有变量的名称、数据类型及取值范围。
例如在系统命令行中指定参数-oaudio.driver=file
的意思是为audio.driver
这个变量的值设置成file
。 - -O[位深度]:指定写入音频文件的 PCM 采样位深度,默认值为
s16
。使用fluidsynth -Ohelp
指令查看所有可取值。 - -p[名称]:设置 MIDI 端口名称(不支持 Windows 系统)。
- -Q:列举系统的所有音频设备,并检测这些设备支持的采样率、位深度。
- -q:安静模式,屏蔽欢迎语和一些日志。
- -r[采样率]:设置音频的采样率,默认为
44100
Hz。 - -R[1/0/yes或no]:设置 MIDI 混响(Reverb)效果是否开启,默认是开启的。
- -s:将 FluidSynth 作为一个服务器进程启动。
- -T[格式]:指定写入音频的文件格式,您可以使用
fluidsynth -Thelp
查看 FluidSynth 支持的写入格式。默认使用wav
格式。 - -v:实时打印 MIDI events,打印形如
fluidsynth: noteon 2 74 115 00000 0.936 1.291 0.000
的文本。 - -V:打印 FluidSynth 的版本号。
- -z[大小]:指定每个音频缓冲区的大小,以字节为单位。
举例
这里笔者举了几个常用的命令行参数例子,方便读者使用。
播放 MIDI 文件
fluidsynth d:\sf2\eapci8m.sf2 c:\windows\media\onestop.mid -i -n -osynth.cpu-cores=8
此命令将会加载 D:\sf2\eapci8m.sf2
音色库和 c:\windows\media\onestop.mid
MIDI 文件,禁用 FluidSynth 内置 Shell 和 MIDI 输入,同时开启 8 个线程用于播放这个 MIDI 文件。
将 MIDI 转换为 WAV 音频
fluidsynth d:\sf2\eapci8m.sf2 c:\windows\media\onestop.mid -afile -C0 -Elittle -Fonestop.wav -g0.3 -i -n -osynth.cpu-cores=8 -Ofloat -r44100 -R0 -Twav
我们详细看看这行命令。
- -afile:将 MIDI 文件转换为音频文件而不是播放它。
- -C0:禁用 MIDI 合唱(chorus)效果。
- -Elittle:设置输出的音频文件的字节序为小端序。
- -Fonestop.wav:指定输出的音频文件名为
onestop.wav
,注意要带着扩展名。 - -g0.3:设置音频振幅为 0.3 倍。
- -i:禁用 FluidSynth 内置 Shell。
- -n:禁用 MIDI 输入。
- -osynth.cpu-cores=8 启用多线程音频处理,开启 8 个线程。
- -Ofloat:设置音频文件为浮点采样音频。
- -r44100:设置音频文件的采样率为 44100 Hz。
- -R0:禁用 MIDI 混响(reverb)效果。
- -Twav:设置音频文件的格式为 WAV。