3

我正在开发一个需要从大量预加载的“.mid”文件中创建声音的应用程序。

我正在使用 Python 和 Kivy 创建一个应用程序,因为我已经使用这些工具制作了一个应用程序,它们是我知道的唯一代码。我制作的另一个应用程序没有任何声音。

自然,我想确保我编写的代码可以跨平台工作。

现在,我只是想证明我可以从 MIDI 音符中创造出任何真实的声音。

我从另一个使用 FluidSynth 和 Mingus 的类似问题的答案中提取了这段代码:

from mingus.midi import fluidsynth

fluidsynth.init('/usr/share/sounds/sf2/FluidR3_GM.sf2',"alsa")
fluidsynth.play_Note(64,0,100)

但我什么也没听到并收到此错误:

fluidsynth: warning: Failed to pin the sample data to RAM; swapping is possible.

为什么我会收到这个错误,我该如何解决,这是最简单的方法还是正确的方法?

4

1 回答 1

2

我可能是错的,但我不认为有一个“0”通道是您作为第二个参数传递给 .play_Note() 的通道。尝试这个:

fluidsynth.play_Note(64,1,100)

或(来自一些文档

from mingus.containers.note import Note
n = Note("C", 4)
n.channel = 1
n.velocity = 50
fluidSynth.play_Note(n)

更新:

该方法的源代码中仅引用了通道 1-16,默认通道设置为 1:

def play_Note(self, note, channel = 1, velocity = 100):
        """Plays a Note object on a channel[1-16] with a \
velocity[0-127]. You can either specify the velocity and channel \
here as arguments or you can set the Note.velocity and Note.channel \
attributes, which will take presedence over the function arguments."""
        if hasattr(note, 'velocity'):
            velocity = note.velocity
        if hasattr(note, 'channel'):
            channel = note.channel
        self.fs.noteon(int(channel), int(note) + 12, int(velocity))
        return True
于 2015-01-19T19:22:17.513 回答