Zurück Projekt Licht-Harfe
25.03.2010,
aktualisiert 10.2017

Im Zuge einer Ausstellung habe ich eine "Lichtharfe" konstruiert.
        Weitere Bilder PhysikHautnah2010.html   Auststellung im DEZ

Das klingt, als wenn man über eine Harfe streicht. "wirklich!"
Oder wie über Klaviertasten, je was man einstellt.
Das ganz ist mehr eine Übung für Sensorik.
Und man kann von Chromatisch auf  7-Tonleiter umschalten...

Ich stelle für Liebhaber die ATMega Software zur Verfügung( ZIP File des Projektes) : At16Midi.zip

Hier ein kleiner Videolink mit Ton ( mit dem Handy aufgenommen )
Youtube:  
http://www.youtube.com/watch?v=FXU-4QchS4U
YOUTUBE2 https://www.youtube.com/watch?v=dy4YgmcelMQ

oder als Datei:  Lichtharfe.avi

LabView Software:
LichtharfeCOM_CTRL_LV_90.zip
Compiliertes EXE Für LabView Runtime 2009: LichtHarfeSoftware_Exe.zip
Dazu von National die Labview Runtime 2009 downloaden + VISA Treiber Labview 2009

Benötigt wird noch eine FREE Mdis Noten software oder ähnliches, dass den Midistream verarbeitet.






 und der µController  sendet auch Daten zum PC, so das man gut beobachten kann, welche Töne gespielt werden

labView zur Visualisierung und Steuerung


Midi ist die Abkürzung für Musical Instrument-Digital-Interface
Die serielle Übertragung geht mit  31250 Baud, 8-Bit, No Parity, 1-StoppBit 

Darüber hinaus erfolgt die Verbindung nicht mit RS232 ( +/- 12V), sondern mit Stromschleifen.
Zur galvanischen Trennung werden üblicherweise Optokoppler verwendet.
In dieser Schaltung wird der CNX35 verwendet, es geht aber so gut wie jeder.
Standardmäßig wird für jede Richtung ein eigenes Kabel mit 5-poligen DIN Steckern eingesetzt, d.h. auf der Platine sollte man entsprechende Kupplungen einbauen.

Musik mit  Midi. Gesteuert vom µC
http://de.wikipedia.org/wiki/Musical_Instrument_Digital_Interface

Funktionsweise des MIDI-Protokolls

MIDI verwendet kurze Bytefolgen, um Signale auszutauschen. Das Signal lässt sich mit einem Sequenzer als Musikstück aufzeichnen, bearbeiten und wiedergeben.

Die übertragenen Bytes

Die folgenden Tabellen erfordern das Verständnis des Hexadezimalsystems. Ein Byte ist aus zwei Hexadezimalziffern (0–9 A–F) aufgebaut. Eine einzelne Hexadezimalziffer als Halbbyte wird auch Nibble genannt. Das Nibble n steht für die Kanalnummer (n = number), das Byte kk für die Note (k = key), das Byte vv für den Wert (v = value). Die Kanalnummer reicht von 0–15. In vielen Programmen wird bei der Darstellung der Kanalnummer die tatsächliche Kanalnummer um 1 erhöht dargestellt, also 1–16 statt 0–15.

Ein Statusbyte ist ein Byte, das einen Befehl im MIDI-Strom enthält. Auf einen Befehl folgt eine passende Anzahl Datenbytes. Um einen unterbrochenen Datenstrom jederzeit korrekt wieder aufzunehmen, fordert das MIDI-Protokoll die Fähigkeit, Statusbytes von Datenbytes zu unterscheiden. Dazu definiert MIDI, dass das erste Bit eines Statusbytes gesetzt (1) ist, das erste Bit eines Datenbytes dagegen ungesetzt (0). Daraus folgt, dass die Hexadezimaldarstellung von Statusbytes im Bereich 0x80–0xFF liegt, die von Datenbytes dagegen zwischen 0x00–0x7F. Außerdem gilt für Statusbytes, dass das zweite Nibble immer n ist, was für den MIDI-Kanal steht, auf dem der Befehl ausgeführt wird.

