Преобразование ввода MIDI в нажатия клавиш компьютера в Linux?

2196
RobotUnderscore

У меня есть MIDI-контроллер (Launchkey Mini), который я больше не использую для производства музыки, но я хотел бы использовать на нем кнопки барабанной панели или клавиши пианино для выполнения комбинаций клавиатуры компьютера, таких как Ctrl + Alt + Delete, с помощью одного нажатия.

Всякий раз, когда я пытаюсь исследовать этот вопрос, я либо указываю на MIDI-переводчик Bome, который стоит денег, а не на Linux, на ужасно устаревший плагин / приложение или какую-то случайную библиотеку для его самостоятельного кодирования, которую я не имею ни малейшего понятия. как делать, так как у меня практически нет навыков программирования вещей, связанных со звуком.

Я узнал что-то под названием VMPK, но после прочтения документации кажется, что он преобразует только нажатия клавиш компьютера в MIDI-сигналы, а не наоборот.

Есть ли способ, которым я могу сделать это? Я на Xubuntu 16.04.

5
Интересно, может ли это быть шагом в правильном направлении? Я когда-либо использовал его только для фактического управления MIDI-устройствами, например, с моего iPhone через обычный секвенсор, но, возможно, он расширяется для ваших нужд - https://en.wikipedia.org/wiki/Open_Sound_Control Tetsujin 7 лет назад 0
Я не знаю ни о каком готовом программном обеспечении, но это звучит как забавный проект. С примерами программ, как получить события MIDI и как синтезировать события нажатия клавиш ввода, было бы достаточно ваших навыков программирования, чтобы сделать это самостоятельно? А вы используете Alsa или Jack для своего MIDI-контроллера? dirkt 7 лет назад 0

2 ответа на вопрос

8
CL.

This cannot be done without some programming.

First, test how to detect MIDI events. Go to a terminal, and run aseqdump -l to list the MIDI ports; this outputs something like this:

$ aseqdump -l
 Port Client name Port name
 0:0 System Timer
 0:1 System Announce
 14:0 Midi Through Midi Through Port-0
 24:0 Xonar D2 Xonar D2 MIDI
 32:0 Yamaha DS-1E (YMF754) Yamaha DS-1E (YMF754) MIDI

Then run it with the client name to check whether events arrive:

$ aseqdump -p "Xonar D2"
Waiting for data. Press Ctrl+C to end.
Source Event Ch Data
 24:0 Note on 0, note 64, velocity 86
 24:0 Note on 0, note 48, velocity 80
 24:0 Note off 0, note 48
 24:0 Note on 0, note 68, velocity 84
 24:0 Note on 0, note 52, velocity 88
 24:0 Note off 0, note 64
 24:0 Note off 0, note 52
 24:0 Note off 0, note 68
...

Second, to simulate key strokes, you need xdotool. If you do not yet have it installed, run sudo apt-get install xdotool. You can use type to type text, or key to simulate special keys:

xdotool type Hello, World!
xdotool key ctrl+p

Please note that not all special keys are handled correctly by xdotool. And Ctrl+Alt+Del is handled very specially by the kernel and probably does not work when simulated; try running sudo reset instead of xdotool.

Finally, tie everything together with a script. Put this into a text file, for example, ~/bin/midi-to-keys:

#!/bin/bash
aseqdump -p "Xonar D2" | \
while IFS=" ," read src ev1 ev2 ch label1 data1 label2 data2 rest; do
 case "$ev1 $ev2 $data1" in
 "Note on 64" ) xdotool type hello ;;
 "Note on 48" ) xdotool key ctrl+j ;;
 esac
done

Make it executable (chmod +x ~/bin/midi-to-keys), and run it (~/bin/midi-to-keys). Now, pressing E-5 or C-4 should have some effect.

Change or add lines of the form "Note on x" ) command ;; to do whatever you want.

О, это не так уж плохо! Я волновался, что будет намного больше к этому. Спасибо! RobotUnderscore 7 лет назад 0
Отличный ответ! Удивительно, что вы можете очень легко сделать в системах Linux / Unix, просто комбинируя несколько инструментов командной строки «сделай одно и хорошо» вместе, вот так. Я запомню этот пример, когда меня спросят, почему я использую Linux. Теперь я наконец-то получу практическое применение от своих миди-контроллеров! LaVache 6 лет назад 1
7
Enetheru

У меня была похожая ситуация, поэтому я сделал небольшую программу, которая делает это для меня https://gitlab.com/enetheru/midi2input

Ссылка только ответы не так полезны. Toto 7 лет назад 0
@Toto, это как-то решает проблему ОП напрямую и ссылка действительна Art Gertner 7 лет назад 2