【ChipIntelli 系列】SDK详解1——音量(volume)设定的相关函数:vol_get()\vol_set()

一、底层API 

主要调用函数vol_set 和 vol_get,其参数范围为[0,7],代表有8个档位。

/**
 * @brief 音量设置函数
 *
 * @param vol 音量值的档次,范围[0,7] 总共8档音量
 */
uint8_t vol_set(char vol)
{
    if(vol <= VOLUME_MAX && vol >= VOLUME_MIN && sys_manage_data.volset != vol)
    {
        sys_manage_data.volset = vol;
        //计算实际vol_gain,调用 audio_play_set_vol_gain() (真正的内核)
        int32_t vol_gain = (SET_MAX_VOLUME - SET_MIN_VOLUME)*vol/VOLUME_MAX + SET_MIN_VOLUME;
        //以上是宏,默认状态SET_MAX_VOLUME = 75; SET_MIN_VOLUME = 10; VOLUME_MAX = 7(为音量的最高档位)
        audio_play_set_vol_gain(vol_gain);

        //写入NVDATA中(掉电存储)
        cinv_item_write(NVDATA_ID_VOLUME, sizeof(sys_manage_data.volset), &sys_manage_data.volset);
    }
    return sys_manage_data.volset;
}

uint8_t vol_get(void)
{
    return sys_manage_data.volset;
}

 其中关键代码为:

int32_t vol_gain = (SET_MAX_VOLUME - SET_MIN_VOLUME)*vol/VOLUME_MAX + SET_MIN_VOLUME;
        //以上是宏,默认状态SET_MAX_VOLUME = 75; SET_MIN_VOLUME = 10; VOLUME_MAX = 7(为音量的最高档位)
audio_play_set_vol_gain(vol_gain);

其中调用了核心函数(在 components\codec_manager\codec_manager.c 中),底层是对 codec_dac 的设置。

上面的 vol_set() 本质是对它的封装,可见其参数gain范围为【0--100】,因此若想实现 vol_set 限制外的大声音,可以直接调用vol_set()

/**
 * @brief 调节播放音量
 * 
 * @param gain 音量(0--100)
 */
void audio_play_set_vol_gain(int32_t gain)
{
    g_audio_play_gain = gain;

    cm_set_codec_dac_gain(sg_play_device_index, 0, gain);
}

二、调用场景

主要是在projects\cwsl_A_sample\src\system_msg_deal.c  文件中的void UserTaskManageProcess(void *p_arg)进程的无限循环中的一个情景(消息队列等来的消息类型为 SYS_MSG_TYPE_AUDIO_IN_STARTED时),调用了 vol_set() 函数。

 

posted @ 2025-07-08 21:48  FBshark  阅读(19)  评论(0)    收藏  举报