Forum: Mikrocontroller und Digitale Elektronik MIDI-Befehle über VISUAL-STUDIO vom PC an ein MIDIsteuerbares Gerät senden


von Edel (edel)


Lesenswert?

Hallo zusammen,

ich bin auf der Suche nach nützlichen Tips zu folgendem Problem:

Ich habe ein Programm in Visual-Studio erstellt, dass ein 
Theater-Textbuch scrollt, auf dem sämtliche Technik-Einsätze vermerkt 
sind.
Die Programm-Oberfläche hat Buttons für DMX-Szenen (steuere ESA2 mit 
simulierten Tasten-Befehlen), Sound-Einspielungen (integrierte 
Mediaplayer) und Muten/Entmuten von den Headsets der Darsteller.
Für letzteres möchte ich (über einen Button des Programms) MIDI-Befehle 
an ein Behringer XR18 senden.
Wie bekomme ich vom PC am einfachsten (direkt über das VB-Programm, oder 
per Ansteuerung einer weiteren Software) MIDI-Befehle gesendet? :/


Kann jemand helfen?

Gruß, edel

von Andi (chefdesigner)


Lesenswert?

Ich würde sagen, über die serielle Schnittstelle und die entsprechende 
WinAPI. Willst du in C++ programmieren oder in Net oder Python? Ich hab 
es selbst noch nicht gemacht, würde aber auch so etwas benötigen, um 
meine Effektgeräte zu steuern. Ich hatte mir auch schon verschiedene 
proprietäre MIDI-Libs angesehen, u.a. die vom MIt und Standford, aber 
nicht damit gemacht.

Für DMX wirst du was Eigenes brauchen, weil das 8 Bit sind und eine 
andere Datenrate.

Meine Versuche bezogen sich damals auf WinXP ff - inzwischen dürfte es 
da auch etwas in höheren Sprachen geben.

von Thomas Z. (usbman)


Lesenswert?

mmsystem ist dein Freund. Die Multimedia API existiert mindestens seit 
W98.

Braucht dann halt passende Midi HW z.B. für USB.

: Bearbeitet durch User
von Edel (edel)


Angehängte Dateien:

Lesenswert?

Hallo,

auf jeden Fall schon mal vielen Dank für die Ansätze.
Ich denke, es ist gut, wenn ich meine Aufgabe nochmal etwas genauer 
schildere:
----------------------------------------------------------------------

Aus einem VS2019 (VB)-Programm heraus auf Button-Druck einen MIDI-Befehl 
an ein USB=>MIDI-Kabel ausgeben (XR18-Steuerung)

Ich habe eine Oberfläche in VS2019 (VB) programiert, mit der ich die 
Technik-Arbeit in kleinen Theatern erleichtern möchte. (Screenshot hängt 
dran)
Das Textbuch mit entsprechenden Einträngen wird als PDF-Datei gescrollt. 
Die entsprechenden Technik-Aufgaben (Sound, Licht, Nebel, etc) werden 
dann über entsprechende Buttons 'abgefahren'.

Bisher geht problemlos das Abspielen von Sound-Dateien (über Mediaplayer 
gelöst) und das Steuern eines externen DMX-Programms (ESA2), indem ich 
bei einem Buttondruck einen SendKeys-Befehl an das Programm schicke.
Auch Kombi-Buttons, die dann mehrere Sachen gleichzeitig machen 
funktionieren bestens.
ABER !!!
Mein größtes Problem ist die Steuerung des digitalen Mischpultes, um die 
Headsets der Darsteller zu muten/entmuten.
Ich möchte sog. Stage-Mixer ansteuern, - also welche, die ihre 
Bedienoberfläche auf dem Computer haben.
Als Versuch und Beispiel arbeite ch mit einem XR18 von Behringer.
Die Bediensoftware auf dem Computer kann allerdings nicht über 
'SendKeys' bedient werden.
Allerdings kann das Mischpult über MIDI-Befehle gesteuert werden. Das 
soll mein Ziel sein.

