While I've now got this demo "working" with the diode mentioned above bypassed, it only works for a limited number of playbacks before getting a memory leak.
If I printout the free heap size after each playback, I am losing 2112 bytes after each loop. Can anyone else confirm this? I've made a few slight modifications to the main application loop (namely, removing the webserver interface because I wanted playback from an external range sensor, which I'm currently emulating with the GPIO0 button), but I don't think that they are responsible. I've commented out the wav playback functions and my heap size remains static.