It seems the problem resides in the relationship between the wav file source and the windows audio sink.
The win audio sink is playing "live" audio fine
The wav file sink can record that same audio to a file
That file plays back fine in VLC.
These steps appear to validate that audio sink is working as expected...
However, that file is returning an error when playing in the wav file source in GRC, that it does not contain any samples. So that's not helpful. Then when playing the pre-recording file from you, I get the same distortion you are. But the WAV file source is not windows-unique (unlike the audio sink/source).
SO, the only thing different about the file sources is that they are un-throttled. So of course you'd set "Ok to block" in the audio sink, which was implemented in a later update to the windows audio sinks. If I recall correctly, the windows WAVE_MAPPER device did some odd things during testing... like when pushed too many samples, it would internally drop excess samples without reporting anything to the calling code about the overrun, until pushed past 96KHz, though I also found some of that behavior was driver-dependent. But frankly it's been some time since I re-wrote the sinks, so I don't recall for certain.
Unfortunately the quick testing and playing around with throttle rates, channels, and sample rates didn't fix anything, so in the end I don't have a good answer. The only likely possibility is various minor differences in types and implementation between GCC and MSVC that could have affected the wav file source, but again, a quick scan of the source didn't show a smoking gun.
If you come up with more data points during troubleshooting, I'll see what I can do.
Geof