2015-12-13 4 views
2

Я пытаюсь подражать пианино в python, используя mingus, как предложено в this question. Я запускаю Ubuntu 14.04, и уже создал звуковую группу и добавил себя к ней. Я использую alsa.Нет звука, использующего fluidsynth и mingus, за исключением оболочки

Я провел код, указанный в одном из ответов на вышеупомянутый вопрос, и он отлично работал в режиме оболочки. Однако, когда я написал скрипт 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() 

Я проверил множество других ответов, и я не могу найти решение.

ответ

1

Мне это удалось.

Кажется, проблема была, как я подозревал ранее, что нужно было подождать некоторое время после звонка fluidsynth.init. Однако, поскольку простой time.sleep() не смог это исправить, я отбросил эту возможность.

После запроса пользователю указать какой-либо вход для запуска воспроизведения примечания, звуки будут звучать нормально.

Я, однако, все еще не уверен, почему требуется отсрочка.

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