EL Tape Music Visualiser
Componenten en benodigdheden
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Over dit project
EL Shield en connectorenEL Tape met een EL Shield van SeeedStudio werd gebruikt met een Arduino UNO. De tape was verbonden met het schild op 3 van de 4 kanalen.
Zodra dat is voltooid, uploadt u eenvoudig de code en begint u met het afspelen van uw muziek!
De code maakt gebruik van zowel Processing als de Processing Arduino-bibliotheek. Je moet beide werken om het te kunnen gebruiken.
Pak hier de bibliotheek voor Arduino.
Ga voor verwerking op https://processing.org/
Zodra dat allemaal is geïnstalleerd, verplaatst u de arduino-bibliotheek naar de bibliothekenmap van uw verwerkingsschetsboekmap en opent u de code in de verwerkingseditor.
Verander de regel:
song =minim.loadFile("/home/paul/Music/dope.mp3", 2048);
op regel 38 van BeatWrite naar een lokaal MP3-bestand op uw computer en klik op afspelen!
Code
- BeatWrite
- BeatListener
BeatWriteJava
BeatWrite-schets voor verwerking 2/** * Deze schets laat zien hoe u het BeatDetect-object in FREQ_ENERGY-modus gebruikt.
* U kuntisKick
,isSnare
gebruiken , isHat,isRange
, * enisOnset(int)
om het soort beats dat je wilt volgen te volgen, ze rapporteren * true of onwaar op basis van de status van de analyse. Om de analyse te "vinken" moet udetect
* aanroepen met opeenvolgende audiobuffers. Je kunt dit doen binnendraw
, maar je zult waarschijnlijk een aantal * audiobuffers missen als je dit doet. De sketch implementeert eenAudioListener
genaamdBeatListener
* zodat hetdetect
kan aanroepen op elke buffer van audio die door het systeem wordt verwerkt zonder een buffer te herhalen * of er een missen. ** Deze schets speelt een heel nummer af, dus het kan een beetje traag zijn 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 1int ledPin2 =2; // LED aangesloten op EL-kanaal 2int ledPin3 =3; // LED aangesloten op EL-kanaal 3float kickSize, snareSize, hatSize; void setup () { size (512, 200, P3D); minim =nieuwe Minim(this); arduino =nieuwe Arduino (deze, "/dev/ttyACM1", 57600); song =minim.loadFile("/home/paul/Music/dope.mp3", 2048); nummer.afspelen(); // een beatdetectie-object in de FREQ_ENERGY-modus die // buffers verwacht van de lengte van de buffergrootte van het nummer // en samples die zijn vastgelegd met de samplefrequentie van het nummer beat =new BeatDetect(song.bufferSize(), song.sampleRate()); // stel de gevoeligheid in op 300 milliseconden // Nadat een slag is gedetecteerd, wacht het algoritme 300 milliseconden // voordat een nieuwe slag kan worden gerapporteerd. U kunt dit gebruiken om het //-algoritme te dempen als het te veel valse positieven geeft. De standaardwaarde is 10, // wat in wezen geen demping is. Als u de gevoeligheid op een negatieve waarde probeert in te stellen, wordt // een fout gerapporteerd en in plaats daarvan op 10 gezet. beat.setSensitivity(100); kickSize =snareSize =hatSize =16; // maak een nieuwe beatlistener, zodat we geen buffers voor de analyse missen 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); vullen (255); if(beat.isKick()) { arduino.digitalWrite(ledPin+3, Arduino.HIGH); // zet de LED op kickSize =32; } if(beat.isSnare()) { arduino.digitalWrite(ledPin2+3, Arduino.HIGH); // zet de LED op snareSize =32; } if(beat.isHat()) { arduino.digitalWrite(ledPin3+3, Arduino.HIGH); // zet de LED op hatSize =32; } arduino.digitalWrite(ledPin+3, Arduino.LOW); // zet de LED uit arduino.digitalWrite (ledPin2+3, Arduino.LOW); // zet de LED uit arduino.digitalWrite (ledPin3+3, Arduino.LOW); // zet de LED uit textSize (kickSize); text("KICK", breedte/4, hoogte/2); tekstSize (snareSize); text("SNARE", width/2, height/2); textSize(hatSize); text("HOED", 3*breedte/4, hoogte/2); kickSize =beperken (kickSize * 0,95, 16, 32); snareSize =beperking (snareSize * 0,95, 16, 32); hatSize =beperking (hatSize * 0,95, 16, 32); }void stop() { // sluit altijd Minim-audioklassen als je ermee klaar bent song.close(); // stop altijd Minim voordat u minim.stop(); // dit sluit de schets super.stop();}
BeatListenerJava
class BeatListener implementeert AudioListener{ private BeatDetect beat; privé AudioPlayer-bron; BeatListener (BeatDetect-beat, AudioPlayer-bron) { this.source =source; deze.bron.addListener(dit); deze.beat =beat; } void samples(float[] samps) { beat.detect(source.mix); } void samples (float[] sampsL, float[] sampsR) { beat.detect(source.mix); }}
Productieproces