Incom ist die Kommunikations-Plattform der Fachhochschule Potsdam

In seiner Funktionalität auf die Lehre in gestalterischen Studiengängen zugeschnitten... Schnittstelle für die moderne Lehre

Incom ist die Kommunikations-Plattform der Fachhochschule Potsdam mehr erfahren

Little Black Midi

Das Little Black Midi ist ein Kleid für Sänger und Instrumentalisten im Kontext der Bühnenperformance. Über den Kontakt von Kupferplatten und -ringen werden Midi-Samples ausgelöst, ein Potentiometer legt Effekte auf die Mikrofonspur.
Das Kleid ermöglicht die Kombination von Gesang, Musikinstrument und Tanz in der Performance.

Video

Das Video zum Little Black Midi entstand in Zusammenarbeit mit Lily Roggemann und mit Mitwirkung von Carmen Maria Götsch.

Konzeptfindung

Ziel des Kurses war die Konzeption und Umsetzung eines musikalischen Interfaces. Mittels Arduino-Software, einem Musikprogramm und einem Teensy sollte ein Objekt als In- oder Output enwickelt werden.
Mein persönliches Ziel war die Herstellung eines bühnentauglichen Interfaces, welches eine Performance ermöglicht, weg vom Blick auf Tasten und Knöpfe, hin zum Augenkontakt mit dem Publikum.

Die Ideenfindung umfasste u.A. Konzepte zu musikalischen Turnschuhen für Tänzer, spielbaren Mikrofonständern für Sänger oder marionettenartigen Installationen, welche über den Zug von Bändern Klänge auslösen.

Die Entscheidung für das Little Black Midi fiel aufgrund der Simplizität und Flexibilität.
Jeder Musiker und Sänger trägt ein Bühnenoutfit. Dadurch dass das Interface am Körper getragen wird, ist die größtmögliche Bewegungsfreiheit gewährleistet, es passt auf jede Bühne, zu jeder Infrastruktur.
Das flexible Belegen der einzelnen Platten mit Klängen ermöglicht, Musikstücke zu choreografieren. Jeder Song wird mit einem eigenen Bewegungsablauf verknüpft, wodurch die Musik einen visuellen Wiedererkennungswert erhält und zum Mitmachen anregt.

Entwicklung

Das Umsetzen des Prototypen war sehr lehrreich für mich. Erstmals setzte ich mich mit dem Programmieren in Arduino, der Elektronik rund um das Teensy und dem Musikprogramm Ableton auseinander. Das führte dazu, dass ich bei bei jedem Fehler sowohl bei Kabeln und Widerständen, als auch im Script und in den Einstellungen bei Ableton nach seiner Quelle suchte. Ich lernte dabei, geduldig zu sein und dass es immer eine Lösung gibt (solange die Software funktioniert ;).

Ich begann den Prozess mit dem Komponieren eines Musikstückes, bei welchem Klangflächen im Vordergrund stehen, um die Funktionsweise des Interfaces bestmöglich darzustellen.

Anschließend platzierte ich die Taster auf dem Kleid. Bedacht werden musste hierbei ihre einfache Erreichbarkeit mit den Händen, ein vorzugsweise großer Abstand und das Vermeiden eines ungewollten Auslösens in der Bewegung.

Nun konnte ich die Reihenfolge der Taster festlegen und mit den Samples verknüpfen, sodass ein sinnvoller und simpler Bewegungsablauf entstand.

Bei den Auslösern entschied ich mich gegen Sensoren und für Taster, um das Niveau der Musik zu halten. Der Körper bietet Druck keinen gleichmäßigen Widerstand, wodurch Lautstärke, Timing und Klang beeinträchtigt hätten werden können (sobald ich sehr viel Zeit zum Üben haben, werde ich Sensoren verwenden ;).

Im ersten Entwurf verwendete ich verkleidete Taster, verwarf diesen aber, da einerseits der Look des Kleides zu „Gameboy-artig“ wurde und andererseits das Risiko des unbeabsichtigten Auslösens der Buttons zu hoch war.

Beim zweiten Versuch umspannte ich Leuchtschnüre und Hände mit silberbeschichtetem Draht. Das Leuchten aber war kitschig und lenkte ab. Zudem waren die Kontaktstellen nicht mehr sichtbar für den Zuschauer.

