Due to the impacts of the coronavirus outbreak, we are experiencing longer than normal lead times on certain products. We encourage back-ordering out-of-stock items to receive them as soon as possible.
Track My Order
Frequently Asked Questions
International Shipping Info
Mon-Fri, 9am to 12pm and
1pm to 5pm U.S. Mountain Time:
Chat With Us
July 18, 2011
about 7 years ago
Hi, I created another Arduino MP3 library here: https://github.com/GreyGnome/SFAudioShield . The main differences between this and Bill Porter's:
* This one was built and designed to closely track the VS1053 data sheet. I wanted to understand better how the code interacts and supports the chip, so I built this library. Some of the ideas were based on Bill Porter's, though the lion's share of the code was taken from Christian Schmiljun (who in turn borrowed from Shigeki KOMATSU) and adapted for Arduino's use.
* A few additional features of the vs1053b are supported, such as the sine test. See the code for more information.
* This one supports M4A files, MP3 files, and OggVorbis files.
* This one uses the ID3v2 data from the MP3 files. It also supports comments from OggVorbis. I did not work on getting comments from m4a (iTunes) files; that is left as an exercise for the interested reader.
* This one can fast forward, but cannot skip ahead/behind.
* This library works with interrupts or without. I have discovered that loading the VS1053b with 32 bytes takes 0.32 millis at a 4 MHz SPI bus speed which could be a long time. Starting a track to fill the entire 2048-byte buffer of the chip would take 64*0.32 == 20 millis. I don't want the Arduino waiting for 20 millis, so I created the non-interrupt style.
* This one is not supported. This is one is for the hacker who really wants to understand the code. If something doesn't work for you but you want to make it happen, I'll need you to provide the update. I can't support requests to fix or for updates (I have no time).
* That said, this code is neither clean nor elegant. I have a lot of cruft in there, beginning with all my commented-out println() statements. I can make no apologies for it; I simply present this code to the world so it can see the light of day and perhaps help someone. I wrote it for one of my projects but along the way tried to make it generally useful.
I wouldn't mind you dropping an email if you happen to utilize it. I am firstname.lastname@example.org. Thanks, and I hope you find it useful.
Tutorial - Introduction to data types in the Arduino
about 8 years ago
You mention "microseconds" a number of times above, but I think you mean "milliseconds".
about 8 years ago
I was not going to get this product. Then I saw reference to Jesus, realized that a private company can put anything they want on the bottom of their product, and decided to purchase it.
If these guys wanted to put that little fish with feet that says "Darwin" on it, I'd be cool with that too. Maybe I'd order 2.
So long as the government keeps religion bias out of U.S. government business, I'm comfortable. Put the little fish and the cross on whitehouse.gov, and watch my blood boil... now THAT is worth a complaint, boycott, protest, or what have you.
Heck, maybe I'll order 3. Or maybe ordering or not ordering any based on the manufacturer's private* religious beliefs and the expression thereof in an (arguably) public place is just silly. Yes, that's it- that's what I really think. It's silly. I'm not ordering any. Unless I need one. Then I'll buy one of these. Printed howsoever the manufacturer sees fit.
(* private as in, "...belonging to or concerning an individual person, company, or interest...", not as in "not known or intended to be known publicly")
about 9 years ago
I have created a library that works with this encoder. See it here:
It differs from most other code by being interrupt-driven and easy to use on any pair of Arduino pins (with caveats that the pins must share an ATmega PORT [see the source code for more info]).
No public wish lists :(