Kommt statt eines erwarteten Statusbyte ein Datenbyte, dann gilt das letzte Statusbyte als wiederholt und das aktuelle Datenbyte zählt zu dessen Daten.

Die Beispiele werden anhand von Tasten eines Tasteninstruments wie eines Keyboards erläutert, sind aber auf jedes MIDI-fähige Instrument übertragbar, z. B. auch eine MIDI-Gitarre.

Statusbytes

Das Statusbyte ist immer das erste übertragene Byte einer zusammengehörigen MIDI-Nachricht. Das erste Bit des Statusbytes ist immer 1 (gesetzt).

Statusbytes
Bytes (hexadezimal) Folgebytes Status Erläuterung
0x8n kk vv Note, Release velocity Note Off Beendet das Spielen der angegebenen Note, hat also die Bedeutung des Loslassens einer Taste. Wurde die Note vorher gar nicht gespielt, wird dieses Signal einfach ignoriert.
0x9n kk vv Note, Anschlagsdynamik Note On Beginnt das Spielen einer Note. Zusätzlich wird die Anschlagsdynamik (engl. Velocity) angegeben, die der Druckstärke auf die Taste in 127 Schritten von 1 (sehr schwach) bis 127 (sehr stark) entspricht. Der Wert 0 ist als Note Off-Befehl definiert.
0xAn kk vv Note, Dynamic Polyphonic Aftertouch Beschreibt das Ändern des Tastendrucks während die Taste bereits gedrückt ist, für jede Taste einzeln. Diese Daten sind neutral, d. h. sie müssen anderen Daten zugeordnet werden.

z. B.: Zuordnung zu Controller 11: Expression – Ausdruckstärke, womit nach dem Anschlag der Taste über den „Bodendruck“ auf die Taste der Klang eines Saxophones verändert werden kann, während der Ton klingt.

0xBn cc vv Controller, Wert Control Change Ändert den Zustand eines Controllers (siehe nächster Abschnitt) (cc = Controller)
0xCn pp Programmnummer Program Change Legt das für den angegebenen Kanal zu spielende Instrument fest (pp = Program Number)
0xDn vv Wert Monophonic bzw. Channel Aftertouch Beschreibt das Ändern des Tastendrucks während die Tasten bereits gedrückt sind, für alle Tasten gemeinsam.

Genau wie bei Polyphonic Aftertouch sind diese Daten neutral.

0xEn vv vv Wert1, Wert2 Pitch Bending Einstellung des Pitchbend-Rades. Die zwei Datenbytes ergeben zusammen den 14 Bit breiten Wert zwischen 0 und 16384. Die Mittelstellung des Rades wird durch den Wert 8192 signalisiert.
0xF0 xx… 0xF7 Geräteabhängig System (exclusive) Message Steuermeldungen, häufig gerätespezifisch, Länge ebenfalls gerätespezifisch (xx = Datenbytes)

Controller [Bearbeiten]

Sinn und Zweck eines MIDI-Controllers ist es, dem Anwender eine möglichst gute Haptik bei der Beeinflussung seiner Musik zu vermitteln. Die Veränderungen der Musik sollen mit Händen oder Füßen erfühlt werden können. Dazu hat der Controller mechanisch bewegliche Elemente, die der Benutzer bedienen kann. Diese Bewegung wird in MIDI-Befehle übersetzt und an die Geräte sowie Klangerzeuger weitergegeben. Sie arbeiten somit ähnlich wie Gamecontroller, die allerdings im Gegensatz zu Midicontrollern ein proprietäres Protokoll nutzen. Der einzelne Midibefehl wird verwirrenderweise im Bereich der Midicontroller ebenfalls als Controller bezeichnet, was aber die ursprünglichere Verwendung darstellt.

