fluidynth soundfont选择不坚持

时间:2018-03-25 02:25:49

标签: midi fluidsynth

当播放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

启动Fluid Synth:

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 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”但没有效果。

1 个答案:

答案 0 :(得分:0)

在内部,fluidsynth将所有声音字体放置在堆栈中。因为palm-muted-guitar.sf2是最后一个加载的,所以它是堆栈中的最高栈。当例如频道上发生节目更改事件,fluidsynth从上至下从音型堆栈中查找,搜索提供所需的库/预设组合的音型。 palm-muted-guitar.sf2是第一个在库128上提供打击乐器的乐器,预设为0,因此被选中。

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

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