【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() 函数。

浙公网安备 33010602011771号