× Aufzeichnungen eines Kunststudenten. Dies ist die Niederschrift zu meinem Kunststudium an der HGB Leipzig.
Folgend einige Hinweise dazu:

(1) Ich möchte niemandem schaden. Ich möchte aber meine Studienzeit in all seinen Facetten festhalten. Dabei ist alles von Interesse, was mit dem Studium an der Hochschule, mit Kunst allgemein und mit meiner eigenen Arbeit im Speziellen zu tun hat.
(2) Fehlerhafte Informationen sind – ungewollt – Teil der Notizen. Sie sind meinem Wissensstand, der Konzentration in stundenlangen Sitzungen und schlecht lesbaren handschriftlichen Notizen geschuldet.
(3) Zitate sind nur hinterlegt, wenn ich mir sicher bin, dass es so gesagt wurde. Die Zitate sind aus dem Zusammenhang gerissen. Das ist nicht böswillig.
(4) Meine künstlerische Arbeit hat größtenteils die Suche und den Zweifel zum Thema. In Einzelgesprächen mit Professoren, Werkstattleitern und Dozenten nehme ich dessen Ansichten wahr und verarbeite diese später in den Notizen. Deshalb bin ich jetzt da, wo ich stehe. Wenn ich einen Hochschulangestellten also mit seiner Meinung darstelle, darf er sich freuen, Teil meiner künstlerischen Entwicklung zu sein.

Leipzig, den 13. Dezember 2016
Redigierte Fassung vom 25. Mai 2018


Klasse Bildende Kunst
HGB Leipzig

Kurs Multimediaprogrammierung

Montag, 27. Januar 2014

Kurs Multimediaprogrammierung Link Vorstellung Aufgabe Webcambild mit Mikrofon verzerren OpenCV: Gesichtserkennung (Idee mit Heiligenschein) OSC Link mit Processing PureData steuern 3D-Kamera Daten zu Processing schicken Kommunikation zwischen unterschiedlichen Programmen auf selben Rechner / zwischen unterschiedlichen Rechnern CV-Bibliothek einbinden: import hypermedia.ivid.*; Bibliothek in C geschrieben (wegen Geschwindigkeitsvorteil) OpenCV: mit eigener Capture-Funktion erzeugen mit: opencv = new OpenCV(this); Bild lesen (für späteren Zugriff): opencv.read; Speicher anlegen: capture(640,480); Bild anzeigen (inklusive Skalierung): image(opencv.image(),0,0,800,600); Profildatei lesen (im Hintergrund werden Schritte für Gesichtserkennung durchgeführt): opensv.cascade(OpenCV.CASCADE_FRONTALFACE_ALT); Rechteck um erkannten Kopf: Rectanglefaces[] = opencv.detect(1.2,2,OpenCV.HAAR_DO_CANNY_PRUNING[50,50]); komplexer MotionFlow-Algorithmus (nicht nur Helligkeitswerte, sondern auch Richtung und Entfernungsänderungen) Rectangle einbinden, vor setup(): import java.awt.Rectangle; Anzahl erkannter Gesichter: println(faces.length); Tiefpass-Filter Link: bei schneller Bewegung den Mittelwert nehmen
Selbstporträt mit Beispiel-Skript, Processing
Selbstporträt mit Beispiel-Skript, Processing

Montag, 20. Januar 2014

Kurs Multimediaprogrammierung Link mehrere draw-, -keyPressed, -mouseOver-Funktionen bei komplexen Programmen sinnvoll (wie Spiele mit Menü, Spiel mit unterschiedlichen Levels, Abspann) arbeiten mit Webcam (Heiligenschein) public class Level1{void draw(){}} andere draw-Funktion aufrufen: registerMethod("draw", new Level1()); wieder herausnehmen mit unregisterMethod(); Audio-Bibliothek minim Link AudioPlayer sound; Minim soundSystem=new Minim(this); sound = soundSystem.loadFile("sound.wav"); sound.loop(); FFT (Fast Fourier-Transformation) mathematischer Algorithmus, der Funktion in anderen Raum transformiert fft = new FFT(sound.bufferSize(), sound.sampleRate()); bufferSize: Puffergröße kleiner Puffer: System reaktionsschnell, aber ungenauer fft.specSize(): Fenstergröße, die verarbeitet wird (Anzahl unterscheidbarer Frequenzen) fft.forward(sound.mix): führt die Frequensanalyse durch Frequenz auslesen: fft.getBand(i); Mikrofon: AudioInput sound; sound = soundSystem.getLineIn(); Video integrieren Bibliothek: video Capture cam; cam = new Capture (this, width, height); in der draw-Funktion: image(cam,0,0); cam.read(); Selbstporträt Selbstbildnis mit Beispiel-Skript, Processing processing-capture.jpg Beispiele unter File > Samples > Libraries > video > Capture Möglichkeiten/Spielereien mit der Webcam aufgelistet alle Pixel eines Bildes sind normalerweise in einem "Band" angeordnet muss in x und y umgerechnet werden (Breite x Höhe): x+y*width Pixelausgabe: updatePixels(); stellt Array des letzten Kamerabildes zur Verfügung: cam.loadPixel(); Aufgabe: mit Mikrofon das Webcam-Bild beeinflussen (je nach Tonlage oder Lautstärke Bild verzerren oder farblich verändern)

