Random Acts of Vulnerability

Aus hyperdramatik
Zur Navigation springen Zur Suche springen

Random Acts of Vulnerability ist ein immersives Spiel für vier Spieler*innen in vier Dimensionen. Durch Erkundung und Dokumentation der jeweils eigenen Dimension, formen die Spieler*innen anhand des Gesammelten und Erlebten die Erzählungen selbst. Auf ein installatives Netz aus experimentellen Materialen, soften Schaltkreisen, meditativen Klangwelten, grotesken Interfaces und verzerrten Output-Signalen aufbauend, werden Fragen nach Isolation, Einsamkeit, immaterieller und haptischer Vernetzung und der Herstellung von Verhandlungsgrundlagen gestellt.

Eine Arbeit von: Zoe Lohmann, Ella Estrella Tischa Raetzer, Rodolfo Acosta Castro, Lena Böckmann

Video: https://www.youtube.com/watch?v=850KCMYEAow&t=7s

51681534884_545f161fd9.jpg

dokumentation_JAM 📎

Die Frage ist: wie stellt man eine Dokumentation?
  • Bilddokumentation sammelt und einordnen
  • künstlerisch/ästhetisch mit dem Material umgehen
  • Dokumentieren auch Fehler, persönliche Ansprüche und Gespräche, Unerwartetes genauso wie
  • Code-Snippets, Schaltpläne, Materialen, Skizzen
  • usw.
  • let's go! 🔥

PS --> how to display Emojis:

DOME 1

Harte Materialien

  • Stretch-Jersey
  • Polymorph
  • Audiojacks
  • Aux-Kabel
  • Kunstblumen
  • Röhrenfernsehe

etc...

Softe Materialien

Sound

  • Klangbeispiele hochladen

DOME 2

Harte Materialien

Watte, Silikon, Kunstblumen, LED-Kerzen....

Softe Materialien

Sound/Klang

Beispiele hochladen

DOME 3 (mini-dom)

Instructions to Mini-Dome

Harte Materialien

Kunstrasen, Number pad, Bürstenroboter, ...

Hacks

Einfache Arduino-to-Arduino Kommunikation mit Vactrol

Sound

Beispiele hochladen

arbeitsprozess

1te Runde

Mini-Workshops

Ella Sound Workshop

Zoe Silicon Workshop

BAT

2te Runde

Proberaum HFS

NextLevel Festival

relevant links

ESP with Arduino: http://hyperdramatik.net/mediawiki/index.php?title=ESP32_mit_Arduino

MQTT: http://hyperdramatik.net/mediawiki/index.php?title=Hauptseite#MQTT

DOMEs: http://hyperdramatik.net/mediawiki/index.php?title=Dome_Pod_KIT


code examples from the project

Arduino code for sounds in the fishing-dome

// running on an ESP Spaghetti Monster

int numOfSensors = 6;

byte analogPins[] = {
36, 39, 34, 35, 32, 33
};

void setup() {
  for (int i = 0; i < numOfSensors; i++) {
    pinMode(analogPins[i], INPUT);
  }
  Serial.begin(9600);
}

void loop() {
  for (int i = 0; i < numOfSensors; i++) {
    Serial.print(analogRead(analogPins[i]));
    Serial.print("\t");
  }
  Serial.println();
  delay(20);
}

Processing code for sounds in the fishing-dome

CODE DESCRIPTION:
6 textile stretch sensors trigger
6 different sounds 
when they pass a threshold.
sound files should be stored in a folder
called "data" within the sketch folder.
/*
 RANDOM ACTS OF VULNERABILITY
 code for sounds in the fishing-dome
 
 6 textile stretch sensors trigger
 6 different sounds 
 when they pass a threshold.
 sound files should be stored in a folder
 called "data" within the sketch folder.
 */

import processing.serial.*;
import ddf.minim.*;
Serial myPort;    

Minim minim;
AudioSample sound0;
AudioSample sound1;
AudioSample sound2;
AudioSample sound3;
AudioSample sound4;
AudioSample sound5;

///////////////////////////////////
//change these:
///////////////////////////////////
int numOfSensors = 6;
int ADCmax = 4095; 
//int ADCmax = 1023;
float[] sensorThresholds = {1000, 1000, 1000, 1000, 1000, 1000};//new float[numOfSensors];
///////////////////////////////////

float[] sensorValues = new float[numOfSensors];
float[] previousSensorValues = new float[numOfSensors];
float xpos = 0;

void setup () {
  size(600, 400);        
  smooth();
  background(255);

  println(Serial.list());
  String portName = Serial.list()[1];
  myPort = new Serial(this, "/dev/cu.SLAB_USBtoUART", 9600);
  myPort.clear();
  myPort.bufferUntil('\n');

  minim = new Minim(this);
  sound0 = minim.loadSample( "harddisc_grummeln_kurz.wav", 512);
  sound1 = minim.loadSample("crazyfrogbardcore.wav", 512);
  sound2 = minim.loadSample("musterfinal.wav", 512);
  sound3 = minim.loadSample("harddisc_grummeln_kurz.wav", 512);
  sound4 = minim.loadSample("hihat_single.wav", 512);
  sound5 = minim.loadSample("kick_single.wav", 512);
}

void draw () {
  graph();
}

