MIDI Beispielanwendungen in EyesWeb

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

MIDI Beispielanwendungen in Eyesweb

Die nachfolgenden Beispielanwendungen in EyesWeb demonstrieren den Einsatz verschiedener Sensoren und stellen zudem kleine Problemlösungen in EyesWeb dar. Für die Anbindung der Sensoren wird das I-CubeX-System verwendet. Die Eingänge des I-CubeX-Systems müssen dazu entsprechend konfiguriert werden. Hierfür wird die Konfigurationsdatei StandardSettingMitReset.icu zum Download bereit gestellt.

Die Eingänge des I-CubeX-Systems sind wie folgt belegt:

1. Turn
2. SlideWide
3. Hot&Humid(Hot)
4. Hot&Humid(Humid)
5. BendMicro
6. BendShort
7. ReachClose
8. Close
9. Magnetic
10. Light
11. Tilt2D 1
12. Tilt2D 2
13. G-Force2D 1
14. G-Force2D 2:
15. Touch
16. TouchStripe
17. Orient 2
18. Orient 1
32. Dummy Reset Channel

Vorlage Midi-Input

Verknüpfungen: MessageInput1 mit der MIDI-Schnittstelle, an welcher der Digitizer anliegt.

Eine Kombination die in jedem der folgenden Patch-Dateien vorkommt ist ein MIDI-Input mit anschließendem Filtern der eingehenden Daten. Da er so gut wie jedes Mal identisch ausgearbeitet ist, wird er hier kurz gesondert erklärt.
Über den Block MIDI-Input wird der Datenstrom der an der ausgewählten MIDI-Schnittstelle anliegt geöffnet. Danach werden die Daten durch zwei Filterblöcke geschickt. Im ersten wird bestimmt auf welchem Kanal die eingehenden Daten liegen, im zweiten auf welchen Controller-Wert die Anwendung hört. Da alle Kanäle, außer dem für den SlideWide Sensor, des Digitizers in der Grundkonfiguration so programmiert sind, dass sie Control- Change Messages schicken, ist der letzte Block zur Unterscheidung notwendig. In den letzten beiden Blöcken werden die Werte der Bytes Eins und Zwei der MIDI-Nachricht zu Skalarwerten umgewandelt und weitergegeben.

Anwendung Lautstärkenregelung für Sensor: Turn

Verknüpfungen: AudiFileReader_1 mit Datei: volume.wav

Hier wird über den Turn-Sensor die Lautstärke einer Audiodatei geregelt.
Die Audiodatei wird über den AudioFileReader1 geladen und an den Block UnaryOP1 weitergegeben. In diesem Block wird ein ankommendes Signal einer einfachen mathematischen Operation unterzogen, in diesem Fall einer Multiplikation. Da die Lautstärke von Null bis zur Eingangslautstärke der Datei geregelt werden soll, muss hier mit einer Zahl zwischen Null und Eins multipliziert werden. Der Parameter Value wird über den MIDI-Input parametriert, nachdem dieser zuvor durch den Block Rescale vom Wertebereich Null bis 127 auf den Bereich Null bis Eins umgerechnet worden ist. Zuvor wurde der Integerwert des MIDI-Inputs noch über den Block DomainConv_ 1 in einen Doublewert umgewandelt, damit der Rescale-Block ebenfalls Fließkommawerte ausgibt und nicht nur Null oder Eins.

Anwendung Tonmodulation/Pitchbend für Sensor: SlideWide

