我正在玩XAudio2发送PCM格式波到我的声卡,我遇到了一个问题,让我思考这个问题。我用MATLAB创建了一个440hz正弦波的。csv文件,起初我以1khz采样(1秒)。
然后,我的c++程序将加载该文件并将缓冲区发送到声卡。问题是输出失真(剪切),听起来根本不像正弦波。然后我想,可能是声卡不喜欢1千赫的采样率,所以我把它加倍了,突然一切都好了。是否有办法确认这确实是问题所在?
在1kHz采样率下奈奎斯特频率仅为500Hz。听起来很糟糕,我一点也不惊讶。假设您的采样率为1kHz,并且播放500Hz的声音。你的输出是一个方波。- + - + - +之间没有任何东西,因为你没有足够的样本。当你接近奈奎斯特频率时,复制那个波的能力就会下降。在这么低的频率下是可以听到的。
无论如何,让你的声卡以如此低的采样率运行是不可能的。更有可能的是,软件驱动程序正在为您重新采样,并且谁知道被扔进了什么样的工件。
尝试更合理的设置,比如至少11.025Hz。这是44.1kHz("CD"采样率)除以4,这是许多声卡直接支持的。