GNU/Linux >> Tutoriales Linux >  >> Linux

¿Traducir la entrada MIDI en pulsaciones de teclas de computadora en Linux?

Esto no se puede hacer sin alguna programación.

Primero, prueba cómo detectar eventos MIDI. Vaya a una terminal y ejecute aseqdump -l para listar los puertos MIDI; esto genera algo como esto:

$ 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

Luego ejecútelo con el nombre del cliente para verificar si llegan eventos:

$ 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
...

En segundo lugar, para simular pulsaciones de teclas, necesita xdotool . Si aún no lo tienes instalado, ejecuta sudo apt-get install xdotool .Puedes usar type para escribir texto, o key para simular teclas especiales:

xdotool type Hello, World!
xdotool key ctrl+p

Tenga en cuenta que no todas las teclas especiales son manejadas correctamente por xdotool .Y Ctrl+Alt+Del es manejado de manera muy especial por el kernel y probablemente no funcione cuando se simula; intenta ejecutar sudo reset en lugar de xdotool .

Finalmente, une todo con un guión. Póngalo en un archivo de texto, por ejemplo, ~/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

Hazlo ejecutable (chmod +x ~/bin/midi-to-keys ), y ejecútelo (~/bin/midi-to-keys ).Ahora, presionar E-5 o C-4 debería tener algún efecto.

Cambiar o agregar líneas del formulario "Note on x" ) command ;; para hacer lo que quieras.


Tuve un problema similar, así que programé algo que se adapte a mis requisitos.

https://gitlab.com/enetheru/midi2input

Se ejecuta en Linux y usa el sistema x windows para eventos de entrada de teclado y mouse.

Utiliza lua para la configuración y el mapeo, puede realizar cualquier acción como su usuario. detecta qué ventana está activa usando el atributo X_CLASS para que pueda hacer diferentes asignaciones para cualquier aplicación que se esté ejecutando actualmente.

Recarga automáticamente la configuración para que no tengas que cerrarla y volver a abrirla todo el tiempo.

He escrito una regla udev simple para crear las conexiones midi cuando conecto mi controlador.

Incluso hay un PKGBUILD de archlinux para archlinux, solo que no lo he agregado al aur.

La idea era eliminar todos los puntos débiles al hacer asignaciones desde el controlador medio a cualquier cosa que quisiera.

Han pasado algunos años desde que lo construí, y lo uso todos los días, presto atención al repositorio, pero solo una o dos personas me han enviado un correo electrónico al respecto.


Linux
  1. Cómo hacer que una computadora vieja vuelva a ser útil

  2. Termux convierte Android en un entorno de desarrollo Linux

  3. Redirección de entrada/salida en Linux/Unix

  4. Programación en Linux:ejecutar una tarea cuando la computadora está inactiva (=sin intervención del usuario)

  5. ¿Cómo canalizo el comando dividido de Linux?

Parche en The Matrix en la línea de comando de Linux

Comando Linux dd explicado para principiantes (8 ejemplos)

Cómo iniciar en la línea de comandos de Linux

GSConnect integra el teléfono Android con la computadora Linux

Explicación de la redirección de entrada y salida en Linux

Linux canaliza el archivo de audio a la entrada del micrófono