Étape 6: Le Code : traitement
Le fichier zip a les fichiers de données (extraits sonores) et l’esquisse de traitement dans la hiérarchie de dossier correct suffit donc télécharger le fichier zip, extraire le dossier avec son contenant des fichiers et ouvrent l’esquisse de traitement ! (Si quelque chose s’est passé à elle, assurez-vous que le dossier de données et le fichier .pde sont à l’intérieur du dossier portant le même nom que le fichier .pde.)
Notes sur le code :
1) port série défini dans le présent code doit correspondre le port série que vous avez connecté votre Arduino pour. Dans la fonction de réglage, nous avons mis le port variable à un objet série représentant le port qu'il utilisera pour lire les données. Actuellement, elle est définie sur le premier port disponible, mais si cela ne fonctionne pas, remplacez le nom du port votre Arduino connecté au deuxième argument.
2) nous avons préchargés deux genres de musique. Pour basculer entre les deux, vous devez régler le tempo variable et compter le nombre correct, tel que défini dans les commentaires.
Code de traitement :
/*
La cuisine polyphonique
Sara Montoro
Karl Landin
Alice Lee
Pitts de Noah
Université de Californie à Berkeley
CNM290/CS294-85
Fabrication de critique : Matériaux, protocoles et Culture
Laissez-nous un commentaire si vous avez d’autres idées et suggestions !
*/
Import processing.serial.* ;
Import ddf.minim.* ;
int [] mag = {0,0,0,0} ;
int [] pot = {0,0,0,0,0} ; Les potentiomètres ne sont pas stockés dans l’ordre. Le milieu
relié à la broche qu'a3 est réellement injecté dans la série après
tous les autres potentiomètres. Ce sera la dernière valeur de
ce tableau (pot[4]).
float volumeCab ;
mot d’int = 0 ; détecteur de mouvement. (non utilisé)
int cap ;
fichiers audio
String [] chansons ;
Chaîne de 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"} ;
minimStarted booléen = false ;
Si vous souhaitez choisir un genre différent, modifiez le dessous deux variables à celles correspondant à la musique que vous souhaitez.
REGGAE, tempo = 75, count = 1
FLAMENCO, tempo = 120, count = 1
int tempo = 75 ;
int count = 1 ;
int a battu, beatSum, lastMillis, erreur, mspb bps ;
Port série ;
Minim minim ;
AudioPlayer [] joueurs = nouveau AudioPlayer [8] ;
void setup() {}
MSPB = count * 60000/tempo ;
BPS = tempo/60 ;
taille (512, 200, P3D) ;
Remarque : le deuxième argument dans le présent appel doit être le nom du Port série qui
votre Arduino communique avec l’ordinateur par l’intermédiaire. (Sur votre Arduino Sketch,
allez dans Outils > Port série. Le port marqué est celui qui est à l’aide de votre Arudino.)
Pour afficher la liste des ports disponibles, décommenter le seuil.
println(Serial.List()) ;
port = nouvelle série (ce, Serial.list() [0], 9600) ;
être en mesure d’atteindre le répertoire de données
minim = new Minim(this) ;
{Switch(tempo)}
boîte de 100 :
println ("Tempo : 100 - sans médias actuellement disponibles") ; tempo = 100
rupture ;
cas 120 :
Temp FLAMENCO = 120
chansons = flamenco ;
rupture ;
cas 140 :
println ("Tempo : 140 - non médias actuellement disponibles") ; tempo = 140
rupture ;
Tempo REGGAE = 75
décision 75 :
chansons = reggae ;
rupture ;
}
LoadFiles du dossier de données et du dossier de croquis
pour (int x = 0; x < songs.length; x ++) {}
les joueurs [x] = minim.loadFile(songs[x]) ;
}
Demander tout de suite les valeurs
port.Write(65) ;
pour (int i = 0; i < 4; i ++) {}
Players[i].Loop() ;
Players[i].setGain(-80) ;
}
Minim.Start(this) ;
}
{} void draw()
Background(0) ;
Stroke(255) ;
frameRate(120) ;
changer le volume du poêle
pour (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) ;
pour (int i = 0; i < 4; i ++) {}
Players[i+4].setGain(volumeCab) ;
}
garder le temps musical
if(Millis() > = lastMillis + mspb) {}
lastMillis = millis ()-6 ;
if(Beat == 32) {}
battre = 0 ;
}
erreur = lastMillis % mspb ;
Print(Beat) ;
Print («, » + beatSum) ;
println (", erreur:" erreur + « ms ») ;
pour (int i = 0; i < 4; i ++) {}
Si (mag [i] == 1 & &! players[i+4].isPlaying()) {}
.setLoopPoints de joueurs [1 + 4] (0, 5) ;
Players[i+4].Play(0) ;
println (« joueur » + (i + 4) + « tout a commencé ») ;
}
Players[i+4].setGain(volumeCab) ;
}
Ajouter pour battre les chefs d’accusation
battre = battement + count ;
beatSum = beatSum + count ;
println ("cap:" + Integer.toString(cap)) ;
}
}
Fermez tous les lecteurs audio et minim
stop() Sub {}
pour (AudioPlayer p: joueurs) {}
p.Close() ;
}
minim.Stop() ;
Super.Stop() ;
}
appelée chaque fois qu’il y a quelque chose availble pour lire
void serialEvent(Serial port) {}
Lire les données
Dim input As String = port.readStringUntil('*') ;
Si (entrée! = null) {}
Épissure de la chaîne dans un tableau d’entiers
int [] vals = int (splitTokens (input, ", *")) ;
vérifier que toutes les valeurs sont trouvent
Si (vals.length! = 10) {}
println ("erreur : n’a reçu que" + vals.length + « values. ») ;
retour ;
}
Placer les valeurs dans les variables
Si (cap! = {int(vals[0]))}
Cap = int(vals[0]) ;
marche/arrêt minim
}
pour (int i = 1; i < = 5; i ++) {}
Si (pot [i-1]! = {vals[i])}
Méfiez-vous ! Le potentiomètre central est imprimé en dernier et sera pot [4]
parce que c’était le four de notre prototype et pas un brûleur de cuisinière comme la
autres 4 potentionmeters
pot [i-1] = vals [i] ;
}
}
pour (int i = 6; i < = 9; i ++) {}
Si (mag [i-6]! = {vals[i])}
Mag [i-6] = vals [i] ;
}
}
}
poignée de main
port.Write(65) ;
}