Many years ago, I was looking into emacspeak [1], which seems like it could work for this. (I thought it would be a cool way to interact with a wearable computer; I didn't get much farther than those thoughts)
Emacspeak is something I always wanted to try, but keep putting it off for later. Emacs is a powerful tool in itself, and the way Emacspeak integrates with it is unprecedented. It's not just a screen reader getting stuff from OS APIs, it knows a lot about internals of most Emacs features so it can make the speech output as efficient as possible. It also has some cool features like sounds in stereo/3d, changing voice parameters for different text styles etc.
[1] http://emacspeak.sourceforge.net/