Audio & VideoWindows

MIDI-Controller als Windows-Eingabegerät nutzen

MIDI-Geräte können nicht nur für Musik genutzt werden, auch als Programmstarter oder Makro-Board machen sie eine gute Figur.

Computer-Tastaturen lassen sich auf vielfältige Weise programmieren und mit Makros belegen. Zum Beispiel zum Starten von Programmen, für die Auswahl von Tools in der Bildbearbeitung oder spektakuläre Aktionen in Spielen. Das Blöde daran: Entweder ist Eure Tastatur dadurch riesig oder Ihr müsst ständig umschalten, per SHIFT, STRG, WIN, FN oder irre Kombinationen wie STRG+ALT+UMSCHALT+X. Viel besser: Ein separates Gerät - vor allem, wenn schon eines da ist ;)

MIDI-Controller = Eingabegerät

Kürzlich hatten wir einen ausführlichen Artikel zum Thema Musikproduktion für Einsteiger per MIDI. MIDI ist ein Protokoll, das in der Musikproduktion sowohl in der analogen als auch der digitalen Welt genutzt wird. Ein MIDI-Controller sendet im Grunde einfach nur Signale (hier) an den Rechner, die in der Regel von einer Digital Audio Workstation (DAW), also einer Produktionssoftware, interpretiert wird - sei es in Form einer gespielten Note oder eines gedrehten Reglers.

Insofern ist ein MIDI-Controller ein Eingabegerät wie Maus und Tastatur. Warum also nur für Musik nutzen? Zugegeben, das Nektar LX61+ ist ein tolles Gerät, aber gigantisch groß und nicht geeignet, um es ständig auf dem Schreibtisch herumstehen zu haben.

nektar midi cakewalk einstieg screesnhot
1: Pitch, Transponiern, Oktavwahl - die üblichen Buttons.
2: Knöpfe für DAW-Integration
3: Drum-Pads

Aber es gibt durchaus kleine Launchpads, die schlicht ein 8x8-Raster an frei belegbaren Pads (Tasten zum Draufhauhen, teils anschlagdynamisch) bieten. Das ist nicht nur hübsch, sondern auch recht günstig: Es gibt ja durchaus spezielle "Tastaturen" für solche Zwecke, vor allem für Gamer gedacht. Zum Beispiel das Expertkeys EK-58 - 58 Tasten für 139 Euro! Der MIDI-Controller Novation Launchpad Mini bietet 64 Tasten für 59 Euro.

Bild: Novation/Focusrite Plc

Allerdings: Da MIDI-Controller nicht für solche Zwecke gedacht sind, sind sie natürlich größer und aufwändiger zu konfigurieren. Und beim EK-58 lässt sich zudem jede Taste individuell mit Texten und Symbolen versehen, einfach über kleine Zettelchen. Aber spätestens wenn bereits ein MIDI-Keyboard oder -Launchpad oder -Drumcomputer vorhanden ist, lohnt sich der Aufwand.

Autohotkey!

Mal wieder ist Autohotkey die Lösung, wie schon so oft in Artikeln bei uns. Hier müsst Ihr aber nicht von Grund auf skripten, sondern könnt auf das Open-Source-Projekt midi4ahk zurückgreifen. Dieses besteht aus einer DLL-Datei und einem Autohotkey-Skript, das die Verwendung der Funktionen innerhalb der DLL vereinfacht. Ihr müsst Euch aber mit beiden Dateien nicht unbedingt auseinandersetzen, sondern könnt einfach Nutzerskripte im selben Ordner ablegen. Das Projekt liefert dazu einige Beispielskripte, die sich einfach anpassen lassen.

Nachtrag, 25.2.2022: Wenn Ihr die Fehlermeldung Cannot load library midi_in.dll bekommt (siehe Kommentare), fehlt vermutlich das Paket Visual C++ Redistributable für Visual Studio 2012. Leider ist diese Abhängigkeit nicht dokumentiert und auf meinem Testrechner war die VC-Runtime bereits vorhanden - daher konnte ich nicht darauf hinweisen. Erst über einen Blick ins Innere der DLL-Datei ließ sich die Entwicklungsumgebung herausfinden und die Abhängigkeit ableiten. Immerhin, hat Spaß gemacht ;) Falls es klappt oder auch nicht, hinterlasst doch bitte einen Kommentar.

