To use this library place the uncompressed WaveHC folder into the libraries subfolder in your main sketches folder. You may need to create the libraries folder. Restart the Arduino IDE if it was open.
Be sure to read Ladyada's excellent tutorial for WaveHC: http://www.ladyada.net/make/waveshield/libraryhc.html
Developers and advanced Arduino users may wish to read the html documentation starting with html/index.html.
Please read the changes.txt file.
Try daphc.pde in the WaveHC/examples folder. If you have problems run the SdReadTest.pde sketch to get more information.
For the AtMega168 be sure to reduce the serial buffer size by setting RX_BUFFER_SIZE to 32 or less in hardware/arduino/cores/arduino/HardwareSerial.cpp. I use 16.
Some SD card are very sensitive to the SPI bus speed for initialization. Try setting SPI_INIT_SLOW nonzero if you have initialization problems. To change edit SdReader.h and change the SPI_INIT_SLOW line to: #define SPI_INIT_SLOW 1
You may have SD I/O errors with Wave Shield V1.0. Most SD cards work with V1.0 but some brands/types fail. Often reducing the SPI bus speed to 4 Mhz helps. You can do this by changing the 'card.init()' statement in a sketch to 'card.init(true)'. 'true' means use a lower SPI speed.
The default speed for card.init can be changed to 4 Mhz by changing the following line in the WaveHC file SdReader.h from #define SPI_DEFAULT_HALF_SPEED false to #define SPI_DEFAULT_HALF_SPEED true
WaveHC supports FAT16/FAT32 formats on SD/SDHC cards. WaveHC only supports short 8.3 DOS style file names.
WaveHC is optimized to play contiguous files. It will play 16-bit 44.1 K files if they are contiguous. All files copied to a newly formatted card will be contiguous. It is only possible to create a fragmented file if you delete a file from an SD and copy a another file to the SD.
You should use a freshly formatted SD card for best performance. FAT file systems become slower if many files have been created and deleted. As files become fragmented reads are slower because the overhead to read the file allocation table increases. Also the time to open a file increases. This is because the directory entry for a deleted file is marked as deleted, but is not deleted. When a file is opened, these entries must be scanned to find the file to be opened, a flaw in the FAT design.
The best way to format an SD card is to use SDFormatter which can be downloaded from:
http://www.sdcard.org/consumers/formatter/
SDFormatter aligns flash boundaries with file system structures which reduces latency and file system overhead. SDFormatter does not have an option for FAT type so it may format small cards as FAT12.
I have included several updates examples for WaveHC in the WaveHC/examples folder. More examples can be downloaded from the Adafruit website: http://www.ladyada.net/make/waveshield/examples.html
The updated examples are:
daphc.ino
- plays all .WAV files on an SD.
SdReadTest.ino
- A sketch to get more information about an SD card.
PiSpeaker.ino
- A text-to-voice sketch that reads pi. You need to
put the files from the piwav folder in example files
on an SD.
SampleRateHC.ino
- A modified version of the Adafruit example that
sets player sample rate by reading analog pin zero.
SoftVolume.ino
- A modified version of the Adafruit example
for software volume control.
openByIndex.ino
- Shows how to reduce latency between files for
applications that must not have a large latency
between files.
Advanced users may wish to change WaveHC settings. Most setting are defines in these files:
WaveHC.h - Buffer size, contiguous file optimization, enable software volume, and error control.
WavePinDefs.h - Change default pin definitions. Save pin 5.
SdReader.h - Change default SPI bus speed.