2010-03-24 3 views
3

나는 보통 SoX 나 Window의 오디오 라이브러리에 내장 된 것들을 보았지만 G.726 코덱은 없다.G.726 ADPCM 신호를 PCM 신호로 변환하려면 어떻게합니까?

비트율과 mu-law 또는 A-law가 이번에는 알려지지 않았지만 (실험에서 이러한 매개 변수가 결정됨) G.726으로 인코딩 된 바이트 시퀀스가 ​​있으므로 그들을 정상적인 PCM 신호로 디코드해야합니다.

그래서 ITU-T (ITU-T Recommendation G.191)에서 참조 구현을 다운로드했지만 G726_decode 기능을 사용하는 방법에 대해 혼란스러워합니다. 문서 inp_bufout_buf에 따르면 smpno 길이가 같아야하며 두 버퍼는 모두 16 비트 버퍼입니다. 이것은 단계가 빠진 것처럼 보입니다. 그렇지 않으면 G.726을 사용하여 압축이 수행되지 않습니다. G.726의 Wikipedia 페이지에 따르면 샘플 크기는 비트 전송률 (2 ~ 5 비트)에 따라 다릅니다. 압축 해제를 샘플로 직접 수행해야합니까? 따라서 최대 압축 (2 비트 샘플)을 가정하면 각 바이트는 4 개의 샘플을 생성합니다.

예 :

char b = /* read the code from input */ 
short inp[4], output[4]; 
inp[0] = b & 0x0003; 
inp[1] = b & 0x000C >> 2; 
inp[2] = (b & 0x0030) >> 4; 
inp[3] = (b & 0x00C0) >> 6; 
G726_state state; 
memset(&state, 0, sizeof(G726_state)); 
G726_decode(inp, output, 4, "u", 2, 1, &state); 
/* ouput now contains 4 PCM samples */ 

아니면 내가 완전히 뭔가를 놓친 거지?

답변

5

실제로 ffmpeg가이 작업을 수행 할 수없는 것처럼 보입니다. 그러나 내가 검색하는 동안 해결책을 제시하는이 post to the ffmpeg mailing list을 찾았습니다.

기본적으로 오디오를 원시 PCM으로 디코딩 할 수있는 것으로 보이는 g72x++이라는 별도의 프로그램이 있습니다.

관련 문제