Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung |
Stand: 2012-01-01
Max/MSP ist ebenso in der experimentellen Musik beliebt wie als Werkzeug für Signalverarbeitung.
Der Name soll an Max Matthews (Entwickler der Musik-Programmiersprache MUSIC) erinnern.
Die Entwicklung wurde von Miller Puckette am IRCAM begonnen. Die Software wurde ab 1990 erst von Opcode und wird seit 1999 von Cycling '74 vertrieben und weiterentwickelt.
Miller Puckette hat seit 1996 das konzeptionell sehr ähnliche, aber freie PD (Pure Data) entwickelt.
Max selbst verarbeitet nur „Messages“ nach Art von MIDI oder OSC. Mit dem Paket MSP (Max Signal Processing oder Miller Smith Puckette) kam eine Audio-Verarbeitung nach Art von Pure Data dazu. Mit dem Paket Jitter kann die Software auch mit Bildern und Video umgehen und 3D-Grafiken erzeugen (analoge Erweiterung bei Pure Data: GEM).
Die Runtime zum Ausführen der „Patches“ kann frei weitergegeben werden. Mit dieser ist es allerdings nicht möglich, Patches zu editieren.
Dank der leichten Erweiterbarkeit durch „Externals“ gibt es für Max/MSP und Pure Data eine große Sammlung an Erweiterungen.
Seit 2009 gibt es mit Max for Live eine Version, die in Ableton Live integriert ist.
Edit: In diesem Modus kann man ein „Patch“ bearbeiten. Presentation: In diesem Modus kann man eine grafische Oberfläche für das „Patch“ zusammenstellen. Zum Beispiel im Inspector lässt sich auswählen, welche Objekte in der Presentation sichtbar sein sollen. Die können auch verschoben und skaliert werden.
Die Objekte von Max empfangen und/oder senden (mehr oder minder sporadische) Messages. Die meisten Objekte von MSP empfangen und/oder senden (kontinuierliche) Signale. Das wird auch durch eine Tilde ~ im Namen der Klasse des Objekts angezeigt. Im Zweifelsfall gibt es dieselbe Operation einmal für Messages (ohne Tilde) und einmal für Signale (mit Tilde).
Die Eingänge sind oben an den Kästchen, die Ausgänge unten. Der linke Eingang ist meist derjenige, an dem eine Message etwas auslöst. Die Eingänge rechts müssen also schon vorher ihre Werte erhalten haben.
Man kann Messages durch Objekte erzeugen lassen, zum Beispiel durch kslider (Bildschirmklaviatur), slider, button (Message: Bang) oder toggle. Ebenso kann man Messages aber auch wie Objekte im Patch platzieren. Sie reagieren dann auf Mausklick oder auf ein ankommendes Bang.
Hinter jedem Objekt steckt eine Hilfefunktion, die das Objekt in einem realen Patch zeigt.
Audio-Verarbeitung: ezadc~ ist der Audioeingang, ezdac~ der Audioausgang. Die Audioverarbeitung muss z.B. durch Klicken auf eines dieser beiden Objekte aktiviert werden. sfplay~ gibt eine Audiodatei wieder. Mit cascade~ und filtergraph~ kann man komplexe Filter bauen.
print gibt die ankommenden Messages in das Max-Fenster aus. Mit print abc steht jeweils abc davor usw.
Add Watchpoint Monitor/Break, Enable Debugging, Step usw.
Mit number, number~, meter~, levelmeter~, scope~ und spectroscope~ kann man sich Daten live im Patch ansehen.
Wenn „Probing“ an ist, kann man den aktuellen Pegel eines Signals sehen, wenn man den Mauszeiger über eine Verbindungslinie hält.
Meine Demodatei (siehe Zip): eq.maxpat
sfplay~ spielt Audiodateien ab. Die Message 1 startet, die Message 0 stoppt und spult zurück.
filtergraph~ berechnet second-order sections gemäß der Kennlinien, die man mit der Maus in seiner grafischen Oberfläche zurechtklickt. Die nfilters-Message gibt dabei an, wie viele Sektionen es werden sollen. cascade~ ist das eigentliche Filter.
Meine Demodatei: synth.maxpat
mtof wandelt MIDI-Notennummern in Hertz.
gain~ ist ein logarithmischer Pegelsteller; es unterdrückt Zipper-Noise.
rect~ erzeugt eine Rechteck-Welle ohne Aliasing. Der zweite Eingang von rect~ kann benutzt werden, um die Pulsweite zu verstellen. Im Beispiel hängt hier ein 0,7-Hz-Sinus dran.
Der Hüllkurvengenerator adsr~ nimmt nicht nur ein Triggersignal an, sondern verwendet den dort ankommenden Zahlenwert als Maximalamplitude.
Meine Demodatei: sampleplayer.maxpat
Die Audiodaten landen in einem buffer~. Der wird nicht eigens verdrahtet. Zum Laden schickt man ihm die Message read. Anzeigen lässt sich der Inhalt mit waveform~.
Zum Abspielen dient groove~. Dieses Objekt will die Abspielgeschwindigkeit im Verhältnis zum Original haben. Um die zu bestimmen, wird das Verhältnis des Frequenz des Originals (mit Zahlenfeld einstellen) und der per MIDI angefordeten Frequenz gebildet. Damit das Sample immer wieder von vorne spielt, wird bei Note On die Message 0 generiert und an groove~ gesendet.
Meine Demodateien: polysynth.maxpat und mySynth~.maxpat
Das Objekt poly~ kann ein weiteres Patch (hier mySynth~) mehrfach intern ausführen und Notenbefehle auf diese Stimmen verteilen. Dazu versteht es zum Beispiel MIDI-Tonhöhe und MIDI-Velocity mit einem davorgehängten „midinote“ als Message. Das Patch, das von poly~ vervielfältigt wird, muss mit dem Objekt thispoly~ angeben, ob es gerade spielt oder nicht. Solange es spielt, wird ihm von poly~ keine neue Note zugewiesen (Ausnahme: steal ist an und es sind nicht genügend Stimmen frei). Die einfachste Art, thispoly~ mit dieser Information zu füttern, ist, ein Signal an seinen Eingang anzulegen, das null wird, wenn die Note beendet ist. Am einfachsten nimmt man dazu den Ausgang des Hüllkurvengenerators adsr~. Obendrein hat adsr~ noch einen speziellen Ausgang, an dem er eine mute-Message für thispoly~ generiert. Wenn man auch die noch mit thispoly~, wird die jeweilige Stimme in Notenpausen zur Senkung der Rechenlast schlafen gelegt.