流体合成声音字体选择不持久

Posted

技术标签:

【中文标题】流体合成声音字体选择不持久【英文标题】:fluidsynth soundfont selection not persisting 【发布时间】:2018-03-25 02:25:48 【问题描述】:

播放 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 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】:

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

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

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

【讨论】:

以上是关于流体合成声音字体选择不持久的主要内容,如果未能解决你的问题,请参考以下文章

PyGame 更改预设声音字体

寻找一个库来合成声音字体中的声音[关闭]

如何把视频里的声音转换成文字

win7音量合成器怎么添加设备

笔记本声音调不了,左键点击音量没反应。右键点击打不开音量合成器。

流体布局中选择元素的样式问题