Das Prinzip: Ihr legt eine Tastenzuordnung und eine Aktion fest - fertig.

Hier mal ein simples Skript, über das sich mit der tiefsten Taste auf dem LX61+ der Windows-Taschenrechner (calc) öffnen lässt. Es basiert auf dem mitgelieferten Beispielskript midi_in_lib_test.ahk, das eigentlich die ebenfalls mitgelieferten WAV-Dateien (Trommeln) abspielt. Diese Funktionen sind raus, es bleibt aber das "Drumherum", das sich um den Ablauf des Programms kümmert.

#SingleInstance force
SendMode Input
SetWorkingDir %A_ScriptDir% 

OnExit, sub_exit
if (midi_in_Open(0))
    ExitApp
Menu TRAY, Icon, icon4.ico

;--------------------  Midi "hotkey" mappings  -----------------------
listenNote(36, "foobar")

return
;----------------------End of auto execute section--------------------

sub_exit:
    midi_in_Close()
ExitApp

;-------------------------Miscellaneous hotkeys-----------------------
Esc::ExitApp

;-------------------------Midi "hotkey" functions---------------------
foobar(note, vel)
{
    if (vel)
    {
    run, calc
    }
}

;-------------------------  Midi input library  ----------------------
#include midi_in_lib.ahk

Neu sind hier aber nur folgende Zeilen:

;Tastenzuordnung:
listenNote(36, "foobar")

;Funkion:
foobar(note, vel)
{
    if (vel)
    {
    run, calc
    }
}

Zunächst wird mit listenNote der MIDI-Note 36 der Name foobar zugeordnet. Anschließend läuft die Funktion foobar mit den beiden Parametern note (Taste) und vel (Anschlagsgeschwindigkeit) und führt auf Tastendruck mit run das Programm calc aus. Die if-Abfrage schaut einfach, ob eine Anschlagsgeschwindigkeit existiert (gleichbedeutend mit Note gespielt/Taste gedrückt). Ruft man die Funktion ohne if-Schleife auf, wird calc zweimal ausgeführt - vielleicht gibt es da noch eine andere Möglichkeit, aber wozu suchen? Diese funktioniert ;)

bild von nektar lx61+
Per MIDI-Note 36 (C) wird Calc.exe geöffnet - egal, ob Taste oder Drumpad.

Ihr könnt also ganz einfach erst die Tastenzuordnungen oben im Bereich Midi "hotkey" mappings eintragen - dieser wird beim Start des Skript umgehend ausgeführt:

listenNote(36, "calc")
listenNote(37, "word")
listenNote(38, "irgendeinprogramm")
...

Und anschließend die Aufrufe unter Midi "hotkey" functions eintragen:

irgendeinprogramm(note, vel)
{
    if (vel)
    {
    run, "C:\programme\mein-programm-xyz.exe"
    }
}

Und so weiter. Eine Übersicht der MIDI-Noten-Nummern findet Ihr hier.

Natürlich muss es nicht dabei bleiben. midi4ahk hat noch mehr zu bieten und innerhalb der if-Abfrage könnt Ihr sowieso aus dem Vollen schöpfen und mit Autohotkey zum Beispiel per Knopfdruck Textbausteine einfügen, Fenster transparent machen oder im Vordergrund halten oder in den Tray minimieren oder auf 720p skalieren oder auch Makros für Spiele, Gimp etc. triggern. Und auch bei den MIDI-Geräten muss es nicht bei den naheliegenden Launchpads bleiben - denkt zum Beispiel mal an Fußcontroller! Ganz neue Möglichkeiten eröffnen sich ...

Hinweis: Bei den Amazon-Links im Artikel handelt es sich um Partnerlinks, sprich für alles, was Ihr kauft, bekommen wir Provision - weniger Geld für Amazon, mehr Geld für uns, kein Unterschied für Euch. Und damit Ihr wisst, dass wir es ernst meinen: Wenn Ihr mittels Autohotkey-Tastenzuordnungen und diesem Gerät (oder einem ählichen ...) einen Kommentar mit mindestens 500 Zeichen schreibt und das auf Video festhaltet, gibt's eine Tutonaut-Kaffeetasse ;)

Mirco Lang

