Stap 6: De Code: verwerking
Het zip-bestand heeft zowel de gegevensbestanden (clips met geluid) en de Processing schets in de juiste mappenhiërarchie dus gewoon download het zip dossier, haal de omslag met haar met bestanden uit en openstellen van de Processing Schets! (Als iets aan het gebeurde, maar zorg ervoor dat zowel de datamap en het bestand .pde binnenkant van de map met dezelfde naam als het .pde bestand.)
Opmerkingen over de code:
1) de seriële poort die is gedefinieerd in deze code moet overeenkomen met de seriële poort die u hebt aangesloten, uw Arduino aan. In de setup-functie stel we de variabele poort naar een seriële-object vertegenwoordigen de poort die wordt gebruikt om de gegevens te lezen. Momenteel is ingesteld op de eerste beschikbare poort gebruikt, maar als dat niet werkt, wijzigt de naam van de poort die je Arduino is aangesloten op het tweede argument.
2) Wij hebben twee genres van muziek voorgeladen. Om te schakelen tussen de twee, moet u het variabele tempo en tellen tot de juiste nummers zoals gedefinieerd in de commentaren.
Verwerking van Code:
/*
De polyfone keuken
Sara Montoro
Karl Landin
Alice Lee
Noah Pitts
Universiteit van Californië, Berkeley
CNM290/CS294-85
Kritische maken: Materialen, protocollen en cultuur
Laat ons een reactie hebt u suggesties en andere ideeën!
*/
importeren van processing.serial.*;
importeren van ddf.minim.*;
int [] mag = {0,0,0,0};
int [] pot = {0,0,0,0,0}; De potentiometers worden niet opgeslagen in volgorde. Het midden
verbonden met pin die a3 eigenlijk wordt ingevoerd in de Serial na
alle van de andere potentiometers. Het zal de laatste waarde van
deze array (pot[4]).
float volumeCab;
int mot = 0; de sensor van de motie. (niet gebruikt)
int GLB;
geluidsbestanden
Tekenreeks [] nummers;
String [] reggae = {"t75bass1.wav","t75drums1.wav","t75horn1.wav","t75guitar1.wav","t75keys1.wav","t75synth1.wav","t75vocals1.wav","t75backup1.wav"};
String [] flamenco = {"t120bass1.wav", "t120drums1.wav", "t120guitar1.wav", "t120guitarSolo1.wav", "t120percusA1.wav", "t120percusB1.wav", "t120piano1.wav", "t120vocals1.wav"};
Boole minimStarted = false;
Als u wenst om te kiezen een ander genre, wijzigt u de hieronder twee variabelen die overeenkomen met de muziek die je wilt.
REGGAE, tempo = 75, graaf = 1
FLAMENCO, tempo = 120, graaf = 1
int tempo = 75;
int count = 1;
int beat, beatSum, lastMillis, fout, mspb, bps;
Seriële poort;
Minim minim;
AudioPlayer [] spelers = nieuwe AudioPlayer [8];
VOID Setup {}
MSPB = aantal * 60000/tempo;
bps = tempo/60;
grootte (512, 200, P3D);
Opmerking: het tweede argument in deze oproep moet de naam van de seriële poort die
je Arduino communiceert met de computer via. (Op uw Arduino Sketch,
Ga naar extra > seriële poort. De gemarkeerde poort is enerzijds uw Arudino wordt gebruikt.)
Een lijst van beschikbare poorten wilt bekijken, uncomment de hieronder lijn.
println(Serial.List());
poort = nieuwe Serial (dit, Serial.list() [0], 9600);
kunnen bereiken de gegevensmap
Minim = nieuwe Minim(this);
switch(tempo) {}
Case 100:
println ("Tempo: 100 - No Media momenteel beschikbaar"); tempo = 100
breken;
Case 120:
FLAMENCO temp = 120
nummers = flamenco;
breken;
Case 140:
println ("Tempo: 140 - No Media momenteel beschikbaar"); tempo = 140
breken;
REGGAE tempo = 75
Case 75:
nummers = reggae;
breken;
}
loadfiles uit de datamap en de schets-map
voor (int x = 0; x < songs.length; x ++) {}
spelers [x] = minim.loadFile(songs[x]);
}
Waarden meteen vragen
Port.write(65);
for (int i = 0; ik < 4; i ++) {}
Players[i].loop();
Players[i].setGain(-80);
}
Minim.Start(this);
}
VOID draw() {}
Background(0);
Stroke(255);
frameRate(120);
wijzigen van de omvang van de kachel
for (int i = 0; ik < 4; i ++) {}
Players[i].setGain(map(float(pot[i]),0,1023,-80,14));
}
volumeCab = map(float(pot[4]),0,1023,-80,14);
for (int i = 0; ik < 4; i ++) {}
Players[i+4].setGain(volumeCab);
}
muzikale tijd houden
if(Millis() > = lastMillis + mspb) {}
lastMillis = millis ()-6;
if(Beat == 32) {}
Beat = 0;
}
fout = lastMillis % mspb;
Print(Beat);
afdrukken ("," + beatSum);
println (", fout:" + fout + "ms");
for (int i = 0; ik < 4; i ++) {}
Als (mag [i] == 1 & &! players[i+4].isPlaying()) {}
spelers [1 + 4] .setLoopPoints (0, 5);
Players[i+4].Play(0);
println ("speler" (ik + 4) + "net begonnen");
}
Players[i+4].setGain(volumeCab);
}
toevoegen om te verslaan van graven
beat = beat + tellen;
beatSum = beatSum + tellen;
println ("GLB:" + Integer.toString(cap));
}
}
Sluit alle audiospelers en minim
VOID stop() {}
voor (AudioPlayer p: spelers) {}
p.Close();
}
Minim.stop();
Super.stop();
}
Wanneer er iets genaamd availble om te lezen
VOID serialEvent(Serial port) {}
De gegevens lezen
Input string = port.readStringUntil('*');
Als (input! = null) {}
Splice de tekenreeks in een array van gehele getallen
int [] vals = int (splitTokens (ingang, ", *"));
Controleer alle waarden zijn gevonden
Als (vals.length! = 10) {}
println ("fout: alleen ontvangen" + vals.length + "waarden.");
terugkeer;
}
Zet waarden in de variabelen
Als (GLB! = int(vals[0])) {}
Cap = int(vals[0]);
Start/stop minim
}
for (int i = 1; ik < = 5; i ++) {}
Als (pot [i-1]! = vals[i]) {}
Kijk uit! De middelste potentiometer laatste is uitgeprint en zullen pot [4]
omdat het de oven in onze prototype en niet een kachel-brander, zoals de
andere 4 potentionmeters
pot [i-1] = vals [i];
}
}
for (int i = 6; ik < = 9; i ++) {}
Als (mag [i-6]! = vals[i]) {}
mag [i-6] = vals [i];
}
}
}
handshaking
Port.write(65);
}