1

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

流体合成器版本 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

声音不如预期,因为 soundfont 选择已更改。(通道 9 sfont 从 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

如何在播放 midifile 时允许声音字体选择持续存在?我尝试了诸如“-o player.reset-synth=0”和“-o player.reset-synth=1”之类的设置,但没有效果。

4

1 回答 1

0

在内部,流体合成器将所有声音字体放在一个堆栈上。因为palm-muted-guitar.sf2是最后一个加载的,所以它在堆栈中是最顶部的。例如,当通道上发生程序更改事件时,fluidsynth 从上到下查看声音字体堆栈,搜索提供请求的库/预设组合的声音字体。palm-muted-guitar.sf2是第一个在bank 128上提供打击乐器的,预设0,因此被选中。

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

player.reset-synth无关紧要,因为您没有使用流体合成器的 MIDI 播放器来播放 MIDI。

于 2018-11-14T19:34:27.863 回答