The format structure should include a flag saying whether the data's been dithered. We could thus have input-mad output undithered 24-bit data, and the conversion stuff could dither it; likewise for other inputs that don't dither (I haven't yet looked to see which do). That'd let us avoid dithering when doing JACK output as well. "Headphone crossfeed" should be a processing option. http://bs2b.sourceforge.net/ While the current triangular dithering code sounds fine to me (it's audibly better than no dithering at all), there are better approaches available these days. I also need to check whether it should be applied to any of the other codecs. Add a "potaplay" command-line mode. Add sensible keyboard shortcuts for all the buttons. For testing, it would be useful to have a "skip to 5s before the end of this track" button. MIDI control (perhaps only in JACK mode). This would be useful for transcription, because then any MIDI pedal could be used for things like "pause" and "skip back 5s" -- or you could use a MIDI shuttle wheel. Sandbox the decoders by running them in their own syscall-filtered process, writing output to a pipe -- then the worst a malicious file could do would be to play horrible-sounding audio. Use libebur128 (or similar) for automatic gain adjustment. Bug: start a track playing. Pause it. Double-click on another track. The UI then gets out of sync with the player -- it shows you as paused inside the other track, and clicking play doesn't restart. Remove the libglade dependency; Glade is long-obsolete, and the interface is simple enough that the code to set it up would be comparable to what we already have. Rewrite the frontend code in Vala. (Maybe!) Can any of potamus's code make better use of glib? buffer.c duplicates GByteArray. pipe() can be done through glib now. The input/output backends could be glib classes with interfaces.