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

时间:2017-02-06 22:48:02

标签: audio usb signal-processing microcontroller audio-recording

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

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

chirp excerpt

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

我如何计算我从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;

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

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

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

希望这不会让人感到困惑......让我知道,我可以添加更多信息/清理事物。谢谢!

1 个答案:

答案 0 :(得分:5)

它(我的眼睛)看不到你丢弃数据包,只是错过了它们。

看看你的每一个&#39; blip&#39;。很明显,每个人都会眨眼。实际上是一段音频,适合波形回波的1/3左右。

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

我不认为它(与之相关)采样率转换或类似的事情。