Es soll, wenn möglich so gehen: Meine Oberfläche (Button-Klick) => 
Sendet MIDIBEFEHL (Kanal, Wert, Value) über USB=>MIDI-Kabel an das 
Mischpult

Wie bekomme ich nach Butto-Klick den MIDI-Befehl in das Kabel?

Ich bin auch für Teillösungen, die mich der Lösung näher bringen sehr 
dankbar.

Danke im Voraus, Gruß, edel

von Thomas Z. (usbman)


Lesenswert?

schau mal da

https://sourceforge.net/projects/m-m/

Das ist zwar c++ aber die SendMessage() Funktion ist das was du 
brauchst.

von C-hater (c-hater)


Lesenswert?

Thomas Z. schrieb:
> schau mal da
>
> https://sourceforge.net/projects/m-m/
>
> Das ist zwar c++ aber die SendMessage() Funktion ist das was du
> brauchst.

Eher nicht. Er will das in VB.net programmieren. Das hilft ihm C++- und 
Lua-Scheiß erstmal kein bissel.

Was er braucht, ist ein .net-Wrapper für das mmsystem-API (gibt es wohl 
nicht in brauchbarer Qualität, müsste er also selber schreiben). Und 
dann die Kompetenz, diesen zu benutzen.
Der Ansatz über das mmsystem-API wird also für ihn wohl eher 
aussichtslos sein...

Aber es gibt noch eine Alternative: das DirectShow-API. Zumindest für 
den Fall, dass der PC der Master des MIDI-Systems ist, sollte auch das 
reichen. Und dafür gibt es einen durchaus brauchbaren .Net-Wrapper. Die 
Kompetenz, den dann passend zu benutzen, wird allerdings nicht mit dem 
Download auf die Platte automatisch in's Gehirn des Programmierers 
gespült. Da muss man sträflich Doku lesen. Und noch viel Programmieren, 
um um die Fehler des API und des Wrappers herum lavieren zu können. 
Vermutlich wohl eher auch nix für den TO...

von Klaus H. (klummel69)


Lesenswert?

Wenn die Stage-Mixer OSC per Ethernet können (das XR18 kann das), kannst 
du das Muten darüber steuern.
Das XR18 empfängt Kommandos über UDP, Port 10024.

Falls Du die Ethernet Schnittstelle nicht direkt programmieren willst, 
geht ggf auch ein Kommandozeilenprogramm: z.B. 
https://github.com/yoggy/sendosc

von Edel (edel)


Lesenswert?

Jo, -

C-Hater - zunächst mal danke für deine Wertschätzung.
Wenn du sowieso nicht glaubst, dass deine Hilfe für mich sinnvoll ist, 
lass sie doch einfach. Haben wir beide was von.

Klaus H.,
jo, - diese Richtung wäre toll.
Allerdings muss mein XR über Router angeschlossen sein, weil während der 
Shows unbedingt mit Tablet im Raum korrigiert werden muss.
Und schwups - ist die Ethernet-Buchse belegt.
Oder bekomme ich die Signale trotzdem irgendwie ans XR?

Gruß, edel

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Edel schrieb:
> Und schwups - ist die Ethernet-Buchse belegt.

Aber wenn der XR18 am Router hängt, dann kannst du doch den PC auch in 
das Routernetzwerk bringen. Der XR18 kann 3 Modes im Netzwerk: Ethernet, 
WiFi Client oder Access Point. Die ersten beiden integrieren XR18 in ein 
vorhandenes Netz - Nummer drei ist für Standalone Betrieb.

von Edel (edel)


Lesenswert?

....aber natürlich.
Ich werde der Idee nachgehen. :-)
Ich melde mich, wenn es dazu Neues gibt.

vielen Danke :-D

von Klaus H. (klummel69)


Lesenswert?

Edel schrieb:
> Allerdings muss mein XR über Router angeschlossen sein, weil während der
> Shows unbedingt mit Tablet im Raum korrigiert werden muss.

