解析sample例程学习官方API:解析Audio Sample例程

      大家好,我是阿桃,一个想成为被点赞关注的程序员。

     工控行业、物联网行业、机器人行业软件开发可联系我

在audio中存放音频相关的例程。

在解析源码前最好先了解《HiMPP V4.0 媒体处理软件开发参考》中的音频部分。

        一如既往先看该例程的功能,可以明显看出例程演示了AI直接输出到AO或经过编码器再输出到AO,或从音频文件获取数据流解码并输出,也有音质增加等等。

main函数中初始操作还是一样的对参数的判断、定义好信号处理函数以及对MMP系统进行初始化。

        Sample默认采用的是AAC编解码,所以需要对编码器进行初始化,Aac编解码器中注册相应的打开编解码器、执行编解码、获取编解码信息、关闭、复位编码器等函数指针,其实现是调用第三方aac源码库来实现的。

接着就是各个音频示例功能的接口实现,下面逐个分析每个接口。

一、SAMPLE_AUDIO_AiAo()

        AiAo的配置要与audio codec一致才能正确的接收音频数据,具体的可以参考《HiMPP V4.0 媒体处理软件开发参考》手册,里面讲的很清楚。如果需要添加其它外部audio codec可以搜索HI_ACODEC_TYPE_TLV320AIC31宏将内容改为新的外部audio codec的就可以了,流程是通用的。

这里不需要采用重采样功能,所以采样频率不需要配置。

分析一下接口SAMPLE_COMM_AUDIO_CfgAcodec(),可以很清晰的看出接口中通过预编译宏来控制不同audio codec的配置

        SAMPLE_INNER_CODEC_CfgAudio()实现对音频驱动配置,调用的驱动是/dev/acodec,内置的相关ioctrl命令在《HiMPP V4.0 媒体处理软件开发参考》手册中可以搜到,这里主要是采用回复默认配置后设置一个采样频率与输入方式的选择。

        启动Ai接口HI_S32 SAMPLE_COMM_AUDIO_StartAi()的参数从接口参数名可以清楚得知,后面4个参数是关于重采样以及VQE音质增强功能的,当前示例功能没用到,需要注意的是目前内置audio codec是配置成双声道只需要初始化左声道对应的通道另外右声道的部分SDK内部会补齐。

Ao的启动与Ai基本一致,不同的是Vo不需要音质增强以及Vo还可以通过Hdmi输出。

        这里是两种音频输出方式,一种是AI与AO模块不绑定创建线程,实时将AI获取到的数据发送到AO中,另外一种是将AI与AO进行绑定自动将AI获取到的数据进行输出。

该函数中调用的是SAMPLE_COMM_AUDIO_CreatTrdAiAo()接口。

线程的执行函数是SAMPLE_COMM_AUDIO_AiProc,SAMPLE_COMM_AUDIO_AiProc设置音频帧的缓存长度为30。

之后就一个循环每秒判断Ai有没有数据输入。

接收到Ai输入数据后根据是否需要发送到Aenv或Ao将音频数据送到相应目标。

剩下就是释放资源,将启动的线程关闭,将Vi和Vo开启的通道等关闭。

二、SAMPLE_AUDIO_AiAenc

与上个函数不同的是对Ai输入的音频进行编码。

可以根据相应的编码协议类型进行初始化编码器。

这里一样还是提供两种方式将AI的数据发送到AENC,该函数里最终调用的是SAMPLE_COMM_AUDIO_AencBindAi。

        这里实现了两个功能,一个是将编码器通道0启动,打开指定音频文件,SAMPLE_COMM_AUDIO_CreatTrdAencAdec()接口创建线程,线程执行的函数为SAMPLE_COMM_AUDIO_AencProc(),该函数每秒查看Ai是否有数据传输给编码器编码完成,有数据则按指定类型解码后保存到指定文件中。

另一个功能时将编码器与Ao绑定,将编码后的音频直接播放。

剩下的依旧是依次释放资源。

三、SAMPLE_AUDIO_AdecAo

        大致的流程都相同,从配置audio codec到开启编码器、开启Ao然后绑定Ao与编码器,不同的是开启了一个线程从文件中读取音频数据并传输给编码器然后播放,一直循环。

        SAMPLE_COMM_AUDIO_AdecProc()函数作为线程执行函数,函数实现循环读取音频文件进行解码,如果需要只播放一次的话,可以在读取完成后直接退出并延时一段时间等Ao将音频播放完成后结束任务。

四、SAMPLE_AUDIO_AiVqeProcessAo

        该功能与SAMPLE_AUDIO_AiAo的区别在于增加了音质增强功能,具体是增加了音质增强VQE的属性配置,这里使用的是Common场景模式,具体参数配置可以根据《HiMPP V4.0 媒体处理软件开发参考》手册进行修改。

然后在启动Ai的接口中根据参数设置VQE的属性并开启该功能。

五、SAMPLE_AUDIO_AiHdmiAo

该功能与SAMPLE_AUDIO_AiAo的区别在于使用HDMI播放音频,所以需要增加HDMI的配置。

通过配置Aodev为宏SAMPLE_AUDIO_INNER_HDMI_AO_DEV表示。

在启动Ao接口中判断Aodev的类型并启动HDMI。

启动HDMI中配置HDMI属性,根据接口时序去调用进行初始化HDMI的接口SAMPLE_COMM_VO_HdmiStart()。

        由于SAMPLE_COMM_VO_HdmiStart()是sample_comm_vo模块中通用的开启HDMI输出视频的配置,并没有配置HDMI输出音频所以需要修改HDMI的配置并重新启动。

六、SAMPLE_AUDIO_AiToAoSysChn

该功能与SAMPLE_AUDIO_AiAo的区别在于使用系统音通道输出。

该通道在手册中的定义如下:

七、SAMPLE_AUDIO_AiToExtResample

该接口实现将Ai收到的数据进行重采样处理后保存到相应重采样通道文件中。

为每一个通道创建线程去将ai的数据重采样后保存到文件中。

线程执行函数SAMPLE_COMM_AUDIO_AiExtResProc实现每秒去读取Ai的数据并写入到文件中。

  • 2
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值