Home | Product Categories | Arduino | DEV-10587

Music Instrument Shield

sku: DEV-10587 RoHS Compliant In Fritzing Library

Description: Do you ever wish your Arduino was more musically talented? Or maybe your project could use some cool sound effects. The Musical Instrument Shield is an easy way to add great sounding MIDI sound to your next Arduino project. This board is built around the VS1053 MP3 and MIDI codec IC, wired in MIDI mode. Simply connect a speaker/stereo/pair of headphones to the 1/8" stereo jack on the shied and pass the proper serial commands to the IC and you'll be playing music in no time!

The VS1053 contains two large tonebanks including various piano, woodwinds, brass, synth, SFX and percussion sounds. The shield is also capable of playing several tones simultaneously (maximum polyphony of up to 31 sounds!). Take a look at our example code to get an idea of how easy it is to add musical zest to your next Arduino gadget.

In this version, we're using a better regulator, corrected the speaker connectors, and have the reset pin pulled high. We've also included solder jumpers for pin 3 and 4 so they're selectable.

Documents:

Replaces: DEV-10529

Pricing

24 available

29.95
26.96
23.96

24 in stock

price
10-99
100+



Add to Wish List


Comments 25 comments

  • The example code has a wee bug in it. If you’re trying to send pitch bend messages you get weird behavior. Pitch bend messages are 3-bytes long, but the talkMIDI() function only sends the third byte for messages where the command is less than or equal to 0xB0. Change the line:

    if( (cmd & 0xF0) <= 0xB0)
    

    to

    if( (cmd & 0xF0) <= 0xB0 || (cmd & 0xF0) == 0xE0)
    

    and this should send pitch bend properly.

  • I have the old version which makes a lot of noise when I power it up until the sketch starts running (just a few seconds). Can I fix this by pulling the reset pin high (like this version)?

  • Can someone summarize the differences between this VS1053 and the VS1103? The VS1103 seems to have a bit “more” of the same but the VS1053 appears more popular.

    • VS1053 has MP3 support when VS1103 can only play PCM and ADPCM.
      VS1053 has very poor quality MIDI instruments in soundbank and I think VS1103 is the same.

      • I would consider the midi samples quite fair – actually better than the quicktime midi defaults (my opinion). If you only play short notes (< 100 ms) on the VS1053 they do sound bad because many of them have a longer attack and decay time. Set the note length to 150 to 300 ms to hear the actual capability. I was quite surprised how nice they sounded when plugged into a pair of YAMAHA studio monitors. And this VS1053 chip has stereo stage positioning that I like as well.

      • FWIW, I have tried the VS1103, and the MIDI samples are pretty good. The sound is very close to a vintage SoundBlaster card (Yamaha OPL3).

  • Anyone seen a good tutorial or guide on how to get this up and running? The example code(s) are nice, but they don’t really show the full functionality of the board.
    Thanks!

  • Anyone have an mp3 file that plays the instruments?

    • The IC comes preloaded with TONS of instruments! Take a look at the datasheet.

    • Now that I have it running, I could make a demo mp3; lets see if I can get around to it in the next few days.

  • I know this board is polyphonic, but 1 instrument at a time correct?

    • I think what you can do is play one note, than change instruments, and play another instrument etc.
      Max is 31 notes, but I don’t believe it is limited to a single instrument.

    • midi can send signals for 16 channels and each channel can play a different instrument. Right now I have this working so a drum beat plays on channel 2 and a melody plays on channel 1 at the same time:

      // channel 1  
      talkMIDI(0xB0, 0x07, 127); //0xB0 is channel message, set channel volume  
      talkMIDI(0xB0, 0, 0x79); //Bank select melodic  
      // channel 2  
      talkMIDI(0xB1, 0x07, 127); //0xB0 is channel message, set channel volume  
      talkMIDI(0xB1, 0, 0x78); //Bank select drums  
      talkMIDI(0xC1, 5, 0); // set instrument to # 5  
      

      // then to trigger the notes:

      noteOn(0, ThisNote, 127]); // play channel 1  
      noteOn(1, ThisDrum, 127]); // play channel 2  
      

      This did take some time to wrap my head around because I have never worked with midi at this level of detail. Cheers!

      • Have you been able to get good control of the output timing? I was able to produce some basic algorithmic music, but I’d love to be able to program in more “feel” to the canned drum parts, for instance. I’ve converted a midi beat into an array of noteOn/noteOff signals with associated “tick” timing, but my programming skills are lacking when it comes to triggering those on time as they arise. For instance, I want to trigger kick and hi-hat at or around tick 0, snare at tick 96, hi-hat at tick 150, etc., with each tick only 5-10 ms, depending on tempo. Has anyone done or seen something similar? Many thanks for any advice.

        Btw, your SongPainter project is great!

  • Can anyone tell me if I can load my own samples into this thing? I have a custom instrument, with 32 notes, that I would love to play polyphonically. Thanks in advance!
    Revision: I am looking at the datasheet, and it says the chip has a “user-loadable Ogg Vorbis encoder”. That sure sounds like it can be loaded with my samples, unless I’m missing something.

  • just a suggestion for the next revision, you could add a 5-pin DIN connector footprint to the proto area so you could hook an external midi source to the chip.

  • I am working on a (patent pending) musical toy prototype using this vs1053 MIDI breakout. You can hear various sound samples of the MIDI instruments on the VS1053 to get a feel for what it sounds like. Happy creating!
    http://www.youtube.com/watch?v=KiCoMHCS9Iw

  • Hi,
    can anyone please tell me the latency of the chip from getting the command, until it plays wav/flac/ogg files from flash?
    greetings,
    Simon

  • so I’m using arduino 1.0-rc1 and ran into a problem with the example codes – heres the solution:
    first – in order to include the serial library rather than
    include NewSoftSerial mySerial(2, 3);
    you need to use
    include SoftwareSerial mySerial(2, 3);
    second – mySerial.print(cmd,BYTE) becomes mySerial.write(cmd)
    and this format needs to be used for all instances of mySerial

  • I was having a problem with this part making lots of white noise. After trying multiple things to reduce this problem, I eventually noticed that the power light was staying on even after my external power source was off. I set the reset pin to INPUT mode and the noise went away. Both examples show this pin being set to OUTPUT mode but even when I hooked it up the normal way, directly to the Arduino, I was getting this noise. Hopefully this saves some people the headaches I had.

  • The MP3 Trigger v2 and the MP3 Player Shield both need the analog outputs of the VS1053 protected when they are connected directly to an amplifier. This uses the same VS1053, so I’m guessing the same application note applies to the Music Instrument Shield as well?

  • Help. I have yet to sucessfully uploaded a sketch – I tried the examples provided, modified as per the posts, but no go. Does anyone have a sketch running on 1.0 they would like to share? I am not yet up to speed on SoftwareSerial. Thanks in advance for help offered.