项目实战:模拟mplayer实现

僤鯓⒐⒋嵵緔 提交于 2020-02-03 15:16:20

        现在音频实现很多调用的mplayer,它的底层也是调用ALSA驱动框架,但是海思平台没有提供底层的驱动实现,当然可以自己编写驱动实现,不过如果是简单的关于控制音频的功能,可以尝试模拟mplayer播放音频方式的程序,这里就简单介绍一下实现的过程。

一、裁剪sample_audio.c

可以从下图看出sample_audio.c包含着不同功能的示例,将不需要的功能全部裁剪掉,只保留读取音频文件播放功能。

 

二、修改Sample_audio.c调用方式

        一般我们调用mplayer形式为./mplayer xxx.wav -af volume=xxx -srate 44100,所以我们接口需要根据文件名、采样频率以及音量大小来播放音频。

修改后的接口如下:

  

        因为存在音频是wav这样海思不支持的音频文件,海思只能解析aac还有其他几种编码格式,所以我们需要将外部音频文件从wav转为aac,有很多种方式转换,目前我是用《迅捷视频转换器》直接将wav转换成aac音频,然后在audio_sample.c中将输入的文件名xxx.wav转换成xxx.aac即可调用。

 

        这里有一个问题,编译生成后将audio_sample可执行程序重命名为mplayer,执行./mplayer xxx.wav -af volume=xxx -srate 44100后可以正常播放语音,不过会循环播放。

三、修改播放方式

跟踪程序可以发现播放音频最终会调用下面接口进行循环播放。

 

程序中是创建了一个线程,这里我将它改为函数调用。

 

跟踪到实际播放的函数中可以看到它是解码后传给VO播放。

 

    我这里将等待800ms后等语音播放完就退出,这个时间后面需要根据我们音频的最长播放时间来定,至此完成模拟mplayer的程序功能。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!