Bei dieser Anwendung wird im Block GeneratorExternalClock1 eine Sinuswelle erzeugt und über einen zusätzlich eingebauten Lautstärkeregler an den Audiooutput weitergegeben.
Durch die MIDI-Daten, die der Sensor liefert wird der Parameter Samplingfrequenz des Generatorblocks beeinflusst, d.h. man steuert durch ein Gleiten über die Sensoroberfläche die Tonhöhe. Dies kommt einem Drehen am Pitchbend-Rad eines Keyboards nahe - daher auch die Namensgebung. Bevor die Sensordaten in den Generatorblock kommen werden sie natürlich über einen Rescale-Block auf einen sinnvollen Wertebereich abgebildet, da ein Frequenbereich von Null bis 127 Herz nicht sehr anschaulich wäre. Zuvor wird außerdem über den Block ThreshCondition_1 ein Wert kleiner als Eins ausgeschlossen, da der Sensor die Eigenschaft aufweist, bei längerer Benutzung ab und zu den Wert Null ohne Benutzeraktion auszugeben. Damit dies zu keiner Tonhöhenveränderung führt, werden nur Werte Größer Null erlaubt.

Anwendung Rotfärben für Sensor: Hot&Humid(Hot)

Verknüpfungen: MultimediaFileReader_1 mit Datei: feuer.avi

In diesem Patch wird ein Videobild durch Ansteigen der Temperatur Rot eingefärbt.
Die über den Block MultimediaFileReader1 geladene Videodatei wird zuerst in ihre drei Farbkanäle aufgespaltet. Danach wird zu jedem der Kanäle in den Blöcken MonadicArithmeticOp eins bis drei, ein über Eingaben parametrierbarer Wert addiert. Diese Werte werden über den MIDI-Input gesteuert. Der Hot-Sensor liefert um so größere Werte je höher die Temperatur steigt, deshalb wird der Sensorwert zuerst auf den Wertebereich Null bis 255 (Acht Bit Farbtiefe pro Kanal) abgebildet und schließlich, in den dazwischen liegenden Blöcken, entweder von Null abgezogen (für den Grünen und den Blauen Kanal) oder zu Null dazuaddiert (für den Roten Kanal).

Anwendung Viertelkreis für Sensor: BendShort und BendMicro

In diesem Patch wird ein Kreuz auf einer Kreisbahn bewegt, je nachdem wie stark der Sensor gekrümmt wird.
Die Idee hierbei ist, die Bewegung des Fingers während der Krümmung des Sensors sichtbar zu machen. Zur Realisierung dieser Idee werden die ankommenden MIDI-Werte in eine X- und eine Y- Koordinate umgerechnet und der jeweilige, den beiden Werten entsprechende Bildpunkt in ein schwarzes Hintergrundbild eingezeichnet. Die Werte werden zunächst auf den Bereich Null bis 250 abgebildet und anschließend, zum einen als X-Koordinate mit einem Summand verrechnet, der die Lage des Viertelkreises auf der X-Achse im Bild beeinflusst. Zum anderen wird der Wert über die Formel Y = sqrt((Radius*Radius)-(x*x)) im Block UnaryGenericFunction_1 auf eine Kreisbahn abgebildet. Der Radius wurde in dieser Anwendung auf 250 festgelegt. Danach wird die Werteskala im nächsten Block umgedreht, das heißt der Wert 250 wird auf Null abgebildet und anders herum, um den Kreis richtig im Bild zu positionieren. Danach wird der Wert als Y-Koordinate im Graphen verwendet.

Anwendung Bildschieben für Sensor: ReachClose, Close und Magnetic

Verknüpfungen: MultimediaFileReader_1 mit Datei: jogging.avi

Da es sich bei den Sensoren, für die diese Anwendung konzipiert ist, um Annäherungssensoren handelt, wird hier die Person im Video aus dem Bild geschoben, je näher ein Gegenstand dem Sensor kommt. Dies geschieht über die Parametrierung des Blocks MergeOffset_1 der das Videobild auf einem gegebenen Hintergrundbild verschiebt. Da die Person nur horizontal aus dem Bild geschoben werden soll, wird hier nur der X-Offset beeinflusst. Der Block FilledFrame_1 liefert lediglich das Hintergrundbild.

Anwendung Lichtintensität für Sensor: Light

Verknüpfungen: MultimediaFileReader1 mit Datei: birne.avi