Montag, 13. Januar 2014

Kurs Multimediaprogrammierung Link Unterschiede Funktion / Klasse Pufferüberlauf (buffer overflow), häufigste Sicherheitslücke in aktueller Software Link zu große Datenmengen in einem zu kleinen reservierten Speicherbereich: andere Speicherstellen werden überschrieben auf Bibliotheken zugreifen, "Libraries" Sound-Bibliothek, Beispiel "Minim" Link Sprachausgabe: "ttslib" Link Bibliothek in Processing-Ordner "libraries" kopieren (Apfel+d = Datei kopieren) über "Import > Library" "ttslib" in aktuelles Projekt importieren TTS sprecher = new TTS(); "TTS" = Klassenname "sprecher" = Variable, selbst gewählt sprecher.speak("Hi!"); Frequenz ändern: setPitch() "map": Abbildung von einem Wertebereich in einem anderen 0 als 50 und width als 200 festgesetzt: map(mouseX,0,width,50,200); Frequenz 100 = Normalwert mehrere Stimmen gleichzeitig thread("sprecher1"); Funktion wird parallel zum Hauptprogramm abgearbeitet Name der Funktion wird übergeben ("sprecher1") notiert Link ein Lied mit richtiger Herzzahl und Tonlänge per Computer nachahmen Import Library > minim (mit mp3- und wav-Dateien arbeiten) Minim soundSystem = new Minim(this); AudioSnippet s; 1 s = soundSystem.loadSnippet("sound.wav"); 2 s = SoundSystem.loadSample("sound.wav"); loadSample: mehr Funktionalität als loadSnippet (nur einfaches Abspielen) roten Text in Meldefenster ausgeben: system.err.println() Sounddatei "anschubsen" (mehrere Male hintereinander ausführbar): s.trigger(); notiert Link nur bestimmte Teile einer Sounddatei abspielen: aus einem vorhandenen Satz mit dem selben Material eine andere Aussage machen (Beispiel: "wahr" > "falsch", wobei das nur bei längeren Sätzen geht) getLineOut(); AudioOut dac = soundSystem.get LineOut(Minim.Stereo,1024); dac.addSignal(ton); ton.setFreq(200); Aufgabe: Melodie aus Frequenzen herstellen
bit.fall, Julius Popp, 2007
bit.fall, Julius Popp, 2007
bit.flow, Julius Popp
bit.flow, Julius Popp
Polygone, Processing
Polygone, Processing

Montag, 6. Januar 2014

Kurs Multimediaprogrammierung Link Vorteile Benutzung von Klassen Link Klasse = allgemeine Vorlage für ein Objekt Eigenschaften von Objekt in Klasse definiert (Farbe, Form, …) Methoden zum "manipulieren" vom Objekt (drehen, vergrößern, …) Bibliothek hinzufügen Sprach-Bibliothek (Vorlesen von Text) Prozesse gleichzeitig abarbeiten, nicht mehr über draw() bei delay() sollen weiterhin Prozesse stattfinden Gravitation / Ablenkung von einzelnen Körpern (kompliziertes Beispiel Sonnensystem) notiert Link zufällig herumfliegende Objekte ergeben nach einer gewissen Zeit ein erkennbares Symbol (über den Endzustand wird rechnerisch "zurückgespult"), siehe Idee "Uhrwerk" chaotische Systeme bit.fall, Julius Popp, 2007 Link bitfall.jpg bit.flow, Julius Popp bitflow.jpg Julius Popp Link Link Übung Klassen Feld anlegen (Zeiger, noch keine Inhalte): objekte[] = new Objekt10 Feld-Inhalt erzeugen: objektei = new Objekt() pushMatrix(), popMatrix(): Zustand des Koordinatensystems wird abgespeichert und nach Objektzeichnung wieder verwendet Polygone, Processing Link ergebnis.jpg beginShape(), endShape(): definieren, was alles zu einem Objekt gehört beginShape([POINTS, LINES, TRIANGLES, QUADS, …]) endShape(filled?CLOSE:OPEN) "filled" ist true oder false Bézierkurve, modellierte Kurve, wichtiges Werkzeug für Vektorgrafiken Link curveVertex(); popStyle, pushStyle: Eigenschaften nur für ein Objekt verwenden Aufgabe: einzelne Objekte mit Tab-Taste aktivieren (farblich kennzeichnen) und drehen, skalieren, Position ändern Datenfeld hinzufügen: append() Aufgabe: ein Objekt als Kind-Element von einem anderen Objekt definieren (mitdrehen, mitskalieren, …)
Leuchtschnur in Natur, Bild über Stiers Lichtanlagen
Leuchtschnur in Natur, Bild über Stiers Lichtanlagen
Balance, Hans Kotter, London 2008
Balance, Hans Kotter, London 2008

