G711编解码
http://blog.csdn.net/rightorwrong/article/details/4209467
搞语音对讲几天了,播放时声音干扰太大了。拖得时间久有两个原因:
1.每次采样的位数这个值设置的问题。本来是用的采样位数为16,但是服务端那边说用8。导致编解码时8位的始终有杂音。
1.G711编解码的问题:用了一个错误的编解码程序。目前用的编解码代码对于8为始终有杂音
下面把编解码的代码放在这里,16为采集效果很好
- //编码
 - 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;
 - int exponent = 7;
 - int expMask;
 - for (expMask = 0x4000; (pcm & expMask) == 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);
 - }
 - 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);
 - }
 
G711编解码的更多相关文章
- IP通信中音频编解码技术与抗丢包技术概要
		
此文较长,建议收藏起来看. 一.一个典型的IP通信模型 二.Server2Server技术分类 Server2Server这块也是一个专门的领域,这里只简单分个类. 1.同一国家相同运营商之间: 同一 ...
 - iOS8系统H264视频硬件编解码说明
		
公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...
 - IOS和Android支持的音频编解码
		
1.IOS编码 参考文档地址:https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/Multimedi ...
 - java编解码技术,netty nio
		
对于java提供的对象输入输出流ObjectInputStream与ObjectOutputStream,可以直接把java对象作为可存储 的字节数组写入文件,也可以传输到网络上去.对与java开放人 ...
 - 编解码-marshalling
		
JBoss的Marshalling序列化框架,它是JBoss内部使用的序列化框架,Netty提供了Marshalling编码和解码器,方便用户在Netty中使用Marshalling. JBoss M ...
 - 编解码-protobuf
		
Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...
 - 编解码-java序列化
		
大多数Java程序员接触到的第一种序列化或者编解码技术就是Java的默认序列化,只需要序列化的POJO对象实现java.io.Serializable接口,根据实际情况生成序列ID,这个类就能够通过j ...
 - ilbc编解码
		
针对国内的博客或者技术论坛对 ILBC的论述都是把文章抄来抄去, 本人在此对 ILBC的具体代码实现详细列出代码. ILBC是由Global IP Sound公司提出的一种专为包交换网络通信设计的编解 ...
 - 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式
		
编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...
 
随机推荐
- \n和\r区别
			
转载:https://www.cnblogs.com/hq233/p/6389234.html 符号 ASCII码 意义\n 10 换行NL\r ...
 - [内核驱动] miniFilter 内核层与应用程序通信
			
转载:http://blog.csdn.net/heyabo/article/details/8721611 转载:http://www.cnblogs.com/ljinshuan/archive/2 ...
 - rsync: read error: Connection reset by peer (104)
			
Centos7 rsync守护进程上传文件失败 [root@nfs ~]# rsync -avz /etc rsync_backup@172.16.1.41::backupsending inc ...
 - 几道cf水题
			
题意:给你包含n个元素的数组和k种元素,要求k种元素要用完,并且每种颜色至少用一次,n个元素,如果某几个元素的值相同,这些个元素也不能染成同一种元素. 思路:如果元素个数n小于k或者值相同的元素的个数 ...
 - Android灯光系统通知灯【转】
			
本文转载自:https://blog.csdn.net/danwuxie/article/details/82193880 一.通知灯应用程序的编写 1.首先实现一个按钮功能 <LinearLa ...
 - github帐户和仓库的创建
			
sign up is registration and sign in is logging in for "in" is to enter an existing account ...
 - P4556 [Vani有约会]雨天的尾巴
			
目录 思路 优化 过程中的问题/疑问 错误 代码 思路 每个节点维护一课线段树(当然是动态开点) 线段树的作用是统计这个节点有多少种粮食型号,以及最多的粮食型号 然后树上差分,u和v点 +1,lca( ...
 - MetInfo V5.1 GetShell一键化工具
			
# 漏洞解析: config/config.inc.php $langoks = $db->get_one("SELECT * FROM $met_lang WHERE lang='$ ...
 - Visual Studio 安装easyX且导入graphics库后,outtextxy提示未定义标示符
			
1.点击 “项目” ,然后点击 “属性”. 2. 然后点击左侧 “配置与属性” 下的 “常规” ,在点击 “字符集” ,选择 “使用多字节字符集” 即可解决问题
 - HDU 5459 Jesus Is Here(递推)
			
http://acm.hdu.edu.cn/showproblem.php?pid=5459 题意: S(1) = c,S(2) = ff, S(3) = cff,之后S(i) = S(i-1)+S( ...