录制的 USB 音频信号中出现奇怪的音频信号

Weird Audio Blips in Recorded USB Audio Signal

可能问这个问题的地方不对,但我有点需要帮助找出真正的问题是什么...

基本上,我正在编写一个微控制器来进行 USB 录音(使用 USB 音频 Class 2.0/高速 USB)。似乎我已经非常接近“正确”了,但是当我将唧唧声录制到 audacity 中时,我得到了这个[下面是摘录]:

我想我想问的是为什么我的录音过程中会出现这些奇怪的中断和跳跃?是因为我没有足够快地读取我的编解码器输入缓冲区,还是帧长度设置不正确?

我如何计算从 Apple 的 USB 音频指南中获得的帧长度(使用 44.1kHz 采样率和 16 比特率):

#define AUDIO_POLL_INT     4
#define FRAME_BYTES        (BIT_RATE_16 / 8)
#define NUM_CHANNELS       STEREO

uint16_t frame_len = 44 (44.1kHz/1000 samples) * NUM_CHANNELS * FRAME_BYTES;
if (!(frame_pos % 9)) frame_len += (1 * NUM_CHANNELS * FRAME_BYTES)
frame_len = (frame_len / 8) * (2 << (AUDIO_POLL_INT-1));
// 10 ms frames
frame_pos = (((frame_pos + 1) / 8) * (2 << (AUDIO_POLL_INT-1))) % 10;

这也是读取codec输入的过程:

1) 读取编解码器输入;将样本加载到临时缓冲区(从编解码器外设传输到内存外设)

2) 传输完成时发生内存外设中断(缓冲区已满;frame_len 容量已满),将缓冲区样本发送到 USB。之后,再次读取编解码器输入

希望这不会太混乱...让我知道,我可以添加更多 info/clear 东西。谢谢!

(在我看来)您没有丢弃数据包,只是 miss-ordering 它们。

看看你的每一个'blips'。很明显,每个 'blip' 实际上是一段适合波形的音频,大约是波形回溯时间的 1/3。

可能您有一个循环缓冲区,并且您遇到了 read/write 指针或使用管理器丢失和延迟发送缓冲区的问题。

我不认为它(无论如何直接相关)采样率转换或类似的东西。