将 MIDI 输入转换为 Linux 上的计算机按键?

将 MIDI 输入转换为 Linux 上的计算机按键?

我有一个 MIDI 控制器(Launchkey Mini),我不再使用它来制作音乐,但我想使用它上的鼓垫按钮或钢琴键来执行计算机键盘组合,例如只需按一下即可执行 Ctrl + Alt + Delete。

每当我尝试研究这个问题时,我都会得到 Bome 的 MIDI 翻译器(这需要花钱并且不支持 Linux,这是一个非常过时的插件/应用程序),或者一些我自己编写的随机库,但我不知道该怎么做,因为我几乎没有任何与音频相关的编程技能。

我听说了一种叫做 VMPK 的东西,但阅读了它的文档后,我发现它只能将计算机按键转换为 MIDI 信号,而不能将 MIDI 信号转换为计算机按键。

有什么办法可以做到这一点吗?我在 Xubuntu 16.04 上。

答案1

如果没有一些编程就无法做到这一点。

首先,测试如何检测 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 ;;来执行您想要的任何操作。

答案2

我遇到了类似的问题,所以我编写了一些适合我的要求的程序。

https://gitlab.com/enetheru/midi2input

在 Linux 中运行并使用 x Windows 系统进行键盘和鼠标输入事件。

它使用 lua 进行配置和映射,可以以用户身份执行任何操作。使用 X_CLASS 属性检测哪个窗口处于活动状态,因此您可以对当前正在运行的应用程序进行不同的映射。

自动重新加载配置,因此您不必经常关闭并重新打开它。

我编写了一个简单的 udev 规则,以便在插入控制器时创建 midi 连接。

甚至有一个适用于 archlinux 的 archlinux PKGBUILD,我只是还没有将它添加到 aur。

这个想法是消除从中间控制器到我想要的任何东西的映射中的所有痛点。

我建造它已经有几年了,我每天都在使用它,我关注着这个仓库,但只有一两个人给我发过关于它的电子邮件。

相关内容