Das geht problemlos. Ich hatte live schon 2 PCs per Ethernet plus 2 
Tablets per WLAN verbunden. Da geht noch mehr.
Wichtig: nutze nicht das im XR18 eingebaute WLAN, das ist Mist. Wenn du 
WLAN brauchst nimm einen Router mit WLAN, ich nutze eine alte Fritzbox.

Man kann auf einem PC auch gleichzeitig die X-Air Software nutzen und 
mit einem anderen Programm OSC Kommandos senden. Sollten halt nicht alle 
gleichzeitig Muten/Unmuten. Aus Erfahrung gewinnt dann immer das letzte 
Kommando 😊

Übersicht der M-Air OSC Befehle: 
https://behringer.world/wiki/doku.php?id=x-air_osc

Zum Muten von Channel 1 sendet man z.B. /ch/01/mix/on mit dem 
Integer-Parameter 0

von Andi (chefdesigner)


Lesenswert?

Ist das alles betriebssicher, was das übers Netz geschickt wird? Wie 
sieht es denn mit Verzögerungen und Reaktionszeiten aus?

Wäre drahtloses MIDI nicht einfacher?

Man lädt eine beliebige DAW auf das tablet und nutzt Mackie/HUI 
Protokoll.

von Klaus H. (klummel69)


Lesenswert?

Andreas F. schrieb:
> Ist das alles betriebssicher, was das übers Netz geschickt wird?

Unproblematisch. Die Ethernet Schnittstelle nutzt 100Mbit/s (oder mehr).
Bisher hab ich keine kritischen Verzögerungen gehabt.
Midi nutzt 31kBit/s zur Datenübertragung. Drahtloses Midi (ich meine es 
nutzt hauptsächlich Bluetooth) gibt am Stecker wieder die gleiche 
Datenrate aus.

Ethernet hat ein paar Vorteile:
* Größere Kabellänge als MIDI
* Etwas mehr Prüfdaten/CRCs
* Alle Stecker sind gegen Abziehen gesichert. Das haben weder USB noch 
Midi.

Problem sehe ich hier eher die Software. Die sollte robust sein und 
stabil laufen. Unerklärliches Verhalten und Abstürze während einer 
Veranstaltung erhöhen den Adrenalin-Pegel.

von Stefan F. (Gast)


Lesenswert?

Klaus H. schrieb:
> Midi nutzt 31kBit/s zur Datenübertragung

Allerdings wird bei Midi der Ton in dem Moment gestartet, wo der Befehl 
ankommt. Ein kurzer Delay von 100ms würde sich da schon sehr störend 
auswirken. Allerdings sind die Delays im Ethernet seit Ablösung der Hubs 
durch Switche typischerweise im einstelligen ms Bereich. Deswegen geht 
das inzwischen so unkompliziert.

von Klaus H. (klummel69)


Lesenswert?

Stefan F. schrieb:
> Allerdings wird bei Midi der Ton in dem Moment gestartet, wo der Befehl
> ankommt.

Es geht hier um Muten/Unmuten von Mikros, was sonst händisch der Mann am 
Mischpult direkt drückt. Da kommt es IMHO nicht auf Millisekunden an.

Beitrag #7369648 wurde von einem Moderator gelöscht.
Beitrag #7369862 wurde von einem Moderator gelöscht.
von Frank O. (fop)


Lesenswert?

Oder ein ganz anderer Ansatz : erzähle Windows nicht, dass es MIDI ist. 
Nutze einen USB-olle asynchrone serielle Schnittstelle- Wandler. MIDI 
unterscheidet sich ja nur in 2 Dingen vom alten COM-Port :
- der Baudrate 31,25 kBaud sind abseites von MIDI absolut unüblich und 
waren mit den damaligen Schnittstellenbausteinen und den dazugehörigen 
Quarzen unmöglich. Mittlerweile sollte dass kein Problem mehr sein.
- den Bustreibern. V.24 benutzte +12V bzw. -12V gegen Masse. MIDI nutzt 
5V TTL Pegel mit 220 Ohm in Reihe gegen +5V mit 220 Ohm in Reihe.

