fluidsynth soundfont 选择不持久

fluidsynth soundfont selection not persisting

播放 midifile 时,Fluidsynth 声音字体恢复为上次加载的完整字体。以我为例 timidity-freepats.sf2 (sfont 2).

fluidsynth 版本 1.1.10

这是我的步骤。

配置文件内容./nylon-guitar.fs:

load /usr/share/soundfonts/SGM-V2.01.sf2 0
load /usr/share/soundfonts/timidity-freepats.sf2 0
load /usr/share/soundfonts/palm-muted-guitar.sf2 0
select 9 1 128 0
select 0 2 0 24
select 28 3 0 28

启动流体合成器:

fluidsynth --audio-driver=alsa -o audio.alsa.device=hw:0 -o synth.verbose=1 -f nylon-guitar.fs

> channels -verbose
chan 0, sfont 2, bank 0, preset 24, Nylon-String Guitar
chan 1, sfont 0, bank 0, preset 0, no preset
chan 2, sfont 0, bank 0, preset 0, no preset
chan 3, sfont 0, bank 0, preset 0, no preset
chan 4, sfont 0, bank 0, preset 0, no preset
chan 5, sfont 0, bank 0, preset 0, no preset
chan 6, sfont 0, bank 0, preset 0, no preset
chan 7, sfont 0, bank 0, preset 0, no preset
chan 8, sfont 0, bank 0, preset 0, no preset
chan 9, sfont 1, bank 128, preset 0, STANDARD 1
chan 10, sfont 0, bank 0, preset 0, no preset
chan 11, sfont 0, bank 0, preset 0, no preset
chan 12, sfont 0, bank 0, preset 0, no preset
chan 13, sfont 0, bank 0, preset 0, no preset
chan 14, sfont 0, bank 0, preset 0, no preset
chan 15, sfont 0, bank 0, preset 0, no preset

到目前为止一切看起来都很好.. 然后我播放一个midi文件

 aplaymidi -p 129:0 midifile.midi

声音不符合预期,因为声音字体选择已更改。(通道 9 的字体从 1 更改为 2)

>channels -verbose
chan 0, sfont 2, bank 0, preset 24, Nylon-String Guitar
chan 1, sfont 2, bank 0, preset 24, Nylon-String Guitar
chan 2, sfont 0, bank 0, preset 0, no preset
chan 3, sfont 0, bank 0, preset 0, no preset
chan 4, sfont 0, bank 0, preset 0, no preset
chan 5, sfont 0, bank 0, preset 0, no preset
chan 6, sfont 0, bank 0, preset 0, no preset
chan 7, sfont 0, bank 0, preset 0, no preset
chan 8, sfont 0, bank 0, preset 0, no preset
chan 9, sfont 2, bank 128, preset 0, Percussion **sfont changed 1 -> 2
chan 10, sfont 0, bank 0, preset 0, no preset
chan 11, sfont 0, bank 0, preset 0, no preset
chan 12, sfont 0, bank 0, preset 0, no preset
chan 13, sfont 0, bank 0, preset 0, no preset
chan 14, sfont 0, bank 0, preset 0, no preset
chan 15, sfont 0, bank 0, preset 0, no preset

如何在播放 midi 文件时让音色选择保持不变? 我已经尝试过诸如“-o player.reset-synth=0”和“-o player.reset-synth=1”之类的设置,但没有效果。

在内部,fluidsynth 将所有 soundfonts 放在一个堆栈上。因为 palm-muted-guitar.sf2 是最后一个加载的,所以它在堆栈的最顶端。当例如程序更改事件发生在频道上,fluidsynth 从上到下查看 soundfont 堆栈,搜索提供请求的 bank/preset 组合的 soundfont。 palm-muted-guitar.sf2是第一个提供128库打击乐器的,预置0,所以选择

也就是说,您的 MIDI 文件可能会在通道 9 上发送程序或库更改事件。您可以编辑 MIDI 文件并删除这些事件。您可以编辑 palm-muted-guitar.sf2 并删除鼓预设。或者您可以设置一个 midi 路由器,丢弃该 midi 通道上的所有程序和库更改事件。

player.reset-synth 无关紧要,因为您没有使用 fluidsynth 的 midi 播放器播放 MIDI。