Play audio files with your Arduino in decent quality from SD card, only very few additional hardware required.
Features
- 8-Bit PWM output - no external DAC required
- 62.500 kHz (fullrate) / 31.250 kHz (halfrate) sampling rate @ 16 MHz
- 31.250 kHz (fullrate) / 15.625 kHz (halfrate) sampling rate @ 8 Mhz
- Mono, bridge and stereo mode
- RAM usage ~1.3 kByte
- ROM usage ~6.1 kByte
- Integrated SD library (minimal FAT only, optimized for low RAM usage and high performance)
- Works with most SD card shields that are hooked to SPI port
- Easy to use: 1. init library, 2. select audio file, 3. call play, 4. call worker while audio is playing
- Supports SD and SDHC cards formated with FAT16 or FAT32
Restrictions
- Audio file must be converted prior use
- Audio files must reside in root directory of card
- File name of audio file must be in 8.3-format
- Audio file must reside completely non-fragmented on card
- Fullrate and stereo actually leads to buffer underruns
- Minimum controller required: ATmega168. ATmega8 is too low on RAM.
Quickstart guide
- Install library: Unzip all to your /libraries/ folder.
- Copy the file /libraries/SimpleSDAudio/examples/example.raw to root folder of a freshly formated SD card (don't use quick format!).
- Connect SD card to your Arduino board (using shield or whatever, SD card's chip select should go to pin 4, all other to SPI pins).
- Connect a speaker or headphone via 100 ohm resistor in series to audio output pin (pin 9 on Arduinos with ATmega168/328, pin 44 on Arduinos with ATmega1280/2560). Connect other end of speaker to GND.
- Launch Arduino IDE and try example "BareMinimumWithDebug" first.
- You should hear the audio (plays just a few seconds). Activate serial monitor to find some information if it does not work. Maybe you have to adjust SD cards CS pin in sketch.
Software installation guide
Browse to your sketchbook location (see Arduino - File - Preferences). There should be a folder called /libraries/, if not, create a folder and name it exactly like that. Then extract the zip-file preserving the folders and put all into the "libraries" folder that you end up with a structure where the "example" folder is located here: /libraries/SimpleSDAudio/examples/. Now you can start Arduino IDE and find examples for the library under File - Examples - SimpleSDAudio.
To convert audio files for usage with this library read the next paragraph.
Preparation of SD card and conversion of audio files
The audio library uses a very trimmed SD library that uses the FAT only to find the start sector of the files. Therefore the file must be completely non-fragmented on the SD card. The best way to ensure this is to do a fresh and full format of the card (don't use quick format!). After formating the SD card, only copy new files on it. Don't delete files and avoid rename operations that creates file names that doesn't fit into 8.3 format (see http://en.wikipedia.org/wiki/8.3_filename ). All files must placed in root directory as folders are not supported by the audio library.
To convert audio files I suggest the use of SoX from http://sox.sourceforge.net .
Windows users
Windows users should download from there the ZIP distribution and unzip it to the libraries/SimpleSDAudio/tools folder. Afterwards they can drag and drop .wav files to the appropriate batch files to start the conversion. The converted files will end up in folder "converted".
Linux users
Linux users should compile SoX from source or use their favorite package manager to install SoX. Afterwards they should use the following line for conversions:
sox inputfile.wav --norm=-1 -e unsigned-integer -b 8 -r 31250 -c 1 -t raw outputfile.raw
Change the following according to your needs:
- For stereo change -c 1 to -c 2
- For full rate use -r 62500 @ 16MHz, -r 31250 @ 8 MHz
- For half rate use -r 31250 @ 16MHz, -r 15625 @ 8 MHz
The option --norm=-1 is used to avoid bad sounding clipping effects.