Von FTDI gibt es z.B. Kabel mit deren Wandlerchip in einem USB-Stecker 
versteckt. Am anderen Ende des Kabels sind lauter offene Enden. +5V USB 
und TxD geschnappt, zwei 220 Ohm Widerstände und eine 5-polige 
DIN-Buchse dran und es kann los gehen.

Wenn Du auf Nummer sicher gehen willst, kannst Du auch noch ein leicht 
tauschbares, robustes Treiber IC dazwischen setzen. ESD oder 
Unachtsamkeiten grillen dann erstmal nur das Treiber IC.

Wenn Du nicht weißt, was geschickt werden muss, ist auch noch die 
Beschaltung mit dem Optokoppler an RxD fällig, um die Bytes von anderen 
Geräten empfangen zu können. Werden vermutlich irgendwelche 
SysEx-Kommandos sein.

von Andi (chefdesigner)


Lesenswert?

Stefan F. schrieb:
> Allerdings wird bei Midi der Ton in dem Moment gestartet, wo der Befehl
> ankommt. Ein kurzer Delay von 100ms würde sich da schon sehr störend
> auswirken. Allerdings sind die Delays im Ethernet seit Ablösung der Hubs
> durch Switche typischerweise im einstelligen ms Bereich. Deswegen geht
> das inzwischen so unkompliziert.

Darauf wollte ich hinaus. Ein Delay von 10ms ist bei Tönen schon völlig 
unakzeptabel, auch weil es uneinheitlich ist. Die Frage ist auch 
weniger, bo der Hub oder der Switch das kann, oder die Bandbreite nicht 
reicht. Es sind eher solche Sachen wie Windowstreiber und Buffer, die 
die Angelegenheit in die Länge ziehen.

Ich nehme aber an, dass in vorliegenden Fall, wo nur Lichter an und 
ausgehen sollen, einige 100ms rein Problem sein sollten. Ich frage mich 
nur, warum das nicht vollständig mit DMX gelöst wird. Wir sind mit der 
Band öfters bei Auftritten unterwegs und der Lichtmann steuert das alles 
von einem Pult aus. Inklusive Stagemixer wie sie im Forum auch schon 
angesprochen wurden.

Es gibt eigentlich nur den einen Fall der Steuerung von Effektgeräten, 
weil die auf die Note exakt umgesetzt werden müssen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Andreas F. schrieb:
> wo nur Lichter an und
> ausgehen sollen, einige 100ms rein Problem sein sollten. Ich frage mich
> nur, warum das nicht vollständig mit DMX gelöst wird.

Mikrofone muten über DMX? Hier gehts nicht um Lichter, sondern um die 
Fernsteuerung eines Stagemixers für Audio. Das sind diese kleinen 
Dinger, die du mit dem Tablet aus dem Zuschauerraum steuern kannst.
Die Muteknöpfchen sollen aus einem Skript kontrolliert werden.

von Klaus H. (klummel69)


Lesenswert?

Matthias S. schrieb:
> Mikrofone muten über DMX? Hier gehts nicht um Lichter, sondern um die
> Fernsteuerung eines Stagemixers für Audio. Das sind diese kleinen
> Dinger, die du ...

Versteh nicht ganz warum du gehässig wirst. So etwas wird gemacht.
Steuerung von Audio über DMX - OSC.

Siehe z.B. https://www.lightjams.com/osc.html

Alles eine Frage der Anforderungen.

von Edel (edel)


Lesenswert?

Hallo wieder zusammen,

