问题标签 [fluidsynth]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
399 浏览

python - mingus 中的 pygame-drum 示例给出了流体合成器 soundfont.sf2 加载错误

我已经下载mingus并想运行该pygame-drum示例。pygame我已经安装了它需要的各种依赖项,例如fluidsynth等。

当我运行时,我得到以下信息:

在这种情况下缺少什么,我还需要安装什么才能使pygame-drum示例正常工作?

0 投票
0 回答
148 浏览

python - python mingus 演奏木琴音符

我想在 python 中模拟木琴音符,所以我遇到了 mingus 库,我已经成功模拟了钢琴音符,

这就是我玩它们的方式。

这些是用于钢琴的音符,它们听起来不适合我,但我正在寻找的是使用相同的演奏木琴音符,所以 mingus 有为木琴演奏的音符还是有更好的替代方法?

谢谢!!

0 投票
1 回答
50 浏览

python-2.7 - 分配给自己的进程时,声音制作功能静音

我正在开发一个 kivy 应用程序,该应用程序旨在以参数方式在现场进行听力训练练习并进行播放。音乐使用 mingus 模块进行描述,并通过其流体合成器实现播放。我有一个练习播放功能,它在正常调用时按预期工作,但是由于使用该方法,其他所有东西都会在钻头运行时挂起(在无限循环等待手动停止),这不会导致可接受的行为。我使用Process(),并根据终端的输出,它按预期循环,但没有声音。还有一点值得注意的是,从终端活动的节奏来看,多次按下开始按钮会导致多个进程并行运行。这是接口的python端的代码:

该类drill在其属性中保存一些参数,并在.run()调用其方法时进入一个循环以在这些参数中无休止地生成练习。在类的button.bind()声明中DrillScreen,如果我直接输入 on_release=self.thedrill.run ,我的功能就没有问题了。我不知道我在这里错过了什么。如果需要,我可以发布项目其他组件的代码。谢谢你。

0 投票
1 回答
601 浏览

vst - 如何发送要由合成器处理的音频块——没有间断

我正在使用Juce框架来构建 VST/AU 音频插件。音频插件接受 MIDI,并将 MIDI 渲染为音频样本——通过发送 MIDI 消息由FluidSynth(一种声音合成器)处理。

这几乎可以工作了。MIDI 消息正确发送到 FluidSynth。事实上,如果音频插件告诉 FluidSynth 将 MIDI 消息直接渲染到它的音频驱动程序——使用正弦波声音字体——我们会得到一个完美的结果:

完美的正弦波,通过将音频直接发送给驱动程序

但我不应该要求 FluidSynth 直接渲染到音频驱动程序。因为这样 VST 主机将不会收到任何音频。

要正确执行此操作:我需要实现一个renderer。VST 主机每秒会询问我 (44100÷512) 次以呈现 512 个音频样本。


我尝试按需渲染音频样本块,并将其输出到 VST 主机的音频缓冲区,但这是我得到的那种波形:

渲染音频块,效果不佳

这是同一个文件,每 512 个样本(即每个音频块)都有标记:

带标记

所以,很明显我做错了什么。我没有得到连续的波形。我处理的每个音频块之间的不连续性非常明显。


这是我的代码中最重要的部分:我对 JUCE 的SynthesiserVoice.

这是要求合成器的每个声音产生 512 个音频样本块的地方。

这里的重要功能是SynthesiserVoice::renderNextBlock(),我要求fluid_synth_process()生成一个音频样本块。


这是告诉每个声音的代码renderNextBlock():我的AudioProcessor.

AudioProcessor::processBlock()是音频插件的主循环。在其中,Synthesiser::renderNextBlock()调用每个声音的SynthesiserVoice::renderNextBlock()


我在这里有什么误解吗?让 FluidSynth 给我与前一个样本块背靠背的样本是否需要一些时间上的微妙之处?也许我需要传入一个偏移量?

也许 FluidSynth 是有状态的,并且有我需要控制的自己的时钟?

我的波形是一些众所周知的问题的症状吗?

源代码在这里,以防我遗漏了任何重要的东西。提交时发布的问题95605

0 投票
1 回答
175 浏览

c - 在 Haskell 中清理外部 C 指针

我围绕 bindings-fluidsynth 库编写了一组实用函数:

和函数用于说明问题justPlayjustPlay'当我justPlay从 ghci 调用时,我会得到随机的段错误(不一致,大约 30% 的时间),而justPlay'从来没有这样做过(但由于 dangling s,在一堆调用后迅速填满了我的系统内存Synth。我认为这是因为当Synth不再引用时,我不会自己清理,但我认为newForeignPtr在创建时使用终结器函数调用Synth应该自动处理。

我是 Haskell 的新手,我不知道 C,所以我试图通过这个来感受我的方式。处理这种情况的正确方法是什么?

0 投票
1 回答
766 浏览

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

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

流体合成器版本 1.1.10

这是我的步骤。

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

启动流体合成:

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

声音不如预期,因为 soundfont 选择已更改。(通道 9 sfont 从 1 更改为 2)

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

0 投票
1 回答
153 浏览

midi - Soundfonts play MIDI file without decay

I've been building a music notation application in Flask. On the backend I'm using Midiutil to generate midi files and Midi.js on the front end to play the files.

I recorded and built my soundfont using Polyphone and converted from sf2 to JS with soundfont_builder.rb.

The problem I am now facing is that the soundfont_builder is causing prolonged decay to the notes which I don't want.

Is there a way to navigate this so that my notes will play no longer or shorter than the length defined by the midi file?

I've tested my midi files with FluidSynth locally and they play normally as I want.

0 投票
1 回答
1282 浏览

python-3.x - midi2audio/FluidSynth: [WinError 2] 系统找不到指定的文件

我正在使用 python 包 midi2audio 将 midi 文件转换为 WAV。

跑步:

输出:

需要明确的是,错误是引用文件路径中指定的文件,而不是 soundfont。包装上的文档很少,所以我不知道该怎么做。

有没有使用 midi2audio 经验的人遇到过同样的问题并且知道问题的根源是什么?

0 投票
2 回答
169 浏览

java - MidiSystem.getMidiDevice(...) 返回意外的类

我正在尝试使用 javax.sound.midi 编写一个简单的程序,该程序可以读取、编辑然后通过 FluidSynth 播放 midi 文件。这是我的代码片段:

代码编译成功,但是当我运行它时,出现以下异常:

我期待返回 Synthesizer 类,但我不明白com.sun.media.sound.MidiOutDevice该类是什么。如果我将合成器切换到MidiDevice类,播放工作,但我无法访问Synthesizer类中的所有方法。知道我缺少什么吗?

0 投票
1 回答
542 浏览

python - Python - 混合两个音频块

我有两个 Byte 对象。一个来自使用 Wave 模块读取数据“块”:

另一个使用 MIDI 信息和合成器模块 (fluidsynth)

这两个文件的长度不同。我想结合这两个波,以便同时听到两者。具体来说,我想“一次一块”做这个。

这是我的设置:

从 get_a_chunk_from_each() 返回的信息: type(from_wav_data), type(from_midi_data) len(from_wav_data), type(from_midi_data) 4096 1024

首先,我对为什么长度不同感到困惑(从 wave_object.readframes(1024) 生成的长度正好是手动切片 bytes_from_midi[0:1024] 生成的长度的 4 倍。这可能是部分原因我一直不成功。

其次,我想创建结合这两个块的函数。以下“伪代码”说明了我想要发生的事情: