...or, add a new placeholder system call (or whatever) in the kernel that the player calls passing the current fid and the next fid (and maybe some other info on what is in the buffer for the end/beginnings of the tracks). The placeholder call can indicate whether a cross fade should happen.

That way a lot more people with more time on their hands than the Cambridge team can come up with clever schemes for working out when to fade.
_________________________
Remind me to change my signature to something more interesting someday