Erst in neuerer Zeit nutzt man Controller auch derart, dass die Semantik der Midi-Befehle – in untenstehender Tabelle als Typ bezeichnet – ignoriert wird. Dem Befehl werden andere Funktionen zugeordnet als im Midi-Protokoll vorgesehen. Das ist häufig der Fall, wenn die Musikbearbeitung ausschließlich auf einem Computer durchgeführt wird. Insbesondere bei DJ-Programmen sind speziell angepasste Controller sehr verbreitet, wo beispielsweise mit dem Midisignal ein Dateibrowser zur Songauswahl sowie Funktionen wie Start, Stop oder in anderer Richtung eine Hardware LED im Controller bedient werden. Der semantisch mit der Tonhöhe belegte Midibefehl kann hier beispielsweise die Länge einer Wiederholungsschleife (Loops) darstellen. Gerade hier ist die Controllerhaptik wichtig, da sich mit der Maus am Computer die erforderliche Reaktionszeit und Feinfühligkeit zum Beispiel bei der Synchronisierung des Beats zweier Songs nicht erreichen lässt. Dem proprietären Charakter dieser Anwendungsart kann durch freie Belegbarbarkeit der Midibefehle sowohl im Programm als auch im Controller begegnet werden, was allerdings noch lange nicht die Regel ist.

Klassische Anwendungen des Midicontrollers halten sich hingegen streng an die Semantik des Midiprotokolls. Diese haben im Bereich der Musikerzeugung größere Bedeutung, da sich mit ihnen auf einfache Art und Weise gerätespezifische Klangparameter des aktuellen Instruments steuern lassen. Unterschiedliche Geräte sind dabei kompatibel auswechselbar.

Die Controller senden auf einem bestimmten Kanal mit einer bestimmten Controllernummer einen bestimmten Wert. Einfache Controller können Werte von 0 bis 127 annehmen, was jedoch bei Tonhöhenänderungen sehr schnell zu unschönen Treppenverläufen im Klang führt. Daher lassen sich die Controller 0–31 mit einem sogenannten LSB-Controller 32–63 koppeln, um so eine wesentlich höhere Auflösung zu erhalten. In der Praxis wird diese Technik jedoch selten angewandt, da eine Auflösung der Lautstärke beispielsweise in 128 Schritten fein genug erscheint.

Schalter wie beispielsweise das Haltepedal Nummer 64 können zwar theoretisch Werte von 0–127 senden, da ein Schalter allerdings nur zwei Werte annehmen kann, werden üblicherweise Werte von 0 bis 63 als „Aus“ und Werte von 64 bis 127 als „An“ interpretiert.

Verwendet man ein programmierbares Steuergerät, so sind Kenntnisse der Controllernummern und was diese üblicherweise steuern von großem Nutzen. Die wichtigsten Controller sind in der nachfolgenden Tabelle zusammengestellt. Das erste Byte eines Controllerbefehles lautet immer 0xBn, wobei n die Kanalnummer angibt. cc steht für die Controllerart (cc = continuous controller) und vv für den Wert, den der zu steuernde Klangparameter annehmen soll.

Wichtige MIDI-Controller
Byte (hexadezimal) Dezimal Typ Erläuterung
0xBn 00 vv 0 Bank select MSB gefolgt von Bank select LSB Controller 32
0xBn 01 vv 1 Modulation MSB Stellung des Modulationsrades
0xBn 02 vv 2 Breath Controller Blasregler
0xBn 03 vv 3 Undefined Undefiniert bzw. frei verwendbar
0xBn 04 vv 4 Foot Controller MSB Stellung des Fußpedals
0xBn 05 vv 5 Portamento Time MSB Dauer des übergangslosen Gleitens zwischen zwei Tonhöhen
0xBn 06 vv 6 Data Byte Datenbyte für einen RPN-/NRPN-Controller
0xBn 07 vv 7 Main volume Gesamtlautstärke
0xBn 08 vv 8 Balance Verstärkung des rechten bzw. linken Lautsprechersignals (nur Stereo)
0xBn 09 vv 9 Undefined Undefiniert bzw. frei verwendbar
0xBn 0A vv 10 Panorama Stereopositionierung im Raum (links … mittig … rechts)
0xBn 0B vv 11 Expression Ausdrucksstärke des Klangs
0xBn 0C vv 12 Effect Control 1 Effekt 1 steuern (2-Byte-Befehl, 14-Bit-Controller, gesendet in der Reihenfolge 0xBn 0C vv, 0xBn 2C vv)
0xBn 0D vv 13 Effect Control 2 Effekt 1 steuern (2-Byte-Befehl, 14-Bit-Controller, gesendet in der Reihenfolge 0xBn 0D vv, 0xBn 2D vv)

