Я пришел использовать mingus , чтобы попытаться воспроизвести некоторые заметки на python.Исходя из того, что ответил здесь , я пробовал:
from mingus.midi import fluidsynth
fluidsynth.init('/home/btc/Escritorio/SinestesiaRCB/gfx/ViolinsLong.sf2',"alsa")
fluidsynth.play_Note(64,0,100)
#Also tried with Note("C-5") and so forth
Используя, среди прочего, один из этих файлов sf2 .Но затем я получил ошибку:
fluidsynth: предупреждение: не удалось установить поток с высоким приоритетом
fluidsynth: предупреждение: пресет не найден на канале 9 [bank = 128 prog = 0]
Немного изучив, этот ответ сказал :
Для общей совместимости с MIDI инструментами звукового шрифта по умолчанию назначаются банк 0, программа 0(«Acoustic Grand Piano») для каналов 0–8 и 10–15 и банка 128, программа 0 («Набор ударных по умолчанию») для канала 9. Очевидно, ваш звуковой шрифт не имеет последнего.Это не имеет значения, если ваш MIDI-файл не поддерживает общие MIDI-совместимые инструменты и не пытается воспроизводить звуки ударных на канале 9.
Но, кроме этого, это может немного прояснить ситуацию, ядо сих пор не знаю, как ее решить.
Плюс, если я использую тот же файл , что в ответе самой первой ссылки, то я получаю ошибку (и донне знаю, как ее решить):
fluidsynth: предупреждение: не удалось установить поток с высоким приоритетом
fluidsynth: предупреждение: не удалось закрепить данные образца в ОЗУ;обмен возможен.
Обновление
Запуск программы с разрешениями sudo удаляет эти ошибки , но этого не делаетзвук .Таким образом, я получаю сообщение об ошибке:
QStandardPaths: XDG_RUNTIME_DIR не установлен, по умолчанию используется значение «/ tmp / runtime-root»
Я подумал, что это может быть проблемойс выбранным режимом драйвера в fluidsynth
драйвере, но я пробовал их всех (alsa, oss и т. д.) с тем же результатом.Ради полноты, я запускаю его в виртуальной машине, и другие звуки внутри него правильно воспроизводятся в динамиках моего хоста.
Однако, основываясь на этот ответ , я думаю это должно быть решено путем передачи ему правильной переменной звукового окружения .Что я не знаю.Я пробовал с:
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY python3 /home/btc/Escritorio/SinestesiaRCB/SinestesiaRCB.py
Там, где нужен полный путь к файлу, так как для этого требуются разрешения sudo и изменяется его рабочий каталог, и в конце концов появилась та же ошибка: XDG_RUNTIME_DIR
.
Обновление 2
Если я запускаю его с опцией sudo -E
, ошибка заменяется новой:
QStandardPaths: неправильное владениев каталоге времени выполнения / run / user / 1000, 1000 вместо 0
Я читаю в некоторых сетях , что пользователь 1000
должен быть пользователем по умолчаниювместо root.
Поэтому я сделал:
sudo chown root:root /run/user/1000
Просто попробуйте, а затем приложение запускает без сбоев, но оно все равно не звучит .
Обновление 3
На основе этого примера и этого Q & A , я пробовал использовать обавремя сна с несколько раз, и с использованием raw_input
также после (также до) сделать play_note, но он все еще не звучит.