在 Linux 上将 MIDI 输入转换为计算机击键?

Rob*_*ore 10 linux keyboard keyboard-shortcuts midi ubuntu

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

每当我试图研究这个问题时,我要么会提到 Bome 的 MIDI Translator,它需要花钱,而且不在 Linux 上,一个非常过时的插件/应用程序,或者一些用于自己编码的随机库,我对此一无所知怎么办,因为我几乎没有编程与音频相关的技能。

我听说了一种叫做 VMPK 的东西,但在阅读了它的文档后,它看起来只能将计算机击键转换为 MIDI 信号,而不是相反。

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

CL.*_*CL. 16

如果没有一些编程,这是无法完成的。

首先,测试如何检测 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

$ 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

使其可执行 ( chmod +x ~/bin/midi-to-keys),然后运行它 ( ~/bin/midi-to-keys)。现在,按 E-5 或 C-4 应该会有一些效果。

更改或添加表格行"Note on x" ) command ;;以执行您想要的任何操作。

  • 很好的答案!通过像这样将一些“做一件事并做好”命令行工具组合在一起,您可以在 Linux/Unix 系统上轻松完成令人惊奇的事情。当人们问我为什么使用 Linux 时,我会记住这个例子。我现在终于要从我的 MIDI 控制器中获得一些实际用途了! (2认同)

Ene*_*eru 11

我有一个类似的问题,所以我编写了一些适合我要求的东西。

https://gitlab.com/enetheru/midi2input

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

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

自动重新加载配置,因此您不必一直关闭和重新打开它。

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

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

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

自从我构建它已经有几年了,我每天都在使用它,我关注 repo,但是只有一两个人给我发过电子邮件。

  • @Toto,这是因为它直接解决了 OP 的问题并且链接有效 (3认同)