Sitter en xmega32E5 (ganska basic 32-pinnars xmega) som läser från SD-kortet med Roland Riegels bibliotek (http://www.roland-riegel.de/sd-reader/), som sedan buffrar rådatan i ett FIFO. Utmatningen till DAC'n är ganska mycket av ett ful-hack -- I2S data genereras med en UART modul som är satt i synkront läge som ger data och klocka, medan left/right klockan skapas av en timer som togglar en utgång vid overflow (efter 16 klockar) och som klockas från event-systemet och bit-klockan (därav att PC1 matar PC2 i schemat). Data petas in i UART-modulen mha. en intern DMA-kontroller, vilket gör att allt från ett block av data till I2S data ut sker helt utan att lasta CPUn (bortsett från att DMAn kan blocka CPUns minnesaccess när den är aktiv). Master-klockan till DAC'n är halva xmega'ns interna klocka, vilket gör att man får dynamiskt byta klockfrekvens på mikrokontrollern när man byter samplerate

I övrigt ganska standard, sitter lite ingångs ESD skydd för några generella ingångar som kan trigga olika händelser (play/pause/stop etc), en analogingång som styr en digital volymkontroll i DAC'n, ett low-power läge som stänger av analogmatningsspänningnen för att dra ner energiförbrukningen i standby (~1.7mA), och ett antialiasing filter på utgången.
Finns utförlig dokumentation och sånt att få tag på här; http://www.rabidmantis.se/waveplayer/ om det är nån som tycker det verkar roligt att bygga.