海思3536解码G711音频

海思3536解码G711音频


最近的一个项目,需要增加对G711的解码功能。而HI3536这款芯片是支持对G711进行CPU软件编解码的,所有的解码功能都基于独立封装的海思音频解码库,核心解码器工作在用户态,使用 CPU 软件解码。
对于海思的芯片来说,如果想要解码标准的G711音频数据的话,需要在G711音频数据流的每一帧前面都要加上一个海思的数据头,这样的G711音频数据才能被海思所解码。对于G711来说,HI3536能获取每帧数据长度为:N*40 (N 为[1,5]的任意正整数)。
海思语音帧结构为:
在这里插入图片描述
代码处理:

FILE* fp = fopen(argv[1], "rb");

fseek(fp,0L,SEEK_END); //定位到文件末尾  
int flen = ftell(fp); // 得到文件大小 

fseek(fp,0L,SEEK_SET);// 回到文件头部

printf("flen = %d\n",flen);

int size  = 2 * 1024 * 1024;

char* buffer = (char*)malloc(size);
bzero(buffer,size);
if(fp)
{
	fread(buffer, 1, size , fp);
	fclose(fp);
}

int newlen = flen/200;
if( flen %200 )
{
	newlen += 1;
}

printf("newlen = %d\n",newlen);

newlen = flen + newlen*4;
printf("newlen = %d\n",newlen);
short * p = (short *)malloc(newlen);
bzero(p,newlen);

HisiVoiceAddHisiHeader((short *)buffer,(short *)p,200,flen);

free(buffer);

从标准的G711音频文件中读取数据,然后在按帧长度为200的间隔,对每个帧前加上一个海思的语音帧结构。

对于3536解码G711的过程,参考了海思提供的SDK,其中有个音频解码的demo sample_audio.c,具体的代码就不做分析,只是介绍一下大体上是怎么实现的,有兴趣的可以自己去看该代码。

G711解码流程:

  1. MMP系统初始化
  2. 设置音频输出设备属性,比如:采样率,数据宽度,I2S主从模式等
  3. 根据所设置的属性,创建ADEC通道
  4. 设置 AO 设备属性、启用 AO 设备、启用 AO 通道
  5. 数据源到数据接收者进行绑定
  6. 发送音频码流到音频解码通道

大体上的流程就是这样,还是个小白,只是想将学习的过程记录下来.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值