Montag, 16. Dezember 2013

Kurs Multimediaprogrammierung Link Elektrolumineszenzfolien (EL-Folie) Link funktioniert mit Inverter flexible Folie, leuchtet bei angelegter elektrischer Spannung Entdeckung Elektrolumineszenz / Destriau-Effekt 1936 durch Georges Destriau im Labor von Marie Curie Link in Luft- und Raumfahrt eingesetzt Leuchtschnur in Natur, Bild über Stiers Lichtanlagen Link leuchtkunst.jpg Balance, London, 2008 Vorteile: geringe Einbautiefe, Flexibilität, homogene Lichtverteilung, geringe Leistungsaufnahme Link Link Abschottung gegenüber Sauerstoff und Wasser wichtig (Lebensdauer sonst verringert) Lebensdauer: 4.000 Stunden Mechanismen u. a. "Wechselfeldanregung" Folie aufgebaut wie Kondensator Elektronen werden beschleunigt, in angeregten Zustand versetzt Link senden Licht aus und fallen in Grundzustand zurück Balance, Hans Kotter, London 2008 Link Link balance.jpg notiert Link "wach' ich oder träum' ich" mit Elektrolumineszenzfolie im Hintergrund, damit mehr Licht durch rote und blaue Folie Processing: "Klassen" Timer programmieren mögliche Aufgabe: Töne nach bestimmter Zeit ausgeben Stoppuhr programmieren: "Stoppuhr uhr;" ("Stoppuhr" wird als "uhr" definiert) Aufgabe: Zeit stoppen, die Person braucht, um mit der Maus auf ein Element auf dem Bildschirm zu klicken Funktion in Klasse, die Klassennahmen trägt: spezielle Funktion, die automatisch bei name.draw() einmal aufgerufen wird boolean getroffen (float mx, float my) millis(): Anzahl vergangener Millisekunden, nachdem Arduino Arduino Board aktuelles Programm ausführte Link class B extends A (Klasse B übernimmt alles von Klasse A) "super.variable": greift auf Variable aus Oberklasse zu saveFrame() und saveFrame("bild###.jpg") ### wird automatisch durch FrameRate-Nummer ersetzt image(loadImage("fadenkreuz.jpg"), mouseX,mouseY); Fadenkreuz fürs Spiel statt Maus einbinden skalieren (b,h): image(Bild,x,y,b,h) (mit Dreisatz proportional skalieren) notiert Link PackMan mit eigenem Gesicht (Webcam) ausstatten Aufgabe: Klasse erstellen mit mehreren Funktionen (Kreise, Rechtecke, "PackMans" und Bilder bewegen sich im Raum und prallen aneinander ab)

Montag, 9. Dezember 2013

