Paso 6: El código: procesamiento
El archivo zip tiene los archivos de datos (clips de sonido) y el bosquejo de procesamiento en la jerarquía de carpeta correcta tan sólo Descargue el archivo zip, extraer la carpeta con los archivos que contiene a y abrir el bosquejo del proceso! (Si algo le sucedió, sólo asegúrese de que la carpeta de datos y el fichero .pde están dentro de la carpeta con el mismo nombre que el fichero .pde.)
Notas sobre el código:
1) Puerto serie definido en este código debe coincidir con el puerto serie conectado el Arduino a. En la función de configuración, hemos creado el puerto variable a un objeto Serial que representa el puerto que usará para leer los datos. Actualmente, se encuentra en el primer puerto disponible, pero si eso no funciona, cambie el segundo argumento por el nombre del puerto que está conectado el Arduino.
2) nos hemos cargado dos géneros de la música. Para cambiar entre los dos, debe establecer el tempo variable y contar los números correctos tal como se define en los comentarios.
Código de procesamiento:
/*
La cocina polifónica
Sara Montoro
Karl Landin
Alice Lee
Pitts de Noé
Universidad de California, Berkeley
CNM290/CS294-85
: Crítica materiales, protocolos y cultura
Dejanos un comentario si tienes otras ideas y sugerencias!
*/
Import processing.serial.*;
Import ddf.minim.*;
int [] mag = {0,0,0,0};
pote de int [] = {0,0,0,0,0}; Los potenciómetros no se almacenan en orden. El centro
conectada al pin de que a3 realmente se alimenta en la serie después
todos los otros potenciómetros. Será el último valor de
esta matriz (pot[4]).
Float volumeCab;
mot int = 0; sensor de movimiento. (no utilizado)
tapa int.
archivos de sonido
String [] canciones;
Cadena de reggae [] = {"t75bass1.wav","t75drums1.wav","t75horn1.wav","t75guitar1.wav","t75keys1.wav","t75synth1.wav","t75vocals1.wav","t75backup1.wav"};
Cadena de flamenco [] = {"t120bass1.wav", "t120drums1.wav", "t120guitar1.wav", "t120guitarSolo1.wav", "t120percusA1.wav", "t120percusB1.wav", "t120piano1.wav", "t120vocals1.wav"};
Boolean minimStarted = false;
Si usted desea elegir un género diferente, cambiar la por debajo de dos variables a las que la música que quieras.
REGGAE, tempo = 75, count = 1
FLAMENCO, tempo = 120, count = 1
tempo de int = 75;
int cuenta = 1;
vencer a int, beatSum, lastMillis, error, mspb, bps;
Puerto serial;
Mínima mínima;
AudioPlayer [] jugadores = nuevo AudioPlayer [8];
void setup() {}
MSPB = count * 60000/tempo;
BPS = tempo/60;
tamaño (512, 200, P3D);
Nota: el segundo argumento en esta convocatoria debe ser el nombre del puerto serie que
el Arduino se comunica con la computadora a través de. (En el Arduino Sketch
vaya a herramientas > Serial Port. El puerto marcado es el que está usando el Arudino.)
Para ver una lista de puertos disponibles, descomentar el umbral.
println(serial.List());
puerto = serie nueva (este, Serial.list() [0], 9600);
poder llegar al directorio de datos
mínima = nuevo Minim(this);
{Switch(tempo)}
caso 100:
println ("Tempo: 100 - sin medios de comunicación disponibles en la actualidad"); Tempo = 100
rotura;
caso 120:
Temp FLAMENCO = 120
canciones = flamenco;
rotura;
caso 140:
println ("Tempo: 140 - sin medios de comunicación disponibles en la actualidad"); Tempo = 140
rotura;
Tempo REGGAE = 75
caso 75:
canciones = reggae;
rotura;
}
Loadfiles de carpeta de datos y la carpeta de dibujo
para (int x = 0; x < songs.length; x ++) {}
jugadores [x] = minim.loadFile(songs[x]);
}
Solicitar valores de inmediato
Port.Write(65);
para (int i = 0; i < 4; i ++) {}
Players[i].loop();
Players[i].setGain(-80);
}
Minim.Start(this);
}
void draw() {}
Background(0);
Stroke(255);
frameRate(120);
cambiar el volumen de la estufa
para (int i = 0; i < 4; i ++) {}
Players[i].setGain(MAP(float(pot[i]),0,1023,-80,14));
}
volumeCab = map(float(pot[4]),0,1023,-80,14);
para (int i = 0; i < 4; i ++) {}
Players[i+4].setGain(volumeCab);
}
mantener el tiempo musical
if(Millis() > = lastMillis + mspb) {}
lastMillis = millis ()-6;
if(Beat == 32) {}
batir = 0;
}
error = lastMillis % mspb;
Print(Beat);
Imprimir ("," + beatSum);
println (", Error:" + error + "ms");
para (int i = 0; i < 4; i ++) {}
Si (mag [i] == 1 & &! players[i+4].isPlaying()) {}
jugadores [1 + 4] .setLoopPoints (0, 5);
Players[i+4].Play(0);
println ("jugador" + (i + 4) + "apenas comenzó");
}
Players[i+4].setGain(volumeCab);
}
Añadir para vencer a cuentas
batir = beat + count;
beatSum = beatSum + recuento;
println ("cap:" + Integer.toString(cap));
}
}
cerrar todos los reproductores de audio y minim
void stop() {}
para {} (AudioPlayer p: jugadores)
p.Close();
}
Minim.STOP();
Super.STOP();
}
siempre que hay algo disponible para leer
void serialEvent(Serial port) {}
Leer los datos
String entrada = port.readStringUntil('*');
Si (entrada! = null) {}
Empalmar la cadena en un array de enteros
int [] vals = int (splitTokens (entrada, ", *"));
Compruebe que todos los valores se encuentran
Si (vals.length! = 10) {}
println ("ERROR: sólo recibió" + vals.length + "valores.");
retorno;
}
Poner valores en las variables
Si (cap! = {int(vals[0]))}
Cap = int(vals[0]);
mínima de arranque/parada
}
para (int i = 1; i < = 5; i ++) {}
Si (pote [i-1]! = {vals[i])}
¡ Cuidado! El potenciómetro del medio impreso a últimos y será pot [4]
porque era el horno en nuestro prototipo y no un quemador de la estufa como el
otros 4 potentionmeters
Pot [i-1] = vals [i];
}
}
para (int i = 6; i < = 9; i ++) {}
Si (mag [i-6]! = {vals[i])}
MAG [i-6] = vals [i];
}
}
}
apretón de manos
Port.Write(65);
}