2

Может быть неправильное место, чтобы спросить это, но я вроде нужно помочь выяснить, что реальная проблема ...Weird Аудио Blips в Записано USB Audio Signal

В принципе, я программирования микроконтроллера сделать USB аудио (используя USB Audio Class 2.0/высокоскоростной USB). Похоже, я получаю довольно близко, чтобы получить его «добро», но я получаю это, когда я записать щебечу в дерзость [ниже отрывок]:

chirp excerpt

Я предполагаю, что я спрашиваю почему я получаю эти странные перерывы и прыжки на моем сеансе записи? Это потому, что я недостаточно читаю свои входные буферы кодеков или, возможно, длина кадра не установлена ​​правильно?

Как я расчет мой длины кадра, который я получил от USB Audio руководство от компании Apple (используя скорость 44.1 кГц дискретизации и скорость передачи данных 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) Память Периферийное прерывание происходит, когда передача завершена (буфер заполнен, емкость кадра_len выполнена), отправьте образцы буфера на USB. Впоследствии снова прочитайте ввод кодека

Надеюсь, это не слишком запутывает ... дайте мне знать, и я могу добавить дополнительную информацию/прояснить ситуацию. Благодаря!

ответ

5

Это не выглядит (на мой взгляд), что вы бросаете пакеты, просто пропустите их.

Посмотрите на каждую из ваших «бликов». Довольно ясно, что каждый «промах» на самом деле представляет собой фрагмент звука, который вписывается в форму волны примерно на 1/3 формы волны назад.

Вероятно, у вас есть круговой буфер, и у вас возникли проблемы с тем, что ваш указатель чтения/записи или менеджер использования теряется, и высылаете буферный способ поздно.

Я не думаю, что это (прямое отношение к, так или иначе) конверсии частоты дискретизации или что-то в этом роде.

+0

Вы были правы, у меня была строка, оставшаяся в моем коде, которая на самом деле увеличивала указатели чтения/записи слишком рано, и поэтому я получал эти «блики». Теперь это довольно чисто! –

Смежные вопросы