Das ewige Thema: MIDI oder GO über MIDI steuern

  • Hallo liebes Forum,

    nachdem es eine ganze Weile ruhig um mich war, es war arbeitstechnisch einfach zuviel los, bin ich wieder intensiver am Start. Ganz untätig war ich zwischenzeitlich nicht, denn ich habe GO unter Verwendung eines fast schon historischen Edirol UA-25 zum Laufen bekommen und es spricht sogar mit meiner Dienstorgel. Dabei sind Viscount Orgeln und ihre Derivate (Benedikt) ja zuweilen als etwas zickick im Hinblick auf ihre MIDI-Konfiguration berüchtigt.


    Aber ich erzähle die Geschichte gerne einmal von Anfang an:

    Da ich es mit einem günstigen USB-Midi-Kabel nicht geschafft habe GO und meine Orgel zu verbinden, habe ich mich nach einem etwas solideren Interface umgesehen.
    Um einfach nur mal rumzuprobieren waren mir die aktuellen Geräte allerdings etwas zu teuer und ich hatte auch kein Gerät im Umfeld, welches ich einfach mal hätte ausleihen können.
    Gleichzeitig hätte ich es einem Händler gegenüber unfair gefunden, wenn ich nur auf Verdacht ein Gerät bestelle,
    2 Tage probiere und es dann zurückschicke, mit dem Erfolg, dass der Händler die Versandkosten am Hacken hat und das Teil außerdem als B-Ware verkaufen muss.

    Also habe ich angefangen die Kleinanzeigenportale abzugrasen und bin dann auf o.g. Interface gestoßen.
    30€ erschienen mir als akzeptablen Einsatz für das Experiment und so habe den Kameraden dann gekauft.
    Im Nachhinein muss ich dem Verkäufer für seinen preislichen Realismus sehr dankbar sein, denn wenn ich, mit inzwischen mehr Erfahrung und Durchblick sehe, welche Phantasiepreise teilweise für so einen Edirol-UA25 aufgerufen werden, obwohl nicht mehr in der Herstellung und mindestens mehrere Jahre alt ohne Win10 Treiberunterstützung), so freue ich mich an einen ehrenwerten Verkäufer geraten zu sein.

    Nach einiger Recherche war es mir möglich den Edirol doch mit Treibern zu versorgen, die zwar eigentlich nicht für Win10 gedacht sind, aber dennoch akzeptiert werden und funktionieren.
    Alles angekabelt, GO gestartet und das Midi-Setup mit Autodetect durchgeführt, und siehe da: Alles wurde anstandslos erkannt und funktioniert.

    Bei großen Samplesets und vielen gezogenen Registern kommt es zwar irgendwann zu Latenzproblemen, aber das ist wohl eher den limitierenden 4 GB meine Lappis geschuldet, der inzwischen auch schon 7 Jahre alt ist.

    Aber nun mal zu meinem eigentlichen Anliegen:

    Ich habe feststellen müssen, dass die Bedienung von GrandOrgue mittels Lappi auf der Orgelbank nun nicht wirklich ergonomisch ist, und auch keine zügigen Registerwechsel zulässt.
    Ein ausreichend großer Touchscreen steht aus Platz und Kostengründen nicht zur Disposition, und ich bin auch eher der haptische Typ, der gerne richtige Knöpfe und Züge zur Bedienung mag.

    Also soll eine Steuerkonsole für GrandOrgue her. Natürlich selbst gebaut.
    Da ich schon geraume Zeit auf dem Arduino-Sektor aktiv bin, habe ich mir natürlich einen Arduino als Arbeitsgrundlage herausgepickt. Hier gibt es inzwischen eine sehr gut dokumentierte Library, welche in der Lage ist Midi-Befehle direkt zu erzeugen, ohne zuvor den gewünschten Befehl händisch in binär dargestellte Bytes umwandeln zu müssen.

    Hier sind z.B. Befehle wie
    MIDI.sendNoteOn(42, 127, 1);
    möglich, der einen NoteOn Befehl für die Note 42 mit einer Velocity von 127 auf Kanal 1 erzeugt und über die serielle Schnittstelle verschickt.

    Hardwareseitig besteht jetzt nur noch das Problem dem PC und damit GrandOrgue mitzuteilen, was man von im möchte. Problematisch ist hier, dass der Arduino vom PC nicht als Midi-Device wahrgenommen wird. Es ist zwar ohne Probleme möglich über USB die seriellen Daten zu empfangen und in einem Terminalprogramm sichtbar zu machen, aber damit sind die Daten noch nicht in GrandOrgue angekommen bzw. GrandOrgue hat seine Aktionen auch noch nicht rückmelden können.
    Hier muss also ein geeigenter Weg gefunden werden.

    Ich sehe hier folgende Lösungsmöglichkeiten, die ich gerne mit euch diskutieren wollte, bevor ich mehr Zeit in die Entwicklung meiner Steuerbox stecke.

    1. Softwarelösung
    Hier gibt es Tools wie die Hairless Midi to Serial Bridge, die seriell empfangene Daten im Midiformat an die entsprechende Software weiterreichen, indem sie ein Midi-Gerät emulieren.

    2. Hardwarelösung
    a) Hacken eines billigen USB-to-Midi-Kabels
    Die Idee hierbei ist die, ein günstiges USB/Midi-Kabel zu knacken, dessen Midi-In mit den erzeugten Midi-Daten zu füttern und den eingebauten HID-Chip zu nutzen, dass Windows ein an den USB-Port angeschlossenes USB-Midi-Gerät erkennt, welches dann hoffentlich in Grandorgue neben dem Edirol UA-25 auftaucht.

    b) Dem Arduino eine Midibuchse-Verpassen und dann ein Midi-Signal an den Edirol schicken, der dieses Signal zusammen mit den Signalen vom Spieltisch über USB einspeist und an GO schickt. Da gibt es inzwischen günstige Shields, die auch mit einem Optokoppler galvanisch getrennt sind.

    c) Verwendung eines Teensy, der von Haus aus ein Midi to USB Interface hat. PC-seitig würde dann auch ein 2. USB-Midi Gerät an einem der USB-Ports auftauchen und hoffentlich von GO erkannt und akzeptiert.

    Die Hardwarelösungen erscheinen mir als am tragfähigsten, denn hiermit erspart man sich die Midi-Kette aus mehreren Geräten.
    Lösung 1 würde sicherlich auch noch gehen, sie blockiert zwar den USB-Port des Arduino dauerhaft, müsste also für Programmierarbeiten immer wieder stillgelegt werden, allerdings wäre da ja kein wirklicher Nachteil, da man ja nicht gleichzeitig Orgelspielen und programmieren will.
    Allerdings missfällt mir der Gedanke an eine weitere zwischengeschaltete Software mit möglichen Fehlerquellen, die ich nicht mit dem Multimeter diagnostizieren kann.


    Daher hier jetzt meine Frage an unsere GO-Psychologen: Mit welcher Lösung käme denn GO am ehesten klar?

    Aus dem Bauch heraus tendiere ich dazu eine Lösung zu wählen, welche die Midi-Daten über USB anliefert und als Midi-Device im Gerätemanager auftaucht. Nur müsste GO das eben handlen können.

    Bei Verwendung eines Arduino Mega stehen für kleines Geld 54 digitale I/O Pins zur Verfügung, was immerhin etwas über 20 Registertaster mit Rückmelde-LED ermöglichen würde. Durch ein paar Tricks könnte man das bis in den 3-stelligen Bereich hochtreiben, aber das ist ja nicht Ziel der Übung.

    Gerade wg. der o.g. Anforderungen.


    Auf eure Beiträge und Anregungen freue ich mich

    VG
    Toothbruhs


    Sollte aus dem Projekt etwas (hoffentlich) Brauchbares werden, würde ich das "Kochrezept", sowie die entstehende Software natürlich mit der Community teilen wollen. Ist doch klar. Aber erstmal gucken, ob das überhaupt was wird.

  • Als direkte Lösung müsste ich sagen: Nimm das "richtige" Arduino-Model - mit einen Chip, der einen echten USB Controller integiert hat und nicht nur einen USB-Seriell Wandler.

    https://www.arduino.cc/en/Tutorial/MidiDevice

    Hier gibt es einen Thread darüber (sogar mit Source-Code):
    http://www.organforum.com/forums/forumdi…-Virtual-Organs

    PS: Den Beitrag zu suchen, bin ich im Moment zu faul

    PPS: Generell wirst du bei Selbstbau USB-MIDI Interfaces unter Linux mehr Freude haben, da es generische Treiber mitbringt während unter Window jeder Hersteller nur Treiber für seine Geräte schreibt.

    • Offizieller Beitrag

    Hallo Toothbrush,

    die Steuerkonsole würde ich als eigenständiges Midi-Gerät betrachten. Kann man einem Arduino nicht irgendwie eine Midi-Schnittstelle verpassen? Es gibt doch sicher schon Routinen, die Midi über 2 I/Os realisieren können. Da braucht es dann nur noch ein paar elektronische Bauteile und eine Midibuchse.
    Allerdings scheint das Edirol nur einen einzigen Midi-Eingang zu haben. Demnach würde ich halt für 5 - 6 € noch so ein USB-Midi-Kabelinterface schießen. :)

    Seriell RS232 oder anders in den PC zu fahren ist doch frühes Mittelalter... :D

    Gruß Michael

  • Zitat

    Original geschrieben von mike

    Hallo Toothbrush,

    die Steuerkonsole würde ich als eigenständiges Midi-Gerät betrachten. Kann man einem Arduino nicht irgendwie eine Midi-Schnittstelle verpassen? Es gibt doch sicher schon Routinen, die Midi über 2 I/Os realisieren können. Da braucht es dann nur noch ein paar elektronische Bauteile und eine Midibuchse.
    Allerdings scheint das Edirol nur einen einzigen Midi-Eingang zu haben. Demnach würde ich halt für 5 - 6 € noch so ein USB-Midi-Kabelinterface schießen. :)

    Seriell RS232 oder anders in den PC zu fahren ist doch frühes Mittelalter... :D

    Gruß Michael

    Hallo Michael,

    danke für deinen Beitrag. In der Tat scheinen nur wenig wirklich gerade Wege vom Arduino in den PC zu führen.


    Meiner Meinung nach muss die Steuerkonsole dabei immer als eigenständiges Gerät gesehen werden.

    Es gibt die Möglichkeit dem Arduino eine Midi-in und Midi-out Buchse zu verpassen. Damit könnte man ihn in den Midikreis zwischen Orgel und Edirol hängen.

    Die andere Variante wäre es, dem Arduino eine native Midi-Schnittstelle via USB zu verpassen, also quasi ein intelligentes USB-Midi-Kabel aus ihm zu machen.

    Dies kann, nach jetziger Recherche, auf 3 Arten geschehen:

    1. Entweder ich besorge mir ein USB-Midi- Kabel, messe das durch und speise die Mididaten vom Arduino einfach in die Midianschlüsse ein. Das Kabel würde sich dann USB-seitig als USB-Midi-Device beim PC anmelden und wäre mit GO oder HW oder was auch immer als Gerät ansprechbar.
    Vorteil: Der Arduino bleibt immer Arduino und ist über seinen USB-Port jederzeit umprogrammierbar, und jeder Arduino ist verwendbar. Ich schiele hier in Richtung des Mega2560, der eine hübsch große Anzahl I/O-Pins liefert.

    2. Flashen des USB-Chips auf dem Arduino
    Die Arduinos sind, bis auf wenige Ausnahmen, nicht nativ USB-fähig. Daher haben sie meistens einen gesonderten Serial-to-USB Chip verbaut, der die USB-Schnittstelle abbildet.
    Die Bandbreite der verbauten Chips reicht vom CH340, den die meisten Chinaklone verwenden, über den FTI-Chip, der häufig auf den originalen Boards verbaut wurde, oder den Atmel 16U2.

    Hier kann man ansetzen, da sich der Atmel 16U2 mit einer neuen Firmware flashen lässt und sich dem PC gegenüber dann als USB-Midi-Device ausgibt. Hier muss man beim Kauf seines Arduino gezielt nach Boards mit diesem USB-Chip suchen.

    Vorteil hier: Arduino Uno und Mega verfügbar
    Nachteil: Nach dem flashen keine USB Kommunikation zur Programmierung des Arduino mehr möglich, also ein fetter Stolperstein während der Entwicklung wenn die Software noch oft korrigiert werden muss. Um den Flash rückgängig zu machen benötigt man außerdem einen Programmer oder einen 2. Arduino, der als Programmer fungiert.

    3.Arduino mit nativer Midi-Unterstützung
    Hier sind 2 Optionen zu nennen: Der Arduino Leonardo oder Pro Mini bzw. der Ableger Teensy 2.0. Hier sind jeweils der ATmel 32u4 verbaut, die über eine native USB/Midi/HID-Schnittstelle verfügen.
    Diese Boards können sich über USB als Midi-Device ausgeben. Für die Arduinos ist das aber auch eine gewisse Pfuscherei, weil man die einfach mit der Firmware des Teensy 2.0 befeuern muss.

    Vorteil: Direkt über USB anzuschließen, kein Umweg über Midibuchsen
    Nachteil: Auch wieder ein gewisser Umweg.

    Als (inzwischen) verfügbare Alternative bietet sich die MIDIUSB-Library für den Arduino an. Die Library nutzt Teile der Midi-Library und bietet so eine USB gestützte Softwarelösung an.

    Leider ist es in meinen Augen recht aufwändig damit zu hantieren.

    Ich habe mich nach reiflicher Überlegung inzwischen für folgenden Weg entschieden:

    Arduino Leonardo mit Teensy-Flash
    für die ersten Tests und den Entwurf der Software.
    1. hatte ich noch einen Leonardo rumfliegen
    2.ist die Midi-Library des Teensy sehr komfortabel, was die Funktionen und Befehle angeht

    Ein sendNote-Befehl sieht z.B. so aus:

    [orange]usbMIDI.sendNoteOn(note, velocity, channel);[/orange]

    wobei die Eingabe der Wert als Ganzzahl und nicht Hex oder binär erfolgt.

    Wenn die Steuerkonsole mit dem "Flickwerk" erstmal läuft, würde sich auch eine etwas größere Investition in Hardware lohnen.
    Der aktuelle Teensy 3.5 liegt bei etwa 30€ und würde die endgültige Konsole befeuern. Während der Entwicklung wollte ich aber diese Investition erstmal nicht tätigen, da dies mein erstes Projekt mit Midi und Datenaustausch mit dem PC ist, und ich keine ungenutzte Hardware rumliegen haben wollte, wenn ich doch irgendwo hängenbleibe.

    Eine weitere Baustelle wird die Konsole selbst. Wie ich die Bedienelemente gestalte, muss ich noch sehen, aber im Augenblick kristallisieren sich Taster mit weißer Led-Beleuchtung heraus, ähnlich den Rundtastern, wie man sie von Spielautomaten kennt.
    Das ist jetzt zwar nicht richtig Orgel-like, aber da die Bedienkonsole ja irgendwo am Spieltisch unterkommen muss, wird sie sicher nicht so ergonomisch angeordnet sein können, wie die Registerzüge/-wippen. Daher scheinen mir 30-40mm Taster eine gute Idee, um für eine möglichst hohe Treffsicherheit beim Registrieren zu sorgen.


    VG
    Toothbrush