int pcmBufLen = 480;
short pcmBuf[pcmBufLen] = {0};
short pcmResampleBuf[pcmBufLen/2] = {0};
int g711BufLen = 480;
unsigned char g711Buf[g711BufLen] = {0};
int itmpDataLen = datasize - sizeof(FrameHead);
int itmpPackCnt = (itmpDataLen + 479) / 480;
for (int i = 0; i < itmpPackCnt;)
{
memset(pcmBuf, 0, sizeof(pcmBuf));
memset(g711Buf, 0, sizeof(g711Buf));
memcpy(g711Buf, (unsigned char *)((unsigned char *)pFrame + sizeof(FrameHead) + (pFrame->FrameSize * i)), 480);
short data = 0;
short seg = 0;
/* g711 转 pcm 过程 */
for(int j = 0; j < pcmBufLen; j++)
{
g711Buf[j] ^= 0x55;
data = (g711Buf[j] & 0xF) << 4;
seg = (g711Buf[j] & 0x70) >> 4;
switch(seg)
{
case 0:
data += 8;
break;
case 1:
data += 0x108;
break;
default:
data += 0x108;
data <<= seg - 1;
}
if(g711Buf[j] & 0x80)
{
pcmBuf[j] = data;
}
else
{
pcmBuf[j] = -data;
}
/* 采样率16K转8K */
if(j % 2 == 0)
{
pcmResampleBuf[j / 2] = pcmBuf[j];
}
}
}
16K G711转8K PCM
最新推荐文章于 2024-10-03 21:07:20 发布