Kurs Multimediaprogrammierung Link Animation Welle als Klasse Klassenkonzept bisherige Verwendung: zusammengesetzte Variable class Ball() Ball b = new Ball(); Beispiel: b.r, b.x, b.y, … Klassen zur Strukturierung der eigenen Programme eigenen Variablentypen definieren Zeichenketten, Zahlen … zu "Mega-Variablen" zusammenfassen eigene Bibliothek basteln in extra Datei auslagern color f übergeben: "255x255x255x0" oder "#ffffff00" oder "0xffffff00" int*y: Zeiger auf int-Variable step(autist): autistischer Ball, der nicht mit anderen Bällen agiert neuen Tab: "Ball" (muss genau den Namen der Klasse haben) void DrawBall() in Klasse = Methode der Klasse "this." bezieht sich immer auf eine Klassen-Variable Anzahl Elemente in Array: ".length" for-Schleife ohne geschweiften Klammern: gilt immer nur für ein Befehl Stoppuhr programmieren mit Klassen (alle 5 Sekunden eine Ellipse zeichnen= Klassen Uhr.start(); und Uhr.aktuell(); Abstand zwischen zwei Punkten (x,y) bzw. (x,y,z): dist();

Montag, 18. November 2013

Kurs Multimediaprogrammierung Link keine Maus: noCursor(); wieder anzeigen: cursor(ARROW) bei Alpha-Transparenz bleibt oft ein wenig Farbe übrig (rundet den Wert auf und kommt nie auf 0% Farbe) mit arc-Funktion PackMan programmieren (Mund auf und zu) Spiel angefangen zu programmieren (unkonzentriert abgebrochen)

Montag, 11. November 2013

Kurs Multimediaprogrammierung Link 6 Minuten zu spät zu spät random: kein echter Zufallsgenerator deterministische Funktion für Außenstehende schaut es wie Zufall Zufall aus echter Zufall: in Kryptographie genutzt Link Zufall in der Quantenwelt Link durch Ungenauigkeit der Zahlen entstehen Muster Fixpunkt: Algorithmus hat sich "festgefressen" Aufgabe: überall wo ich hinklicke soll ein Stern gezeichnet werden Koordinaten von Linien für Stern aufgeschrieben und umgesetzt mit translate() und rotate() umgesetzt Farbraum HSB: Farbkreis colorMode(HSB,360,100,50); 360 = Farbe bei 360 Grad 100 = Sättigung 50 = Helligkeit for-Schleifen for(int i=1; i<=anz; i++){} mouseButton==RIGHT oder mouseButton==LEFT \t = Tab-Zeichen für print() und println() notiert Link Domain www.hgb-leipzıg.de oder www.hgb-leipzīg.de registrieren Teilen mit Rest: modulo() Beispiel: 100 % 100 = 0 (Rest 0) oder 200 % 100 = 0
kleines Spiel programmiert (Kugeln versuchen den Spieler aufzufressen und werden jedesmal größer; Spiel endet, sobald der Spieler aufgefressen wurde)
kleines Spiel programmiert (Kugeln versuchen den Spieler aufzufressen und werden jedesmal größer; Spiel endet, sobald der Spieler aufgefressen wurde)

Montag, 4. November 2013

Kurs Multimediaprogrammierung Link 2 Minuten zu spät zu spät 14 Minuten später angefangen Variablen "byte": Grundtyp, wenn man noch nicht weiß, was Inhalt sein soll 2^8 Zustände Datei einlesen: byte b[] = loadBytes("daten.dat"); notiert Link Website der Hochschule auf den Kopf stellen; über Sonderzeichen-URL, die der eigentlichen Domain ähnlich kommt; im Computerraum als Startseite anlegen (wird bei Neustart behalten) boolean: true oder false Vollbild mit Funktion: boolean sketchFullscreen(){return(true);} DisplayWidth und DisplayHeight: Gesamthöhe/-breite nutzen Variable global oder lokal definieren (je nach Gebrauch) Hintergrundfarbe heller werden lassen und danach wieder dunkler, mit If-Abfragen realisieren keyPressed: Faktor für schnelleres heller werden ändern line(0,0,l,0); translate(l,0); rotate(w); float w=radians(5); (5 Grad) translate(verschieben) scale() (vertikal und/oder horizontal spiegeln) pushMatrix() und popMatrix() Werte werden in andere Funktion übergeben und mittels popMatrix wieder gespeichert l+=random(-1,1); w+=0.01; translate zwar einfach, aber schlecht zu "überwachen (bei erreichen des Bildschirmrandes soll zum Beispiel die Richtung gewechselt werden) cos() und sin() Winkeländerung "dw" global ablegen kleines Spiel programmiert (Kugeln versuchen den Spieler aufzufressen und werden jedesmal größer; Spiel endet, sobald der Spieler aufgefressen wurde) kugeln.gif Aufgabe: Ellipse nehmen und Position so ändern, dass sie innerhalb des Bildschirmbereiches wandert (an den Ecken soll die Ellipse wieder in den Bildschirm reinwandern) Link
Das ist das Haus vom Nikolaus
"Das ist das Haus vom Nikolaus"

Montag, 28. Oktober 2013

Kurs Multimediaprogrammierung Link Aufgabe bis heute: "Das ist das Haus vom Nikolaus" mit Processing umsetzen E-Mail von gestern: "Na, da brauchst Du morgen gar nicht erst kommen. Schleifen werden wir wohl noch nicht behandeln." "Das ist das Haus vom Nikolaus" dasistdashausvomnikolaus.gif zuerst alle neun Punkte, die für Verbindung von Linien wichtig sind, in zwei Arrays (für x und y) ablegen Beispiel: int[] punktx = {0, 10, 10, 0, 0, 10, 5, 0, 10} mittels translate() wird Objekt zentriert und mit scale() vergrößert in for-Schleife mit line(punktxi, punktyi, punktx[i+1], punkty[i+1], j) Linien zeichen (j = Tiefe) Variable als boolean definieren: Wert 0 und 1 Vollbild mit size(displayWidth, displayHeight, P3D) und boolean sketchFullScreen(){return true;} P3D: für räumliches Erleben Link Haus rotieren lassen mit rotateX(), rotateY(), rotateZ() und rotate() Link inklusive kleiner grafischer Effekte riesige Kugel mit Lichteffekt für Hintergrund: lights() und sphere(650+zoom/1)
Mandelbrot-Menge mit farbig dargestellter Umgebung
Mandelbrot-Menge mit farbig dargestellter Umgebung
Code
Code
Ergebnis
Ergebnis

Montag, 21. Oktober 2013

Kurs Multimediaprogrammierung Link zu spät zu spät Einleitung Processing Link rein mathematische Formeln ergeben organische Formen: Mandelbrot / Apfelmännchen Link Mandelbrot-Menge mit farbig dargestellter Umgebung apfelmaennchen.jpg Fraktal = Form, die sich - immer kleiner werdend - unendlich oft wiederholt Grundsystem: Speicher (Daten) und Verarbeitungseinheit (jene verarbeiten) leere Datei belegt ohne Inhalt 4 KByte (kleinste Sektorgröße bei Festplatten von ehemals 512 Bytes auf 4 KB) Kommentare in Processing: // (einzeilig) und /* (mehrzeilig) */ alles, was benutzt werden kann unter "Help > Refference" zu finden jeder Befehl / Aufforderungssatz endet mit Semikolon Farbe festlegen: stroke(120); (Grauwert), stroke(120,5,10); (Farbwert) Ellipse: ellipse(50,50,30,20); 2*Pi: einmal den Kreis entlang radiand(360): Grad-Angabe statt Pi Bildgröße: size(100,100); Dreieck: triangle(x1,y1,x2,y2,x3,y3); Linienstärke: strokeWeight(10); QUARTER_PI: nicht Pi/4, da bei größeren Skripten unnötige Rechnungen bei Animationen: Funktionen initialisieren void setup() und Funktion void draw() Menü "Edit > Auto Format": automatisches Einrücken und Leerzeichensetzung frameRate(30): 30 mal je Sekunde Bild aktualisieren gebrochene Zahlen deklinieren: float wert; ganze Zahlen: int wert; print und println: Text ausgeben im Messagefenster Code processing1.jpg Ergebnis processing2.jpg Hintergrund neu zeichnen (bei Animationen sinnvoll): background(); Rechteck zeichnen mit Aplhawert für transparenten Hintergrund: fill(200,40); rect(0,0,100,100); Elemente verschieben (z nach hinten und vorne): translate(x,y,z); Aufgabe: Animation das-ist-das-Haus-vom-Nikolaus programmieren

Montag, 14. Oktober 2013

Kurs Multimediaprogrammierung Link Vorstellung verschiedener Autorensysteme freie 3D-Grafik-Software Blender Funktionen zur Modellierung, Texturierung und Animation dreidimensionaler Körper integrierte Programmiersprache: Python Video-Beispiele, in Blender entstanden Modelle erstellen, zum Fräsen kleine Interventionen in vorhandene Filme Kamerablick, Licht-Elemente Ausstellungssituation planen Scripting (wie Objekte duplizieren, Positionen verändern, Koordinaten-Datei einpflegen, Schleifen, Zufälligkeit) Pure Data: graphische Programmierumgebung für interaktive Multimediaprojekte Live-Übertragung von Daten (für Sound-Installationen) Baumstrukturen vor allem audiobasiert, aber auch u. a. Anbindung von Webcam mit anderen Programmiersprachen arbeiten (wie per PHP Daten aufbereiten und erzeugte Text-Datei in Pure Data importieren und verarbeiten) Processing: Einsatzbereich Grafik, Simulation und Animation spezialisiert Link Link Link für Gestalter, Künstler und Programmieranfänger, auch für eigene Android-Apps basiert auf Java Beispiel: line(10,10,90,90), rect(30,30,50,50) Im weiteren Verlauf Arbeit mit Processing (Projekt-Ideen für Umsetzung sammeln)