Instructables

How to Make LEDs Flash to Music with an Arduino

This is a guide to make an LED flashing circuit that "beats" to an mp3 file on your computer, which can add an awesome effect to any sound-related device, or even your room (if you extend the concept with LED drivers or plenty of resistors/transistors).

The LED flashing circuit makes use of the Minim audio library and the Arduino program Processing to analyze sound, producing a response based on a snare drum hit, a bass drum hit, and a hi-hat hit from the percussion of the audio file.

 
Remove these adsRemove these ads by Signing Up

Step 1: Parts/Tools Needed

Picture of Parts/Tools Needed
Here is what you'll need to make the LED beat flashing circuit:

Hardware:
1. An Arduino microcontroller board. There are many versions of the Arduino, but I would recommend the Arduino Duemilanove. You can buy one online for around $20.
2. Three LEDs (different colors preferred, so you can see the difference in beats easier - I used a red, yellow, and green LED)
3. Three resistors (depending on your LEDs, the resistor value will be different - check the ratings on the LEDs to see what resistance corresponds to their maximum brightness, without burning them out)
4. A solderless breadboard
5. Some wire, to use as leads from the Arduino to the LEDs/resistors on the breadboard
6. A computer
7. A USB cable (A to B)

Software:
1. Arduino Software Environment
2. Processing Software Environment
3. The "arduino" library for Processing
4. The BeatWrite / BeatListener code from the minim JavaSound library examples

Download links for the software will follow in Step 3.

mondherryesterday

you for all
the information

according
to which the LEDs are lit

What is a
`three code isKick isSnare isHat

sampling is made or not

algorithm program

help me pleasethank

mondherryesterday

ayou for all
the information

according
to which the LEDs are lit

What is a
`three code isKick isSnare isHat

sampling is made or not

algorithm program

aide
moi pleasethank

mondherr2 days ago

thank you for all the information

I do not understand by what the LEDs light

how we selected three part audio buffer according to intensity or frequency

as do the three codes isKick isSnare isHat

algorithm program

thank you

nerfitz13 days ago

i have been trying to get this software to works for the past couple days now and it keeps saying "the package "cc" does not exist...

I understand that the libraries have to be within the sketchbook folders for the program to find them but i guess i don't know which file is missing or exactly how it is supposed to go if someone (hopefully the poster?) could screenshot the folders and how they are supposed to look or describe the order of files within files that would be awesome. I've been moving things around for a while and i have already tried renaming Arduino to arduino, no luck.

halp.jpg
rbeserra17 days ago
mcabias28 days ago

Hello there!
Can I change the music into one of the songs of SKRILLEX like the CINEMA or the Rock and Roll song? and also how will I code it if I'm going to use that song. Thanks :-)

wahahahaha1 month ago

what to do?..im getting this error

java.lang.NullPointerException

at processing.mode.java.runner.Runner.findException(Runner.java:926)

at processing.mode.java.runner.Runner.reportException(Runner.java:871)

at processing.mode.java.runner.Runner.exceptionEvent(Runner.java:797)

at processing.mode.java.runner.Runner$2.run(Runner.java:686)

edecoux2 months ago

i'm getting this error

==== JavaSound Minim Error ====

==== Don't know the ID3 code TXXX

==== JavaSound Minim Error ====

==== Don't know the ID3 code TXXX

==== JavaSound Minim Error ====

==== Don't know the ID3 code TXXX

==== JavaSound Minim Error ====

==== Don't know the ID3 code TDEN

==== JavaSound Minim Error ====

==== Don't know the ID3 code TSSE

lilchip4 months ago
please help I keep getting the following error I am trying to run this project on the raspberry pi
java.io.IOException: Cannot run program "/home/pi/processing-2.1/java/bin/java": java.io.IOException: error=2. no such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:488)
lilchip4 months ago
I am trying to run this project from a raspberry pi please help error code above
lilchip4 months ago
java.io.IOException: Cannot run program "/home/pi/processing-2.1/java" : java.io.IOException: error=2. No such file or directory
at java.lang.ProcessBuilder.start.(ProcessBuilder.;java:488)
dan5554 months ago
Hi I Was wondering if you are able to add more channels to the program so you are capable off having 8 leds flashing away
jcupof5 months ago
(removed by author or community request)
jcupof jcupof5 months ago
I solved my previous issue, and now have this:
I am on a mac 10.9.x
- java.lang.NullPointerException
at processing.app.Library.getClassPath(Library.java:315)
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:406)
at processing.mode.java.JavaBuild.preprocess(JavaBuild.java:185)
at processing.mode.java.JavaBuild.build(JavaBuild.java:144)
at processing.mode.java.JavaBuild.build(JavaBuild.java:123)
at processing.mode.java.JavaMode.handleRun(JavaMode.java:120)
at processing.mode.java.JavaEditor$18.run(JavaEditor.java:468)
at java.lang.Thread.run(Thread.java:744)
jabelone5 months ago
I have tried so many different ways to do this and was just about to buy a pre built kit and yours worked!! Because I couldn't get the pre built kit here in time I needed something as proof of concept. Thanks heaps!!
bbulldog5 months ago
Help! Hope someone is looking at this. Worked on an error all day. Can't get it. When the file BeatWrite is started, get the error, "import does not name type." Appreciate any help you can give me.
lynettequek7 months ago
mine highlights this:
arduino = new Arduino(this, Arduino.list()[0], 57600);

