Forum: Mikrocontroller und Digitale Elektronik MIDI-Protokoll


von Meli (Gast)


Lesenswert?

Hallo
Ich hätte eine Frage, kennt sich irgendwer gut mit MIDI aus?
Wäre wirklich sehr wichtig.
Ich muss mit MIDI Protokoll 10 Töne "programmieren". Das Problem ist das 
ich überhaupt keine Ahnung davon habe und ich mir auch schwer tue es mir 
selbst beizubringen.
Hätte zufällig irgendjemand ein Beispiel File und könnte mir es 
erklären?
LG

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Serielle Schnittstelle mit korrekter Baudrate ansprechen, und die 
nötigen MIDI-Sequenzen ausgeben.

Wo liegt jetzt Dein Problem?

Weißt Du nicht, wie Du Deine serielle Schnittstelle zu programmieren 
hast, oder weißt Du nicht, wie die MIDI-Sequenzen für Dein nicht 
erwähntes MIDI-Gerät aussehen müssen?

http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface#Funktionsweise

beschreibt das (wirklich ziemlich einfache Protokoll)

http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface#Technik

wie die Schnittstellenhardware auszusehen hat.

von Andreas H. (ahz)


Lesenswert?

Meli schrieb:
> Ich muss mit MIDI Protokoll 10 Töne "programmieren". Das Problem ist das
> ich überhaupt keine Ahnung davon habe und ich mir auch schwer tue es mir
> selbst beizubringen.

Das Problem sind nicht die 10 Töne. Das Problem ist, dass Du nicht 
verrätst, was Du programmieren sollst.
Also welche Hardware, welche Programmiersprache ?

Ohne diese Infos wird Dir keiner helfen können (bei Deiner 
Hausaufgabe^^).

Grüße
Andreas

von Günter Lenz (Gast)


Lesenswert?

Auf Wikipedia ist das MIDI-Protokoll erklärt.
Auf musik-mit-pc.de gibt es auch interessante
Informationen.
Ich hätte auch mal Lust, MIDI-Daten zu einem
Musikinstrument zu senden. Aber das ist nicht
so einfach. Das erste Problem ist die
krumme Baud-Rate von 31,25 kBaut. Die läst
sich auf mein Terminal-Programm nicht einstellen.
Man müßte vielleicht die Daten erst eimal zu einem
Mikrocontroller senden, der die Daten dann
mit 31,25 kBaut wieder ausgibt. Oder man muß
irgendwas fertiges kaufen.

von Andreas H. (ahz)


Angehängte Dateien:

Lesenswert?

Günter Lenz schrieb:
> Ich hätte auch mal Lust, MIDI-Daten zu einem
> Musikinstrument zu senden. Aber das ist nicht
> so einfach.

Ich habe Dir mal eine Demo angehängt, die ich mal für jemand als kurzes 
Beispiel gemacht habe, wie "kompliziert" MIDI ist. Das ist für einen 
AVR, den er damals benutzt hatte.
 Ich glaube nicht, dass es auf einer anderen Hardware komplizierter 
wird^^

/Regards
AHz

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Günter Lenz schrieb:
> Aber das ist nicht so einfach. Das erste Problem ist die krumme
> Baud-Rate von 31,25 kBaut. Die läst
> sich auf mein Terminal-Programm nicht einstellen.

Das hat damit zu tun, daß die serielle Schnittstelle des PCs diese 
Bau_d_rate nicht unterstützt.

Mit einem USB-Seriell-Adapter kann es funktionieren, aber dann 
brauchst Du auch ein Terminalprogramm, bei dem Du beliebige Werte für 
die Baudrate eingeben kannst, statt nur einige vordefinierte Konstanten 
aus einer Liste auszuwählen.

Das sogenanne "Terminalprogramm" hTerm von Tobi kann das. Das ist zwar 
kein Terminalprogramm im eigentlichen Sinne (denn es emuliert kein 
Terminal), aber für Deine Tests sollte es ausreichen.

von Meli (Gast)


Lesenswert?

ich bin in Programmieren echt schlecht und darum checke ich schon 
leichtere Sachen nicht...sorry

ich habe auch keine Ahnung welche MIDI-Sequenzen oder sonstiges ich 
einstellen muss.

ich muss es in C++ programmieren


Übersicht:
Von einem Sensor bekomme ich ein Signal und dieses muss ich dann 
verarbeiten und an einem Raspberry weiterschicken.

Datenprotokoll: MIDI
Anwenderprotokoll: I2C

von Franziska (Gast)


Lesenswert?

Hallo :)

