Thanks a lot for your help guys.
You can look at our BeatVox product for inspiration. It basically does what you are trying to do. You can look at the software and tools associated with it for ideas on how to load sounds into Arduino FLASH memory.
The Flexible MIDI Shield: MIDI IN/OUT, stacking headers, your choice of I/O pins
Thanks, I'll take a look now. It's good to know that this is possible.
If you don't want to invest in some audio playing hardware you will be storing uncompressed samples.
The first question is: How much total audio do you need to store?
The second question is: How much audio bandwidth do you need?
Together those would determine how much storage space you need. If you want phone-quality audio you'll need about six thousand bytes per second. If you want music quality you will need more like forty thousand bytes per second. If you have a minute of audio that comes to 360 Kb to 2.4 Mb. The Atmega328p has 32 Kb of FLASH so it looks like there is no sense in even attempting to store audio there unless: A) Your total audio is very short and B) you don't mind crappy audio quality. I think you should go straight to an SD card or, perhaps, an add-on EEPROM chip.
Thanks for your reply. I was originally planning to use the waveshield for this project. However it does not support multiple sound files being played simultaneously. I was under the impression that this was due to the time taken to read data off of the SD card. Hence why I was hoping to store my samples on flash memory, maybe I have that wrong?
I am aware that I'll be requiring uncompressed samples, my samples are very small so hopefully it wont be an issue. The project is a drum sequencer with 10 samples. Only 1 sample will be longer than a second, the rest will be smaller than half a second. The total duration is less than 4 seconds and mono will be fine.
How much total audio do you need to store? 4 seconds
I would like as close to CD quality sound as I can get, although I'm happy to make a trade off if bandwidth is restricted. I'm afraid I don't quite understand the calculation you used for bandwidth. I guess it will be affected by how many samples are playing at once. I would ideally like 10 but can work with 3. Please could you explain how I calculate the bandwidth required?