Ich entschied mich daher für Kupferplatten an den Pins und Ringe als Ground. Nach einem Entwurf mit Klettverbindungen - alles sollte abnehmbar sein, um das Kleid waschen zu können - entschloss ich mich, die Platten anzunähen, denn das Klettband sorgte für einen kleinen, aber unattraktiven Abstand zwischen Textil und Kupfer. Durch Löcher unter den Platten legte ich die Kabel nach innen und in Bahnen an die Nähte der Unterseite der Arme und seitlich des Oberkörpers. So zeichnen sie sich nicht ab und reißen nicht in der Bewegung, z.B. des Ellbogens.

Ich wählte ein rückenfreies Kleid, um die Platine und die Kabelenden sichtbar zu machen. Die Funktion wird so erkennbar, aber schmuckhaft. Ein alienartiger, eleganter Look entsteht.
Das Potentiometer vergrößerte ich und befestigte es an der Hüfte, um die Assoziation eines Gelenks zu erzeugen. Zuletzt brachte ich kaltweiße Ultra Bright-LED´s an den Fingerringen an, um das Einschalten visuell zu verstärken.

Die größte Schwierigkeit beim Schreiben des Scripts war die Festlegung der Zeiten, in welchen die Midi-Befehle ausgelöst werden dürfen und die LED´s ausfaden. Durch viele Versuche konnte ich das Timing je Sample so festlegen, dass ich weder ausversehen einen Kontakt zu oft auslöste, noch das nächste Auslösen blockierte.
In Ableton legte ich fest, wie lange jedes Sample ausfadet nachdem das nächste ausgelöst wurde, um ein Pedal zu imitieren. Hier belegte ich auch die Mikrofonspur mit veschiedenen Effekten, gesteuert mit dem Potentiometer. Die zugeschnittenen Samples legte ich auf Midi-Noten.
Ich bemerkte beim Üben eine starke Latenz, welche ich erst aufheben konnte, als ich zusätzlich ein externes Interface verwendete.

Abschließend galt es zu üben, denn Little Black Midi zu spielen will gelernt sein.

Prototyp

Das Little Black Midi setzt sich zusammen aus einem little black dress, 15 Platten, zwei Ringen, zwei LED´s und einem Potentiometer. Die Funktionsweise aller Komponenten ist für den Zuschauer klar ersichtlich und für den musikalischen Benutzer schnell erlernbar.

Fazit

Durch die Arbeit mit Arduino und Teensy eröffnete sich mir als Produktdesignstudentin und Musikerin eine neue Welt. Bewegung und Klang mit Produkten zu verbinden ist sowohl für den Ausstellungsbereich, als auch für Musik und Bühne äußerst spannend. Ich freue mich, diese Welt für mich entdeckt zu haben und möchte meine erworbenen Kenntnisse weiter ausbauen.

Script

int potPin = A8;
int minPotiValue = 200;
int maxPotiValue = 900;
int midiControlMicEffect = 10;
int midiChannelMicEffect = 2;

int ledRechts = 14;
int ledLinks = 4;
int fadeVelocityBeat = 14000;
int fadeVelocityVerse = 1200;
int fadeVelocityChorus = 1000;
int fadeVelocityCPart = 250;

const int numberOfPins = 21;

boolean buttonPushed[numberOfPins];
int toleranceBeat = 500;
int toleranceVerse = 500;
int toleranceChorus = 500;
int toleranceCPart = 200;

long timeStamp[numberOfPins];

int h2 = 59;
int c3 = 60;
int cis3 = 61;
int d3 = 62;
int dis3 = 63;
int e3 = 64;
int f3 = 65;
int fis3 = 66;
int g3 = 67;
int gis3 = 68;
int a3 = 69;
int ais3 = 70;
int h3 = 71;
int c4 = 72;
int cis4 = 73;

int minVelocity = 0;
int maxVelocity = 127;

int buttonMidiChannel = 1;
int beatMidiChannel = 2;

void setup() {
Serial.begin(9600);

pinMode(ledRechts, OUTPUT);
pinMode(ledLinks, OUTPUT);

for(int i = 0; i < numberOfPins; i++) {

pinMode(i, INPUT_PULLUP);

buttonPushed[i] = false;

timeStamp[i] = 0;
}

digitalWrite(ledLinks, LOW);
digitalWrite(ledRechts, LOW);

}

