Take a look at rateplay. It faces the same problem: How to respond to user input and maintain the GUI while a song is playing? Instead of curses, it uses Gtk. To keep both the GUI happy and play the song, it uses cooperative multitasking with POE. There's more info on the internals in this article, but only in German.