kramann.info
© Guido Kramann

[stud] Login: Passwort:










kramann.info
© Guido Kramann

[stud] Login: Passwort:




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
  • Der Kurs findet jeden Montag als Präsenzveranstaltung im Technikgebäude im Raum IWZ135 statt.
  • Hier bei day by day finden Sie eine Liste der jeweils behandelten Themen und die vereinbarten Übungsaufgaben
  • Kommende Woche findet der Kurs nach Möglichkeit in der doppelten Stundenzahl, also dann 8h ab 8:30 statt.
  • Ihre Aufgaben bis kommende Woche: Processing installieren und sich mit den Beispielen vertraut machen, sowie den Step-Sequencer variieren/erweitern (Videos/Code-Download)
Videos aus dem Kurs CC vom 05.12.2020
Erste Schritte in Processing
Getting started with Processing
Getting 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.mp4
02_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 - Visualization
02_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
  • Im Unterricht entstandene Sketch-Versionen des Step-Sequencers:
Stepper001.zip
Stepper002.zip
Stepper003.zip
Stepper004.zip

Montag 12.10.2020

Geplante Themen
  • Wiederholung Step-Sequencer / Erweiterungen durch Studierende
  • Syntax von Java
  • Ubiquitous Music
  • Internetprogrammierung mit Processing: OSC
  • Internetprogrammierung mit Processing: Kooperativer Step-Sequencer ohne Server mit OSC
  • HTML
  • Formulare
  • Server-seitige Programmierung mit PHP
  • Kooperativer Step-Sequencer mit Server (XAMPP / PHP)
36_Java -- Java-Syntax
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;i&#gt;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;i&#gt;name.length;i++)
                    {
                        if(i&#gt;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.zip
Im Verlauf der Vorlesung entstandene Processing-Sketche
Stepper005.zip
Stepper005send.zip
PHP-Beispiel
phptest.zip
Während der LV entstandene Video-Aufzeichnungen
02_WS2020_21/06_CC/01_day_by_day/CC_2020_10_12_001_Unterschiede_Java_Cpp.mp4
02_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:

poststepper.zip -- Server seitiges php-Skript und Processing-Sketch, das POST-Anfragen an den Server richtet.

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
  • Creative Coding agiert auf einer Metaebene.
  • Nicht das künstlerische Produkt wird unmittelbar erarbeitet, sondern ein Generierungsprozeß, der es hervorbringt.
  • Doch nach welchen ästhetischen Gesichtspunkten soll ein solcher Generator verfahren?
  • Wie kann ein generativer Prozeß dazu gebracht werden, ästhetische Kriterien zu berücksichtigen?
  • Und schließlich: Wie kann eine Benutzerschnittstelle aussehen, die den ästhetischen Geschmack eines Users erfaßt und den Prozeß daran anpaßt?

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:

  • Man durchsucht ein Fraktal nach Bereichen, die einem bestimmten Gesicht ähnlich sehen
  • Man sucht eine möglichst einfache Lindenmayer-Formel (vergl. Lindenmayer-Systeme), um die 3D-Repräsentation eines Baumes auszufüllen.
  • Statt expliziter Gütekriterien, entscheidet der Benutzer, welche Gene behalten werden, z.B. bei der Generierung einer Melodie, die dem Benutzer gefällt.
  • Der Verlauf von GO-Spielen wird so sonifiziert, dass die klanglichen Strukturen mit den Spielsituationen korrespondieren.
  • Menschliche Gesten werden interpretiert und in Klänge umgesetzt.
https://de.wikipedia.org/wiki/Lindenmayer-System

https://de.wikipedia.org/wiki/Differentialgeometrie

schmetterling002.zip -- Muster-Generator mit komplexem, schwer vorhersehbarem Verhalten (Differential-Geometrie, Start mit: java Zini)
Ergebnis 1

Bild 0-1: Ergebnis 1

Ergebnis 2

Bild 0-2: Ergebnis 2

Schmetterling

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_Genalgorithmus

Beispiele: 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 // x
AOGgenetisch002.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.mp4
02_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

  • 8:30-9:00 Video zur Einführung in AOG
  • Fragen zu den Übungen behandeln
  • Soundkarte ansteuern

Beispiel-Sketche:

asound001.zip
polywheel010.zip

Sketche zum Testen direkter Klangerzeugung am PC

PC_sound_002.zip
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

PULSE2357_010_klang.zip -- Spiel mit Klängen / Zwischenstand
Übung
  • Analylsieren Sie anhand PULSE2357_010_klang die notwendigen Änderungen, um bei der direkten Klangerzeugung vom PC auf ein Android-Device umzusteigen.
  • Steuern Sie auf einem Android-Device mittels des dreiachsigen Beschleunigungssensors drei Sinus-Töne.
  • Wie, das ist Ihnen überlassen, aber überlegen Sie sich ein stringentes Konzept.

Während des Unterrichts entstandene Sketche:

AOGgenetisch006.zip -- Optimierungskriterium
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

  • Besprechung der Übungen
  • Besprechung zum weiteren Vorgehen
  • Präsentation diverser Processing Libraries
  • Weitere Konkretisierung der Hausarbeit
  • Planung von Timeslots für eine individuelle Betreuung
  • Exemplarische Projektplanung: Planerische Ausgestaltung eines anvisierten Szenarios
Ü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 Echtzeit
http://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önen
AOGgenetisch007.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.mp4
CC_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:

  • Auswertung Ihrer Recherche (vergl. letzte Übung weiter oben)
  • Markov-Ketten
  • Markov-Ketten als Grundlage für ein Gütekriterium
  • Gestalttheorie und Bildverarbeitung
Material (vergl. LV):
WEBSOCKET.zip -- Java und Javascript kombinieren.

TEXT!!! -- Dozent ansprechen


Zusatzangebot: Workshop Ubiquitous Music 2020:

http://ubimus.inf.poa.ifrs.edu.br/index.php/program/
  • ACHTUNG, Angaben in brasilianischer Zeit. Man muß, wenn ich's richtig kapiert habe VIER Stunden dazu zählen, also aus 13Uhr wird 17Uhr.

Die Vorträge sind vor aufgezeichnet und hier anzuschauen (zum größten Teil mit Untertiteln):

https://www.youtube.com/channel/UC0bLhuPpWXg623a3gM4Chxg/videos

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:

https://www.youtube.com/channel/UC0bLhuPpWXg623a3gM4Chxg

(teilweise aber nur auf Portugiesisch)

Während des zweiten Teils der LV entstandene Videos:
CC_2020_11_09_001_WEBSOCKET1.mp4
CC_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)

  • "Randomisierung" begrifflich ausdifferenzieren und praktische Beispiele in Ansätzen liefern
  • Sets von Pattern bereitstellen

Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)

  • Machbarkeitsstudien unter Verwendung der Libraries TheMidibus, oscP5, KETAI.

