Eine Bibliothek (engl. library) ist nichts anderes als Code, den jemand programmiert hat und zur Verfügung stellt, damit du ihn verwenden kannst. Processing hat "von Haus aus" nicht die Funktionalität Sound abzuspielen bzw. wenn du das machen möchtest, muss du Processing selber so programmieren, dass es das kann und macht. Das haben aber andere Menschen bereits getan. Du kannst somit den Code von anderen verwenden und sparst dir somit viel Arbeit. Du musst somit nicht jedes mal das Rad neu erfinden, sondern kannst auf dem aufbauen, was andere bereits entwickelt haben. Im Java - und auch in anderen Programmiersprachen - ist es sehr überlich Libraries zu verwenden. Wir schauen uns das hier einmal exemplarisch an einer Audio-Bibliothek an.
Library importieren
Wenn man in Processing Sounds abspielen will, kann man die Sound Library von Processing verwenden. Diese Library ist sehr gut geeigent. Diese Bibliothek muss man zunächst aus dem Internet laden. Processing macht es einem sehr leicht. Es gibt den Menüpunkt Sketch → Library importieren ... → Library hinzufügen. Hier im Suchfeld "Sound" eingeben und die Sound Library von der Processing Foundation auswählen und installieren. Danach findest du die Library unter dem Menüpunkt Library importieren ..., wo du sie nur anklicken musst. Und dann passiert folgendes im Editor:
import processing.sound.*;
Was ist hier passiert?
- Processing hat für dich die Library aus dem Internet runtergeladen und in Processing gespeichert (du musst sie für andere Projekte nicht erneut runterladen).
- Processing hat für dich automatisch die Library zu deinem Projekt hinzugefügt mithilfe des Befehls
import.
Dabei haben Libraries immer solche Namen aus mehreren Worten, die mit Punkten verbunden sind. Jeder Punkt beschreibt eine neue Unterkategorie, ähnlich wie bei einem Ordner-System mit Unterordnern. In der ersten Zeile wird somit die Hautkategorie processing hinzugefügt. sound ist eine Unterkategorie innerhalb der processing-Bibliothek. Der Stern hinter dem letzten Punkt funktioniert wie eine Art Wildcard und sagt, dass wir alles innerhalb der Kategorie sound verwenden wollen.
Library verwenden
Nach dem Importieren kannst du alle Funktionen, Datentypen, etc. verwenden, die in der Library enthalten sind. Beim Verwenden von Libraries ist es immer sinnvoll sich die Dokumentation der Library anzusehen, damit man weiß, wie sie funktioniert. Die Anleitung von der Sound-Library findest du unter:
www.processing.org → Documentation → Libraries → Sound
Hier kannst du sehen, was alles an Befehlen und Funktionen in der Library enthalten ist. Ganz schön viel. Wir wollen eigentlich nur den Teil SoundFile (den findest du, wenn du in der Liste etwas runterscrollst). Da kannst du zum einen sehen, wie man ein SoundFile anlegt (oberster Eintrag), aber auch, was du alles mit diesem SoundFile dann machen kannst, z.B. play(), pause(), loop().
Wenn du auf den obersten Eintrag SoundFile klickst, dann kommst du auf eine Seite mit einem ganz einfachen Beispiel, wie du ein SoundFile anlegen und abspielen kannst:
import processing.sound.*;
SoundFile file;
void setup() {
size(640, 360);
background(255);
// Load a soundfile from the /data folder of the sketch and play it back
file = new SoundFile(this, "sample.mp3");
file.play();
}
void draw() {
}
Was geschieht hier?
- Zeile 1: Zunächst wird die Library importiert.
- Zeile 2: Eine Variable vom Datentyp
SoundFilemit dem Namenfilewird deklariert- darin ist noch nichts gespeichert, ihr Wert ist
null. - Beim Datentyp
SoundFilehandelt es sich um einen Objekttyp. Deswegen wird er groß geschrieben und hat einen Wert vonnull,sofern er noch nicht initialisiert wurde.
- darin ist noch nichts gespeichert, ihr Wert ist
- Zeile 9: Hier wird
filedann initialisiert mitfile = new SoundFile(this, "sample.mp3");- Objekttypen werden mithilfe von new intialisiert: es wird ein neues Objekt erstellt.
- Dafür braucht das Objekt aber ein paar Infos:
this:bedeutet in diesem Fall, auf welchen Kontext sich das Objekt bezieht.thisheißt hier soviel wie "dieses Programm".- "sample.mp3": Das ist der Pfad zu deiner Sound-Datei. Diese muss sich im data Ordner innerhalb deines Processing Projekts befinden.
Wenn du nun eine Audiodatei in deinen data-Ordner legst und sample.mp3 durch den Dateinamen deiner Datei ersetzt, dann sollte ein Sound abgespielt werden.
Wichtig: Deine Sound-Datei muss im Verzeichnis deines Processing-Programms liegen, genauer in einem Unterverzeichnis mit Namen "data".
Du kannst Dateien entweder ...
- händisch hinzufügen, indem du selber einen data-Ordner anlegst und die Datei dorthin verschiebst ODER
- du klickst in Processing auf Sketch → Datei hinzufügen und wählst eine Datei aus ODER
- du ziehst die Datei einfach per drag-and-drop in dein Processing-Fenster hinein. Dann übernimmt Processing den Rest.
Vielleicht willst du aber auch, dass deine Musik nicht direkt bei Programmstart spielt, sondern erst, wenn eine Taste gedrückt wurde. Das lässt sich mit keyPressed() realisieren.
Wenn dein Sound länger ist, kann es sein, dass dein Play-Kommando nichts tut, weil der Sound noch läuft. Um das zu beheben, musst du vor jedem play() den Sound auf die Nullposition zurücksetzen. Dazu verwendest du die Methode cue(). Diese Methode bekommt die gewünschte Position in Millisekunden. Wir nehmen einfach Null.
import processing.sound.*;
SoundFile file;
void setup() {
size(640, 360);
background(255);
// Load a soundfile from the /data folder of the sketch and play it back
file = new SoundFile(this, "sample.mp3");
}
void draw (){}
void keyPressed() {
file.cue(0);
file.play();
}
Willst du Hintergrundmusik laufen lassen und gleichzeitig "auf Kommando" einen Soundeffelt abspielen, dann brauchst du zwei SoundFiles. Eines starten wir in setup und das andere triggern wir mir keyPressed:
import processing.sound.*;
SoundFile music;
SoundFile effect;
void setup() {
size(640, 360);
background(255);
// Music file
music = new SoundFile(this, "music.mp3");
music.play();
// Sound effect file
effect = new SoundFile(this, "effect.mp3");
}
void draw (){}
void keyPressed() {
effect.cue(0);
effect.play();
}
Mit dem Befehl loop() läuft die Musik im Wiederholmodus. Du kannst die Hintergrundmusik mit pause() und play() steuern, z.B. per Tastendruck. Wir hängen den Effect-Sound an die Leertaste und das Play/Pause an die Taste P. Um zwischen Play und Pause umzuschalten, nutzen wir die Methode isPlaying(), die zurückgibt, ob der Player im Play- oder Pause-Modus ist (boolean).
import processing.sound.*;
SoundFile music;
SoundFile effect;
void setup() {
size(640, 360);
background(255);
// Music file
music = new SoundFile(this, "music.mp3");
music.loop(); // Musik in Endlosschleife abspielen
// Sound effect file
effect = new SoundFile(this, "effect.mp3");
}
void draw (){}
void keyPressed() {
if (key == ' ') {
effect.cue(0);
effect.play();
}
if (key == 'p') {
if (music.isPlaying()) {
music.pause();
} else {
music.loop(); // Musik ist immer noch im loop-Modus und muss nur wieder auf play gesetzt werden.
}
}
}
Zusammenfassung
Bibliotheken bzw. Libraries sind Code, den anderen Programmierer erstellt und zur Verfügung gestellt haben. Man verwendet Libraries, um gewisse Funkionalitäten verwenden zu können und diese nicht selber programmieren zu müssen. Über eine Library verwenden zu können, muss diese
- aus dem Internet runtergeladen und gespeichert werden (reicht einmal pro PC)
- in das Projekt importiert werden mithilfe von
import(für jedes Projekt nötig, das die Library verwenden soll)
Eine gute Bibliothek für Audio in Processing ist Sound. Wir verwenden davon folgende Elemente und Funktionen:
SoundFile:Ist das Objekt, das die Audiodatei enthält und mit dem man die Musik steuern kann.
= new Soundfile(this, "sample.mp3"): Weißt einemSoundFile-Objekt eine neue Datei hinzu..play():Startet die Ausgabe des Audio-Datei.isPlaying():Zeigt an, ob dasSoundFile-Objekt gerade etwas abspiel(boolean→ gibt true oder false zurück).pause():Pausiert den Sound.cue(sekunden):Setzt den Marker, ab wo die Audio-Datei gespielt werden soll auf eine bestimmte Stelle, die mit sekunden angegeben wird.
Weitere Informationen zur SoundFile Library findest du unter SoundFile.
Ein einfaches Programm, das nach dem Start Musik abspielt:
import processing.sound.*;
SoundFile file;
void setup() {
size(640, 360);
background(255);
// Load a soundfile from the /data folder of the sketch and play it back
file = new SoundFile(this, "sample.mp3");
file.play();
}
void draw() {
}