没有使用fluidynth和mingus的声音,除了在shell中

时间:2015-12-13 18:18:07

标签: python alsa

我正在尝试使用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()

我已经检查了很多其他答案,我似乎无法找到解决方案。

2 个答案:

答案 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()电话跟进:

https://github.com/bspaans/python-mingus/blob/master/mingus_examples/play_progression/play-progression.py