Tip: Links zum ersten elektronischen Musikinstrument, dem Theremin:

https://www.youtube.com/watch?v=_3H5JbkPXpw
https://www.youtube.com/watch?v=ajM4vYCZMZk

Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)

  • Konkretisierung der Projektidee
  • Einarbeitung in die Library minim
Weitere mögliche Themen je nach Bedarf:
  • Diskussion interessanter Beiträge aus der Konferenz "Ubiquitous Music 2020"
  • Gemeinsame Klärung technischer Probleme (Implementierung / Hardware)
  • Projektmanagement: Wie organisiere ich mein Software-Projekt? (Konkretisierung von Konzepten, Programmstruktur, Versionsstände, Lösen von Problemen, Schließen von Wissenslücken, Analyse fremder Beispiele)
  • Was ist Zufall? -- Was meint John Cage dazu?
  • Was ist eine musikalische Gestalt? -- Ansätze dazu Klang zu organisieren, d.h. zu komponieren.
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)

  • Pattern laden/speichern/editieren
  • Morphing über Lautstärke der Pattern
  • Morphing über prozentualem Anteil eines Pattern, der hörbar ist
  • ev. alternative Konzepte

Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)

  • Prozeßkette Smartphone--W-LAN--Processing--Midi--Ableton--DAW
  • Beeinflussen des Keyboardspiels (z.B. Pitch, Panning, Klangfarbe, ... )
  • Vorarbeit zu einer nur Smartphone basierten Realisierung

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:

https://www.youtube.com/watch?v=CegV_YuccQ4

zu Montag 30.11.2020