14–15 Undefined Undefiniert bzw. frei verwendbar

16–19 General Purpose Controllers 1–4 Frei belegbare Controller 1–4

20–31 Undefined Undefiniert bzw. frei verwendbar
0xBn 20 vv 32 Bank select LSB gefolgt von Programmnummer-Befehl: Cn xx (n – MIDI kanal; xx – Nummer)

Das „Bank select MSB/LSB/Programmnummer“ wird verschieden genutzt. z. B. YAMAHA bei XG

für die Auswahl einer Tonebank: MSB(Ctrl.0) = 0 LSB(Ctrl.32) = Banknummer

für die Auswahl eines Drumsets: MSB(Ctrl.0) = Drumset LSB(Ctrl.32) = 0


33–63 LSB for Controllers 1–31 (rarely implemented) Dienen eigentlich dazu, die Controller 1–31 feiner auflösen zu können, wird aber kaum verwendet
0xBn 40 vv 64 Hold 1 Haltepedal, Werte vv von 0–63 werden als „aus“ interpretiert, Werte von 64–127 als „an“
0xBn 41 vv 65 Portamento Portamento ein- und ausschalten
0xBn 42 vv 66 Sostenuto Während des Drückens des Pedals bereits gespielte Noten werden gehalten, neu hinzukommende nicht
0xBn 43 vv 67 Soft Pedal Senkt die Lautstärke der gespielten Noten
0xBn 44 vv 68 Legato Footswitch Schaltet das Empfangsgerät in den MIDI Mode 4 (Omni Off = Mono Mode), monophone Wiedergabe
0xBn 45 vv 69 Hold 2 2. Haltepedal
0xBn 46 vv 70 Sound Controller 1 (Sound Variation) Klangsteuerung 1, meistens Klangvariation
0xBn 47 vv 71 Sound Controller 2 (Harmonic Content) Klangsteuerung 2, meistens Teiltonhaltigkeit
0xBn 48 vv 72 Sound Controller 3 (Release Time) Klangsteuerung 3, meistens Ausschwingzeit
0xBn 49 vv 73 Sound Controller 4 (Attack Time) Klangsteuerung 4, meistens Einschwingzeit
0xBn 4A vv 74 Sound Controller 5 (Brightness) Klangsteuerung 5, meistens Helligkeit

75–79 Sound Controller 6–10 Klangsteuerung 6–10, keine Vorschlagswerte

80–83 General Purpose Controllers 5–8 or General Purpose Buttons 1–4 Frei belegbare Controller 5–8 (vv = 0–127) oder Taster 1–4 (vv =0 –63: „aus“, vv = 64–127: „an“)
0xBn 54 vv 84 Portamento Control Kontrolle des Portamento

85–90 Undefined Undefiniert bzw. frei verwendbar
0xBn 5B vv 91 Effects 1 Depth Effekttiefe 1, früher Intensität eines externen Effektes
0xBn 5C vv 92 Effects 2 Depth Effekttiefe 2, früher Tremolointensität
0xBn 5D vv 93 Effects 3 Depth Effekttiefe 3, früher Chorusintensität
0xBn 5E vv 94 Effects 4 Depth Effekttiefe 4, früher Detuneinstensität
0xBn 5F vv 95 Effects 5 Depth Effekttiefe 5, früher Phaserintensität
0xBn 60 vv 96 Data Increment RPN/NRPN Wert eines RPN/NRPN Controllers erhöhen
0xBn 61 vv 97 Data Decrement RPN/NRPN Wert eines RPN/NRPN Controllers erniedrigen
0xBn 62 vv 98 NRPN LSB Niederwertiges Byte eines NRPN-Controllers
0xBn 63 vv 99 NRPN MSB Höherwertiges Byte eines NRPN-Controllers
0xBn 64 vv 100 RPN LSB Niederwertiges Byte eines RPN-Controllers
0xBn 65 vv 101 RPN MSB Höherwertiges Byte eines RPN-Controllers

