音频 g711a和g711u转pcm

typedef unsigned int uint32_t;
typedef short int16_t;
//typedef char int8_t;
typedef unsigned char uint8_t;
static const int16_t alawtos16[256] =
{ 
	-5504,  -5248,  -6016,  -5760,  -4480,  -4224,  -4992,  -4736, 
	-7552,  -7296,  -8064,  -7808,  -6528,  -6272,  -7040,  -6784,
	-2752,  -2624,  -3008,  -2880,  -2240,  -2112,  -2496,  -2368,
	-3776,  -3648,  -4032,  -3904,  -3264,  -3136,  -3520,  -3392,
	-22016, -20992, -24064, -23040, -17920, -16896, -19968, -18944,
	-30208, -29184, -32256, -31232, -26112, -25088, -28160, -27136,
	-11008, -10496, -12032, -11520,  -8960,  -8448,  -9984,  -9472, 
	-15104, -14592, -16128, -15616, -13056, -12544, -14080, -13568, 
	-344,   -328,   -376,   -360,   -280,   -264,   -312,   -296,    
	-472,   -456,   -504,   -488,   -408,   -392,   -440,   -424,    
	-88,    -72,   -120,   -104,    -24,     -8,    -56,    -40,    
	-216,   -200,   -248,   -232,   -152,   -136,   -184,   -168,    
	-1376,  -1312,  -1504,  -1440,  -1120,  -1056,  -1248,  -1184,  
	-1888,  -1824,  -2016,  -1952,  -1632,  -1568,  -1760,  -1696,  
	-688,   -656,   -752,   -720,   -560,   -528,   -624,   -592,   
	-944,   -912,  -1008,   -976,   -816,   -784,   -880,   -848,  
	5504,   5248,   6016,   5760,   4480,   4224,   4992,   4736,   
	7552,   7296,   8064,   7808,   6528,   6272,   7040,   6784,    
	2752,   2624,   3008,   2880,   2240,   2112,   2496,   2368,     
	3776,   3648,   4032,   3904,   3264,   3136,   3520,   3392,   
	22016,  20992,  24064,  23040,  17920,  16896,  19968,  18944,   
	30208,  29184,  32256,  31232,  26112,  25088,  28160,  27136,   
	11008,  10496,  12032,  11520,   8960,   8448,   9984,   9472,    
	15104,  14592,  16128,  15616,  13056,  12544,  14080,  13568,    
	344,    328,    376,    360,    280,    264,    312,    296,   
	472,    456,    504,    488,    408,    392,    440,    424,     
	88,     72,    120,    104,     24,      8,     56,     40,      
	216,    200,    248,    232,    152,    136,    184,    168,    
	1376,   1312,   1504,   1440,   1120,   1056,   1248,   1184,   
	1888,   1824,   2016,   1952,   1632,   1568,   1760,   1696,     
	688,    656,    752,    720,    560,    528,    624,    592,     
	944,    912,   1008,    976,    816,    784,    880,    848 
};

static const int16_t g711utoosl16[256] = {    
	-32124,-31100,-30076,-29052,-28028,-27004,-25980,-24956,    
	-23932,-22908,-21884,-20860,-19836,-18812,-17788,-16764,    
	-15996,-15484,-14972,-14460,-13948,-13436,-12924,-12412,    
	-11900,-11388,-10876,-10364, -9852, -9340, -8828, -8316,    
	-7932, -7676, -7420, -7164, -6908, -6652, -6396, -6140,    
	-5884, -5628, -5372, -5116, -4860, -4604, -4348, -4092,    
	-3900, -3772, -3644, -3516, -3388, -3260, -3132, -3004,    
	-2876, -2748, -2620, -2492, -2364, -2236, -2108, -1980,    
	-1884, -1820, -1756, -1692, -1628, -1564, -1500, -1436,    
	-1372, -1308, -1244, -1180, -1116, -1052,  -988,  -924,    
	-876,  -844,  -812,  -780,  -748,  -716,  -684,  -652,    
	-620,  -588,  -556,  -524,  -492,  -460,  -428,  -396,    
	-372,  -356,  -340,  -324,  -308,  -292,  -276,  -260,    
	-244,  -228,  -212,  -196,  -180,  -164,  -148,  -132,    
	-120,  -112,  -104,   -96,   -88,   -80,   -72,   -64,    
	-56,   -48,   -40,   -32,   -24,   -16,    -8,    -2,    
	32124, 31100, 30076, 29052, 28028, 27004, 25980, 24956,    
	23932, 22908, 21884, 20860, 19836, 18812, 17788, 16764,    
	15996, 15484, 14972, 14460, 13948, 13436, 12924, 12412,    
	11900, 11388, 10876, 10364,  9852,  9340,  8828,  8316,    
	7932,  7676,  7420,  7164,  6908,  6652,  6396,  6140,    
	5884,  5628,  5372,  5116,  4860,  4604,  4348,  4092,    
	3900,  3772,  3644,  3516,  3388,  3260,  3132,  3004,    
	2876,  2748,  2620,  2492,  2364,  2236,  2108,  1980,    
	1884,  1820,  1756,  1692,  1628,  1564,  1500,  1436,    
	1372,  1308,  1244,  1180,  1116,  1052,   988,   924,    
	876,   844,   812,   780,   748,   716,   684,   652,    
	620,   588,   556,   524,   492,   460,   428,   396,    
	372,   356,   340,   324,   308,   292,   276,   260,    
	244,   228,   212,   196,   180,   164,   148,   132,    
	120,   112,   104,    96,    88,    80,    72,    64,    
	56,    48,    40,    32,    24,    16,     8,     2    
};


int g711a_decode(const void *pin_buf, const int in_len, void *pout_buf, int *pout_len) 
{ 
	int16_t *dst = (int16_t *)pout_buf;
	uint8_t *src = (uint8_t *)pin_buf;  
	uint32_t i = 0; 
	int Ret = 0;         
	if ((NULL == pout_buf) || (NULL == pout_len) || (NULL == pin_buf)  ||(0 == in_len) ) 
	{ 
	    printf("g711a_decode, err: 1 \n");
		return -1;  
	}          
	if ( *pout_len < 2 * in_len )
	{ 
	    printf("g711a_decode, err: 2, pout_len: %d, 2 * in_len: %d\n", pout_len, 2 * in_len);
		return -2;
	} 
	for( i = 0; i < in_len; i++ )
	{  
		*(dst++) = alawtos16[*(src++)]; 
	}         
	*pout_len = 2 * in_len;
	Ret = 2 * in_len;
	return Ret;
}


int g711u_decode(const void *pin_buf, const int in_len, void *pout_buf, int *pout_len) 
{ 
	int16_t *dst = (int16_t *)pout_buf;
	uint8_t *src = (uint8_t *)pin_buf;  
	uint32_t i = 0; 
	int Ret = 0;         
	if ((NULL == pout_buf) || (NULL == pout_len) || (NULL == pin_buf)  ||(0 == in_len) ) 
	{ 
		return -1;  
	}          
	if ( *pout_len < 2 * in_len )
	{ 
		return -2;
	} 
	for( i = 0; i < in_len; i++ )
	{  
		*(dst++) = g711utoosl16[*(src++)]; 
	}         
	*pout_len = 2 * in_len;
	Ret = 2 * in_len;
	return Ret;
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿木小呆呆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值