Multimedia mit Processing

Multimedia mit Processing

Multimedia mit Processing

Multimedia mit Processing

Multimedia mit Processing


In den vorherigen Artikeln haben wir uns mit 2-D- und 3-D-Ausgaben im leeren Raum beschäftigt. Wir konnten uns zwar im Raum bewegen, aber das Ganze kann man auch interaktiver und lebhafter gestalten. Daher möchten wir in diesem Artikel einen Augmented Reality Equalizer bauen: Wir zeichnen auf den ausgedruckten Marker-Codes im Bild der Webcam die Amplitude – also die Lautstärke – der einzelnen Frequenzbänder des Mikrofoneingangs.

Mit der Bibliothek video ist es denkbar einfach, sich Bilder aus der Webcam zu besorgen. Der Einstiegspunkt ist die Klasse processing.video.Capture. Nachdem die Bibliothek über den Menüpunkt Sketch | Import Library | video eingebunden wurde, können wir Capture instanziieren. Es stehen verschiedene Konstruktoren zur Verfügung. In der Regel reicht schon new Capture(this) aus. Falls man von mehreren angeschlossenen Kameras eine bestimmte ansprechen oder die Auflösung selbst bestimmen möchte, stehen auch hierfür Konstruktoren bereit:

  • available(): Gibt true zurück, falls mindestens eine Kamera gefunden wurde

  • start(): Fängt mit der Aufnahme an

  • stop(): Beendet die angefangene Aufnahme

  • read(): Liest das aktuelle Bild in den Puffer, damit ist das Capture-Objekt auch als normales Bild zu verwenden – mehr später

  • list(): Statische Methode, welche die vorhandenen Kameras und ihre Konfigurationen auflistet

Toneingang

Eine weitere spannende Bibliothek für Processing muss zunächst aus dem Internet geladen werden, was mit Processing 2.0.x sehr einfach ist. Analog zum letzten Artikel rufen wir die Bibliothek über Sketch | Import Library | Add Library ... in der Suchmaske ab. In der Maske suchen wir nach minim und installieren die Bibliothek.

minim vereint drei Bibliotheken (JavaSoundAPI, Tritonus, MP3SPI) in sich und vereinfacht deren Umgang in typischer Processing-Manier: keine Callbacks, keine obskuren Arrays, keine Versionskonflikte. Mit minim lassen sich Sounddateien abspielen, Metadaten auswerten, Frequenzen analysieren und vieles mehr. In unserem Beispiel möchten wir einfach das Mikro abhören, um zum Beispiel auch eigene Töne zu analysieren.

Analog zum Capture gibt es die Einstiegsklasse ddf.minim.Minim_, die es zu instanziieren gilt, z. B. mit new Minim(this). Zwei Methoden bieten einen sehr einfachen Zugriff auf unterschiedliche Tonquellen:

  • loadFile(): Lädt eine Datei und stellt ein Player-Objekt für den Track zur Verfügung

  • getLineIn(): Holt sich das Eingabesignal auf dem Eingabe-Port und stellt ein Input-Objekt zur Verfügung

Mit getLineOut() lassen sich Töne und Effekte ausgeben, was aber in dem Artikel nicht weiter von Belang ist. Die Fast-Fourier-Transformation wiederum ist wichtig, um das Signal in verschiedene Frequenzbänder aufzulösen. Die zeitliche Länge und die Abtastrate...