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收费等 ...
随机推荐
- 正则表达式验证HTTP地址是否合法
转载:https://blog.csdn.net/fsdad/article/details/52637426 判断url是否合法 const std::regex urlpattern(" ...
- Logger级别和输出的地方
转载自http://blog.csdn.net/u014756827/article/details/52475990 log4j日志配置 关键字: apache log4j 1.配置根Logger: ...
- Delphi XE5 for Android (八)
delphi xe5 编译的程序在启动时会有短暂的黑屏出现,这个现象产生是因为启动首个activity时会加载一些初始化数据,整个时间大约在2~3秒,如何处理? 网上有些资料,这里主要参考和整理了CS ...
- Python3 tkinter基础 Canvas create_polygon 画三角形
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- 编译openwrt时报错:FMCGenericError.h:34:27: fatal error: libxml/parser.h: No such file or directory
解决办法: 更新openwrt的feeds,并重新make menuconfig ./script/feeds update -a ./script/feeds install -a
- upc组队赛1 闪闪发光 【优先队列】
闪闪发光 题目描述 一所位于云南昆明的中医药本科院校--云南中医学院. 因为报考某专业的人数骤减,正面临着停招的危机. 其中有九名少女想到一条妙计--成为偶像, 只要她们成为偶像,学校的名气便会增加, ...
- Java 11 究竟比 8 快了多少?看看这个基准测试
开源规划调度引擎 OptaPlanner 官网发布了一个 Java 11 GC 性能基准测试报告. 当前使用量最大的 Java 版本是 8,所以测试者用 Java 8 与 Java 11 进行对比测试 ...
- Chrome上的扩展工具
rest client - rest api Testing:类似fiddler的工具,可以测试url,查看返回值……
- 简单实现RN调用原生方法(IOS)
在React Native中,一个“原生模块”就是一个实现了“RCTBridgeModule”协议的Objective-C类(个人理解RCTBridgeModule就是react与native之间的桥 ...
- _pvp_killed_loot
该表控制玩家被击杀时掉落物品,包括角色身上装备,背包物品,银行物品 comment 备注 entry 掉落的物品ID lootCount 掉落的物品数量 chance 掉落的几率,例如50,则50%几 ...