Minimalist WAV clip player

So, to start off, if possible here are my design constraints that I'm dealing with:

Small Cheap Minimal I will probably be doing my own custom board The wav clips will be less than 1Mb (this is worst case scenario, realistically not even half that) This will be powered by a battery of some kind I'm not concerned about audio quality, as long as the clip is recognizable

If you've noticed, these things rule out any shields, which was most of what I found when I was looking for answers.

I have a project where I want to use an interrupt to watch the status of a pushbutton. When triggered, I want to play a very small wav file. The current file is an 8 bit wav file that is 20Kb in size with the project rate set to 8kHz. I'd like to have the file stored on the atmega and have the corresponding PWM values outputted through an analog pin to a transistor that is driving a speaker. (I might have to put an opamp in here, im not sure)

It sounded like it might be feasible based on this post here http://forum.arduino.cc/index.php?topic=253636.0

is this plausible? if not, what changes can I make to it to make it work. I know this is going to be bootstrapping it, so uh, there's that...

My 2 year degree I got a while back taught me enough about electronics to have a technician level understanding, but nowhere near what I need to do circuit design or intermediate programming.

Thanks in advance for any help and/or suggestions.

If you've noticed, these things rule out any shields,

No I haven't can you explain?

The wav clips will be less than 1Mb

So how much memory does an Arduino have? The normal amount is 32K.

I have a project where I want to use an interrupt to watch the status of a pushbutton.

Why? There is no need to use an interrupt for this. An interrupt can only set a flag so you will have to pole for the flag so you might as well pole for the button press.

The current file is an 8 bit wav file that is 20Kb in size with the project rate set to 8kHz. I'd like to have the file stored on the atmega and have the corresponding PWM values outputted through an analog pin to a transistor that is driving a speaker

However that might just be feasible. You have to raise the PWM frequency to around 38KHz and you have to put your samples in program memory.

This link shows you how to do that, just substitute the sine wave look up table for your samples. http://interface.khm.de/index.php/lab/interfaces-advanced/arduino-dds-sinewave-generator/

Read the button, send a file number to an MP3 player:
$10 SD Card MP3 Player Module RS232-TTL - MDFLY

To push a button and play a sound clip you could use SparkFun Audio-Sound Breakout - WTV020SD which doesn't require an Arduino or even an audio amp. The MDFLY product above is great and I have used it before but if minimalist is a requirement this product is pretty small. ADAfruit have some similar products now that have a built in amplifier and can be triggered from a button too but I have not used them.

If you need to add an Arduino anyway for some other purpose then here is a sample project I did with an Arduino Mini and the above sound module which needed to be small to fit inside a toy dog.

Snoring Dog Using SparkFun Sound Module and Arduino Mini

This ATtiny WAV file player is about as minimal as it gets. http://elm-chan.org/works/sd8p/report.html

It may be though that the audio quality is a bit too high for your purposes.