EL-tape Muziekvisualisator – Verlicht je geluid met Arduino
Onderdelen en benodigdheden
| Arduino UNO | 1 |
| EL Shield voor Arduino | 1 |
| EL-tape - Groen 1m | 1 |
| EL-tape - Rood 1m | 1 |
| EL-tape - Blauw 1m | 1 |
Over dit project
Er is een EL Shield en connectors van SeeedStudio gebruikt met een Arduino UNO. De tape was aangesloten op de shield op 3 van de 4 kanalen.
Zodra dit voltooid is, upload je de code en begin je muziek te spelen!
De code maakt gebruik van Processing en de Processing Arduino-bibliotheek. Je hebt beide nodig om het te laten werken.
- Download de bibliotheek voor Arduino hier.
- Download Processing op https://processing.org/.
Zodra alles geïnstalleerd is, verplaats de Arduino-bibliotheek naar de libraries-map van je Processing-sketchboekmap en open de code in de Processing-editor.
Wijzig de regel:
song = minim.loadFile("/home/paul/Music/dope.mp3", 2048);
op regel 38 van BeatWrite naar een lokaal MP3-bestand op je computer en klik op play!
Code
BeatWrite (Java/Processing)
/**
* Deze sketch demonstreert hoe de BeatDetect-object in FREQ_ENERGY-modus te gebruiken.
* Je kunt isKick, isSnare, isHat, isRange,
* en isOnset(int) gebruiken om welke beats je wilt volgen te traceren.
* Ze rapporteren true of false gebaseerd op de analyse-status.
* Om de analyse te „tikken” moet je detect aanroepen met opeenvolgende audiobuffers.
* Je kunt dit in draw doen, maar je mist waarschijnlijk sommige audiobuffers.
* De sketch implementeert een AudioListener genaamd BeatListener
* zodat het detect kan aanroepen op elke verwerkte audiobuffer zonder een buffer te herhalen of te missen.
*
* Deze sketch speelt een heel nummer af, dus het kan even duren om te laden.
*/
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 aangesloten op EL-kanaal 1
int ledPin2 = 2; // LED aangesloten op EL-kanaal 2
int ledPin3 = 3; // LED aangesloten op EL-kanaal 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();
// een beatdetectie-object in FREQ_ENERGY-modus dat
// buffers verwacht van de lengte van song's buffer-grootte
// en samples vastgelegd met song's sample-rate
beat = new BeatDetect(song.bufferSize(), song.sampleRate());
// gevoeligheid instellen op 300 milliseconden
// Na detectie van een beat wacht het algoritme 300 ms voordat een andere beat gerapporteerd wordt.
// Je kunt dit gebruiken om het algoritme te dempen als het te veel false-positives geeft.
// Standaardwaarde is 10, wat eigenlijk geen demping is.
// Als je een negatieve waarde instelt, wordt een fout gerapporteerd en wordt het op 10 gezet.
beat.setSensitivity(100);
kickSize = snareSize = hatSize = 16;
// nieuwe beat-listener maken, zodat we geen buffers missen voor de 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); // LED aan voor kick
kickSize = 32;
}
if(beat.isSnare()) {
arduino.digitalWrite(ledPin2+3, Arduino.HIGH); // LED aan voor snare
snareSize = 32;
}
if(beat.isHat()) {
arduino.digitalWrite(ledPin3+3, Arduino.HIGH); // LED aan voor hat
hatSize = 32;
}
arduino.digitalWrite(ledPin+3, Arduino.LOW); // LED uit
arduino.digitalWrite(ledPin2+3, Arduino.LOW); // LED uit
arduino.digitalWrite(ledPin3+3, Arduino.LOW); // LED uit
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() {
// altijd Minim-audioklassen sluiten wanneer je er klaar mee bent
song.close();
// altijd Minim stoppen voor het afsluiten
minim.stop();
// dit sluit de sketch
super.stop();
}
BeatListener (Java/Processing)
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);
}
}
Productieproces
- UX Ontwerpen Voor Senioren: Een Uitgebreide Gids
- Alleskunner tape: kracht, flexibiliteit en alledaags gebruik
- Het Erfgoed en de Evolutie van de Klassieke Jukebox
- Bladmuziek: Van Middeleeuwse Handschriften tot Moderne Uitgeverij – Een Brancheoverzicht
- Streepjescodescanner: Technologie, Ontwerp en Toekomstige Trends
- Cellofaan Tape: Geschiedenis, Productie en Milieueffect
- Waarom digitaal geheugen belangrijk is
- Kiezen Tussen Data Matrix En QR Codes: Wat Is Best Voor Uw Bedrijf
- CNC G-codes uitgelegd: essentiële gids voor CNC programmeurs
- Muziekdraadveren: Kracht, Duurzaamheid en Moderne Toepassingen
- C++ comments: best practices voor leesbare, onderhoudbare code