Visualiseur Musical à Ruban EL – Illuminez Votre Son avec Arduino
Composants et fournitures
| Arduino UNO | × | 1 |
| Shield EL pour Arduino | × | 1 |
| Ruban EL - Vert 1m | × | 1 |
| Ruban EL - Rouge 1m | × | 1 |
| Ruban EL - Bleu 1m | × | 1 |
À propos de ce projet
Un ruban EL avec un Shield EL de SeeedStudio a été utilisé avec un Arduino UNO. Le ruban était connecté au shield sur 3 des 4 canaux.
Une fois cela fait, il suffit de téléverser le code et de lancer votre musique !
Le code utilise Processing ainsi que la bibliothèque Processing Arduino. Vous devrez faire fonctionner ces deux éléments pour l'utiliser.
- Récupérez la bibliothèque pour Arduino ici.
- Obtenez Processing sur https://processing.org/
Une fois tout installé, déplacez la bibliothèque Arduino dans le dossier « libraries » de votre dossier de carnet de croquis Processing et ouvrez le code dans l'éditeur Processing.
Modifiez la ligne :
song = minim.loadFile("/home/paul/Music/dope.mp3", 2048);
à la ligne 38 de BeatWrite pour pointer vers un fichier MP3 local sur votre ordinateur et cliquez sur play !
Code
BeatWrite (Java - Processing)
/**
* Ce sketch montre comment utiliser l'objet BeatDetect en mode FREQ_ENERGY.
* Vous pouvez utiliser <code>isKick</code>, <code>isSnare</code>, <code>isHat</code>, <code>isRange</code>,
* et <code>isOnset(int)</code> pour suivre le type de beats que vous cherchez, ils renverront
* true ou false selon l'état de l'analyse. Pour « ticker » l'analyse, vous devez appeler <code>detect</code>
* avec des tampons audio successifs. Vous pouvez faire cela dans <code>draw</code>, mais vous risquez de manquer certains
* tampons audio si vous le faites ainsi. Le sketch implémente un <code>AudioListener</code> appelé <code>BeatListener</code>
* afin qu'il puisse appeler <code>detect</code> sur chaque tampon audio traité par le système sans répéter un tampon
* ou en manquer un.
* <p>
* Ce sketch joue une chanson entière, il peut donc être un peu lent à charger.
*/
import processing.serial.*;
import ddf.minim.*;
import ddf.minim.analysis.*;
import cc.arduino.*;
Minim minim;
AudioPlayer song;
BeatDetect beat;
BeatListener bl;
Arduino arduino;
int ledPin = 1; // LED connectée au canal EL 1
int ledPin2 = 2; // LED connectée au canal EL 2
int ledPin3 = 3; // LED connectée au canal EL 3
float kickSize, snareSize, hatSize;
void setup() {
size(512, 200, P3D);
minim = new Minim(this);
arduino = new Arduino(this, "/dev/ttyACM1", 57600);
song = minim.loadFile("/home/paul/Music/dope.mp3", 2048);
song.play();
// objet de détection de beat en mode FREQ_ENERGY qui
// attend des tampons de la longueur de la taille du tampon de song
// et des échantillons capturés au taux d'échantillonnage de song
beat = new BeatDetect(song.bufferSize(), song.sampleRate());
// régler la sensibilité à 300 millisecondes
// Après qu'un beat a été détecté, l'algorithme attendra 300 millisecondes
// avant d'autoriser un autre beat à être signalé. Vous pouvez utiliser ceci pour amortir
// l'algorithme s'il donne trop de faux positifs. La valeur par défaut est 10,
// ce qui est essentiellement sans amortissement. Si vous essayez de régler la sensibilité à une valeur négative,
// une erreur sera signalée et elle sera réglée sur 10 à la place.
beat.setSensitivity(100);
kickSize = snareSize = hatSize = 16;
// créer un nouvel écouteur de beat, pour ne manquer aucun tampon pour l'analyse
bl = new BeatListener(beat, song);
textFont(createFont("Helvetica", 16));
textAlign(CENTER);
arduino.pinMode(ledPin+3, Arduino.OUTPUT);
arduino.pinMode(ledPin2+3, Arduino.OUTPUT);
arduino.pinMode(ledPin3+3, Arduino.OUTPUT);
}
void draw() {
background(0);
fill(255);
if(beat.isKick()) {
arduino.digitalWrite(ledPin+3, Arduino.HIGH); // allumer la LED pour kick
kickSize = 32;
}
if(beat.isSnare()) {
arduino.digitalWrite(ledPin2+3, Arduino.HIGH); // allumer la LED pour snare
snareSize = 32;
}
if(beat.isHat()) {
arduino.digitalWrite(ledPin3+3, Arduino.HIGH); // allumer la LED pour hat
hatSize = 32;
}
arduino.digitalWrite(ledPin+3, Arduino.LOW); // éteindre la LED
arduino.digitalWrite(ledPin2+3, Arduino.LOW); // éteindre la LED
arduino.digitalWrite(ledPin3+3, Arduino.LOW); // éteindre la LED
textSize(kickSize);
text("KICK", width/4, height/2);
textSize(snareSize);
text("SNARE", width/2, height/2);
textSize(hatSize);
text("HAT", 3*width/4, height/2);
kickSize = constrain(kickSize * 0.95, 16, 32);
snareSize = constrain(snareSize * 0.95, 16, 32);
hatSize = constrain(hatSize * 0.95, 16, 32);
}
void stop() {
// toujours fermer les classes audio Minim quand vous avez fini avec elles
song.close();
// toujours arrêter Minim avant de quitter
minim.stop();
// cela ferme le sketch
super.stop();
}
BeatListener (Java)
class BeatListener implements AudioListener {
private BeatDetect beat;
private AudioPlayer source;
BeatListener(BeatDetect beat, AudioPlayer source) {
this.source = source;
this.source.addListener(this);
this.beat = beat;
}
void samples(float[] samps) {
beat.detect(source.mix);
}
void samples(float[] sampsL, float[] sampsR) {
beat.detect(source.mix);
}
}
Processus de fabrication
- Ressorts en fil à musique : Résistance, durabilité et applications modernes
- Conception UX pour seniors : Guide complet
- Pourquoi la mémoire numérique est importante
- Ruban Adhésif Polyvalent : Force, Flexibilité et Usages Quotidiens
- L'héritage et l'évolution du jukebox classique
- La partition : Des manuscrits médiévaux à l'édition moderne — Aperçu de l'industrie
- Commentaires C++ : Bonnes pratiques pour un code lisible et maintenable
- Choisir entre Data Matrix et QR Codes : lequel est le meilleur pour votre entreprise
- Codes G CNC expliqués : guide essentiel pour programmeurs