现在音频实现很多调用的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的程序功能。
来源:CSDN
作者:工藤_新一
链接:https://blog.csdn.net/qq845699/article/details/104152715