Projekt 1: "Pattern für den/die DJ(ane)" (Arbeitstitel)

  • Video mit künstlerischer Praxis, die einem gefällt finden und Link wenn möglich an Dozenten mailen.
  • Visualisieren des Randomisierens: Neu auftretende Ereignisse eventuell in anderer Farbe ebenfalls sichtbar machen. Eventuell mit Transparenz (Alpha-Kanal, 4. Parameter) arbeiten.
  • Alternative Möglichkeiten der Datenhaltung durchdenken und testen, insb. ArrayList.
  • Eine Klasse "Pattern" einführen, um komplizierte nur auf Pattern bezogene Methoden dort zu implementieren, wie Umwandlung von einer Datenrepräsentation in die andere, oder Berechnung der Gesamtlautstärke aus der Sliderposition, aber auch eine eigene draw()-Methode.
  • Lautstärke-Morphing erst einmal als Stand-alone Programm realisieren, um die Komplexität zu verringern, mit der man sich zu einem Zeitpunkt auseinandersetzen muß.
  • Eignung der Libraries im Auge behalten: Sollte auch minim "einknicken" ev. auf ComposingForEveryone zugreifen, bzw. dort vorhandene Klassen variieren.
  • Vorausdenken: Wie soll eine Performance ablaufen? Was fehlt dazu noch? Künstlerischer Anspruch?
  • Übungsvideo produzieren

Projekt 2: "Klang eines Keyboards gestisch beeinflussen" (Arbeitstitel)

  • Video mit künstlerischer Praxis, die einem gefällt finden und Link wenn möglich an Dozenten mailen.
  • Auch die Möglichkeit offen halten, mehrere Kanäle mit einem Smartphone zu beeinflussen, insbesondere bei der Android-Version.
  • Sich Multitouch bei Android aneignen (Beispiele vorhanden bei Android-Processing, andere Callback-Funktion)
  • Klanggenerator finden, der mehr Einflußmöglichkeiten offen hält, Physical Modeling -Beispiel vom Dozenten erhalten.
  • Einfache Methode für die Beeinflussung: Viele geloopte ständig laufende Klänge, zwischen den durch die Bewegung in einem "Raum" gemorpht wird und so "scheinbar" Klänge verändert werden -- ob dieser Eindruck wirklich entsteht, hängt davon ab, wie verwandt die gleichzeitig laufenden Klänge miteinander sind.

Projekt 3: "Klang - Farben - Spiel" (Arbeitstitel)

  • Video mit künstlerischer Praxis, die einem gefällt finden und Link wenn möglich an Dozenten mailen.
  • Stringentes Konzept überlegen, wie atmosphärischer Hintergrundsound mit spontanen Klangereignissen kombiniert werden kann.
  • Testprogramm hinbekommen, bei dem eine Figur so einfach wie möglich durch Pfeiltaten gesteuert wird und bei Überstreichen eines bestimmten Bereiches schon einmal ein Sample gstartet wird, als Ausgangspunkt für eine weiter gehdende differenzierte Entwicklung.
  • Klangbibliothek anlegen.
  • Unterscheiden zwischen gut loop-baren Klängen, die sehr komplexe unspezifische Ereignisse enthalten, wie Blätterrauschen, oder das Plätschern eines Baches im Vergleich zu Sounds mit stark voneinander abgesetzten Ereignissen, wie Zwitschern eines bestimmten Vogels. Liste / Plan / Kategorien entwickeln.
  • Ein- und Ausfaden direkt als Vorverarbeitungsschritt für die verwendeten Samples hinzufügen.
  • Testen, wie es gelingt, einen Klang unendlich lang laufen zu lassen, indem er etwas überlappend mit dem Ende eines vorangehenden Aufrufes wieder neu gestartet wird. Von Hand probieren und dann als Test in einem Programm auf der Basis von minim beispielsweise.
  • Steuerung einer Figur durch Pfeiltasten ermöglichen. Eventuell ihr eine Trägheit verleihen, indem sie beschleunigt wird und von sich aus wegen "Reibung" wieder abbremst. Verfahren: x=POsition, v=Geschwindigkeit, a=Beschleunigung, dt=Zeitschritt: x_neu = x + dt*v, v_neu = v + a*dt. Pfleiltaste bewirkt: a_neu = a + da. und das für jede Richtung und Orientierung.
  • Übungsvideo produzieren

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)

Screenshot zu obigem Sketch.

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
morphing3.png

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.zip
Soundobjekt002_loop.zip -- Loops automatisch beenden
Soundobjekt003_Kollision.zip -- Behandlung von Kollisionen / Distanzberechnung siehe draw()

Steseq001.zip
Steseq002_variablesTempo.zip
Steseq003_Multi.zip