音频格式G711转PCM的代码

简介: 音频格式G711转PCM的代码

今天调试摄像头的音频格式,始终不对。原始音频为8000,16位,帧率50。每帧的数据应该是320字节。


 接收到手上,RTP包为171字节,数据为160,只有一半。这是怎么回事?一开始总是认为RTP接收有问题,反复核查确认代码及流程正确。那么就是格式进行了转换。什么格式?开始认为是AAC,后来发现不对,AAC压缩率更高。


 最后根据这个160、 320,搜索了一个,说G711会变成原来的一半。赶紧试试,果然成功。代码如下:

  public static byte[] convertG711ToPcm(byte[] g711Buffer, int length, byte[] pcmBuffer)
  {
    if (pcmBuffer == null)
    {
      pcmBuffer = new byte[length*2];
    }
    for (int i=0; i<length; i++)
    {
      byte alaw = g711Buffer[i];
      alaw ^= 0xD5;
      int sign     =  alaw & 0x80;
      int exponent = (alaw & 0x70) >> 4;
            // 这个移位多此一举?结果应该一直是8
      int value    = (alaw & 0x0F) >> 4 + 8;
      if (exponent != 0)
      {
        value += 0x0100;
      }
      if (exponent > 1)
      {
        value <<= (exponent - 1);
      }
      value = (char)((sign == 0 ? value : -value) & 0xFFFF);
      pcmBuffer[i*2+0] = (byte) (value      & 0xFF);
      pcmBuffer[i*2+1] = (byte) (value >> 8 & 0xFF);
    }
    return pcmBuffer;
  }


目录
相关文章
|
内存技术
音频格式G711转PCM的代码
音频格式G711转PCM的代码
517 0
|
人工智能 监控 算法
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
3D-Speaker是阿里巴巴通义实验室推出的多模态说话人识别开源项目,结合声学、语义和视觉信息,提供高精度的说话人识别和语种识别功能。项目包含工业级模型、训练和推理代码,以及大规模多设备、多距离、多方言的数据集,适用于多种应用场景。
3415 18
3D-Speaker:阿里通义开源的多模态说话人识别项目,支持说话人识别、语种识别、多模态识别、说话人重叠检测和日志记录
|
API 语音技术
基于Asterisk和TTS/ASR语音识别的配置示例
本文介绍了如何在Asterisk服务器上配置TTS(文本转语音)和ASR(自动语音识别)引擎,包括安装Asterisk、选择并配置TTS和ASR引擎、编辑Asterisk配置文件以实现语音识别和合成的功能,以及测试配置的有效性。具体步骤涉及下载安装包、编辑配置文件、设置API密钥等。
904 1
|
存储 IDE 开发工具
易语言基础功能
易语言基础功能
|
存储 JSON 前端开发
JSON与现代Web开发:数据交互的最佳选择
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也便于机器解析和生成。它以文本格式存储数据,常用于Web应用中的数据传输,尤其是在客户端和服务器之间。
910 1
|
存储 编解码 网络协议
FFmpeg学习笔记(三):FFmpeg和FFplay参数介绍
这篇文章是关于FFmpeg和FFplay参数的介绍,包括如何使用这些参数进行视频流的捕获、处理和播放。
473 0
|
机器学习/深度学习 数据采集 人工智能
使用Python和Scikit-learn实现机器学习分类任务
使用Python和Scikit-learn实现机器学习分类任务
517 1
|
SQL 监控 druid
MySQL连接池DataSource怎么使用?
**摘要:** 本文探讨了数据库连接池在高并发Web应用中的重要性,特别聚焦于阿里巴巴的DruidDataSource。DruidDataSource是一个高效的Java数据库连接池,包含监控、SQL防护和日志功能。文中通过示例展示了如何配置和使用DruidDataSource,包括在Java应用中的直接配置和在Spring Boot中的集成,并提到了启用SQL监控。此外,还分享了设置连接池参数的技巧,如合理设定初始、最大和最小连接数,并强调了定期监控和使用内置监控工具优化性能的重要性。
737 0
uniapp 安装插件 uView (多平台快速开发的UI框架)
uniapp 安装插件 uView (多平台快速开发的UI框架)
785 0
|
存储 缓存 算法
【Cmake 增加编译参数 】cmake增加编译参数和预处理指令的几种方法
【Cmake 增加编译参数 】cmake增加编译参数和预处理指令的几种方法
769 1