音频文件播放之音量控制【海思平台】

来源:互联网 发布:数据质量评估 编辑:程序博客网 时间:2024/06/10 04:48

概述

    Hi3518A/Hi3518C/Hi3518E/Hi3516C 提供一个内置的 Audio Codec,并在芯片内部对接到 SIO0 接口,即 SIO0 接口只能通过内置的 Audio Codec 完成声音的播放及录制。因为 Audio Codec 不能发送同步时钟,所以 SIO0 接口只能配置为 I 2 S 时序的主模式,用户仍需要正确配置 SIO0 和 Audio Codec 对接时序才可接收或发送音频数据。

    海思Hi3518_MPP_V1.0.A.0版本之前的SDK不支持音量动态控制,直到当前版本的发布,才可以正常使用ioctl函数的相关接口动态调节

动态调节API

    ACODEC_SET_OUTPUT_VOL

    ACODEC_GET_INPUT_VOL

定义处:

#define ACODEC_SET_OUTPUT_VOL \
_IOWR(IOC_TYPE_ACODEC, IOC_NR_SET_OUTPUT_VOL, unsigned int)
#define ACODEC_GET_INPUT_VOL \
_IOWR(IOC_TYPE_ACODEC, IOC_NR_GET_INPUT_VOL, unsigned int)

调节范围:0x0xffffff87~0xffffffff

程序示例

int openAcodec(){int fdAcodec = open(ACODEC_FILE,O_RDWR);    if (fdAcodec < 0)    {    printf("[%s::%d] can't open acodec : %s", __func__, __LINE__,ACODEC_FILE);        return -1;         }    return fdAcodec ;}int getOutputVol(int fdAcodec,int *pVol){int vol ;    if (ioctl(fdAcodec, ACODEC_GET_OUTPUT_VOL, &vol))    {        printf("[%s::%d] ACODEC_GET_OUTPUT_VOL fail \n",__func__,__LINE__);        return -1;    }    printf("[%s::%d] ACODEC_GET_OUTPUT_VOL : %x  \n",__func__,__LINE__,vol);    *pVol = vol ;    return 0 ;}int setOutputVol(int fdAcodec,int vol){    if(ioctl(fdAcodec, ACODEC_SET_OUTPUT_VOL, &vol))    {    printf("[%s::%d] ACODEC_SET_OUTPUT_VOL fail : %x  \n",__func__,__LINE__,vol);        return -1;    }    return 0 ;}int closeAcodec(int fdAcodec){return  close(fdAcodec); }

备注

    该接口的调用要在HI_MPI_AO_Enable的调用之后,即AO使能启动之后,再调用。



0 0