关于功放做MUTE,对于大功率音箱和外挂DSP的案子还是要根据实际效果来调试。
对于小音箱可以用下面的方法:
开系统自动MUTE:
#define DAC_AUTO_MUTE_EN 1
dac_automute_cb() 这个函数是跟随系统自动MUTE的,自动获取系统MUTE的状态,可以把mute处理做在这,这样就不用去处理各种情况下的mute控制了,如果某个提示音解mute不及时出现播放不完整就直接在播那个提示音之前提前解mute就好,播完也不用再mute,同时,自动mute控制在每个状态下都很迅速,效果不错。
/*----------------------------------------------------------------------------*/
/** @brief : dac_automute_cb
@param : statue,automute status
@return: none
@author:
@note : 1)This function called to get automute status
*/
/*----------------------------------------------------------------------------*/
void dac_automute_cb(u8 status)
{
if (status) {
puts(">>auto_mute\n");
pa_mute();
} else {
puts(">>auto_umute\n");
pa_umute();
}
}
关于蓝牙指示灯播放时暂停,慢闪到常亮的状态更新慢的问题也可以用自动MUTE来解决:
打印会发现在蓝牙播歌到暂停的时候,蓝牙状态更新很慢,自动mute却很迅速,所以可以在蓝牙状态还没来得及更新时,通过判断mute先让指示灯变为常亮,这里可以在上面的函数里加标志位来实现:
u8 automute_flag = 0;
void dac_automute_cb(u8 status)
{
if (status) {
pa_mute();
automute_flag = 1;
puts(">>auto_mute\n");
} else {
pa_umute();
automute_flag = 0;
puts(">>auto_umute\n");
}
}
case MSG_HALF_SECOND:
if (BT_MUSIC_STATUS_STARTING == a2dp_get_status()) { /*播歌状态*/
// user_send_cmd_prepare(USER_CTRL_AVCTP_OPID_GET_PLAY_TIME, 0, NULL);
/* task_bt_puts("bt_music\n"); */
/* led_fre_set(C_BLED_SLOW_MODE); */
if(automute_flag){
led_fre_set(C_BLED_ON_MODE);
}else{
led_fre_set(C_BLED_SLOW_MODE);
}
... ...
break;
也可以通过 is_auto_mute() 函数来判断。