Hier wird die Deckkraft eines Videobildes über den MIDI-Input gesteuert. Da der Lightsensor auf Licht reagiert wird die Deckkraft des Videos größer, je mehr Umgebungslicht der Sensor misst. Dies wird über den Block VideoMixer_1 erreicht. Ist die Deckkraft des Videos kleiner als Eins scheint das darunter liegende Hintergrundbild, das der Block FilledFrame_2 erzeugt, durch. Um die einkommenden MIDI-Werte auf den Bereich zwischen Null und Eins abzubilden wird wieder ein Rescale-Block mit vorgeschaltetem DomainConv-Block benutzt.

Anwendung Bild Verschieben und Drehen für Sensor: Tilt2D

Verknüpfungen: MultimediaFileReader1 mit Datei: fallen.avi

In diesem Patch werden die Daten, die der Tilt2D-Sensor liefert dazu verwendet um ein Bild zu drehen und zu schieben, je nachdem wie der Sensor gehalten wird. Es wird davon ausgegangen, dass der Sensor mit Längsachse in Richtung der Fingerspitzen gehalten wird. Dann werden die Daten, die die Drehung der Hand liefert, dazu verwendet um den Parameter "Angle" des Blocks Rotate_1 zu steuern, das heißt die Drehung des Videobildes vor einem festen Hintergrund. Das Kippen der Hand (quer zur Längsachse des Sensors) steuert den Y-Parameter des Blocks MergeOff set_1 und verschiebt das Bild entlang der Y Achse.
Die Schieberegler an den anderen Parameter-Eingängen dienen, bei möglicher Variation der Bildgröße, zur mittigen Positionierung des Videobildes vor dem Hintergrund. Da der Tilt2D-Sensor zwei Eingänge des Digitizers belegt werden hier zwei MIDI-Befehle ausgewertet, jeweils mit anderem Controler-Wert.

Anwendung Filmbeschleunigen für Sensor: G-Force2D

Verknüpfungen: MultimediaFileReader1 mit jogging.avi

Diese Anwendung, geschrieben für den G-Force2D Sensor, ermöglicht das Steuern der Abspielgeschwindigkeit eines Films. Je größer die Beschleunigung die der Sensor misst, desto größer die Framerate des Videos. Es wird allerdings nur die Beschleunigung längs der Sensorachse verarbeitet um eine verwirrende Zuordnung zu vermeiden.
Da der Sensor im Ruhezustand den Wert 64 ausgibt, wird der Sensorwert im ersten Block von 64 abgezogen und in den beiden Folgenden in eine Betragsfunktion gesetzt, um negative Werte auszuschließen. Nach einer Abbildung auf einen sinnvollen Wertebereich wird im Block RunningOperation_1 ein Mittelwert über immer zehn aufeinander folgenden Werte ermittelt, um zu hektische Änderungen zu Vermeiden.
Anschließend wird noch eine Umwandlung in Integerwerte vorgenommen um den Input des MutlimediaFileReaders nicht zu verwirren, da ich denke, dass hier sonst einige Systemfehler produziert werden würden. Zuletzt wird der Wert an den Framerate-Parametereingang des MultimediaFileReaders übergeben.

Anwendung Druck auf Graph für Sensor: Touch und TouchStripe

Hier wird durch Druck auf den Sensor ein Graph im Schaubild nach unten verschoben. Man hat den Eindruck man drückt den Graph nach unten. Die eingehenden MIDI-Daten werden nach einer umgekehrten Abbildung auf den Wertebereich 500 bis Null (das heißt der Wert Null wird auf den Wert 500 abgebildet und umgekehrt) wird der Value-Parameter eines Generatorblocks gesteuert. Dieser gibt nun einen konstanten Wert an den Block XvsTime_1 weiter. Dort wird dieser Wert auf einer fortlaufenden Zeitachse abgetragen.

Anwendung Wertausgabe für Sensor Orient:

Ein Patch, der die ankommenden MIDI-Werte ausgibt.