have you tried the mpd system, yet? 'music playback daemon' which runs on most unix systems (I don't know if it runs on windows or not).
its a distributed architecture and you can place functions almost where you like. its very flexible and can have a simple (or complex) web interface. I used a simple-simple (lol) web interface and did have the arduino do http GETs to control pause/play/next/prev stuff, as well as time time duration/remain and song name. but that's where I stopped and went back to the volume control stuff
give mpd a look. I used the ncurses (text terminal) version for a client interface. its what I used to create playlists, pause things, play/skip, etc. when I wanted to just do quick stuff, you'd telnet/ssh to the mpd box, run 'ncmpc', then quit and logout. it was very lightweight and just used VT100 style 'light graphics'. pretty much all the functionality you'd need, too.
the server, 'mpd' itself, is the thing that talks to the sound card and that sound card (spdif out) is what you'd send to your dac/amp. the audio does come from the same system the 'mpd' daemon runs on, yet the control can be done locally or remotely via the web/http.
the arduino part, the way I tried it, was to have the ethernet shield run the tcp/ip/sockets stack and the arduino would just issue web GETs and pend on their responses, parse them and display a formated version to the local lcd display. also accept IR commands and use those (FF, REW, PAUSE) to send the corresponding GET requests. something like that.