I'm playing around with XAudio2 to send PCM format waves to my soundcard, and I encountered a problem which made me think about this question. I created a .csv file with MATLAB of a sine wave at 440 Hz, and at first I had sampled it at 1 KHz (for 1 second).
My C++ program would then load that file and send the buffer to the soundcard. The problem is that the output was distorted (clipped), and didn't sound like a sine wave at all. Then I thought, maybe the sound card doesn't like 1 kHz sampling rates, so I doubled it, and suddenly everything was fine.
Is there a way to confirm that this really was the problem?
The nyquist frequency at 1kHz sample rate is only 500Hz. I'm not surprised at all it sounded terrible. Suppose you had a sample rate of 1kHz and you played a 500Hz sound. Your output would be a square wave. - + - + - + with nothing in between, as you don't have enough samples. As you approach the nyquist frequency, the ability to replicate that wave drops. It is audible at such low frequencies.
In any case, getting your sound card to go at such low sample rates is unlikely. It is much more likely that a software driver is re-sampling for you, and who knows what kind of artifacts are getting thrown in.
Try doing something more reasonable, like at least 11.025Hz. This is 44.1kHz ("CD" sample rate) divided by 4, which many sound cards support directly. Almost all cards should do 22.05kHz.