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

概述

    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使能启动之后,再调用。



你可能感兴趣的:(audio)