GNU/Linux >> Linux Esercitazione >  >> Linux

Traduzione dell'input MIDI in sequenze di tasti del computer su Linux?

Questo non può essere fatto senza un po' di programmazione.

Innanzitutto, prova come rilevare gli eventi MIDI. Vai a un terminale ed esegui aseqdump -l per elencare le porte MIDI; this restituisce qualcosa di simile a questo:

$ 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

Quindi eseguilo con il nome del client per verificare se gli eventi arrivano:

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

In secondo luogo, per simulare i tasti premuti, è necessario xdotool . Se non l'hai ancora installato, esegui sudo apt-get install xdotool .Puoi usare type per digitare il testo o key per simulare tasti speciali:

xdotool type Hello, World!
xdotool key ctrl+p

Tieni presente che non tutte le chiavi speciali sono gestite correttamente da xdotool .E Ctrl+Alt+Del è gestito in modo molto speciale dal kernel e probabilmente non funziona se simulato; prova a eseguire sudo reset invece di xdotool .

Infine, lega tutto insieme a una sceneggiatura. Inseriscilo in un file di testo, ad esempio ~/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

Rendilo eseguibile (chmod +x ~/bin/midi-to-keys ) ed eseguilo (~/bin/midi-to-keys ).Ora, premendo E-5 o C-4 dovrebbe avere qualche effetto.

Modifica o aggiungi righe della forma "Note on x" ) command ;; per fare quello che vuoi.


Ho avuto un problema simile, quindi ho programmato qualcosa che si adatta alle mie esigenze.

https://gitlab.com/enetheru/midi2input

Funziona in Linux e utilizza il sistema x windows per gli eventi di input da tastiera e mouse.

Utilizza lua per la configurazione e la mappatura, può eseguire qualsiasi azione come utente. ha il rilevamento su quale finestra è attiva utilizzando l'attributo X_CLASS in modo da poter effettuare mappature diverse per qualunque applicazione sia attualmente in esecuzione.

Ricarica automaticamente la configurazione in modo da non doverla chiudere e riaprire continuamente.

ho scritto una semplice regola udev per creare le connessioni midi quando collego il mio controller.

C'è persino un PKGBUILD di archlinux per archlinux, solo che non l'ho aggiunto all'aur.

L'idea era di rimuovere tutti i punti dolenti nel fare mappature dal controller centrale a tutto ciò che voglio.

Sono passati alcuni anni da quando l'ho creato e lo uso tutti i giorni, presto attenzione al repository, ma ci sono state solo una o due persone che mi hanno inviato un'e-mail a riguardo.


Linux
  1. Termux trasforma Android in un ambiente di sviluppo Linux

  2. Linux:spostare l'installazione di Linux su un nuovo computer?

  3. Pianificazione in Linux:eseguire un'attività quando il computer è inattivo (=nessun input da parte dell'utente)

  4. Linux:processo in un servizio

  5. Spostare l'installazione di Linux su un nuovo computer

Patch in The Matrix dalla riga di comando di Linux

Spiegazione del comando Linux dd per principianti (8 esempi)

Come avviare la riga di comando di Linux

GSConnect integra il telefono Android con il computer Linux

Spiegazione del reindirizzamento di input e output su Linux

Linux reindirizza il file audio all'ingresso del microfono