2

이에게 물어 잘못된 장소가 될 수도 있지만 나는 좀 기본적으로이상한 오디오 일시적는 오디오 신호

... 진짜 문제가 무엇인지 파악하는 데 도움이 필요, 나는 USB 오디오를 할 수있는 마이크로 컨트롤러를 프로그래밍하고있어 녹음 (USB 오디오 클래스 2.0/고속 USB 사용).

chirp excerpt는 것 같아요 내가 무슨 부탁 해요 : 나는 "바르게"그것을 얻기에 아주 가까이지고있어하지만 난 대담에 첩을 기록 할 때이납니다 것 같다 [아래 발췌 한 것입니다] 내가 녹음 세션에서 이상한 중단과 점프를하는 이유는 무엇입니까? 내가 코덱 입력 버퍼를 충분히 빨리 읽지 않거나 프레임 길이가 올바르게 설정되지 않았기 때문입니까?

내가 애플에서 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로 보냅니다. 나중에 코덱 입력을 다시 읽으십시오.

잘하면이 부분이 너무 복잡하지 않으므로 알려주세요. 정보를 추가하거나 정리할 수 있습니다. 감사!

답변

5

패킷을 버리는 것 (내 눈에)이 보이지 않습니다. 그냥 주문하는 것입니다.

각 'blips'를보세요. 각각의 'blip'은 사실 파형의 1/3 정도의 파형에 맞춰진 오디오의 스트레치입니다.

순환 버퍼가있는 것 같고 읽기/쓰기 포인터 또는 사용 관리자가 손실되어 버퍼가 늦게 전송되는 문제가있는 것 같습니다.

나는 그것이 (어쨌든) 직접 샘플 레이트 변환 또는 그와 비슷한 것으로 생각하지 않습니다.

+0

당신이 옳았습니다. 코드에 실제로 읽거나 쓰기 포인터를 너무 많이 늘린 선이 남아있어서 그 "깜박임"을 얻고있었습니다. 이제 꽤 깨끗합니다. –