我正在尝试使用 XAudio2 将 PCM 格式的波形发送到我的声卡,我遇到了一个问题,这让我想到了这个问题。我用 MATLAB 创建了一个 440 Hz 正弦波的 .csv 文件,起初我以 1 KHz(1 秒)对其进行采样。
然后我的 C++ 程序将加载该文件并将缓冲区发送到声卡。问题是输出失真(削波),听起来根本不像正弦波。然后我想,也许声卡不喜欢1 kHz的采样率,所以我把它加倍了,突然一切都很好。
有没有办法确认这确实是问题所在?
最佳答案
1kHz 采样率下的奈奎斯特频率仅为 500Hz。我一点也不惊讶,这听起来很糟糕。假设您的采样率为 1kHz,播放 500Hz 的声音。您的输出将是方波。 - + - + - + 中间没有任何东西,因为你没有足够的样本。当您接近奈奎斯特频率时,复制该波的能力会下降。在如此低的频率下可以听到。
无论如何,让您的声卡以如此低的采样率运行是不可能的。更有可能是软件驱动程序正在为您重新采样,谁知道会扔进什么样的工件。
尝试做一些更合理的事情,比如至少 11.025Hz。这是 44.1kHz(“CD”采样率)除以 4,许多声卡直接支持。几乎所有的卡都应该达到 22.05kHz。
关于c++ - 如何检查/更改声卡的采样率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6763583/