void graph() {
  for (int i=0; i<numOfSensors; i++) {
    if (sensorValues[i] < sensorThresholds[i]) sound(i);

    // map the incoming values to an appropriate range:
    float ypos = map(sensorValues[i], ADCmax, 0, 0, height/numOfSensors);

    // figure out the y position for this particular graph:
    float graphBottom = i * height/numOfSensors;
    ypos = ypos + graphBottom;

    // draw the graph bottoms:
    stroke(0);
    strokeWeight(1);
    line(0, graphBottom, width, graphBottom);

    // draw the thresholds:
    stroke(200, 0, 0);
    strokeWeight(1);
    float redLine = map(sensorThresholds[i], ADCmax, 0, 0, height/numOfSensors);
    line(0, redLine + graphBottom, width, redLine + graphBottom);

    stroke(0);
    strokeWeight(2);
    line(xpos, previousSensorValues[i], xpos+1, ypos);

    previousSensorValues[i] = ypos;

    // if you've drawn to the edge of the window, start at the beginning again:
    if (xpos >= width) {
      xpos = 0;
      background(215);
    } else xpos+=0.1;
  }
}

void serialEvent (Serial myPort) {
  // get the ASCII string:
  String inString = myPort.readStringUntil('\n');

  // if it's not empty:
  if (inString != null) {
    // trim off any whitespace:
    inString = trim(inString);

    // convert to an array of ints:
    int incomingValues[] = int(split(inString, "\t"));

    if (incomingValues.length <= numOfSensors && incomingValues.length > 0) {
      for (int i = 0; i < incomingValues.length; i++) {
        sensorValues[i] = incomingValues[i];
        print(sensorValues[i] + "\t");
      }
      println();
    }
  }
}

void sound(int soundSample) 
{
  switch(soundSample) {
  case 0: 
    sound0.trigger();
    break;
  case 1: 
    sound1.trigger();
    break;
  case 2: 
    sound2.trigger();
    break;
  case 3: 
    sound3.trigger();
    break;
  case 4: 
    sound4.trigger();
    break;
  case 5: 
    sound5.trigger();
    break;
  }
}


Processing code for sounds in the dating-dome

CODE DESCRIPTION:
4 very sensitive "balloon-pushbuttons" 
on a makey makey trigger sound files.
every minute there is a scene change 
and the sound files are updated.
sound files should be stored in a folder
called "data" within the sketch folder.
/*
 RANDOM ACTS OF VULNERABILITY
 code for sounds in the dating-dome
 
 4 very sensitive "balloon-pushbuttons" 
 on a makey makey trigger sound files.
 every minute there is a scene change 
 and the sound files are updated.
 sound files should be stored in a folder
 called "data" within the sketch folder.
 */

import ddf.minim.*;  

Minim minim;
AudioSample sound0;
AudioSample sound1;
AudioSample sound2;
AudioSample sound3;
AudioSample sound4;
AudioSample sound5;

int delayTime = 800;
boolean w_released = true;
boolean d_released = true;
boolean s_released = true;
boolean a_released = true;
int maxCount = 3;
int w_count = 0;
int a_count = 0;
int s_count = 0;
int d_count = 0;
int szene = 0;
int previousSzene;
int soundChangeInterval = 5000;


void setup () {
  size(1000, 800);        
  smooth();
  minim = new Minim(this);
  background(255);
}

void draw () {
  szene = minute() % 3;
  if (szene != previousSzene) {
    previousSzene = szene;
    println(szene);

    if (szene == 0) {
      sound0 = minim.loadSample("be.wav", 1000);
      sound1 = minim.loadSample("come.wav", 1000);
      sound2 = minim.loadSample("together.wav", 1000);
      sound3 = minim.loadSample("withMe.wav", 1000);
    }
    if (szene == 1) {
      sound0 = minim.loadSample("hihat_single.wav", 1000);
      sound1 = minim.loadSample("hihat_single.wav", 1000);
      sound2 = minim.loadSample("hihat_single.wav", 1000);
      sound3 = minim.loadSample("hihat_single.wav", 1000);
    }
    if (szene == 2) {
      sound0 = minim.loadSample("kick_single.wav", 1000);
      sound1 = minim.loadSample("kick_single.wav", 1000);
      sound2 = minim.loadSample("kick_single.wav", 1000);
      sound3 = minim.loadSample("kick_single.wav", 1000);
    }
  }
}


void keyPressed() {
  if ((key == 'w' || key == 'W') && w_released == true && w_count < maxCount) {
    background(0);
    w_released = false;
    sound(0);
    delay(delayTime);
    w_count ++;
    a_count = 0;
    s_count = 0;
    d_count = 0;
  }
  if ((key == 'a' || key == 'A') && a_released == true && a_count < maxCount) {
    background(200, 0, 0);
    a_released = false;
    sound(1);
    delay(delayTime);
    a_count ++;
    w_count = 0;
    s_count = 0;
    d_count = 0;
  }
  if ((key == 's' || key == 'S') && s_released == true && s_count < maxCount) {
    background(0, 200, 0);
    s_released = false;
    sound(2);
    delay(delayTime);
    s_count ++;
    w_count = 0;
    a_count = 0;
    d_count = 0;
  }
  if ((key == 'd' || key == 'D') && d_released == true && d_count < maxCount) {
    background(0, 0, 200);
    d_released = false;
    sound(3);
    delay(delayTime);
    d_count ++;
    w_count = 0;
    a_count = 0;
    s_count = 0;
  }
}

void keyReleased() {
  if (key == 'd' || key == 'D') {
    d_released = true;
  }
  if (key == 'a' || key == 'A') {
    a_released = true;
  }
  if (key == 's' || key == 'S') {
    s_released = true;
  }
  if (key == 'w' || key == 'W') {
    w_released = true;
  }
}


void sound(int soundSample) 
{
  switch(soundSample) {
  case 0: 
    sound0.trigger();
    break;
  case 1: 
    sound1.trigger();
    break;
  case 2: 
    sound2.trigger();
    break;
  case 3: 
    sound3.trigger();
    break;
  }
}
}