Well, vp710 pointed me in the direction of this thread.
Ive been developing for WP since the start and have a few apps out there. One of them is Pianist Music Studio. It started as a piano and now has a guitar/sequencer/metronome etc.
Inshort low latency audio is a problem in Windows Phone.
There are really only 2 ways of playing audio.
One is the SoundEffect class. Its a simple load the wav into a soundeffect, then use soundeffect.Play(). It will fire it as soon as the Frameworkupdater is fired.
Then we have the dynamicsoundinstance. Now this is better, it allows you to buffer audio and it will just keep on playing until its buffer is empty, where it needs filling again.
The first one is fire and forget, no need to worry much about it, it just works. The second is obviously much better, in my beta version I take a wav sample and modify it with envelopes and pitch changing before I buffer it and fire it out.
This process of updating the buffer causes latency, not to mention processing the sound. However its not really this that's the massive problem. The main problem is how the OS deals with it.
This frameworkupdater request is fired on each update, so upto 60fps. So that's part of your latency, then there is the latency for the audio engine on the phone to pick it up and process it, then it comes out your speakers. The main problem is windows phone's audio stack is all shared, it also goes through its own stuff. To get real low latency audio it needs to be a dedicated engine for your app where you can gain exclusive access.
Currently this doesn't exist, and I suspect it still wont exist in WP8. BUT, with native development it will no doubt get better, but will it be enough. Who knows.
Im currently working on my beta which has shifted from using SoundEffect to Dynamic soundinstance. It seems I need to keep my buffer size around 40 - 50ms. And that's just the buffer, that's ignoring the rest of the latency.
However, I know I have some optimisation to do and there may be a way that I can tweak something to get this lower. Im currently switching the engine to be multithreaded so at least its off the UI thread (bad idea in the first place!)
When WP8 hits and we have multicore it will be in a better position, but we shall see how better...
I think I rambled in this post, so apologies if I talked crap