Freier Journalist, Exil-Sauerländer, (ziemlich alter) Skateboarder, Dipl.-Inf.-Wirt, Einzelhandelskaufmann, Open-Source-Nerd, Checkmk-Handbuchschreiber. Ex-Saturn'ler, Ex-Data-Becker'ler, Ex-BSI'ler. Computer-Erstkontakt: ca. 1982 - der C64 des großen Bruders eines Freunds. Wenn Ihr hier mehr über Open Source, Linux und Bastelkram lesen und Tutonaut unterstützen möchtet: Über Kaffeesponsoring via Paypal.freue ich mich immer. Schon mal im Voraus: Danke! Nicht verpassen: cli.help und VoltAmpereWatt.de. Neu: Mastodon

13 Kommentare

  1. Hi @ all.., bin eben bei der Recherche nach etwas zufällig auf Eure Seite gestoßen und evtl könnte Euer Fachwissen mir bei der Umsetzung eines vorhabens helfen.. Und zwar geht es um folgendes… Ich bin DJ und lege mit einem Controller und entsprechender Software auf. Leider sind die Midi Mapping Optionen, in dem Programm allerdings ziemlich eingeschränkt… Es handelt sich hierbei um Rekordbox 🙄 Bin jahrelanger Ex Traktor User gewesen und da ist jede erdenkliche Funktion mappbar. Nun ja,.. innerhalb der Software gibt es allerdings die Option, manche Funktionen auf die PC Tastatur per Hotkeys zu legen. Hier nun meine Frage, theoretisch ist es ja möglich, bestimmte Midisignale die der Controller sendet, in Tastatur Eingaben zu übersetzen. (mit Miditranslator und Virtuell erstellten Midi In und Out Ports ist es zwar prinzipiell möglich allerdings viel zu aufwendig und umfangreich!) Gibt es hierfür einen einfacheren Workaround, um eben mit reglern und/oder Knöpfen des Midicontrollers der Software im Prinzip vorzumachen, es wäre eine Tastatur Eingabe? Ich hoffe ich hab mein Anliegen einigermaßen verständlich rüber gebracht 😬 Wenn nicht, scheut Euch nicht zu fragen 😉 Ich danke im voraus schon mal für evtl. Unterstützung und lass Grüße da… Ein hoffnungsvoller DJ

    P.s. Ich lasse mal meine e-mail da, Kommunikation wäre auch darüber möglich… g_aemkei@yahoo.de

    1. Kein Problem: In meinem Beispiel oben habe ich ja über eine Taste das Programm Calc gestartet. Stattdessen könnte man aber auch einfach eine Tastatureingabe triggern – mit „send“.

      Hier mal das obige Beispiel mit auskommentiertem Calc-Aufruf – stattdessen wird STRG+A gesendet:

      ;Tastenzuordnung:
      listenNote(36, "foobar")
      
      ;Funkion:
      foobar(note, vel)
      {
          if (vel)
          {
          ; run, calc
          send, ^a
          }
      }
      

      Damit ließen sich übrigens auch ganze Makros basteln, also Kombinationen von mehreren Hotkeys – im Detail wird es dann aber manchmal frickelig.

      Die genaue Syntax für Send und Tastenkombinationen findest Du hier in der Doku.

  2. Guten Tag Zusammen, ich muss nochmals um Hilfe bitten bezüglich der Fehlermeldung „Cannot load library midi_in.dll“. Benötigt man für die Ausführung der Scripts und des dazugehörigen .dll-Files weitere Libraries, Treiber oder ähnliches? Ich hab mir das ZIP geladen und entpackt. Ich hab ein 64-bit Windows 10 System. Ich hab bis jetzt nut die Test-Scripts ausprobieren wollen. Keine Modifikation. Ich freu mich auf Eure Rückmeldung. BG Marius

    1. Puhh, das war jetzt frickelig … aber ich hab’s in den Innereien der DLL gefunden ;) Das Ding ist wohl mit Visual Studio 2012 erstellt worden und zum Ausführen solcher Programme wird das Paket Visual C++ Redistributable für Visual Studio 2012 benötigt. Auf meinem Arbeitsrechner war das „natürlich“ vorher schon drauf, da der seit Jahren mit allem Möglichen vollgestopft wird. Und Doku zu dem Projekt gibt es leider nicht wirklich, daher konnte ich nicht darauf hinweisen …

      Ich konnte das Problem auf einem 64-bit-Windows-11-Rechner nachstellen, nach der Installation funktioniert es nun. Es werden drei Downloads angeboten, richtig ist vcredist_x64.exe.

  3. Habe grade nochmal alles gecheckt, Windows 10 64 Bit Betriebssystem, 64 Bit Notepad ++ Version, alle midi4ahk Dateine gelöscht und erneut runtergeladen und entpackt. Selbe Fehlermeldung beim ausführen von midi_in_lib_test als auch MidiInDllTest. Beim ausführen von midi_in_lib kommen ganze 20 Fehlermeldungen auf verschiedenen Zeilen (referenz zum Code vermute ich).

    1. Dann fällt mir leider auch nichts mehr ein, zumal ich den Fehler hier partout nicht rekonstruieren kann, nicht mit Leerzeichen im Pfad, nicht mit schreibgeschütztem Verzeichnis, nicht mit ANSI-Kodierung oder Windows-Linebreaks … Process Monitor zeigt auch keine obskuren Abhängigkeiten oder dergleichen an. Ebenso Dependencies.

      1. Vielen Dank schonmal für die Hilfe! Ich habe nach ähnlichen Projekten gesucht, jedoch bin ich leider kein Stück weiter. https://github.com/genmce/AHK_Midi2Keypress das ist das einzige Programm welches mein Midi erkennt (hat einen kleinen Midi-monitor). Nur leider check ich nicht wie/wo ich Textbausteine auf bestimmte Midinoten „mappen“ kann, oder eigene Midirules defienieren kann.

      2. Das ist erfreulich simpel: Über den Monitor siehst Du, welche MIDI-Taste gedrückt wurde – als „data1“.

        Damit kannst Du dann sowas machen:

        }
        if (data1 = 60)
        run, calc.exe
        {
        

        Die vorgegebenen Beispiele findest Du ab Zeile 74. Hier nochmal im Bild:

        MIDI-Key öffnet calc.exe

        Nachtrag: Über data2 könntest Du zum Beispiel die die Werte 0 bis 127 von Schiebe- und Drehreglern verwenden.

  4. Hallo, Ich habe eine Frage und hoffe dass es angebracht ist sie hier zu stellen. Vorab muss ich sagen dass ich beim Programmieren (noch) nicht so durchsteige. Mein Ziel ist es Textbausteine in Microsoft Word 2019 über einen Midi Controller zu triggern. Ich habe die Einführung von ahk bevolgt und kann auch schon erfolgreich „u.U.“ durch „unter Umständen“ ersetzen lassen. Diese Anleitung habe ich genaustens befolgt, jedoch meldet mir das Programm wenn ich „midi_in_lib_test“ ausführen will: „Cannot load library midi_in.dll“. Muss ich den Suchpfad in „midi_in_lib“ ändern oder ist die .dll datei eventuell defekt?

    Danke im Vorraus und viele Grüße

    1. Nein, ändern solltest Du da nichts müssen – ich vermute mal, dass die DLL-Datei und Dein Skript nicht im selben Verzeichnis liegen. Das Skript „midi_in_lib_test.ahk“ lädt die Datei „midi_in_lib.ahk“ und die wiederum die „midi_in.dll“, und alle gehe davon aus, im selben Verzeichnis zu liegen.

      1. Selbes Verzeichnis bedeutet selber Ordner? Weil das sind sie, ich habe den Zip-Ordner vom eingebetteten Gitup-Link entpackt und direkt die obenstehenden Änderungen in „midi_in_lib_test“ vorgenommen.

      2. Ja, Ordner=Verzeichnis. Versuch mal, ob die originale midi_in_lib_test.ahk funktioniert; oder die MidiInDllTest.ahk. Falls nein: Hast Du vielleicht ein 32-Bit-Windows? Nachzulesen unter Systemsteuerung/System. Als 64-Bit-DLL würde sie dann nicht laufen.

        Gerade nochmal heruntergeladen und es funktioniert problemlos unter 64-Bit-Windows-10.

    2. Lange her, aber falls noch relevant und falls noch Benachrichtigungen bei Dir ankommen: Die Lösung scheint eine fehlende Visual-C-Laufzeitumgebung sein – Links und nähere Infos stehen im Artikel-Update.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schaltfläche "Zurück zum Anfang"