I’ve wanted to try something like this with a Pi or something else running Linux. Is mpd a good choice for that scenario? Does it support being able to use custom events eg a button on the gpio for play/pause?
mpd is a great choice, there are lots of things built around it. Essentially, you'd have the GPIOs trigger mpc commands. mpc talks MPD over the network back to the mpd server, so you could have physical controls all around the place.