102–119 Undefined Undefiniert bzw. frei verwendbar
0xBn 78 vv 120 all sounds off Klangerzeugung sofort einstellen (vv hat keine Bedeutung)
0xBn 79 vv 121 Controller Reset Setzt alle Controller auf ihre Ursprungswerte
0xBn 7A vv 122 Local Control on/off Koppelt die Tastatur vom internen Klangerzeuger eines Gerätes ab; die interne Klangerzeugung kann weiterhin von außen über MIDI angesteuert werden, während die Tastatur weiterhin über den MIDI-Ausgang Daten sendet, aber eben nicht mehr an die interne Klangerzeugung
0xBn 7B vv 123 all notes off Spielen einstellen – sämtliche Noten werden ausgeschaltet, die Klänge durchlaufen jedoch noch ihre Release-Zeit (d. h. sie klingen ab) (vv hat keine Bedeutung)
0xBn 7C vv 124 omni off Das Gerät soll nur auf programmierte Kanäle reagieren (vv haben keine Bedeutung)
0xBn 7D vv 125 omni on Das Gerät soll auf allen Kanälen gleich reagieren (vv hat keine Bedeutung)
0xBn 7E vv 126 mono on / poly off Das Gerät soll nur mit einer begrenzten Anzahl Stimmen spielen (vv = Stimmenzahl, üblich ist 1 – viele Geräte ignorieren vv und stellen auf 1-stimmig)
0xBn 7F vv 127 poly on / mono off Das Gerät soll mit maximaler Anzahl an Stimmen spielen

MSB engl. : Most Significant Bit = höchstwertigstes Bit

LSB engl. : Least Significant Bit = niederwertigstes Bit

NRPN/RPN [Bearbeiten]

Die NRPN (Non Registered Parameter Number) Controller dienen dazu, Parameter zu steuern, die in den normalen Controllerraum keinen Platz finden, die der Hersteller aber steuerbar machen will.

Es wird ein Parameter im Bereich von 0 und 16383 gesendet. Danach wird entweder ein normaler MIDI-Controller #6 mit einem bestimmten Wert 0–127 gesendet oder ein Data Increment/Decrement #96, #97, wobei hier der dritte Parameter egal ist.

Da es im MIDI-Protokoll nicht möglich ist einen Wert größer als 127 zu senden, gibt es das NRPN-MSB (Controller #99) und das NRPN-LSB (Controller #98).

Der Wert im Bereich zwischen 0 und 16383 wird erst in Binärform umgewandelt. Die ersten (von rechts) sieben Zeichen dieser binären Zahl werden mit dem NRPN-LSB Controller versendet. Die übrig gebliebenen sieben Zeichen werden mit dem NRPN-MSB Controller versendet. Wichtig ist, dass der MSB-Controller vor dem LSB-Controller versendet wird.

Danach ist ein bestimmter NRPN Parameter aktiviert und man kann ihn über #6 einen Wert von 0 bis 127 zuweisen oder ihn mit #96/#97 erhöhen und verringern.

RPN funktioniert genau so, nur mit dem Unterschied, dass die LSB und MSB Controller #100, #101 sind (siehe Tabelle).

Nachteil an dieser Art der Übertragung ist, dass man insgesamt drei Controller versenden muss. Der Vorteil hingegen ist, dass man eine große Anzahl an Parametern (z. B. alle Parameter einer DAW) damit steuern kann. Interessant wäre auch die Möglichkeit das Protokoll zu missbrauchen und mit RPN einen Parameter zu selektieren und ihn über NRPN einen bestimmten Wert z. B. 13980 zuzuweisen. Dadurch wären Parametersprünge kaum mehr hörbar und man könnte immer noch herkömmliche Synths in der Kette verwenden.

General MIDI Instrumente
  PC#    Instrument   PC#    Instrument   PC#    Instrument   PC#    Instrument
  Piano
  1. Acoustic Grand Piano
  2. Bright Acoustic Piano
  3. Electric Grand Piano
  4. Honky-tonk Piano
  5. Electric Piano 1
  6. Electric Piano 2
  7. Harpsichord
  8. Clavi
  Chromatic Percussion
  1. Celesta
  2. Glockenspiel
  3. Music Box
  4. Vibraphone
  5. Marimba
  6. Xylophone
  7. Tubular Bells
  8. Dulcimer
  Organ
  1. Drawbar Organ
  2. Percussive Organ
  3. Rock Organ
  4. Church Organ
  5. Reed Organ
  6. Accordion
  7. Harmonica
  8. Tango Accordion
  Guitar
  1. Acoustic Guitar (nylon)
  2. Acoustic Guitar (steel)
  3. Electric Guitar (jazz)
  4. Electric Guitar (clean)
  5. Electric Guitar (muted)
  6. Overdriven Guitar
  7. Distortion Guitar
  8. Guitar harmonics
  Bass
  1. Acoustic Bass
  2. Electric Bass (finger)
  3. Electric Bass (pick)
  4. Fretless Bass
  5. Slap Bass 1
  6. Slap Bass 2
  7. Synth Bass 1
  8. Synth Bass 2
  Strings
  1. Violin
  2. Viola
  3. Cello
  4. Contrabass
  5. Tremolo Strings
  6. Pizzicato Strings
  7. Orchestral Harp
  8. Timpani
  Ensemble
  1. String Ensemble 1
  2. String Ensemble 2
  3. SynthStrings 1
  4. SynthStrings 2
  5. Choir Aahs
  6. Voice Oohs
  7. Synth Voice
  8. Orchestra Hit
  Brass
  1. Trumpet
  2. Trombone
  3. Tuba
  4. Muted Trumpet
  5. French Horn
  6. Brass Section
  7. SynthBrass 1
  8. SynthBrass 2
  Reed
  1. Soprano Sax
  2. Alto Sax
  3. Tenor Sax
  4. Baritone Sax
  5. Oboe
  6. English Horn
  7. Bassoon
  8. Clarinet
  Pipe
  1. Piccolo
  2. Flute
  3. Recorder
  4. Pan Flute
  5. Blown Bottle
  6. Shakuhachi
  7. Whistle
  8. Ocarina
  Synth Lead
  1. Lead 1 (square)
  2. Lead 2 (sawtooth)
  3. Lead 3 (calliope)
  4. Lead 4 (chiff)
  5. Lead 5 (charang)
  6. Lead 6 (voice)
  7. Lead 7 (fifths)
  8. Lead 8 (bass + lead)
  Synth Pad
  1. Pad 1 (new age)
  2. Pad 2 (warm)
  3. Pad 3 (polysynth)
  4. Pad 4 (choir)
  5. Pad 5 (bowed)
  6. Pad 6 (metallic)
  7. Pad 7 (halo)
  8. Pad 8 (sweep)
  Synth Effects
  1. FX 1 (rain)
  2. FX 2 (soundtrack)
  3. FX 3 (crystal)
  4. FX 4 (atmosphere)
  5. FX 5 (brightness)
  6. FX 6 (goblins)
  7. FX 7 (echoes)
  8. FX 8 (sci-fi)
  Ethnic
  1. Sitar
  2. Banjo
  3. Shamisen
  4. Koto
  5. Kalimba
  6. Bag pipe
  7. Fiddle
  8. Shanai
  Percussive
  1. Tinkle Bell
  2. Agogo
  3. Steel Drums
  4. Woodblock
  5. Taiko Drum
  6. Melodic Tom
  7. Synth Drum
  8. Reverse Cymbal
  Sound Effects
  1. Guitar Fret Noise
  2. Breath Noise
  3. Seashore
  4. Bird Tweet
  5. Telephone Ring
  6. Helicopter
  7. Applause