录制的USB音频信号中的奇怪音频闪烁

yun*_*yun 2 audio usb microcontroller signal-processing audio-recording

可能是错误的地方问这个,但我需要帮助弄清楚真正的问题是什么...

基本上,我正在编程一个微控制器来进行USB音频录制(使用USB Audio Class 2.0 /高速USB).看起来我已经非常接近"正确"了,但是当我将唧唧声录入大胆时,我得到了这个[下面是摘录]:

唧唧喳喳摘录

我想我要问的是为什么我会在记录会话中遇到这些奇怪的中断和跳跃?是因为我没有足够快地读取我的编解码器输入缓冲区,或者帧长度未正确设置?

我如何计算我从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;
Run Code Online (Sandbox Code Playgroud)

这也是读取编解码器输入的过程:

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

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

希望这不是太混乱...让我知道,我可以添加更多信息/清理事情.谢谢!

Rus*_*ltz 5

它(看我的眼睛)并没有看到你丢弃数据包,只是错过了它们.

看看你的每个'blips'.很明显,每个'blip'实际上都是一段音频,适合波形回波时间的1/3左右.

可能你有一个循环缓冲区,你的读/写指针或使用管理器丢失并迟到发送缓冲区的问题.

我不认为它(与之相关)采样率转换或类似的东西.