Edge Sampler

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche

Projekt Edge Sampler

Intention

Die Grundidee ist, eine Bewegungsgesteuerte "Triggerung" / Auslösung von Audiomaterial zu entwickeln.

Dabei soll die Bewegung über eine Webcam erfasst werden und der Bildrand als Triggerzone dienen. Der Name "EdgeSampler" rührt von der Idee her, dass im professionellen Audiobereich Sampler oft über Pads zur Triggerung von Samples verfügen. Hier ist das Pad die Kante des Bildes - daher "Edge".

Grundidee


Dazu muss der Benutzer oder ein Teil des Benutzers klar vom Hintergrund seperierbar sein! Eine Farbsegmentierung, für die sich letzten Endes auch entschieden wurde, oder ähnliche Verfahren sind daher notwendig (Details siehe unten).

Desweiteren würde ein permantes "Scharf-Schalten" der Triggerzone bedeuten, dass der Sound ständig neu getriggert würde. Darum ist es notwendig einen nicht-sensitiven Bereich logisch so zu definieren, dass der Benutzer sich erst aus der Triggerzone entfernen muss, bevor eine erneute Triggerung wieder möglich ist.

Nicht-sensitiver Bereich

Benutzte Software/Tools

EyesWeb XMI

Adobe Flex (Flash Builder)

Flosc

Popforge

Umsetzung

Allgemeine Voraussetzungen

Der Grundablauf ist wie folgt:

Bildverarbeitung mittels EyesWeb

- Aufnahme des Kamerabildes
- Verarbeitung der Daten
- Übergabe der Daten an die OSC-Schnittstelle

Tonausgabe Flex

- Daten werden durch „Flosc“ an Flex übergeben
- Laden der Sounds
- Verarbeitung/ Ausgabe der Cursorposition

EyesWeb XMI - Patchfile

Ansicht des kompletten Patchfiles

Kameramodul

Kameramodul in EyesWeb
Das Kameramodul von EyesWeb XMI wird in dieser Patchdatei zum Aufnehmen des Kamerabildes von einer Webcam benutzt.

Die Kamera liefert ein Bild im RGB - Farbraum mit schon normierten Werten für die Größe des Kamerabildes. Dies erleichtert die spätere Verwendung der Positionen, da diese auch schon normiert auf das Bild bezogen werden.

Kanalseparierung und Farbauswertung

Kanalseparierung und Farbauswertung
more Infos to come later

Kanalzusammenführung

Kanalzusammenführung
more Infos to come later

Filtern von Flächen

Filtern von Flächen
more Infos to come later

Ermitteln des Bildschwerpunktes

Schwerpunkt des Bildes ermitteln
more Infos to come later

Darstellen des Schwerpunktes und Übermittelung an die Applikation

Darstellen des Schwerpunktes und Übermittelung an die Applikation
more Infos to come later

Umsetung in Flash Builder

Anforderungen

Die Applikation muss folgende Dinge implementieren:

• Laden und verwalten von Sounddaten
• Empfang der OSC Pakete
• Auswerten der Informationen
• Abspielen der Sounds wenn gewünscht, möglichst in Echtzeit

Herausforderung

• Problem : Flash interne Soundengine stark latenz-behaftet. (ca. 250 ms !)
• Gesucht : Soundengine ohne nennenswerte Latenz
• Lösung : Popforge Library

Eine Klasse TriggerableSound implementiert die notwendigen Operationen um Sounds zu laden, halten und zu starten/stoppen. (->Sourcecode)

Kommunikation mit EyesWeb

Ein frei erhältlicher JavaSercer Flosc bietet eine fertige Schnittstelle über TCP/IP an. Dabei empfängt Flosc OSC Pakete von EyesWeb und sendet diese über eine definierbare IP und Port als aufbereites XML Paket über das Netzwerk.
In der Flex Applikation gibt es bereits eine fertige Klasse XMLSocket, die eventbasiert ankommende TCP Pakete empfangen kann.
Da der Aufbau des XML Pakets bekannt ist, ist die Weiterverarbeitung nicht weiter schwierig.

<OSCPACKET ADDRESS="127.0.0.1" PORT="52538" TIME="0">
<MESSAGE NAME="">
<ARGUMENT TYPE="i" VALUE="375"/>
<ARGUMENT TYPE="i" VALUE="95"/>
</MESSAGE>
</OSCPACKET>
Aufbau des Pakets.

Verarbeitung der Informationen

Die Applikation erhält ununterbrochen die momentane Koordinate aus Eyesweb, von daher muss entschieden werden ob die Koordinaten im interessanten Bereich liegen.

public function handleXY():void
{
// Right Border
if(_currentX > _maxX - _triggerZoneWidth && _soundRight1.triggerable)
{
_soundRight1.playSound();
_soundRight1.triggerable = false;
}
// Right Deadzone
else if(_currentX < _maxX - _triggerZoneWidth - _deathZoneWidth && !_soundRight1.triggerable)
{
_soundRight1.triggerable = true;
_soundRight1.stopSound();
}
usw...

Liegen die Koordinaten also im intersierenden Bereich, wird der Sound abgespielt, bzw. die Sperre des Bereichs aufgehoben.

Resultat

So sieht die Applikation schliesslich aus:
EdgeSampler

Sounds können einfach im Installationsverzeichnis ausgetauscht werden.

Weblinks