我正在开始处理需要从大量预加载的“.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.
为什么我会收到此错误,我该如何修复它?这是最简单的方法还是正确的方式?
答案 0 :(得分:2)
我可能错了,但我不认为有一个“0”频道,这是你作为你的第二个参数传递给.play_Note()。试试这个:
fluidsynth.play_Note(64,1,100)
或(来自某些documentation)
from mingus.containers.note import Note
n = Note("C", 4)
n.channel = 1
n.velocity = 50
fluidSynth.play_Note(n)
更新:
默认通道设置为1时,该方法的源代码中仅引用通道1-16:
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