c++ - 如何检查/更改声卡的采样率?

标签 c++ soundcard xaudio2

我正在尝试使用 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/

相关文章:

c# - 尝试用另一种语言解密时 AES 解密错误

c++ - 哈希集添加和搜索功能无法正常工作 - C++

c++ - C结构和C++结构

audio - 设置Raspberry Pi 3 USB麦克风(创意声霸)

java - 如何在 Java for Windows 中选择和操作不同的音频驱动程序

audio - 如何修复 : device_list:270: no soundcard found (Ubuntu server 18. 04)?

winapi - 使用 Waveform Audio API Windows 从扬声器捕获声音

c++ - CreateMasteringVoice 随机抛出 HRESULT : 0x88890017

c++ - 使用 visual studio 9 构建的命令行应用程序不将 *.NEF 作为输入,而使用 gcc 构建的同一个应用程序却接受 - 为什么?

c++ - XAudio2 和可变比特率音频