Ich wollte mir vornehmen für mein neues Zuhause eine "Klavierstiege" zu 
programmieren. Leider komme ich nicht dazu das Projekt fertig zustellen. 
Meine Frage wäre jetzt, ob jemand bereit wäre mein Projekt fertig 
zustellen (natürlich gegen Bezahlung).
Ich hätt mir das so vorgestellt, dass ich von einem Infrarotsensor ein 
Siganel bekomm, dieses an einen Arduino UNO weiterschicke, es dort 
verarbeite und an einen Rasbperry weiterschicke. Das Datenprotokoll soll 
MIDI sein und das Anwenderprotokoll soll I2C sein.

LG Franziska

von Stefan F. (Gast)


Lesenswert?

> Das erste Problem ist die krumme Baud-Rate von 31,25 kBaut.
> Die läst sich auf mein Terminal-Programm nicht einstellen.

Weil normale serielle Ports vom PC diese Baudrate nicht unterstützen.

> Man müßte vielleicht die Daten erst eimal zu einem
> Mikrocontroller senden, der die Daten dann
> mit 31,25 kBaud wieder ausgibt.
> Oder man muß irgendwas fertiges kaufen.

Ganz genau. Die meisten Soundkarten haben ein Midi Interface im 
Game-Port.

von Stefan F. (Gast)


Lesenswert?

> ich habe auch keine Ahnung welche MIDI-Sequenzen oder sonstiges
> ich einstellen muss.

Als Beispiel kannst du einfach ein Midi Musikstück abspielen und 
"mitlesen", was da am seriellen Port ausgegeben wird. Dazu eignen sich 
Logic-Analyzer sehr gut.

Manche Midi Programme können die Rohdaten auch in eine menschen-lesbare 
Textdatei schreiben. Zum Beispiel das: 
http://www.pnelsoncomposer.com/software/MIDIFile/

von Musikexerperte (Gast)


Lesenswert?

Mit der Beschreibung werden die meisten wenig anfangen können.

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


Lesenswert?

Meli schrieb:
> Übersicht:
> Von einem Sensor bekomme ich ein Signal und dieses muss ich dann
> verarbeiten und an einem Raspberry weiterschicken.
>
> Datenprotokoll: MIDI
> Anwenderprotokoll: I2C

Aha, wieder jemand, dem man alles einzeln aus der Nase ziehen muss. 
Also, der Sensor sendet MIDI? Der Raspberry empfängt MIDI? Nu sag doch 
mal bitte, wie die Kette aufgebaut ist, und wo da C++ ins Spiel kommt 
(für einen Anfänger evtl. nicht die beste Wahl - nur mal nebenbei).

Um eine MIDI Note zu spielen, sendest du normalerweise
Note ON (hier mal auf MIDI Kanal 2, Note ist das C4, Voller Anschlag):
1
0x91, 0x60, 0x7f
Note On, Ton C4, Full Velocity
Nu spielt das Instrument das C4. Zum Stoppen sendest du ein Note Off:
1
0x81, 0x60, 0x7f
Note Off, Ton C4, Full Damping

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Habe nur ich ein 'Dejà Vu'?
Beitrag "MIDI-Protokoll"

von Meli (Gast)


Lesenswert?

OK, ich hab das Anvil Studio und das zeigt mir auch so was an.
Blöde Frage, aber wie kann ich das in mein Programm einbauen?






Der Sensor schickt 0 oder 1 (Schranke geschlossen oder offen) und dies 
wird an den Arduino geschickt und das muss ich mit C++ (I2C und Midi) 
programmieren.

von Stefan F. (Gast)


Lesenswert?

Das ist echt eine blöde Frage. Erstaml brauchst du eine geeignete 
Schnittstelle am PC und dann suchst du Dir ein Tutorial für die 
Programmierung dieser Schnittstelle.

Google ist doch so einfach zu benutzen, du bekommst es quasi auf dem 
Silbertablett geliefert:

https://www.google.de/search?q=pc+midi+programmierung&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:de:official&client=firefox-a&channel=nts&gfe_rd=cr&ei=4SuhVKLGMsmBUI_VgLgO

Klicke dann auf "Simple MIDI Input/Output Examples for Windows". Auf der 
gleichen Seite gibt's auch was für Linux.

von Karl H. (kbuchegg)


Lesenswert?

Meli schrieb:

>
>
> Der Sensor schickt 0 oder 1 (Schranke geschlossen oder offen) und dies
> wird an den Arduino geschickt und das muss ich mit C++ (I2C und Midi)
> programmieren.

Was jetzt?
Vorher war es ein Rasberry, jetzt ist es ploetzlich ein Arduino.
Deine Reputation waechst nicht wirklich, wenn du noch nicht mal weisst, 
welches Geraet du eigentlich hast.

