我正在尝试使用this question中建议的mingus模拟python中的钢琴。我正在运行Ubuntu 14.04,并且已经创建了一个音频组并添加了自己。 我正在使用alsa。
我运行了上述问题的一个答案中给出的代码,它在shell模式下运行良好。但是,当我写一个python脚本并尝试运行它时,我没有得到任何声音。这是我的代码:
#!/usr/bin/env python
from mingus.midi import fluidsynth
DEF_FONT_PATH = '/usr/share/sounds/sf2/FluidR3_GM.sf2'
def main():
fluidsynth.init(DEF_FONT_PATH, 'alsa')
fluidsynth.play_Note(80, 0, 80)
if __name__ == '__main__':
main()
我已经检查了很多其他答案,我似乎无法找到解决方案。
答案 0 :(得分:1)
我设法解决了。
正如我之前所怀疑的那样,问题似乎是在调用fluidsynth.init
之后需要等待一段时间。但是,由于一个简单的time.sleep()
无法解决这个问题,我已经放弃了这种可能性。
在提示用户提供一些输入以触发音符播放后,声音播放正常。
但是,我仍然不确定为什么需要延迟。
答案 1 :(得分:1)
我在Mac上遇到了同样的问题。
使用time.sleep()
确实是正确答案,但在我看来,它与等待fluidsynth.init
完成无关,而是在time.sleep()
之后使用fluidsynth.play_Note()
或者fluidsynth.play_NoteContainer()
来电,它应该播放。
虽然我希望在mingus文档https://bspaans.github.io/python-mingus/中的某处提到这一点,但他们确实在GitHub中有一些示例,表明这正是他们为了播放音符而正在做的事情。
此示例特别有用,因为几乎每次fluidsynth.play_Note()
的来电都会被time.sleep()
电话跟进: