"재생" 및 "중지"와 같은 일부 제어 키도 있는 실제 MIDI 키보드가 있습니다. 누르면 MIDI 버스를 통해 각각 MIDI 코드 115와 116이 전송됩니다. "재생"을 누르면 재생이 시작되도록 이러한 명령을 Linux의 일반적인 미디어 컨트롤(재생 및 일시 중지)에 연결할 수 있습니까?
다른 MIDI 키(예: 위/아래)를 해당 키보드 대응(예: 위/아래 화살표)에 연결할 수 있습니까?
답변1
댓글에서 dirkt는 맞춤 프로그램 작성을 제안했습니다. 그래서 저는 MIDI 컨트롤러에서 입력을 읽고 원하는 키 입력을 시뮬레이션하는 짧은 개념 증명 스크립트를 Python으로 작성했습니다. 우분투 20.04에서 테스트했습니다. 안타깝게도 실행하려면 슈퍼유저 권한이 필요합니다. 그렇지 않으면 /dev/uinput
쓰기 위해 열 수 없습니다.
import mido
from evdev import uinput, ecodes as e
def press_playpause():
"""Simulate pressing the "play" key"""
with uinput.UInput() as ui:
ui.write(e.EV_KEY, e.KEY_PLAY, 1)
ui.syn()
def clear_event_queue(inport):
"""Recent events are stacked up in the event queue
and read when opening the port. Avoid processing these
by clearing the queue.
"""
while inport.receive(block=False) is not None:
pass
device_name = mido.get_input_names()[0] # you may change this line
print("Device name:", device_name)
MIDI_CODE_PLAY = 115
MIDI_VALUE_ON = 127
with mido.open_input(name=device_name) as inport:
clear_event_queue(inport)
print("Waiting for MIDI events...")
for msg in inport:
print(msg)
if (hasattr(msg, "value")
and msg.value == MIDI_VALUE_ON
and hasattr(msg, "control")
and msg.control == MIDI_CODE_PLAY):
press_playpause()
필요하다: