4.3 HIDs

4.3.1 Theorie

So wie man ein Instrument spielen kann, möchte man häufig auch einen Patch live spielen. Während etwas im Patch abläuft, können wir ja auf die GUI-Objekte klicken; die Verwendung einer Maus ist allerdings unpraktisch, wenn man dabei exakt in der Zeit arbeiten will. Hierfür gibt es HIDs, Human Interface Devices, das heißt Schnittstellengeräte zwischen Mensch und Maschine, zu denen Tastatur und Maus gehören, aber auch etliche weitere, zum Beispiel speziell für Musik Gemachte. Mit ihnen lässt sich in Pd ebenfalls ein Patch steuern.

4.3.1.1 Tastatur und Maus

Klicken wir in eine Nummern-Box, können wir per Tastatur einen Wert eingeben. Wir können aber auch direkte Informationen über die Tastatur erhalten:

Die Tasten sind durchnummeriert (allerdings werden nicht alle Tasten einer Tastatur richtig erfasst, zum Beispiel die F1- bis F12-Tasten nicht). „key“ registriert das Hinunterdrücken einer Taste, „keyup“ das Loslassen. Es wird dann jeweils die Nummer der Taste ausgegeben. „keyname“ zeigt den normalen Namen einer Taste an.

Mit dem „MouseState“-External (Groß-Kleinschreibung beachten!) aus Pd-extended können wir auch die Daten der Maus nutzen:

Mit „poll“ und „unpoll“ starten / stoppen wir die Anzeige (in meiner Version muss man zuerst auf „unpoll“ und dann auf „poll“ klicken, damit es funktioniert). Es werden absolute x/y-Koordinaten und Delta-Werte angegeben, sowie, ob die linke Maustaste gedrückt wird.

Normalerweise sind die Koordinaten 0/0 ganz links oben auf dem Monitor; mit „zero“ können wir aber auch einen anderen Punkt als Referenz einrichten:

4.3.1.2 MIDI

Anfang der 80er Jahre beschlossen die großen Hersteller von elektronischen Musikinstrumenten einen Standard bzw. ein Datenübertragungs-Protokoll für verschiedene Eingabegeräte, genannt Musical Instrument Digital Interface. Und so gibt es MIDI-Keyboards, MIDI-Mischpulte, MIDI-Handschuhe etc. In Pd gibt es Objekte zum Empfang wie zum Senden von MIDI-Daten. Man kann sie an ein Instrument senden, das mit diesen Daten wiederum Klang abspielen kann. Jedoch sind auch in den meisten Computer-Soundkarten MIDI-Klänge implementiert, die mit diesen Befehlen abgespielt werden können.

Das MIDI-Protokoll stellt keine Klänge dar, sondern besteht aus Befehlen zur Ansteuerung des Patches oder anderer Instrumente. Dazu werden Befehle übermittelt, wie z.B. „Note-on“ („Schalte Ton an“), „Velocity“ („Anschlagsstärke“) und „Note-off“ („Schalte Ton aus“). Neben diesen elementaren Befehlen stellt MIDI weitere, teilweise sehr spezielle Befehle zur Verfügung, die beispielsweise dazu verwendet werden, andere Klänge zu laden oder geladene Klänge mittels Steuerdaten, wie sie von Schaltern, Knöpfen oder Drehreglern erzeugt werden können, zu beeinflussen.

Jeder normierte MIDI-Befehl (mit Ausnahme systemexklusiver Daten, kurz SysEx genannt) trägt neben seiner Befehlskennung und den Befehlsdaten auch eine Kanalnummer. Die Kanalnummer ist 4 Bits groß, es lassen sich dadurch 2 4, also 16 Kanäle ansteuern. Je nach Software sind die Kanäle 0 bis 15 oder 1 bis 16 durchnummeriert, wobei die Nummerierung von 1 bis 16 üblicher ist.

Da MIDI ein serielles Protokoll und die Datenrate der MIDI-Schnittstellen für heutige Verhältnisse recht gering ist, ergeben sich beim Abspielen vieler Noten häufig Timing-Probleme, vor allem beim Einsatz von Sequenzer-Programmen. Schon das Anschlagen eines Akkords mit mehreren Noten kann zu hörbaren Verzögerungen führen, denn MIDI kann die Noten nie zeitgleich durch die Leitung schicken, sondern nur nacheinander.

Für die folgenden Beispiele ist MIDI-Hardware erforderlich. Wir stellen in Pd diese Geräte unter Media MIDIsettings ... ein.

Am grundlegendsten ist „midiin“. Jede MIDI-Eingabe wird darin angezeigt, links der Wert und rechts die Kanal-Nummer.

Haben wir ein MIDI-Keyboard oder ein Eingabegerät mit bestimmten Tonhöhen, erhalten wir mit „notein“ folgende Werte:

Links erscheint die MIDI-Nummer der Tonhöhe, in der Mitte die Stärke des Anschlags, rechts die Kanal-Nummer.

Umgekehrt können wir diese Informationen an ein Instrument schicken; haben wir nur ein Gerät, müssen wir keine Kanal-Nummer angeben. Wir verwenden „noteout“, und dazu „makenote“, das unsere Angaben ähnlich wie „pack“ zusammenfasst:

Ebenso gibt es die Control-Werte, mit „ctlin“ und „ctlout“. Betrachten wir „ctlin“:

Der linke Output ist der Wert, der mittlere die Nummer des Controllers, der rechte der Kanal. Mit einem Argument können wir den mittleren Wert angeben und so gleich einen bestimmen Controller anwählen.

Alle weiteren MIDI-Sender und -Receiver funktionieren ähnlich. Zu ihnen zählen „pgmin“, „bendin“, „touchin“, „sysexin“.

4.3.1.3 Steuerung mit Signalen

Klangeinaben über das Mikrofon können wir nicht nur als Klang, sondern auch als Steuerungsdaten verwenden. Wie schon unter 3.8.3.1 kennengelernt, erhalten wir mit „fiddle~“ aus dem eingehenden Klang die Informationen Amplitude und Frequenzen der Teiltöne:

Diese Zahlen – Pure Data arbeitet pur mit Daten – können wir nun wiederum auf Parameter eines Patches anwenden.

Ein Problem hierbei ist, dass die Informationen aus „fiddle~“ recht chaotisch sind. Dafür gibt es noch einen Trick zur Filterung:

Der Lowpassfilter kann auch einen Kontrolldateninput erhalten. Und in diesem Fall werden nur relativ langsame Veränderungen durchgelassen.

4.3.2 Anwendungen

4.3.2.1 Patches live spielen

Mit Hilfe der oben beschriebenen Eingabegeräte (Eingabemethoden) können die Paramter eines Patches nun extern verändert werden:

patches/4-3-2-1-patch-play.pd

Es liegt auf der Hand, dass die verschiedenen Geräte bestimmte Funktionen haben: Eine Taste steht für Ein/Aus, ein Drehregler für allmähliche Änderungen.

Für Controller mit einer Zahlreihe, wie Drehregler oder Schieber, empfiehlt sich noch eine Interpolation (da sie bei MIDI zum Beispiel nur 128 Werte haben).

In Pd-extended (allerdings nur, wenn GEM nicht geladen wurde) befindet sich ein sehr nützliches External das in diesem Fall eingesetzt werden kann: „scale“. Wenn wir zum Beispiel Frequenzen zwischen 69 und 81 (MIDI-Nummern) verändern und hierzu einen MIDI-Regler gebrauchen wollen, der aber Zahlen von 0 bis 127 erzeugt, können wir schreiben:

Das letzte Argument steht für linear (0) oder exponentiell (1).

4.3.2.2 Weitere Aufgabenstellungen

a) Verwenden Sie für die Algorithmen unter 4.1.2.1 statt Oszillatoren externe MIDI-Klänge.

b) Bedienen Sie Parameter von allen möglichen Patches aus Kapitel 3 mit Eingabegeräten.

4.3.3 Appendix

4.3.3.1 Andere HIDs

Neben der normalen Tastatur und Maus und MIDI-Geräten wächst die Zahl anderer Eingabegeräte noch beständig. So werden für Computerspiele Joysticks und ähnliches gebraucht, für Zeichnungen Tablets bis hin zu Bewegungssensoren. Gegenwärtig (Juni 2008) gibt es noch kein allgemeines Objekt in Pd, das die Informationen dieser Geräte wiedergibt. Es können nur folgende Externals genannt werden:

joystick“, das Informationen von Joysticks empfangen kann; „wintablet“ für Wacom Tablets unter Windows; „hid“ unter Linux und MacOSX, das viele Eingabegeräte registriert. Seit einiger Zeit gibt es auch das Arduino-Board, an das man analoge Geräte anschließen kann, deren Informationen es digitalisiert. Mit zusätzlicher Software können diese Informationen dann auch in Pd empfangen werden.

4.3.3.2 Video-Input

Es gibt für Pd die Video-Erweiterung GEM, mit der auch aus eingehendem Video-Material – ob von einer vorab aufgenommenen Datei oder live von einer Webcam – Zahlen gewonnen werden können, die sich dann natürlich wiederum als Parameter von Klängen nutzen lassen.

4.3.4 Für besonders Interessierte

4.3.4.1 Instrument Design

Mit der Kunst des kompositorischen Gebrauchs externer Eingabegeräte habe ich mich theoretisch in einem Vortrag bei den Lagerhaus Lectures Freiburg befasst, auf den ich an dieser Stelle hinweise:

http://www.kreidler-net.de/theorie/instrument-design.htm