我正在开发一个 USB 音频设备,它的作用类似于麦克风。它产生 8000 Hz、16 位 PCM 的同步(USB 实时通话)音频流。使用 Ubuntu 13.10,录音速度慢了 3.3 倍。也就是说,录音 10 秒会产生 3 秒的 WAV 文件,播放速度太快了。(最佳比率测量值为 3.27。)播放速度比加速还差,而且乱码。例如,数“一.....二.....三”听起来像“bzt..bzt..bzzt”。我尝试了 3 个不同的音频程序(arecord、ocenaudio、Audacity)和两台不同的计算机。令人困惑的是,告诉 arecord 将录音限制为 10 秒(--duration=10)实际上需要大约 33 秒,并产生 10 秒的 WAV 文件。就好像驱动程序处于时间扭曲中。
使用 USB Logitech 耳机中的麦克风录音可以产生良好的文件,速度正确且音频清晰。我知道这听起来像是我的 USB 音频输入设备有问题,但在 Windows 中使用它录音效果很好(通过 GoldWave)。我的直觉告诉我当同步数据仅以 8000 Hz 的速度传入时,Ubuntu 音频驱动程序中存在错误,这是独一无二的。大多数麦克风通过 USB 枚举以各种速率为您提供采样,例如 44100、22050、8000 等。由于外部原因,我限制为 8000 Hz。
还有人见过有缺陷的音频 USB 驱动程序吗?有没有什么办法可以获取证据来证明 Ubuntu 驱动程序有罪或无罪?
答案1
事实证明 Linux 需要统一包裹在 USB 音频输入中。每个数据包中有多少个声音样本很重要。
在我的应用程序中,采样率为 8000 Hz,USB“全速”的标准轮询间隔为 1ms,平均每个数据包有 8 个样本。由于一个怪癖,我将样本打包发送,一个数据包中有 32 个音频样本,然后是 0、0、0、32、0、0、0、32……带宽方面没有问题,有足够的空间。Windows 处理得很好,但 Linux 很卡。
当我均匀地发送样本时:8、8、8、8……音频传输顺利。我猜想 Linux 中 USB 音频驱动程序的某些底层部分做出了错误的假设。但我的解决方法很明确。