http://blog.csdn.net/rightorwrong/article/details/4209467

搞语音对讲几天了,播放时声音干扰太大了。拖得时间久有两个原因:

1.每次采样的位数这个值设置的问题。本来是用的采样位数为16,但是服务端那边说用8。导致编解码时8位的始终有杂音。

1.G711编解码的问题:用了一个错误的编解码程序。目前用的编解码代码对于8为始终有杂音

下面把编解码的代码放在这里,16为采集效果很好

  1. //编码
  2. int CG711Decoder::G711_EnCode(unsigned char* pCodecBits, const char* pBuffer, int nBufferSize)
  3. {
  4. short* buffer = (short*)pBuffer;
  5. for(int i=0; i<nBufferSize/2; i++)
  6. {
  7. pCodecBits[i] = encode(buffer[i]);
  8. }
  9. return nBufferSize/2;
  10. }
  11. //解码
  12. int CG711Decoder::G711_Decode(char* pRawData, const unsigned char* pBuffer, int nBufferSize)
  13. {
  14. short *out_data = (short*)pRawData;
  15. for(int i=0; i<nBufferSize; i++)
  16. {
  17. out_data[i] = decode(pBuffer[i]);
  18. }
  19. return nBufferSize*2;
  20. }
  21. #define MAX (32635)
  22. unsigned char CG711Decoder::encode(short pcm)
  23. {
  24. int sign = (pcm & 0x8000) >> 8;
  25. if (sign != 0)
  26. pcm = -pcm;
  27. if (pcm > MAX) pcm = MAX;
  28. int exponent = 7;
  29. int expMask;
  30. for (expMask = 0x4000; (pcm & expMask) == 0
  31. && exponent>0; exponent--, expMask >>= 1) { }
  32. int mantissa = (pcm >> ((exponent == 0) ? 4 : (exponent + 3))) & 0x0f;
  33. unsigned char alaw = (unsigned char)(sign | exponent << 4 | mantissa);
  34. return (unsigned char)(alaw^0xD5);
  35. }
  36. short CG711Decoder::decode(unsigned char alaw)
  37. {
  38. alaw ^= 0xD5;
  39. int sign = alaw & 0x80;
  40. int exponent = (alaw & 0x70) >> 4;
  41. int data = alaw & 0x0f;
  42. data <<= 4;
  43. data += 8;
  44. if (exponent != 0)
  45. data += 0x100;
  46. if (exponent > 1)
  47. data <<= (exponent - 1);
  48. return (short)(sign == 0 ? data : -data);
  49. }

G711编解码的更多相关文章

  1. IP通信中音频编解码技术与抗丢包技术概要

    此文较长,建议收藏起来看. 一.一个典型的IP通信模型 二.Server2Server技术分类 Server2Server这块也是一个专门的领域,这里只简单分个类. 1.同一国家相同运营商之间: 同一 ...

  2. iOS8系统H264视频硬件编解码说明

    公司项目原因,接触了一下视频流H264的编解码知识,之前项目使用的是FFMpeg多媒体库,利用CPU做视频的编码和解码,俗称为软编软解.该方法比较通用,但是占用CPU资源,编解码效率不高.一般系统都会 ...

  3. IOS和Android支持的音频编解码

    1.IOS编码 参考文档地址:https://developer.apple.com/library/ios/documentation/AudioVideo/Conceptual/Multimedi ...

  4. java编解码技术,netty nio

    对于java提供的对象输入输出流ObjectInputStream与ObjectOutputStream,可以直接把java对象作为可存储 的字节数组写入文件,也可以传输到网络上去.对与java开放人 ...

  5. 编解码-marshalling

    JBoss的Marshalling序列化框架,它是JBoss内部使用的序列化框架,Netty提供了Marshalling编码和解码器,方便用户在Netty中使用Marshalling. JBoss M ...

  6. 编解码-protobuf

    Google的Protobuf在业界非常流行,很多商业项目选择Protobuf作为编解码框架,Protobuf的优点. (1)在谷歌内部长期使用,产品成熟度高: (2)跨语言,支持多种语言,包括C++ ...

  7. 编解码-java序列化

    大多数Java程序员接触到的第一种序列化或者编解码技术就是Java的默认序列化,只需要序列化的POJO对象实现java.io.Serializable接口,根据实际情况生成序列ID,这个类就能够通过j ...

  8. ilbc编解码

    针对国内的博客或者技术论坛对 ILBC的论述都是把文章抄来抄去, 本人在此对 ILBC的具体代码实现详细列出代码. ILBC是由Global IP Sound公司提出的一种专为包交换网络通信设计的编解 ...

  9. 各种音视频编解码学习详解 h264 ,mpeg4 ,aac 等所有音视频格式

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放 license收费等 ...

随机推荐

  1. Oracle使用——Oracle表空间处理

    创建表空间 查看表空间信息(名称.大小)  select t1.name tablespace_name ,t2.name file_local ,t2.bytes / (1024 * 1024) f ...

  2. Delphi XE5 for Android (八)

    delphi xe5 编译的程序在启动时会有短暂的黑屏出现,这个现象产生是因为启动首个activity时会加载一些初始化数据,整个时间大约在2~3秒,如何处理? 网上有些资料,这里主要参考和整理了CS ...

  3. 终于明白vim 和 grep 中 的正则表达式的用法, vim 正则表达式 和grep基本正则表达式 几乎一样

    要搞清楚 vim中的正则和普通的Perl正则表达式的区别: 因为在perl中所有的元字符 都可以直接使用, 不需要在 元字符的前面加 反斜杠. 但是在vim, 包括grep中就有所区别, 同样是元字符 ...

  4. newcoder H肥猪(单调队列 / 线段树)题解

    题意: 小B来到了一个异世界,成为了肥猪之王. 在这个异世界,共有n种肥猪,编号分别为1,...,n. 小B希望集齐这n种肥猪. 召集肥猪有两种方式: 1. 花费a[i]的金币召唤一只编号为i的肥猪. ...

  5. P3232 [HNOI2013]游走

    吐槽 傻了傻了,对着题解改了好长时间最后发现是自己忘了调用高斯消元了... 思路 期望题,分配编号,显然编号大的分给贡献次数小的,所以需要知道每个边被经过次数的期望 然后边被经过的次数的期望就是连接的 ...

  6. Windows系统零开始前端开发环境配置

    1. 安装nodejs 国内下载页面(推荐) 官网下载页面 现在的nodejs自带NPM,只需点击下一步下一步安装即可. 为了加速国内NPM包下载,可配置淘宝NPM镜像 2. 安装git 国内下载页面 ...

  7. Money 20/20 | 未来金融数字化转型:数字化半径与全栈式战略观

    小蚂蚁说: 近年来,国际和国内的领先银行纷纷全力投入数字化转型.IDC去年报告说,全球1000大企业里面,67%已经把数字化转型定为企业级战略,而决定数字化转型成功与否的是人的思想改变.我们用数字化半 ...

  8. 【BZOJ】3575: [Hnoi2014]道路堵塞

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3575 大概的做法是,按照顺序枚举每一条要删去的边,(假设当前点为$u$,在最短路径上的下一 ...

  9. 【BZOJ】3142: [Hnoi2013]数列

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3142 12年也有一个组合数学...(这几年的画风啊.... 考虑直接去做:DP? DP+容 ...

  10. android:ems="10"是什么意思

    android:ems = " 设置TextView或者Edittext的宽度为10个字符的宽度.当设置该属性后,控件显示的长度就为10个字符的长度,超出的部分将不显示. xml中 andr ...