Grundlagen von Processing
Einleitung
Programmieren
Programmieren im Sinne der Informatik bedeutet ein möglichst effizientes Formulieren von Anweisungen an die Rechenmaschine (vgl. Pearson, 2011, S. xviii):
Ein Algorithmus ist eine Handlungsanweisung, wie mittels einer endlichen Anzahl von Schritten ein bestehender Input in einen angestrebten Output überführt werden kann: Mithilfe von Algorithmen werden vordefinierte Probleme gelöst. Stalder (2016, S. 167).
Experimentelles Programmieren kann jedoch darauf abzielen, mit den klassischen Ansprüchen der Informatik zu brechen und Code mit Hinblick auf seinen ästhetischen audiovisuellen Output zu erstellen. Zufallsfunktionen aber auch Umweltreize oder menschliche Interaktion, die durch Computer-Vision oder andere Sensoren registriert werden, können die Determiniertheit von Programmabläufen durchbrechen und immer neue Variationen in den Ergebnissen von Code hervorbringen.
"… the designer is no longer making choices about a single, final object but creating a matrix encompassing an entire population of possible designs. This is a move from thinking about an object to thinking about a field of infinite options" Reas, 2010, S. 93
Interruptions (Vera Molnar, Plotter Drawing, 1968/69)
Kenntnisse der Programmierung sind daher seit geraumer Zeit nicht mehr nur für Software-Entwickler interessant, sondern haben sich in zahlreichen Arbeiten als kreatives Werkzeug und Inspirationsquelle für künstlerischen Ausdruck erwiesen. Bekannt geworden als ›creative coding‹, nutzen KünstlerInnen, DesignerInnen, ArchitektInnen und MusikerInnen derartige Strategien in – oft selbst entwickelten – Programmen, um ihren kreativen Ausdruck originär zu erweitern. Andererseits war es immer wieder eines der Bestreben von künstlerischem Handeln, menschliche Lebensrealität in Werken zu thematisieren. Algorithmen mit Namen wie Page Rank (Google), EdgeRank (Facebook), „intelligente“ Chat Bots in Call Centern oder beispielsweise Nachrichtentexte, die von Programmen nach Prinzipien der „Narrative Science“ aus Daten erstellt wurden, prägen unsere Lebensrealität in der digitalen und physikalischen Welt. Nichts spricht dagegen, diese Lebensrealität Teil des künstlerischen Ausdrucks werden zu lassen. Der Code selbst hat keine Bedeutung (oder eine ganz eigene), er dient der Lösung eben einer Aufgabenstellung oder ist jener Code, der zur Übermittlung von Information verwendet wird. Er spricht in seiner reinen Form keine bestimmte Wahrnehmungsmodalität an, kann sich in visuellen oder auditiven Artefakten zeigen oder von KünstlerInnen gezielt und wiederum codiert ("Parameter-Mapping") übersetzt werden.
Manfred Mohr, P-197/K, Acrylic on canvas, 1977
Wenn → Manfred Mohr bereits seit den 1960er Jahren Zufallsprozesse heranzieht, um zu visuellen Strukturen zu gelangen, so sind diese Prozesse in erster Linie mathematische Modelle, die einen Prozess beschreiben, dessen Zahlen-Output nicht auf eine bestimmte menschliche Wahrnehmungsdomäne gerichtet ist. Erst Mohrs künstlerische Übersetzung macht daraus ein Bild.
Ästhetische Bedeutung wird in diesem Kontext von KünstlerInnen in den Algorithmus oder das mathematische Modell gelegt und sein Output im künstlerischen Sinne wahrnehmungsgerichtet geformt. Hierzu wird der Algorithmus und der Code bewusst gestaltet, er ist der zentrale Ort des künstlerischen Handelns.
Warum also selbst Programmieren?
Daß ich nicht mehr mit saurem Schweiß
Zu sagen brauche, was ich nicht weiß;
Daß ich erkenne, was die Welt
Im Innersten zusammenhält
Faust, Faust: Der Tragödie Erster Teil, Nacht.
- Möglichkeit der Kontrolle der Grundlegenden Parameter bei der Erzeugung von Visualisierungen und Klang (weniger Überformung durch Software)
- Das Material und seiner Verarbeitung kann Quelle für Inspiration sein, in diesem Fall die „Material“ des Codes. Kennt man das Material nicht, so lassen sich seine Möglichkeiten nur erahnen.
- Kunst sucht mitunter neues, bisher unbekanntes. Für viele Anwendungen (Installationen, Interaktive Projekte, …) gibt es keine bestehenden Anwendungen, mit denen sie sich adäquat Realisieren ließen. Einzigartige Konzepte verlangen einzigartige Umsetzungen.
- ›Fertige‹ Lösungen zu verwenden kann mitunter den Bewegungsspielraum für den Gestaltungsdrang einschränken, da diese Lösungen stets eigene Formungsbedingungen in das Projekt einbringen.
- Das Verständnis um die Grundlegende Logik von Programmierung lässt sich leicht auf andere Sprachen (bspw. JavScript, PHP, Java, C) übertragen um diese zu erlernen/verwenden.
Einige random() Beispiele aus völlig verschiedenen Anwendungsbereichen
Tympananic Touch (Marko Ciciliani, 2017).
Test Pattern (enhanced version) (Ryoji Ikeda , 2011) „test pattern is a system that converts any type of data (text, sounds, photos and movies) into barcode patterns and binary patterns of 0s and 1s. Through its application, the project aims to examine the relationship between critical points of device performance and the threshold of human perception.“
What Is Life ? (Simon Katan, 2012) „What Is Life ? (2012) is a computer visual and synthesised sound composition for live performance. The piece uses a custom visual sequencer called SoundLens which comprises an OpenFrameworks visual interface and an OSC controlled SuperCollider patch. These combine to imply an analogue between a simulated visual focal effect, reminiscent of a camera lens or microscope, and auditory depth of field. Into this world are placed multiple copies of a sound producing mechanical object. Inspired by a coincidental similarity between certain arrangements of these objects and the double helix structure of DNA, the piece takes its title from the name of Erwin Shrodinger’s book in which he develops the concept of a complex molecule with the genetic code for living organisms. Nevertheless, there is a deeper connection between title and piece in that it progresses solely through the copying and mutation of its own material.“
Cube with Magic Ribbons (Simon Katan, 2012) „Cube with Magic Ribbons is a computer visual and synthesised sound composition for live performance. The piece takes its title from a drawing of M.C.Escher which is rich with contradictory perspectives but it is also inspired by the wrapped spaces found in the two dimensional graphics of early computer games such as Asteroids and Pac-Man. It was created using a custom visual sequencer SoundCircuit, which rather than employing a conventional DAW layout, allows multiple virtual tape-heads to travel through a two-dimensional wrapped space along tracks that can be freely inter-connected. As the tape-heads travel through the resultant network, the topological layout of the tracks comes to directly influence the macro form of the music. Furthermore, as the piece unfolds the nature of this already confusing space reveals itself to be increasingly elastic and complex, yet inexorably intertwined with the musical form.“
Metastaseis (Iannis Xenakis, 1954)
cf. city flows (Till Nagel und Christopher Pietsch, FH Potsdam, 2016) „cf. city flows is a comparative visualization environment of urban bike mobility designed to help citizens casually analyze three bike-sharing systems in the context of a public exhibition space. Three high-resolution screens show the space of flows of New York City, Berlin, and London through visualizing bike journeys“
Sisyphus (Bruce Shapiro, 2016) „Cube with Magic Ribbons is a computer visual and synthesised sound composition for live performance. The piece takes its title from a drawing of M.C.Escher which is rich with contradictory perspectives but it is also inspired by the wrapped spaces found in the two dimensional graphics of early computer games such as Asteroids and Pac-Man. It was created using a custom visual sequencer SoundCircuit, which rather than employing a conventional DAW layout, allows multiple virtual tape-heads to travel through a two-dimensional wrapped space along tracks that can be freely inter-connected. As the tape-heads travel through the resultant network, the topological layout of the tracks comes to directly influence the macro form of the music. Furthermore, as the piece unfolds the nature of this already confusing space reveals itself to be increasingly elastic and complex, yet inexorably intertwined with the musical form.“
DEEP WEB (Christopher Bauder, Robert Henke) „Deep Web is a monumental immersive audiovisual installation and live performance created by light artist Christopher Bauder and composer and musician Robert Henke. Presented in enormous pitch dark indoor spaces, Deep Web plunges the audience into a ballet of iridescent kinetic light and surround sound. The work was presented as a preview at CTM 2016 Festival Berlin and will be followed by its original presentation at the Festival of Lights Lyon in December 2016.“
Geschichte von Processing
Processing wurde speziell für die Anwendung im audiovisuellen Medienbereich entworfen. Es wird seit 2001 am MIT (Boston/USA) unter der Leitung von Ben Fry und Casey Reas (später auch Daniel Shiffman) entwickelt. Processing eine vereinfachte Form der Programmiersprache Java dar, die speziell entwickelt wurde, visuelle Elemente und Interaktion zu programmieren. Dementsprechend setzt sich die Zielgruppe von Processing vor allem aus Gestaltern und Künstlern zusammen, die eben zuallererst dies und erst in zweiter Linie Programmierer sind. In den letzten Jahren sind einige weitere Projekte aus Processing hervorgegangen von denen sicherlich das Hardware-Projekt Arduino, dessen Programmierumgebung auf Processing basiert, das bekannteste ist. Neuste Updates in Processing selbst stellen spezielle Modi der Entwicklungsumgebung dar, die es ermöglichen für Web-Browser im JavaScript-Modus ,für → Android-Geräte oder in → Python zu entwickeln.
Fig. – Entwicklungslinie von Processing
Neben Processing existieren einige andere Umgebungen, die mit jeweils variierenden Schwerpunkten für die Entwicklung von audiovisuellen Systemen entwickelt wurden:
- openFrameworks (C++) →http://openframeworks.cc/
- Cinder (C++) → https://libcinder.org/
- Quartz Composer (Modular) → Quartz
- OpenGL → www.opengl.org/wiki/Main_Page
- VVVV (Modular) → https://vvvv.org/
- MAX (Modular, kommerziell) → https://cycling74.com/products/max/
- Pure Data → https://puredata.info/
Aufgabe
Recherchiere in Zweiergruppen Anwendungsbereiche und typische Merkmale der für Creative Programming interessanten Frameworks QuartzComposer, VVVV, MAX, Cinder, openFramWorks. Zeige Beispielprojekte.
Teilweise existieren Schnittstellen für den Datenaustausch zwischen Processing und diesen Tools und sie lassen sich nutzen, um in Projekten mit Processing zusammenzuwirken. Die modulare Sound-Software MAX von Cycling `74 ( → MAX) beispielsweise kann durch Processing-Programme angesteuert werden bzw. Processing kann Daten von MAX empfangen. Beispiel: → MAX/Ableton LIVE/Processing-Projekt
Einen wichtigen Standard für den Austausch von Daten im audiovisuellen Bereich stellt "Open Sound Control" (OSC) dar. Wir werden es im Verlauf der Lehrveranstaltung verwenden, um Informationen zwischen Processing und MAX hin- und herzuschicken.
Die Programmoberfläche
Das Sketch-Fenster
Da die Software für den Kurs vorinstalliert ist wird nicht näher auf die Installation eingegangen, alle notwendigen Informationen finden sich jedoch im → entsprechenden Bereich der Processing Website.
Fig. – Sketchfenster
Eine Übersicht über die grundlegenden Funktionen findet sich auch hier auf der Website von Processing: → Anleitung
Das Ausgabfenster
Neben dem Sketch-Fenster verfügt Processing über das Ausgabefenster, das sich automatisch öffnet, wenn man den Ausführen-Button drückt. Es zeigt das Programm, dass zuvor im Sketch-Fenster erstellt wurde, im unteren Beispiel sind dies lediglich zwei einfache Linien:
Fig. – Ausgabefenster. Seine Größe wird mit dem Befehl size() festgelegt.
Aufbau eines Sketches
Processing-Programme werden als „Sketch“ bezeichnet. Jeder Sketch liegt im Dateisystem in einem eigenen Ordner. Dieser Ordner wird von Processing automatisch angelegt und erhält den gleichen Namen, der beim speichern für den Sketch definiert wurde.
Linearer Programmablauf
Um ein Programm zu verfassen kann man Befehle untereinander schreiben:
size(690,200);
background(255);
noFill();
stroke(150);
strokeWeight(1);
rect(0,0, 690, 199);
fill(100,200,0,100);
stroke(0);
strokeWeight(20);
ellipse(345,100, 80, 80);
Standardaufbau eines Sketches
Ein typisches Programm besteht in Processing jedoch aus den beiden Funktionen setup() und draw() (eine Erklärung, was Funktionen genau sind, folgt weiter unten):
void setup()
{
println(„start“);
}
void draw()
{
println(„loop“);
}
setup() wird am Begin des Programmablaufs einmal ausgeführt. Hier wird bspw. die Größe des Ausgabefensters definiert. Die Funktion draw() hingegen wird als Schleife immer wieder ausgeführt, jeder Durchlauf zeichnet einen Frame in das Ausgabefenster. Das geht so lange, bis man den Stop-Knopf drückt. So lassen sich Bewegung und Interaktion realisieren, was bei einem statischen Programm nicht möglich wäre. Wenn man beispielsweise eine Form von links nach rechts durch das Ausgabefenster wandern lassen möchte, so kann man seine x-Koordinate bei jedem Durchlauf von draw() um den Wert 1 erhöhen, den Inhalt des Ausgabefensters löschen und dann das Objekt an neuer Position zeichnen:
int x = 2;
void setup(){
size(690,200);
background(255);
fill(0);
}
void draw(){
ellipse(x, 100, 4,4);
x = x +10;
}
Die Anweisungen, die durch die geschweiften Klammern zusammengefasst sind, werden als Code-Block bezeichnet. Code-Blöcke treten später auch bei Schleifen oder Verzweigungen auf (siehe unten).