ich finde es sehr nett, wie ihr euch des Themas annehmt und ich bin in 
alle Richtungen gegangen.
Wenn ihr meine gepostete Bedienoberfläche im ursprünglichen Text seht, 
könnt ihr sehen, dass es um eher nicht ganz so professionelles geht.
Das ganze soll auf einer mittleren Freilichtbühne (hat nur einen 
7"-Container als FOH - also wenig Platz) und auf meiner mobilen Bühnen 
(ebenfalls sehr klein) laufen.
Darum also die Idee, möglichst alles von einer Person und von einem 
Rechner aus zu steuern.
Licht und Sound bisher kein Problem.
Nur das XR18 anzusteuern klappt bisher nicht.
Mit OSC ist mir die Sache ehrlich gesagt schon wieder zu hoch.
Das XR über MIDI ansteuern wäre schon meine Intention.
Aber ich habe es noch nicht geschafft, die Mute-MIDI-Signale (über ein 
USB-MIDI-Interface) an das XR zu bringen.
Am besten wäre einer von folgenden beiden Wegen:
1. Ein möglichst einfaches Programm, dass MIDI-Befehle auf Tastendruck 
sendet (das ich dann über meine Anwendung fremd-steuern kann / mach ich 
mit der Lichtsteuerung ESA2 auch so)
2. Eine möglichst eifache Programmstruktur zum direkten Senden der 
MIDI-Befehle über das MIDI-Interface ans XR. (NUR muten und entmuten)

Es tut mir leid, wenn ich mich nicht so richtig klar ausdrücke, damit 
ihr wisst, wass mein Wunsch ist.
Vielleicht ist es jetzt klarer geworden.

Nochmals vielen Dank und Gruß in die nette Runde,

edel

von Thomas Z. (usbman)


Lesenswert?

Vielleicht kommst du ja mit Midi-OX weiter. Das Programm ist zwar alt 
aber ist skriptfähig. Du must halt irgendwie die COM Interfaces basteln.

COM = Comon Object Model

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Angehängte Dateien:

Lesenswert?

Frank O. schrieb:
> Oder ein ganz anderer Ansatz : erzähle Windows nicht, dass es MIDI ist.
> Nutze einen USB-olle asynchrone serielle Schnittstelle- Wandler. MIDI
> unterscheidet sich ja nur in 2 Dingen vom alten COM-Port :

D.h. du erwartest, dass sich der UART-Adapter auf die Schnittstelle 
synchronisiert? Mit welcher Frequenz würdest du operieren wollen?

Ich hatte meinen frühen MIDI-Receivern dieses Interface verpasst. 
Übersetzt die gängigen 38400 auf MIDI.

Man nehme ein 24 MHz Quarz und erzeuge sich durch Teilen mit den 
Divisoren 625 sowie 768 die zueinander kompatiblen Frequenzen von 38400 
und 31250,
sowie zwei downsampler die davon getrieben werden und füttere beide über 
ein selbsteinstellendes Flanken-Detektor-Delay mit den eingehenden Bits.

Diese schiebe man in ein FIFO/Register und puste sie mit dem anderen 
Takt hinaus. Beim schnellen Eingangstakt kann man sofort nach Erkennen 
des Start-Bits loslegen- beim langsamen Takt nach einer Pufferzeit von 3 
oder 4 Bits, um  das Ende nicht zu überrennen.

Damit entstehen auf der schnellen Seite beim Weitersenden kleine 
Datenpakete mit Lücken und beim Empfangen muss darauf geachtet werden, 
dass Lücken im 38400er Takt enthalten sind.

Die Latenz ist bei gutem timing im Bereich 1 Bit -> 50 us

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Klaus H. schrieb:
> Versteh nicht ganz warum du gehässig wirst.

Was ist daran gehässig? Du hast einfach das erste Posting nicht gelesen, 
wo der TE sagt, was er braucht. Ein XR18 hat nun mal kein DMX, sondern 
TCP/IP über Ethernet und WLAN sowie MIDI.

: Bearbeitet durch User
von J. S. (engineer) Benutzerseite


Lesenswert?

Klaus H. schrieb:
> Steuerung von Audio über DMX - OSC.
Viele Licht-Steuerpulte sind mit MIDI gekoppelt. Die meisten auf Input, 
nehmen es als Rythmus- und Steuerinfo. Es gibt aber auch welche, die die 
Controller auf MIDI übersetzen.

Mein Controller macht das auch, fasst dazu 8 MIDI-Kanäle zu einem 8-fach 
Multiplex mit 250kbps zusammen und sendet es als DMX. Umgekehrt kann er 
ein Universum auf 2x8 MIDI-Kanäle in Echtzeit routen. Hat auch ein Kunde 
gekauft und in seinem Gerät drin.

Der Vorteil ist, dass die modernen Pulte es erlauben, ganze Szenarien 
abzuspeichern und abzuspielen. Die Überetzung geht runter bis auf 
einzelne Bits, die Relais schalten. Da sind Licht-, Audio- und sogar die 
Bühneneffekte mit Vorhangkontrolle mit enthalten, teilweise die 
Lasersteuerung für 3D-Lasershows. Auch einige Vidiowalls lassen sich 
damit kontrollieren. Ein Kunde von mir macht solche Installationen.

So kann letztlich ein Person alleine eine ganze Opernaufführung 
abreissen. Spart Personal bei der Aufführung.

von Christian M. (christian_m280)


Lesenswert?

Matthias S. schrieb:
> TCP/IP über Ethernet

Warum dann nicht da drüber?

Gruss Chregu

Beitrag #7375863 wurde vom Autor gelöscht.
von Frank O. (fop)


Lesenswert?

Jürgen S. schrieb:
> Man nehme ein 24 MHz Quarz und erzeuge sich durch Teilen mit den
> Divisoren 625 sowie 768 die zueinander kompatiblen Frequenzen von 38400
> und 31250,
> sowie zwei downsampler die davon getrieben werden und füttere beide über
> ein selbsteinstellendes Flanken-Detektor-Delay mit den eingehenden Bits.
>
> Diese schiebe man in ein FIFO/Register und puste sie mit dem anderen
> Takt hinaus.

Das geht. Klingt aber nach einigem Aufwand. Ich kenne Bastelanleitungen, 
da wurde einfach der Quarz des UARTs gegen einen mit einer anderen 
Frequenz getauscht, so dass danach die 31250 Baud direkt einstellbar 
waren.

Bei den heutigen USB auf RS232 Wandlern vermute ich, dass sie den Takt 
für die RS232 per PLL-Synthesizer aus den 24 MHz USB Takt gewinnen. 
Damit sollte dann 31,25 kBaud direkt machbar sein. Bei FTDI gibt es 
Anleitungen, was man lustiges in die Registry schreiben kann, so dass 
jeder, der auf einer Schnittstelle mit Wandlerchip von FTDI z.B. 38,4 
kBaud auswählt in Wirklichkeit 31,25 kBd bekommt.

von J. S. (engineer) Benutzerseite


Lesenswert?

Frank O. schrieb:
> Klingt aber nach einigem Aufwand
Wenn man eh einen FPGA hat und MIDI lesen will ... damals war das halt 
naheliegend.

Frank O. schrieb:
> Bei den heutigen USB auf RS232 Wandlern vermute ich, dass sie den Takt
> für die RS232 per PLL-Synthesizer aus den 24 MHz USB Takt gewinnen.
> Damit sollte dann 31,25 kBaud direkt machbar sein. Bei FTDI gibt es
> Anleitungen, was man lustiges in die Registry schreiben kann, so dass
> jeder, der auf einer Schnittstelle mit Wandlerchip von FTDI z.B. 38,4
> kBaud auswählt in Wirklichkeit 31,25 kBd bekommt.

Das kann gut sein. Die Frage wäre, ob das nicht die MIDI-Kabel so 
machen. Die würde ich nebenbei erwähnt so der so bevorzugen. Ein 
USB-2-MIDI-Adapter mit korrekter Frequenz und gleich richtigen Steckern 
bekommt man ja heute hinterher geworfen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.