When the TTS speaks it completely mutes the media being played.
Is there a way to fade out to 50% and speak over it?
Nope...no support for that in SD currently. It apparently was part of the feature set at one time, but was removed due to sound card compatibility issues, IIRC.
Many users have discussed the absence of/requested this feature, as muting the music completely is very disruptive and annoying, especially when many TTS directions are given in a short timeframe. Ironically, I just installed PhoneControl (a third party application to control my Bluetooth mobile phone), and PhoneControl is able to lower the volume on SD when an incoming call is received, and then increase the volume again after the call is terminated. If an external application can accomplish this successfully, I don't understand why it would be so difficult for SD to do the same.
Another thought...since TTS is handled by Windows, and not SD, it probably wouldn't be too difficult to write an application that would monitor windows for TTS output and then lower the volume. I'm not sure how the calls to TTS are handled within SD, but it seems that if TTS is a windows service, and therefore essentially a windows function, the calls could be intercepted somewhere between SD and windows.
There is no reason they cannot do it within SD I believe. The other day I was using the text / number input screens and the lady was saying one, two, three, backspace, backspace, backspace, all while music was still playing. It's specific to the navigation module that doesn't allow it. Maybe they are relying on mappoint to produce the speech for the nav module and handle the TTS themselves for all others ?
Verrrrrrry annoying, and I know the developers know it as well because no human would think that's a good way to do it : )