The scheduling between my User Interface and Audio Decoder threads seems to be at best "luck of the draw". Sometimes the UI thread gets loads of CPU while the audio playback struggles. And the next time I run the audio will be filling it's buffers merrily, but the UI will be sluggish.

Sounds like your application is just using too much CPU power. I'm not really an expert in these things, but my guess is you'd be better off trying to improve the performance of your code rather than trying to fix it with scheduling.

Another (somewhat messy) option is you can use calls to sched_yield() to try to artifically lower the priority of your display task (I'm assuming you'd rather that be sluggish than to drop audio). Still, I think your best option will be to reduce your CPU loading.