題 在Linux上將MIDI輸入轉換為計算機按鍵?


我有一個我不再用於音樂製作的MIDI控制器(Launchkey Mini),但是我想用它上面的鼓墊按鈕或鋼琴鍵來執行電腦鍵盤組合,例如Ctrl + Alt + Delete,只需一次按下。

每當我嘗試研究這個問題時,我要么指向Bome的MIDI轉換器,這需要花錢而不是Linux,一個可怕的過時插件/應用程序,或者一些隨機庫自己編碼,我不知道怎麼辦,因為我幾乎沒有編程與音頻有關的東西的技巧。

我發現了一些名為VMPK的東西,但在閱讀了它的文檔之後,它看起來只是將計算機擊鍵轉換為MIDI信號,而不是相反。

有什麼方法可以做到這一點嗎?我在Xubuntu 16.04上。


4
2018-01-21 22:15


起源


我想知道這是否可能是朝著正確方向邁出的一步。我只是用它來實際驅動MIDI設備。我的iPhone通過常規音序器,但也許它可以擴展到您的需求 - en.wikipedia.org/wiki/Open_Sound_Control - Tetsujin
我不知道任何現成的軟件,但它聽起來像一個有趣的項目。通過示例程序如何獲取MIDI事件以及如何合成輸入擊鍵事件,您的編程技巧是否足以自己製作?你在使用Alsa或Jack作為MIDI控制器嗎? - dirkt


答案:


沒有一些編程就無法做到這一點。

首先,測試如何檢測MIDI事件。轉到終端,然後運行 aseqdump -l 列出MIDI端口;這輸出如下:

$ aseqdump -l
 端口客戶端名稱端口名稱
  0:0系統定時器
  0:1系統公告
 14:0 Midi穿過Midi穿過Port-0
 24:0 Xonar D2 Xonar D2 MIDI
 32:0雅馬哈DS-1E(YMF754)雅馬哈DS-1E(YMF754)MIDI

然後使用客戶端名稱運行它以檢查事件是否到達:

$ aseqdump -p“Xonar D2”
等待數據。按Ctrl + C結束。
源事件數據
 24:0注意0,注64,速度86
 24:0注意0,注48,速度80
 24:0注0,注48
 24:0注意0,注68,速度84
 24:0注意0,注52,速度88
 24:0注0,注64
 24:0注0,注52
 24:0注0,注68
...

其次,要模擬擊鍵,你需要 xdotool。如果尚未安裝,請運行 sudo apt-get install xdotool。 您可以使用 type 輸入文字,或 key 模擬特殊鍵:

xdotool類型你好,世界!
xdotool鍵ctrl + p

請注意,並非所有特殊鍵都能正確處理 xdotool。 並且Ctrl + Alt + Del由內核非常特殊地處理,並且在模擬時可能不起作用;試試跑步 sudo reset 代替 xdotool

最後,用腳本將所有內容綁定在一起。把它放到一個文本文件中,例如, ~/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

使其可執行(chmod +x ~/bin/midi-to-keys),並運行它(~/bin/midi-to-keys)。 現在,按E-5或C-4應該有一些效果。

更改或添加表單行 "Note on x" ) command ;; 做任何你想做的事。


7
2018-01-22 09:30



哦,那還不錯!我擔心會有更多的方法。謝謝! - RobotUnderscore
很棒的答案!通過將一些“做一件事,做得好”的命令行工具組合在一起,你可以非常輕鬆地在Linux / Unix系統上做到這一點。當人們問我為什麼使用Linux時,我會記住這個例子。我現在終於可以從我的midi控制器中獲得一些實際用途了! - LaVache


我有類似的情況,所以我做了一個小程序,為我做 https://gitlab.com/enetheru/midi2input


7
2017-09-15 07:32



鏈接只有答案不是那麼有用。 - Toto
@Toto,這是因為它直接解決OP的問題,鏈接是有效的 - Art Gertner