FluidSynth 软件使用教程(可以将 MIDI 转换为 WAV)

文章详细介绍了开源软件FluidSynth如何通过命令行参数加载音色库、播放MIDI文件,并演示了如何将MIDI转换为WAV音频,包括常用参数的含义和示例应用。
摘要由CSDN通过智能技术生成

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.midonestop.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[驱动名]:指定要使用的音频驱动名称,如 dsoundwasapijackfile 等。当值为 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。
  • 30
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值