LINUX.ORG.RU

Проблемы с midi в frescobaldi

 ,


0

1

У меня в frescobaldi воспроизведение и захват midi не заработали из коробки, пишет no midi output ports в системе. Пробовал ставить PortMidi вот отсюда https://sourceforge.net/projects/portmedia/, вроде сделал все, как написано в readme, он с умным видом что-то поналепил в usr/bin, но это не дало никакого эффекта. Я не слишком уверенный пользователь ubuntu, поэтому вряд ли мне удастся самостоятельно решить проблему, прошу помощи


пишет no midi output ports в системе

Ну дак они есть у тебя в системе? Если хардварного миди-выхода нет (а это, скорей всего, так — те, у кого он есть, об этом знают), то надо запускать какой-то софтовый синтезатор типа Timidity, QSynth и подобного.

alegz ★★★★
()
Ответ на: комментарий от alegz

хардварного миди-выхода нет

да, нет

надо запускать какой-то софтовый синтезатор

Ок, вроде разобрался, как запустить fluidsynth как midi-выход, так что его увидел aconnect -l:

client 128: 'FluidSynth1' [type=user,pid=37907]
    0 'FluidSynth1     '

Но это абсолютно ничего не изменило, все тот же «No output found!» при попытке проиграть midi из frescobaldi, все тот же

Note: There are no MIDI output ports available on your system. To use MIDI, please check if PortMIDI is installed on your system and that a MIDI synthesizer is available or connected.

в Edit > Preferences > MIDI Settings > MIDI Ports

К слову, в остальном все нормально, midi клавиатура работает хорошо, так что нажатия клавиш корректно регистрируются с помощью aseqdump, midi-файлы корректно проигрываются с помощью timidity

aab137
() автор топика
Ответ на: комментарий от aab137

скорее всего frescobaldi не может найти библиотеку portmidi. наверное надо при сборке portmidi префикс указывать. и что, разве в убунту нет portmidi в репах? попробуй поставить из официальных реп:

sudo apt-get install libportmidi0

как ты, кстати, запускаешь fluidsynth или timidity?

anonymous
()
Ответ на: комментарий от anonymous

наверное надо при сборке portmidi префикс указывать

ух ты, какой??

разве в убунту нет portmidi в репах?

Как-то не гуглилось, оказывается, есть. Снес все, что было, поставил из репов, ничего не поменялось

как ты, кстати, запускаешь fluidsynth или timidity?

запускаю fluidsynth, так что его видит aconnect. как запустить timidity в режиме midi-порта, не разобрался, но fluidsynth достаточно, наверное

aab137
() автор топика
Ответ на: комментарий от aab137

поставил из репов, ничего не поменялось

блин, странно. а frescobaldi тоже из реп ставил? у тебя какая убунта?

префикс

cmake -B build --install-prefix /usr
cmake --build build
cmake --install build

если указать /usr, то либа установится по стандартному для линкера пути (/usr/lib). по умолчанию префикс указывает на /usr/local, но не на всех системах линкер настроен брать оттуда либы. не знаю как в убунте.

как запустить timidity в режиме midi-порта

у меня примерно так:

timidity -iA -B 2,5 -x 'soundfont SalC5Light2.sf2'

параметр -B выбирает размер буфера - влияет на задержку.

я поставил frescobaldi себе на арч, из официальных реп, поковырял, заглянул в код питона, там, в файле /lib/python3.11/site-packages/frescobaldi_app/portmidi/__init__.py, в функции _setup() он пытается импортировать portmidi из четырёх разных источников: ['pypm', 'pyportmidi', 'pygame', 'ctypes'], первые два - по всей видимости, сторонние биндинги, третий - либа для создания игр на питоне, может быть собрана с pypm, но не обязательно, и последний - внутренний биндинг frescobaldi к portmidi. у меня работает через последний.

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

если хочешь, то попробуй наложить этот патч на вышеуказанный файл питона, возможно что-то прояснится:

@@ -268,0 +269 @@
+            print('Trying import', name)
@@ -270,0 +272 @@
+                print('Successfully imported', name)
@@ -272 +274,2 @@
-            except ImportError:
+            except ImportError as e:
+                print('Fail importing', name, ':', e)
@@ -296 +299 @@
-            raise ImportError
+            raise ImportError('Module spec not found')

сообщения будут выводиться в консоль. frescobaldi ищет либу только при запуске.

anonymous
()
Ответ на: комментарий от anonymous

Большое спасибо за подробный ответ! Помогло поменять префикс в параметрах ccmake И спасибо за timidity

Тогда еще один вопрос, вам удалось сделать захват midi вместе с длительностями, под метроном?

aab137
() автор топика
Ответ на: комментарий от aab137

пожалуйста)

насчёт захвата с длительностями: не уверен что во frescobaldi это вообще возможно, я не нашёл как.

в пакет lilypond входит программа midi2ly, которая, вроде как, может разобрать длительности из midi-файла, но я не пробовал.

anonymous
()