没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
//编码
int CG711Decoder::G711_EnCode(unsigned char* pCodecBits, const char* pBuffer, int nBufferSize)
{
short* buffer = (short*)pBuffer;
for(int i=0; i<nBufferSize/2; i++)
{
pCodecBits[i] = encode(buffer[i]);
}
return nBufferSize/2;
}
//解码
int CG711Decoder::G711_Decode(char* pRawData, const unsigned char* pBuffer, int nBufferSize)
{
short *out_data = (short*)pRawData;
for(int i=0; i<nBufferSize; i++)
{
out_data[i] = decode(pBuffer[i]);
}
return nBufferSize*2;
}
#define MAX (32635)
unsigned char CG711Decoder::encode(short pcm)
{
int sign = (pcm & 0x8000) >> 8;
if (sign != 0)
pcm = -pcm; //最高位,符号位
int CG711Decoder::G711_EnCode(unsigned char* pCodecBits, const char* pBuffer, int nBufferSize)
{
short* buffer = (short*)pBuffer;
for(int i=0; i<nBufferSize/2; i++)
{
pCodecBits[i] = encode(buffer[i]);
}
return nBufferSize/2;
}
//解码
int CG711Decoder::G711_Decode(char* pRawData, const unsigned char* pBuffer, int nBufferSize)
{
short *out_data = (short*)pRawData;
for(int i=0; i<nBufferSize; i++)
{
out_data[i] = decode(pBuffer[i]);
}
return nBufferSize*2;
}
#define MAX (32635)
unsigned char CG711Decoder::encode(short pcm)
{
int sign = (pcm & 0x8000) >> 8;
if (sign != 0)
pcm = -pcm; //最高位,符号位
if (pcm > MAX) pcm = MAX; //max=32635
int exponent = 7;
int expMask;
for (expMask = 0x4000; (pcm & expMask) == 0 ///bit14->14-7,找到高字节中第一个不为0的位
&& exponent>0; exponent--, expMask >>= 1) { }
int mantissa = (pcm >> ((exponent == 0) ? 4 : (exponent + 3))) & 0x0f;
unsigned char alaw = (unsigned char)(sign | exponent << 4 | mantissa);
return (unsigned char)(alaw^0xD5); //11010101
}
short CG711Decoder::decode(unsigned char alaw)
{
alaw ^= 0xD5;
int sign = alaw & 0x80;
int exponent = (alaw & 0x70) >> 4;
int data = alaw & 0x0f;
data <<= 4;
data += 8;
if (exponent != 0)
data += 0x100;
if (exponent > 1)
data <<= (exponent - 1);
return (short)(sign == 0 ? data : -data);
}
int exponent = 7;
int expMask;
for (expMask = 0x4000; (pcm & expMask) == 0 ///bit14->14-7,找到高字节中第一个不为0的位
&& exponent>0; exponent--, expMask >>= 1) { }
int mantissa = (pcm >> ((exponent == 0) ? 4 : (exponent + 3))) & 0x0f;
unsigned char alaw = (unsigned char)(sign | exponent << 4 | mantissa);
return (unsigned char)(alaw^0xD5); //11010101
}
short CG711Decoder::decode(unsigned char alaw)
{
alaw ^= 0xD5;
int sign = alaw & 0x80;
int exponent = (alaw & 0x70) >> 4;
int data = alaw & 0x0f;
data <<= 4;
data += 8;
if (exponent != 0)
data += 0x100;
if (exponent > 1)
data <<= (exponent - 1);
return (short)(sign == 0 ? data : -data);
}
剩余9页未读,继续阅读
资源评论
- 「已注销」2020-10-15又是重复的
junki
- 粉丝: 138
- 资源: 35
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于C语言的系统服务框架.zip
- (源码)基于Spring MVC和MyBatis的选课管理系统.zip
- (源码)基于ArcEngine的GIS数据处理系统.zip
- (源码)基于JavaFX和MySQL的医院挂号管理系统.zip
- (源码)基于IdentityServer4和Finbuckle.MultiTenant的多租户身份认证系统.zip
- (源码)基于Spring Boot和Vue3+ElementPlus的后台管理系统.zip
- (源码)基于C++和Qt框架的dearoot配置管理系统.zip
- (源码)基于 .NET 和 EasyHook 的虚拟文件系统.zip
- (源码)基于Python的金融文档智能分析系统.zip
- (源码)基于Java的医药管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功