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.

1-40 of 122Next »

i wnn auduino code for displaying single led light,,,, in led display32*16 nd i hv to display only 4*4 leds in that display only

RaresP4 days ago

Thank you dude for the project it is awesome :)

vansh200128 days ago

I need help. My led won't light up.I hear the music in the processing. I checked and made sure they led are working. How do i use processing to connect with arduino

vansh200129 days ago

I got through all the set up as mentioned but for some resin my led won't light up to the beat. 2 of the them are constantly lit( input 12 and 8). How do i fix this

H2oSecReT3 months ago

i'm encountering another problem again how ti fix this:

==== JavaSound Minim Error ====

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

==== JavaSound Minim Error ====

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

==== JavaSound Minim Error ====

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

==== JavaSound Minim Error ====

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

please help sir

the song is already playing but the led are not flashing

H2oSecReT3 months ago

i got an error like this:

java.lang.RuntimeException: java.lang.NullPointerException

at com.jogamp.common.util.awt.AWTEDTExecutor.invoke(AWTEDTExecutor.java:58)

at jogamp.opengl.awt.AWTThreadingPlugin.invokeOnOpenGLThread(AWTThreadingPlugin.java:100)

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:483)

at processing.opengl.PGL.requestDraw(PGL.java:1149)

at processing.opengl.PGraphicsOpenGL.requestDraw(PGraphicsOpenGL.java:1604)

at processing.core.PApplet.run(PApplet.java:2176)

at java.lang.Thread.run(Thread.java:662)

Caused by: java.lang.NullPointerException

at ddf.minim.javasound.JSMinim.getAudioRecordingStream(Unknown Source)

at ddf.minim.Minim.loadFile(Unknown Source)

at BeatWrite.setup(BeatWrite.java:58)

at processing.core.PApplet.handleDraw(PApplet.java:2280)

at processing.opengl.PGL$PGLListener.display(PGL.java:2601)

at jogamp.opengl.GLDrawableHelper.displayImpl(GLDrawableHelper.java:588)

at jogamp.opengl.GLDrawableHelper.display(GLDrawableHelper.java:572)

at javax.media.opengl.awt.GLCanvas$7.run(GLCanvas.java:1054)

at jogamp.opengl.GLDrawableHelper.invokeGLImpl(GLDrawableHelper.java:1034)

at jogamp.opengl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:909)

at javax.media.opengl.awt.GLCanvas$8.run(GLCanvas.java:1065)

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)

mondherr4 months ago

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

mondherr4 months ago

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

mondherr4 months 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

nerfitz4 months 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
rbeserra4 months ago
emceecabias5 months 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 :-)

wahahahaha5 months 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)

edecoux7 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

lilchip8 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)
lilchip8 months ago
I am trying to run this project from a raspberry pi please help error code above
lilchip8 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)
dan5558 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
jcupof9 months ago
(removed by author or community request)
jcupof jcupof9 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)
jabelone9 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!!
bbulldog9 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.
lynettequek11 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?
tchatow1 year 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
BobThAK1 year 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
Iraz1 year 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
Sushant082 years ago
i keep getting java arrayindexoutofbounds exception1 even after i have changed the filename and added the arduino libraries
1-40 of 122Next »