Und auf einem Arduino ist das nun wirklich Kindergartenkram. Wuerde mich 
wundern, wenn es da nicht irgendwelche fix&fertigen MIDI-Klassen gibt. 
Fazit: du bist nur zu faul, dir selbst was beizubringen. Das hat dann 
noch nicht mal was damit zu tun, dass du in Programmieren echt schlecht 
bist. Denn das bischen, was man auf einem Arduino dazu braucht, kann man 
jedem Kleinkind in 2 Stunden beibringen.

: Bearbeitet durch User
von Meli (Gast)


Lesenswert?

Urteile nicht über andere, du kennst mich nicht einmal, also kannst du 
gar nix sagen. So eine Aussage kannst du dir sparen, nur überheblich. 
Wenn du nur blöde Aussagen von dir geben kannst, dann gib mir keine 
Antwort.
Ich will sehen wie du es einem Kleinkind beibringen willst.

von Franziska (Gast)


Lesenswert?

Genauere Informationen bei Interesse

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


Lesenswert?

Meli schrieb:
> Der Sensor schickt 0 oder 1 (Schranke geschlossen oder offen) und dies
> wird an den Arduino geschickt und das muss ich mit C++ (I2C und Midi)
> programmieren.

Ich halte mich normalerweise für einen Typen mit IQ im Mittelfeld, aber 
ich verstehe hier immer noch Bahnhof. Das meinte ich oben mit 
'Beschreibung der Kette'. Also, noch einmal: Wie kommuniziert welcher 
Sensor mit was über welches Protokoll? Ich nehme mal an, das du 
derjenige mit dem Treppendings (Klavierstiege?) aus dem anderen Thread 
bist, denn das klingt genauso unklar.
http://www.mikrocontroller.net/topic/353734
Und wie oder wo kommt da MIDI ins Spiel? Spielt der RPi eine Melodie?

Meli schrieb:
> Wenn du nur blöde Aussagen von dir geben kannst, dann gib mir keine
> Antwort.

Ganz im Gegentum, Karl Heinz ist einer der geduldigsten Berater hier im 
Forum und hat aber mal so richtig Ahnung. Aber mit deiner Beschreibung 
hier sind wir alle ratlos, obwohl hier einige echte Freaks rumhängen, 
die MIDI und I²C im Schlaf beherrschen.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Matthias Sch. schrieb:
> Habe nur ich ein 'Dejà Vu'?
> Beitrag "MIDI-Protokoll"

Zumindest die IP Adresse ist identisch.

Alles in allem klingt das fuer mich wieder mal nach dem Fall, bei dem 
jemand denkt, die Dinge werden einfacher, wenn man mehrere Computer auf 
ein 'Problem' ansetzt. In mehr als 95% der Faelle ist das Gegenteil der 
Fall: Die Dinge werden komplexer, weil Kommunikationsschichten ins Spiel 
kommen, die man nicht haette, wenn ganz einfach 1 Computer mit 1-nem 
Programm alles macht.
Ok, auf einem Arduino wird das mit einem Wavetable-Synthesizer nichts 
werden, aber ein paar Toene kann er auch produzieren. Auf der anderen 
Seite hat man mit einem RaPi Rechenpower zur Verfuegung, gegen die so 
mancher Grossrechner der 80-iger Jahre (der ganze Firmenkonzerne 
geschupft hat) einfach nur alt aussieht. Der macht den Waverable Synthi 
mit links und ein paar Lichtschranken zusaetzlich bringen den auch nicht 
aus dem Konzept.

Also: Anforderungen noch mal ueberdenken und wenn es keinen triftigen 
Grund fuer 2 Rechner gibt, einen der beiden loswerden.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Meli schrieb:
> Urteile nicht über andere, du kennst mich nicht einmal, also kannst du
> gar nix sagen.

Ich hab in 30 Jahren genug gesehen, um mir ein Urteil erlauben zu 
koennen. Sorry, aber mit der Ueberheblichkeit der Generation 
Playstation, die ausser Geraet einschalten nichts mehr kann, aber alles 
haben will, brauchst du mir nicht kommen.

von Meli (Gast)


Lesenswert?

ich bin nicht diejenige von dem anderen Beitrag, tut mir leid, das wäre 
ja Blödsinn wenn ich den gleichen Beitrag 2mal reingeben würde.

Ich habe eine Stiege, mit 11 Stufen und pro Stufe sind 2 Sensoren 
angebracht(links und rechts). Pro Stufe soll ein Ton ausgegeben werden.
Wenn ein Sensor angesprochen wird, wird das Signal an den Arduino 
geschickt, am Arduino wird das Midi-Protokoll gemacht und dies soll an 
den Raspberry weitergeschicht werden. Ich bin nur für den Arduino also 
MIDI zuständig.