and wrote that they could not register dispose + 0 for processing.
anyone knows what went wrong?
tchatow8 months ago
Here is my code:

/**
* This sketch demonstrates how to use the BeatDetect object in FREQ_ENERGY mode.

* You can use isKick, isSnare, isHat, isRange,
* and isOnset(int) to track whatever kind of beats you are looking to track, they will report
* true or false based on the state of the analysis. To "tick" the analysis you must call detect
* with successive buffers of audio. You can do this inside of draw, but you are likely to miss some
* audio buffers if you do this. The sketch implements an AudioListener called BeatListener
* so that it can call detect on every buffer of audio processed by the system without repeating a buffer
* or missing one.
*


* This sketch plays an entire song so it may be a little slow to load.
*/

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 = 12; // LED connected to digital pin 12
int ledPin2 = 8; // LED connected to digital pin 1
int ledPin3 = 2; // LED connected to digital pin 0

float kickSize, snareSize, hatSize;

void setup() {
println(Arduino.list()[0]);
}

void draw() {
background(0);
fill(255);
if(beat.isKick()) {
arduino.digitalWrite(ledPin, Arduino.HIGH); // set the LED on
kickSize = 32;
}
if(beat.isSnare()) {
arduino.digitalWrite(ledPin2, Arduino.HIGH); // set the LED on
snareSize = 32;
}
if(beat.isHat()) {
arduino.digitalWrite(ledPin3, Arduino.HIGH); // set the LED on
hatSize = 32;
}
arduino.digitalWrite(ledPin, Arduino.LOW); // set the LED off
arduino.digitalWrite(ledPin2, Arduino.LOW); // set the LED off
arduino.digitalWrite(ledPin3, Arduino.LOW); // set the LED off
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() {
// always close Minim audio classes when you are finished with them
song.close();
// always stop Minim before exiting
minim.stop();
// this closes the sketch
super.stop();
}





I get an error on this line: if(beat.isKick()) {

Here is the error: NullPointerException
BobThAK11 months ago
I'm getting this. lol

Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: No framebuffer objects available
at processing.opengl.PGL$PGLListener.init(PGL.java:3255)
at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:532)
at jogamp.opengl.GLDrawableHelper.init(GLDrawableHelper.java:552)
at javax.media.opengl.awt.GLCanvas$5.run(GLCanvas.java:1032)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1019)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:896)
at javax.media.opengl.awt.GLCanvas$7.run(GLCanvas.java:1060)
at javax.media.opengl.Threading.invoke(Threading.java:193)
at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:461)
at javax.media.opengl.awt.GLCanvas.paint(GLCanvas.java:516)
at sun.awt.RepaintArea.paintComponent(RepaintArea.java:248)
at sun.awt.RepaintArea.paint(RepaintArea.java:224)
at sun.awt.windows.WComponentPeer.handleEvent(WComponentPeer.java:308)
at java.awt.Component.dispatchEventImpl(Component.java:4736)
at java.awt.Component.dispatchEvent(Component.java:4488)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:627)
at java.awt.EventQueue$2.run(EventQueue.java:625)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
at java.awt.EventQueue$3.run(EventQueue.java:641)
at java.awt.EventQueue$3.run(EventQueue.java:639)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Exception in thread "Animation Thread" java.lang.RuntimeException: java.lang.RuntimeException: Processing cannot run because GLSL shaders are not available.
at jogamp.common.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58)
at jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:99)
at jogamp.opengl.ThreadingImpl.invokeOnOpenGLThread(ThreadingImpl.java:205)
at javax.media.opengl.Threading.invokeOnOpenGLThread(Threading.java:172)
at javax.media.opengl.Threading.invoke(Threading.java:191)
at javax.media.opengl.awt.GLCanvas.display(GLCanvas.java:461)
at processing.opengl.PGL.requestDraw(PGL.java:1195)
at processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1550)
at processing.core.PApplet.run(PApplet.java:2140)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.RuntimeException: Processing cannot run because GLSL shaders are not available.
at processing.opengl.PGraphicsOpenGL.getGLParameters(PGraphicsOpenGL.java:6077)
at processing.opengl.PGraphicsOpenGL.beginDraw(PGraphicsOpenGL.java:1580)
at processing.core.PApplet.handleDraw(PApplet.java:2219)
at processing.opengl.PGL$PGLListener.display(PGL.java:3240)
at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:573)
at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:558)
at javax.media.opengl.awt.GLCanvas$6.run(GLCanvas.java:1049)
at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1021)
at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:896)
at javax.media.opengl.awt.GLCanvas$7.run(GLCanvas.java:1060)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:666)
at java.awt.EventQueue.access$400(EventQueue.java:81)
at java.awt.EventQueue$2.run(EventQueue.java:627)
at java.awt.EventQueue$2.run(EventQueue.java:625)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:636)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
my best settings came as:

beat.setSensitivity(1);
kickSize = snareSize = hatSize = 500

time to rig it up to some bridge rectifiers, isolators and some A/C lights
Iraz11 months ago
It says serial does not run in 64-bit mode? Can anyone help me?
jordxn1 year ago
Also had the "the package "cc" does not exist issue. To fix -- In the Processing Editor, select "Sketch" > "Add File", then just select the "Ardunio.jar" file. Should work!

I also got "ArrayIndexOutOfBoundsException" -- To get this fixed;

Changed line 35 from;
arduino = new Arduino(this, Arduino.list()[1], 57600);
To;
arduino = new Arduino(this, Arduino.list()[0], 57600);

And then it works!! :)
rmoorjani1 year ago
Hey guys, I fixed the "the package "cc" does not exist. you might be missing a library." error! ITS SUPER SIMPLE! Just go to /libraries/arduino/library/ and rename the Arduino.jar to arduino.jar with a lowercase :)
I have this error and this did not help
Well now I fixed that... But now it's saying:

"NullPointerException" on processing
An highlighting the line "song = minim.loadfile("mysong.mp3", 2048);"
Well, I fixed the "Cannot find a class or type named 'BeatListener'" problem... On my own.
But I would appreciate it if someone would help with arduino. When I try to upload it, is says "avrdude: stk500_getsync() : not in sync: resp=0x30" What exactly does that mean and how do I fix it; because I think it has something to do with "ArrayIndexOutOfBoundsException: 1
WARNING: RXTX Version mismatch
Jar version = RXTX-2.2pre1
native lib Version = RXTX-2.2pre2
Exception in thread "Animation Thread" java.lang.ArrayIndexOutOfBoundsException: 1
at sketch_jan20a.setup(sketch_jan20a.java:59)
at processing.core.PApplet.handleDraw(Unknown Source)
at processing.core.PApplet.run(Unknown Source
at java.lang.Thread.run(Thread.java:662)" on processing.
(btw: "sketch_jan20a." is the name of the processing page I put the code on) If someone could help with either or both of these, it would be much appreciated!
On processing, it says

"Cannot find a class or type named 'BeatListener'"

How do I fix this? What am I missing? No ones' answers are helping me.
I need help, when I press the run button in processing it says No library found for cc.arduino
Libraries must be installed in a folder called "libraries" inside the "sketchbook" folder.
I've found the libraries folder in the arduino-1.0.3 folder but I cant find sketchbook folder
gthorsnes1 year ago
To everyone getting the "IllegalAccess" message: go back to the Processing download page, and download the LAST KNOWN GOOD COPY: 1.5.1 For some reason the beta of 2.0 is messed up and causes this issue. Just download the 1.5.1 build, underneath the beta builds, and re-try. This fixed the issue for me.
rynev331 year ago
I am also getting that exception in thread message. Can you please explain the fix?
ejogion1 year ago
I got this
Exception in thread "AWT-EventQueue-0" java.lang.IllegalAccessError: tried to access class processing.core.PApplet$RegisteredMethods from class cc.arduino.Arduino$SerialProxy

HELP!!!!
https://github.com/pardo-bsso/processing-arduino That fixed it for me
I got everything accordingly to what you have but im getting the following error:

OpenGL error 1280 at top beginDraw(): invalid enumerant

Help please
Sushant081 year ago
i keep getting java arrayindexoutofbounds exception1 even after i have changed the filename and added the arduino libraries
Sushant081 year ago
i keep getting java arrayindexout of exception 1 error .even after i have replaced the filename and added the arduino libraries
Hey I am making this project for my class and I am wondering if anyone knows how i could do this same thing but with 5 led's tied in series......please comment back thanks :)
same here, i'm gonna follow this thread in case anything comes up
I found out an easy way to do it without using any extra components.......just tie the led's in parallel instead of series......the arduino powered all 5 of my led's just fine make sure you have a resistor though.
do u know a way to split the bands even more so the kick has its own lows, mids, and highs and the snare would have its own lows, mids, highs and so on? what do i need to edit to recognize more frequency ranges?
No I havent figured that out yet either. If you find out please let me know. It would better my project.
Pro

Get More Out of Instructables

Already have an Account?

close

PDF Downloads
As a Pro member, you will gain access to download any Instructable in the PDF format. You also have the ability to customize your PDF download.

Upgrade to Pro today!