Day by Day
(EN google-translate)
(PL google-translate)
Verzeichnis der im Verlauf des Semesters behandelten Themen
Montag 05.10.2020
Einführung (Vergleiche Inhalte unter diesem Link 02_WS2020_21/06_CC )Wichtige Hinweise
|
Videos aus dem Kurs CC vom 05.12.2020
Erste Schritte in Processing
Getting started with ProcessingGetting started with Android-Processing
Möglichkeiten von Processing anhand je eines Beispiels
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_001_minimal_music.mp402_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_002_BenutzerInterfaces_KIBA.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_003_Flippin_Pompoms.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_004_Flippin_pompoms.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_005_Zufall_bei_Cage_und_Xenakis.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_006_Klang_aus_Natuerlichen_Zahlen.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_007_Moeglichkeiten_Processing_Vernetzung.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_008_Einfuehrung_Processing.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_009_Einfuehrung_Processing_Android_VR.mp4
Entwicklung eines Step Sequencers -- siehe auch Link zu Komposition von Steve Reich
Steve Reich - Music for Pieces of Wood - Visualization02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_010_Step_Sequencer.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_011_Step_Sequencer.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_012_Step_Sequencer.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_05_013_Step_Sequencer.mp4
|
Stepper002.zip
Stepper003.zip
Stepper004.zip
Montag 12.10.2020
Geplante Themen
|
94_VSI/05_OSC/01_Datenaustausch -- OSC
34_html5_js/05_form -- HTML-Formulare
30_Informatik3/16_Nuetzliches/05_Internetprogrammierung/02_PHP_Programmierung -- PHP-Beispiel
30_Informatik3/16_Nuetzliches/05_Internetprogrammierung/03_PHP_OOP -- OOP mit PHP
Java-Snippet: Serverkommunikation mittels POST
package internet; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import hilfsklassen.Parser; public final class Serverkommunikation { public static String post(String[] name, String[] value, String in_url) { System.out.println("***** Serverkommunikation.class: String post(String[] name, String[] value, String in_url) *****"); if(name==null || value==null || name.length==0 || value.length==0 || name.length!=value.length || in_url==null || in_url.length()==0) { System.out.println("Ungültige Übergabeparameter in class Internet, Methode String post(String[] name, String[] value, String url)"); return null; } for(int i=0;igt;name.length;i++) { if(name[i]==null || name[i].length()==0 || value[i]==null) { System.out.println("Unvollständige Übergabeparameter in class Internet, Methode String post(String[] name, String[] value, String url)"); return null; } } try { String data = ""; for(int i=0;igt;name.length;i++) { if(igt;0) data += "&"; data += URLEncoder.encode(name[i], "UTF-8") + "=" + URLEncoder.encode(value[i], "UTF-8"); } URL url = new URL(in_url); URLConnection conn = url.openConnection(); conn.setDoOutput(true); OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream()); wr.write(data); wr.flush(); //Antwort laden: BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer gelesen = new StringBuffer(); String zeile=""; int anz=0; boolean ok_sichern = true; while ((zeile = rd.readLine()) != null) { zeile = Parser.trim(zeile); if(zeile!=null) { //System.out.println("Empfanene Zeile: "+zeile); gelesen.append(zeile); gelesen.append(" "); } } wr.close(); rd.close(); System.out.println("Daten zur Auswertung empfangen: "+gelesen.toString()); String ausgabe = gelesen.toString(); if( ausgabe!=null && ausgabe.length()gt;0 && !(ausgabe.length()gt;=5 && ( ausgabe.substring(0,5)).equals("ERROR") ) ) { //Weiterverarbeitung (Darstellung der Punkte in Bildansicht) System.out.println("Weiterverarbeitung der empfangenen Daten."); return ausgabe; } else { System.out.println("Es wurde keine lesbare Daten empfangen."); return null; } } catch(Exception e) { System.out.println(e); return null; } } public static String holeDateiinhalt(String BASISURL, String DATEINAME) { System.out.println("***** Serverkommunikation.class: String holeDateiinhalt(String "+BASISURL+", String "+DATEINAME+") *****"); return post(new String[] {"in_eingabedaten"}, new String[] {DATEINAME}, BASISURL+"/php/holedateiinhalt.php"); } public static String erzeugeOrdner(String BASISURL, String ORDNERNAME) { System.out.println("***** Serverkommunikation.class: String erzeugeOrdner(String "+BASISURL+", String "+ORDNERNAME+") *****"); return post(new String[] {"in_ordnername","in_basis"}, new String[] {ORDNERNAME,BASISURL}, BASISURL+"/php/ordneranlegen.php"); } public static String ausfuehren(String BASISURL, String BEFEHL) { System.out.println("***** Serverkommunikation.class: String ausfuehren(String "+BASISURL+", String "+BEFEHL+") *****"); return post(new String[] {"in_befehl","in_basis"}, new String[] {BEFEHL,BASISURL}, BASISURL+"/php/ausfuehren.php"); } public static String speicherDaten(String BASISURL, String DATEINAME, String DATA) { System.out.println("***** Serverkommunikation.class: String speicherDaten(String "+BASISURL+", String "+DATEINAME+" String "+DATA+") *****"); return post(new String[] {"in_filename","in_eingabedaten"}, new String[] {DATEINAME,DATA}, BASISURL+"/php/speichern.php"); } public static String speicherDatenKapseln(String BASISURL, String DATEINAME, String DATA) { System.out.println("***** Serverkommunikation.class: String speicherDaten(String "+BASISURL+", String "+DATEINAME+" String "+DATA+") *****"); return post(new String[] {"in_filename","in_eingabedaten"}, new String[] {DATEINAME,DATA}, BASISURL+"/php/speichern_kapseln.php"); } }
Code 0-1: Java-Klasse Serverkommunikation
PHP-Snippets
php.zipIm Verlauf der Vorlesung entstandene Processing-Sketche
Stepper005.zipStepper005send.zip
PHP-Beispiel
phptest.zipWährend der LV entstandene Video-Aufzeichnungen
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_12_001_Unterschiede_Java_Cpp.mp402_WS2020_21/06_CC/01_day_by_day/CC_12_10_2020_002_OSC_Beispiel_Zahl_senden.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_12_10_2020_003_OSC_Zahl_senden.mp4
02_WS2020_21/06_CC/01_day_by_day/CC_12_10_2020_004_Step_Sequencer_Remote.mp4
Montag 19.10.2020
Thema 1: Verwendung eines Servers zur Realisierung eines kooperativen Step-Sequencers über große Entfernungen hinweg
Vervollständigung des über einen Server arbeitenden kooperativen Step-Sequncer anhand des nachfolgenden Beispiels:
Die Implementierung ist sehr einfach gehalten, um sie leicht darstellen zu können.
Übung
Die Implementierung in "poststepper.zip" ist sehr einfach gehalten, um sie leicht darstellen zu können. Überlegen und diskutieren Sie, welche Unzulänglichkeiten die Implementierung aufweist und wie man sie beheben könnte. Versuchen Sie die ein oder andere Verbesserung selber vorzunehmen.
Thema 2: Generative Prozesse im Creative Coding
|
Um die hier aufgelisteten Aufgaben zu bewerkstelligen, kommen heutzutage häufig KI-Methoden zur Anwendung. Exemplarisch soll folgende Programmstruktur realisiert werden:
################################################################### [Gütekriterium für Phänotypen] [Genpool] Genetischer Optimierer: ... hat die Aufgabe die Mitglieder des Genpools zu bewerten. Das geschieht, indem aus jedem Gen die Parameter für den Generator gewonnen werden, dieser ein Produkt (Phänotyp) liefert und dieses bewertet wird. Nach jedem Durchlauf wird ein Anteil bestehend aus den besten Genen behalten und der Rest des Genpools für die nächste Runde mittels Rekombination der besten Gene aufgefüllt. ################################################################### |-----------| Gen ------> Parameter -----> | Generator | -----> Phänotyp -----> Bewertung |-----------| ... Resultat: immer bessere Phänotypen/Produkte ################################################################### Benutzerschnittstelle: ... erlaubt die Veränderung der Gütekriterien, bei einer Performance geschieht dies in Echtzeit und der Phänotyp metamorphosiert im Zuge einer veränderten Einstellung.
Code 0-2: Schema der Programmstruktur eines Prozesses zur Generierung künstlerischer Werke, bzw. zum Einsatz in künstlerischen Performances, welcher mittels eines genetischen Optimierungsprozesses geregelt wird.
Die ganze Anordnung macht nur Sinn, wenn der Generator ein sehr komplexes Instrument ist und die Einstellparameter dort nur sehr schwer auf das zu erwartende Produkt bezogen werden können.
(Fiktive) Beispiele hierzu:
|
https://de.wikipedia.org/wiki/Differentialgeometrie
schmetterling002.zip -- Muster-Generator mit komplexem, schwer vorhersehbarem Verhalten (Differential-Geometrie, Start mit: java Zini)
Bild 0-1: Ergebnis 1
Bild 0-2: Ergebnis 2
Bild 0-3: Schmetterling
https://www.youtube.com/watch?v=a3XDry3EwiU Fraktaler Flug 1
https://www.youtube.com/watch?v=pCpLWbHVNhk Fraktaler Flug 2
https://de.wikipedia.org/wiki/Logistische_Gleichung Bifurkations-Formel
https://de.wikipedia.org/wiki/George_David_Birkhoff Ästhetisches Maß nach George David Birkhoff M=Ordnung/Komplexität #pdf https://www.fi.muni.cz/reports/files/older/FIMU-RS-99-06.pdf Artikel zu George David Birkhoffs ästhetischem Maß angewendet auf Vasenformen
https://computerhistory.org/blog/algorithmic-music-david-cope-and-emi/ Über david Copes "Experiments in Musical Intelligence"
https://www.youtube.com/watch?v=PczDLl92vlc Cope, Stil: Bach
https://www.youtube.com/watch?v=t6WeiyvAiYQ Cope, Stil: Chopin
https://www.youtube.com/watch?v=2kuY3BrmTfQ Cope, Stil: Vivaldi
Wie funktioniert ein genetischer Optimierungs-Algorithmus?
siehe: 50_Simulationstechnik/07_GenalgorithmusBeispiele: siehe Proceedings zu EVOMUSART (Teil von Evo* == EVOSTAR)
Übung
Schreiben Sie einen genetischen Optimierungsalgorithmus, der AOG-Formeln variiert, um eine möglichst chaotische Partitur zu erzeugen.
Die Details werden im Unterricht diskutiert und fehlendes Wissen ergänzt.
Diskutieren Sie, wie eine gestische Schnittstelle hierzu aussehen könnte und wie sie konkret realisiert werden könnte.
Übung (selbsttätig)
Nehmen Sie die Bifurkationsformel x_n+1 = r*x_n*(1-x_n) als Grundlage für einen Melodiengenerator, der durch die Orientierung eines in der Hand gehaltenen Smartphones gesteuert wird. (vergl. Link weiter oben)
Innerhalb der Vorlesung aufeinander aufbauende Sketche, genetische Algorithmen betreffend:
AOGgenetisch001.zip -- Sonifikation: t=0,1,2,3,4,... x=((t*2)+7)%30, f = B // xAOGgenetisch002.zip -- Repräsentation der gleichen Formel durch ein gen
AOGgenetisch003.zip -- Auslagerung der Umsetzung des Gens in eine Formel in eine Funktion
AOGgenetisch004.zip -- Beginn der Implementierung des Optimierers: Zunächst den "Phänotyp" herstellen: der ist eine "Pianoroll", resp. Matrix m.
AOGgenetisch005.zip -- Einfaches Optimierungskriterium / Start der genetischen Optimierung. Übung3: Ersetzen Sie das Gütekriterium durch ein sinnvolleres.
Ein paar Auszüge aus der LV:
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_19_001_PHP.mp402_WS2020_21/06_CC/01_day_by_day/CC_2020_10_19_002_GENETISCH.mp4
FREITAG 23.10. ab 14:30Uhr ... Zusatzangebot:
Informeller Coffee Talk mit jungen Wissenschaftlerinnen und Wissenschaftlern der ESA.
https://www.esa.int/gsp/ACT/collab/sciencecoffee -- Frühere Beiträge im ScienceCoffee.
Ich werde den Talk über den bekannten BBB-Kanal streamen.
Ich werde dort meine Kompositionsmethode "Arithmetic Operation Grammar" vorstellen.
Montag 26.10.2020
|
Beispiel-Sketche:
polywheel010.zip
Sketche zum Testen direkter Klangerzeugung am PC
PC_sound_003.zip
PC_sound_004.zip
PC_sound_005_6kanal.zip
PC_sound_006_8kanal.zip
PC_sound_007_8kanal.zip
PC_sound_009_richtungstest.zip
Anwendungen
Übung
|
Während des Unterrichts entstandene Sketche:
02_WS2020_21/06_CC/01_day_by_day/CC_OPT_2020_10_26.mp4 -- Beispiel Optimierungskriterium
Soundtest001_PC.zip -- Kontinuierlicher Sienuston
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_26_Sinus.mp4 -- Kontinuierliche Sinuswelle als Sound erzeugen
Soundtest002_PC.zip -- Zwei Töne, veränderlich über Mausposition
Soundtest003_PC.zip -- Beliebig viele Töne durch Mausklicks, Koordinaten: Richtung und Höhe (verbessert!)
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_26_Bifurkation.mp4
Bitte bearbeiten Sie die Übung dieser Woche, aber auch noch die zwei der letzten weiter.
Montag 02.11.2020
|
Übung / Vorbereitung auf die Hausarbeit
a) Recherchieren Sie im Internet nach musikalischen Life-Performances, bei denen der Einsatz von Computer-Hardware, mobilen Geräten, Life-Coding, Sensordatenerfassung eine Rolle spielt.
b) Entwickeln Sie testweise ein erstes eigenes Konzept für eine Computer unterstützte musikalische Life-Performance. Machen Sie sich insbesondere Gedanken dazu, wie der Echtzeitaspekt mittels einer geeigneten Benutzerschnittstelle umgesetzt werden kann. Bemühen Sie sich, alles so konkret und differenziert wie nur möglich zu beschreiben.
Beispiele:
http://www.franziskabaumann.ch/de/ensembles/baumannziegler ... Sensorhandschuh beeinflußt elektronische Nachbearbeitung mit Mikrofon aufgenommener Stimme in Echtzeithttp://www.alexanderschubert.net/ ... "Echte" Musiker interpretieren Video-Partitur mit Gesten, siehe insbesondere "HELLO".
Während der LV entstandene Sketches
AOGgenetisch006.zip -- Güte aus Anzahl an verschiedenen TönenAOGgenetisch007.zip -- Güte aus Streuung
AOGgenetisch008.zip -- Güte aus Streuung und Anzahl an verschiedenen Tönen
In der Lehrveranstaltung entstandene Videos:
CC_2020_11_02_001_Streuung_als_Guetekriterium.mp4CC_2020_11_02_002_Rundgang_durch_Bibliotheken_von_Processing.mp4
CC_2020_11_02_003_Rundgang_Fortsetzung_Android_Processing_VR.mp4
CC_2020_11_02_004_TheMidibus_Library.mp4
CC_2020_11_02_005_TheMidibus_Fortsetzung.mp4
CC_2020_11_02_006_TheMidibus_Fortsetzung.mp4
CC_2020_11_02_007_Aspekte_bei_Umsetzung_von_Life_Performances.mp4
Montag 09.11.2020
Verbindliches Online-Meeting 8:30-10:00 zur gemeinsamen Vereinbarung des weiteren Vorgehens.
Je nach Dauer der gemeinsamen Besprechung könnten sich noch konkrete Themen anschließen, in denen es weiter darum geht, Ihnen mit Hilfe kleiner Programm-Snippets eine Grundlage für Ihr Projekt zu geben:
|
Material (vergl. LV):
WEBSOCKET.zip -- Java und Javascript kombinieren.TEXT!!! -- Dozent ansprechen
Zusatzangebot: Workshop Ubiquitous Music 2020:
|
Die Vorträge sind vor aufgezeichnet und hier anzuschauen (zum größten Teil mit Untertiteln):
Zu jedem Vortag gibt es eine Diskussion und es gibt noch Sondervorträge (Keynote-Speaker). Diese Live-Events werden über folgenden Link zu den im Programm angegebenen Zeiten übertragen:
(teilweise aber nur auf Portugiesisch)
Während des zweiten Teils der LV entstandene Videos:
CC_2020_11_09_001_WEBSOCKET1.mp4CC_2020_11_09_002_WEBSOCKET2.mp4
CC_2020_11_09_003_MARKOV_KETTEN_1.mp4
CC_2020_11_09_004_MARKOV_KETTEN_2.mp4
CC_2020_11_09_005_MARKOV_KETTEN_3.mp4
CC_2020_11_09_006_MARKOV_KETTEN_4.mp4
Montag 16.11.2020
8:30-10:00 -- Fortsetzung der Vorstellung und Diskussion von Konzepten und Implementierungsansätzen durch die Studierenden
Committments der Studierenden (zu bewältigende Aufgaben zu diesem Termin)
Projekt 1: "Pattern für den/die DJ(ane)" (Arbeitstitel)
|
Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)
|
Tip: Links zum ersten elektronischen Musikinstrument, dem Theremin:
https://www.youtube.com/watch?v=ajM4vYCZMZk
Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)
|
Weitere mögliche Themen je nach Bedarf:
|
Videos zu den einzelnen Themen
PERFORMANCE UBIMUS2020 #1 -- inFracta: Dialogue processes in a multi-modal environment (Ubimus Performance) Pessanha, T. et al. (University of Campinas)
PERFORMANCE UBIMUS2020 #2 Contracapas for remote double-bass and effects: Creative semantic anchoring, corpus linguistics and remote interaction (Ubimus Performance) Marcello Messina and Carlos Mario Gómez Mejía (NAP, Federal University of Paraíba)
John Cage -- Journeys in Sound
Listen : John Cage - in love with another sound -01
John Cage. From Zero
In The Ocean - A Film About The Classical Avant Garde
A Year With John Cage - How To Get Out Of The Cage (Documentary, 2012)
JOURNEYS IN SOUND a JOHN CAGE documentary 2012
Monitoring and Analysis of the Acoustic Landscape (Soundscape) in the Amarakaeri Communal Reserve
3D spectrograms from Humpback Whale calls
5 Most Mysterious Underwater Sounds Ever Recorded
Underwater Microphone Captures Honshu, Japan Earthquake
Hearing The Light: Astronomy Data Sonification
Sonification: The Music of Data
Encoding the Fibonacci Sequence Into Music
Japanese Sumo Robots
Resonance Experiment! (Full Version - With Tones)
This equation will change how you see the world (the logistic map)
Die wunderschöne Mathematik hinter der hässlichsten Musik der Welt: Scott Rickard auf der TEDxMIA
How to translate the feeling into sound | Claudio | TEDxPerth
Edgard Varese Film with interviews: Messiaen Xenakis
Iannis Xenakis (1 of 2) Filmed Interview in English with German subtitles
Iannis Xenakis filmed Interview (2 of 2) in English with German subtitles
Iannis Xenakis - Metastasis
Iannis Xenakis - Pithoprakta (w/ graphical score)
Steve Reich - Clapping Music (Scrolling)
Steve Reich - Music for Pieces of Wood - Visualization
Minimalism Music Techniques
Agile Softwareentwicklung / Scrum
Introduction to Scrum - 7 Minutes
1. SCRUM - Was ist SCRUM? Ein Überblick
2. SCRUM - Ein typischer Durchlauf
3.SCRUM - Die Rolle des SCRUM Masters
zu Montag 23.11.2020
neue Teilzielsetzungen:
Projekt 1: "Pattern für den/die DJ(ane)" (Arbeitstitel)
|
Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)
|
Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)
|
Jenseits der Technik
Gestatten: John Cage, Phänomenologe und Komponist. [Originaltitel: Listen : John Cage - in love with another sound -01]ZUR DISKUSSION: Oder? -- Ist denn jemand "Phänomenologe", der bei den "eigentlichen", den "voll erfüllten" Phänomenen stehen bleibt? -- Die Bestimmung "Phänomenologe" hat sich mir aufgedrängt, aber bei näherer Betrachtung fange ich schon wieder an daran zu zweifeln...
JOURNEYS IN SOUND a JOHN CAGE documentary 2012
Monitoring and Analysis of the Acoustic Landscape (Soundscape) in the Amarakaeri Communal Reserve
Hearing The Light: Astronomy Data Sonification
Japanese Sumo Robots
PERFORMANCE UBIMUS2020 #1 -- inFracta: Dialogue processes in a multi-modal environment (Ubimus Performance) Pessanha, T. et al. (University of Campinas)
PERFORMANCE UBIMUS2020 #2 Contracapas for remote double-bass and effects: Creative semantic anchoring, corpus linguistics and remote interaction (Ubimus Performance) Marcello Messina and Carlos Mario Gómez Mejía (NAP, Federal University of Paraíba)
KONZEPTMUSIK:
zu Montag 30.11.2020
Projekt 1: "Pattern für den/die DJ(ane)" (Arbeitstitel)
|
Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)
|
Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)
|
Thema: Neue Zielvereinbarungen für alle drei Projekte:
Projekt 1: "Pattern für den/die DJ(ane)" (Arbeitstitel)
Morphing überlegen / Überblenden fertig implementieren, siehe Beispiel unten.
Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)
---
Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)
---
int anzahl_pattern = 4; float[] volume = new float[anzahl_pattern]; float area; public void setup() { size(600,400); strokeWeight(height/100); stroke(255); frameRate(30); // pos0 pos1 pos2 pos3 // 0 1 2 3 // #----|----|----|----|----# // area area area area area == 5*area // | slider (hier mouseX) 1&2 aktiv area = width / (float)(anzahl_pattern+1); } public void draw() { background(0); for(int i=0;i<volume.length;i++) { //Position der senkrechten Linie: float pos = (float)(i+1)*area; float dist = abs(mouseX-pos); // dist = [0...area] if(dist>area) { volume[i] = 0.0; } else { volume[i] = 1.0 - dist/area; //normiert auf 0..1 } } for(int i=0;i<volume.length;i++) { float pos = (float)(i+1)*area; line(pos,0,pos,volume[i]*height); } }
Code 0-3: Morphing zwischen 4 Pattern (angedeutet, Slider entspricht Mausposition, volume == Lautstärke der Pattern, animiert)
Bild 0-4: Screenshot zu obigem Sketch.
Montag 07.12.2020
Thema: Neue Zielvereinbarungen für alle drei Projekte:
Projekt 1: "Pattern für den/die DJ(ane)" (Arbeitstitel)
---
Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)
---
Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)
---
Morphing003.zip
Bild 0-5: morphing3.png
int anzahl_pattern = 4; float[] volume = new float[anzahl_pattern]; float area; float[][][] polygon = { {{10,10},{110,10},{110,110},{10,110}}, {{10,10},{210,10},{210,110},{10,210}}, {{210,210},{310,210},{310,310},{210,310}}, {{50,10},{110,60},{50,110},{10,50}} }; public void drawPolygon(float[][] p) { noFill(); strokeWeight(height/200); for(int i=0;i<p.length;i++) { int k = (i+1)%p.length; line(p[i][0],p[i][1],p[k][0],p[k][1]); } } public void setup() { size(600,400); strokeWeight(height/100); stroke(255); frameRate(30); // pos0 pos1 pos2 pos3 // 0 1 2 3 // #----|----|----|----|----# // area area area area area == 5*area // | slider (hier mouseX) 1&2 aktiv area = width / (float)(anzahl_pattern+1); } float[][] pakt = new float[polygon[0].length][2]; //aktuelle Polygon, das aus dem Morphing entsteht public void draw() { background(0); stroke(255,0,0); for(int i=0;i<polygon.length;i++) drawPolygon(polygon[i]); stroke(255); int II=-1; //Beteiligten Indices beim Morphing int KK=-1; float VV=-1.0; float mouseX = width/2; for(int i=0;i<volume.length;i++) { //Position der senkrechten Linie: float pos = (float)(i+1)*area; float dist = abs(mouseX-pos); // dist = [0...area] if(dist>area) { volume[i] = 0.0; } else { volume[i] = 1.0 - dist/area; //normiert auf 0..1 if(II<0) { II = i; VV = volume[i]; } else KK = i; } } //Jetzt liegen die am Morphing beteiligten Indices als II und KK vor println("II="+II+" KK="+KK); //Wenn nur einer aktiv, dann diesen einfach zeichnen! if(KK<0 && II>=0 && II<polygon.length) //ein Polygon zeichnen { for(int i=0;i<polygon[II].length;i++) //Kopieren for(int k=0;k<polygon[II][i].length;k++) pakt[i][k] = polygon[II][i][k]; } else if(KK>=0 && KK<polygon.length && II>=0 && II<polygon.length && II!=KK) //Morphing durchführen { for(int i=0;i<polygon[II].length;i++) //Kopieren for(int k=0;k<polygon[II][i].length;k++) pakt[i][k] = VV*polygon[II][i][k] + (1.0-VV)*polygon[KK][i][k]; } for(int i=0;i<volume.length;i++) { float pos = (float)(i+1)*area; line(pos,0,pos,volume[i]*height); } stroke(0,255,0); drawPolygon(pakt); }
Code 0-4: Strukturelles Morphing von Polygonen als Anhaltspunkt für das Morphing von Sound-Events.
Soundobjekt-Entwurf
Soundobjekt001.zipSoundobjekt002_loop.zip -- Loops automatisch beenden
Soundobjekt003_Kollision.zip -- Behandlung von Kollisionen / Distanzberechnung siehe draw()
Steseq001.zip
Steseq002_variablesTempo.zip
Steseq003_Multi.zip