void pinToNote(int pin, int note, int tolerance, int midiChannel) {

if(millis() > timeStamp[pin] + tolerance){
if (digitalRead(pin) == LOW && !buttonPushed[pin]){
usbMIDI.sendNoteOn(note, maxVelocity, midiChannel);
timeStamp[pin] = millis();
buttonPushed[pin] = true;

switch(pin) {
// linke LED
case 15:
doSomeLED(ledLinks, -1, fadeVelocityVerse, true);
break;
case 17:
doSomeLED(ledLinks, -1, fadeVelocityVerse, false);
break;
case 16:
doSomeLED(ledLinks, -1, fadeVelocityCPart, true);
break;
case 18:
doSomeLED(ledLinks, -1, fadeVelocityCPart, false);
break;
// rechte LED
case 19:
doSomeLED(ledRechts, ledLinks, fadeVelocityBeat, true);
break;
case 8:
doSomeLED(ledRechts, -1, fadeVelocityVerse, true);
break;
case 6:
doSomeLED(ledRechts, -1, fadeVelocityCPart, false);
break;
case 5:
doSomeLED(ledRechts, -1, fadeVelocityVerse, true);
break;
case 7:
doSomeLED(ledRechts, -1, fadeVelocityVerse, true);
break;
case 3:
doSomeLED(ledRechts, -1, fadeVelocityCPart, false);
break;
default:
doSomeLED(ledLinks, ledRechts, fadeVelocityChorus, true);
}
}

if (digitalRead(pin) == HIGH && buttonPushed[pin]){
usbMIDI.sendNoteOff(note, minVelocity, midiChannel);
buttonPushed[pin] = false;
}
}
}

void doSomeLED(int pin1, int pin2, int velocity, boolean fade) {

if(fade) {
int fadeDelay = velocity / 255;

for(int i=255; i>0; i--) {
if(pin1 >= 0){analogWrite(pin1,i);}
if(pin2 >= 0){analogWrite(pin2,i);}
delay(fadeDelay);
}
} else {
if(pin1 >= 0){analogWrite(pin1,255);}
if(pin2 >= 0){analogWrite(pin2,255);}
delay(velocity);
}

if(pin1 >= 0) {
digitalWrite(pin1, LOW);
}
if(pin2 >= 0) {
digitalWrite(pin2, LOW);
}
}

void loop() {

int potiValue = analogRead(potPin);

if (potiValue > maxPotiValue) {
potiValue = maxPotiValue;
}
if (potiValue > minPotiValue) {
int midiValue = map(potiValue, minPotiValue, maxPotiValue, 0, 127);
usbMIDI.sendControlChange(midiControlMicEffect, midiValue, midiChannelMicEffect);
// Beide LEDs dimmen
int ledValue = map(potiValue, minPotiValue, maxPotiValue, 0, 255);
analogWrite(ledLinks,ledValue);
analogWrite(ledRechts,ledValue);
} else {
digitalWrite(ledLinks, LOW);
digitalWrite(ledRechts, LOW);
}

// Beat
pinToNote(19, h2, toleranceBeat, beatMidiChannel);

// Verse
pinToNote(15, c3, toleranceVerse, buttonMidiChannel);
pinToNote(7, cis3, toleranceVerse, buttonMidiChannel);
pinToNote(17, d3, toleranceVerse, buttonMidiChannel);
pinToNote(8, dis3, toleranceVerse, buttonMidiChannel);
pinToNote(5, e3, toleranceVerse, buttonMidiChannel);

// Chorus
pinToNote(10, f3, toleranceChorus, buttonMidiChannel);
pinToNote(12, fis3, toleranceChorus, buttonMidiChannel);
pinToNote(11, g3, toleranceChorus, buttonMidiChannel);
pinToNote(1, gis3, toleranceChorus, buttonMidiChannel);
pinToNote(20, a3, toleranceChorus, buttonMidiChannel);

// C-Part
pinToNote(16, ais3, toleranceCPart, buttonMidiChannel);
pinToNote(3, h3, toleranceCPart, buttonMidiChannel);
pinToNote(6, c4, toleranceCPart, buttonMidiChannel);
pinToNote(18, cis4, toleranceCPart, buttonMidiChannel);

// some POTI-shit, who knows
delay(10);
}

Danke

Ich danke Stefan Hermann für den tollen Kurs und die große Geduld mit uns Rookies.
Ich danke Falk Effenberger für die Zusammenarbeit bei „Bruce Lee“ und die Ableton-Nachhilfe.
Ich danke Angelo Gülle und Ken Knopf für die Arduino-Nachhilfe.
Ich danke Lily Roggemann für die Zusammenarbeit beim Video.
Danke auch an Victor, Dom, Jihye und die anderen Kursteilnehmer :)

Ein Projekt von

Fachgruppe

Interfacedesign

Art des Projekts

Studienarbeit im Hauptstudium

Betreuung

Stefan Hermann

Zugehöriger Workspace

Musical Interfaces 2012

Entstehungszeitraum

Wintersemester 2012 / 2013