hab ich nicht gewusst, aber man kann es auch netter sagen und für mich 
hat das nicht ausgesehen als wäre er geduldig aber egal

von Karl H. (kbuchegg)


Lesenswert?

Meli schrieb:
> Pro Stufe soll ein Ton ausgegeben werden.
> Wenn ein Sensor angesprochen wird, wird das Signal an den Arduino
> geschickt,

welcher Sensor?

Sensoren schicken im Normalfall keine Signale, sondern der zentrale 
Computer fragt einen Sensor nach dem anderen ab, wie die Situation 
aussieht.

> am Arduino wird das Midi-Protokoll gemacht und dies soll an
> den Raspberry weitergeschicht werden. Ich bin nur für den Arduino also
> MIDI zuständig.

Bin mir zu 99.9% sicher, dass es fuer Midi auf einem Arduino fertige 
Klassen gibt.

von Karl H. (kbuchegg)


Lesenswert?


von min (Gast)


Lesenswert?

www.ucapps.de
hier findet man alles über Midi. Nebst einem MIDI-Betriebssystem fur 8 
bit oder 32 bit Prozessoren MIOS8 /32. Geschrieben ist alles in C oder 
asm.
http://ucapps.de/mios8_c.html

von Joe F. (easylife)


Lesenswert?

Ich sehe nicht, dass du mit deinen Kenntnissen selbst zum Ziel kommen 
wirst. Das ist nicht abwertend gemeint, aber man muss wirklich einiges 
Wissen haben, um I2C und einen UART für MIDI überhaupt in den Griff zu 
bekommen. Du sagst ja selbst, dass du eigentlich überhaupt keine Ahnung 
hast.

Guck dir vielleicht mal dieses Projekt hier an:
http://www.megadrum.info

Das macht genau, was du brauchst, und die Firmware muss nur noch 
geflashed werden.

Oder evtl. wären auch die Alesis Trigger I/O Geräte etwas für euch.

: Bearbeitet durch User
von PittyJ (Gast)


Lesenswert?

Hm, das verstehe ich nicht:
>Wenn ein Sensor angesprochen wird, wird das Signal an den Arduino
>geschickt, am Arduino wird das Midi-Protokoll gemacht und dies soll an
>den Raspberry weitergeschicht werden.

Warum unterhalten sich Arduino und Raspberry über Midi? Da gibt es doch 
wesentlich einfacherer Protokoll. Einfach ein USB-Kabel benutzen, und 
dann die vorhandene serielle Leitung nehmen.

Wenn da ein Musikgerät am anderen Ende wäre...
Aber für Computer zu Computer Kommunikation ist das doch unnötig.

von chris_ (Gast)


Lesenswert?

>Ok, auf einem Arduino wird das mit einem Wavetable-Synthesizer nichts
>werden, aber ein paar Toene kann er auch produzieren.

Vielleicht doch:
http://sensorium.github.io/Mozzi/

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Franziska schrieb:
> Das Datenprotokoll soll MIDI sein und das Anwenderprotokoll soll I2C
> sein.

Das klingt ... wirr.

von Joe F. (easylife)


Lesenswert?

Was studierst du und "Meli (Gast)" denn, dass ihr beide ganz 
offensichtlich das gleiche Thema zur Aufgabe habt, aber so hoffnungslos 
überfordert damit seid?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Da beide Threads das gleiche Thema haben, und da beide Threads 
offensichtlich von zwei sich sehr nahestehenden Personen verfasst 
wurden, habe ich das jetzt mal zusammengeführt.

Woher kommt die (sorry: Schwachsinige) Idee, Midi über I2C abzuwickeln?

von Stefan F. (Gast)


Lesenswert?

> Oder: Woher kommt die (sorry: Schwachsinige) Idee, den Status von Sensoren per 
Midi zu übertragen.

von Joe F. (easylife)


Lesenswert?

Ich fasse mal zusammen:
Offensichtlich gibt es einen Arduino, der per I2C die Sensoren abfragen 
soll.
Der Arduino soll dann je nach dem welche Treppenstufe betreten wurde ein 
entsprechenden Note-On Event auf ein MIDI Interface ausgeben.
Der Raspberry ist dann wohl ein Synthesizer, der aus dem MIDI Event dann 
Musik macht - und diesen Teil gibt es wohl schon, so dass es nur um den 
Arduino-Teil geht...

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


Lesenswert?

Hmm, warum macht der RPi dann nicht einfach alles? I²C macht er mit 
links, C++ sollte er auch verstehen, sobald es kompiliert ist und der 
Rest ist ein bisschen Wavetables triggern. M.E. kann man den Italiener 
einfach weglassen und mit MIDI muss man dann gar nicht anfangen.

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.