4.1 Klangwiedergabe
Sound mit Processing
Zunächst muss die in Processing für Sound zuständige Library importiert werden:
import processing.sound.*
Bevor ein Soundfile abgespielt werden kann muss es in den Speicher geladen werden. Zu diesem Zweck steht der Datentyp SoundFile zur Verfügung:
SoundFile track;
Das Objekt wird initialisiert, indem der Filename dem Konstruktor übergeben wird. Processing akzeptiert derzeit Sound-Dateien vom Typ .wav, .aiff und .mp3.
track = new SoundFile(this, 'song.mp3');
Da das Laden von Sound-Dateien von der Festplatte ein recht langsamer Vorgang ist, sollte die der entsprechende Code im setup()-Bereich des Sketches stehen (und somit den draw()-loop nicht ausbremsen).
Geladene Sounds lassen sich mit play() oder loop() abspielen.
track.play();
Folgende Funktionen stellt das SoundFile-Objekt zur Kontrolle der Wiedergabe bereit:
Funktion | Aufgabe |
---|---|
play() | Sound wiedergeben |
loop() | Sound in Schleife abspielen |
pause() | Wiedergabe pausieren |
stop() | Wiedergabe stoppen |
amp() | Lautstärke der Wiedergabe |
pan() | Position im Stereo-Spektrum einstellen |
rate() | Geschwindigkeit der Wiedergabe einstellen |
Beispiel 3-1

import processing.sound.*;
SoundFile track;
float loudness, mouseRate;
boolean manipulate = false;;
void setup(){
size(200,200);
background(255);
track = new SoundFile(this, "dot.mp3");
track.play();
}
void draw(){
background(255);
if (manipulate){
loudness = map(mouseY, height, 0, 0.0, 1.0);
println(loudness);
track.amp(loudness);
mouseRate = map(mouseX, 0, width, -1, 3);
track.rate(mouseRate);
line(mouseX, 0, mouseX, width);
line(0, mouseY, height, mouseY);
}
}
void keyPressed(){
if (key == '0'){
manipulate = !manipulate;
}
if (key == '1'){
track.jump(0);
print(track.duration());
}
if (key == '2'){
track.jump(track.duration()/2);
}
}
Wie lässt sich eine Tastensteuerung realisieren, die es erlaubt in Schritten von 10 Sekunden vorwärts bzw. rückwärts zu springen?
Processing with MAX
Mew, Emily Groves

Creating instruments in MAX

The rather complex synthesizer ›X.FM‹ comes with MAX7
Exercise (20 minutes):
Build your own tiny MAX-instrument. Use the objects saw~, etc.
Exchange data with Open Sound Control (OSC)
Für das Senden und Empfangen von Daten zwischen Programmen oder auch zwischen zwei Computern (ob im gleichen WLAN oder übder das WWW) existieren Übertragungsprotokolle. Das bekannteste (oder zumindest am weitesten verbreitete) von ihnen ist TCP/IP (Transmission Control Protocol / Internet Protocol), das für die Übertragung der Daten im Internet verantwortlich ist.
Ein weiteres Protokoll ist UDP (User Datagram Protocol). Es sendet und empfängt im Gegensatz zu TCP/IP keine Verbindungsbestätigung. Bei Games können so bspw. Daten und aktuelle Spielstände zwischen Playern synchronisiert werden.
Für audiovisuelle und künstlerische Anwendungen hat sich OSC (Open Sound Control) als wichtiges Protokol durchgesetzt:
"Open Sound Control (OSC) is a protocol for communication among computers, sound synthesizers, and other multimedia devices that is optimized for modern networking technology. Bringing the benefits of modern networking technology to the world of electronic musical instruments, OSC's advantages include interoperability, accuracy, flexibility, and enhanced organization and documentation." (opensoundcontrol.org)
Exchange Data between Processing and MAX
MAX patch:

import netP5.*;
import oscP5.*;
OscP5 osc;
NetAddress myRemoteLocation;
void setup(){
size(800, 600);
osc = new OscP5(this, 12000);
myRemoteLocation = new NetAddress("127.0.0.1", 13000);
}
void draw(){
}
void mousePressed(){
OscMessage myMessage = new OscMessage("hello");
myMessage.add("world!");
osc.send(myMessage, myRemoteLocation);
println(myMessage);
}
Klangerzeugung
Nun, da wir wissen, wie man Daten von Processing nach MAX sendet, können wir diese verwenden, um Klänge zu steuern und zu generieren.