暂时定这个参数,等待客户测试

This commit is contained in:
flym 2026-06-11 01:16:08 +08:00
parent dd546b5ee6
commit f0a5144043
12 changed files with 45104 additions and 41511 deletions

View File

@ -150,7 +150,7 @@ void sound_track_bass_vol_test_demo(u8 up_down)
bass_gain = -6; bass_gain = -6;
tone_play_by_path(TONE_NORMAL, 0); // 播放一段正弦波 tone_play_by_path(TONE_NORMAL, 0); // 播放一段正弦波
} }
// printf("=====bass gain %d\n", (int)bass_gain); // //printf("=====bass gain %d\n", (int)bass_gain);
low_bass_set_global_gain(bass_gain, bass_gain); low_bass_set_global_gain(bass_gain, bass_gain);
} }
@ -365,7 +365,7 @@ u32 audio_output_rate(int input_rate)
#if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT) #if (AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_BT)
if ((bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) && (!bt_phone_dec_is_running()) && (!bt_media_is_running())) if ((bt_user_priv_var.emitter_or_receiver == BT_EMITTER_EN) && (!bt_phone_dec_is_running()) && (!bt_media_is_running()))
{ {
y_printf("+++ \n"); y_//printf("+++ \n");
return audio_sbc_enc_get_rate(); return audio_sbc_enc_get_rate();
} }
#elif (AUDIO_OUTPUT_WAY_DONGLE && AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DONGLE) #elif (AUDIO_OUTPUT_WAY_DONGLE && AUDIO_OUTPUT_WAY == AUDIO_OUTPUT_WAY_DONGLE)
@ -378,7 +378,7 @@ u32 audio_output_rate(int input_rate)
return 48000; return 48000;
} }
#endif #endif
// y_printf("+++ 11 \n"); // y_//printf("+++ 11 \n");
return app_audio_output_samplerate_select(input_rate, 1); return app_audio_output_samplerate_select(input_rate, 1);
} }
@ -602,7 +602,7 @@ static void mixer_event_handler(struct audio_mixer *mixer, int event)
break; break;
case MIXER_EVENT_SR_CHANGE: case MIXER_EVENT_SR_CHANGE:
#if 0 #if 0
y_printf("sr change:%d \n", mixer->sample_rate); y_//printf("sr change:%d \n", mixer->sample_rate);
#endif #endif
break; break;
} }
@ -678,7 +678,7 @@ extern void audio_adda_gain_dump(void); // 打印所有adc,dac的增益
/*音频配置实时跟踪可以用来查看ADC/DAC增益或者其他寄存器配置*/ /*音频配置实时跟踪可以用来查看ADC/DAC增益或者其他寄存器配置*/
static void audio_config_trace(void *priv) static void audio_config_trace(void *priv)
{ {
printf(">>Audio_Config_Trace:\n"); //printf(">>Audio_Config_Trace:\n");
audio_adda_gain_dump(); audio_adda_gain_dump();
// audio_adda_dump(); // audio_adda_dump();
// mem_stats(); // mem_stats();
@ -697,7 +697,7 @@ int audio_dec_init()
{ {
int err; int err;
printf("audio_dec_init\n"); //printf("audio_dec_init\n");
// 创建解码任务 // 创建解码任务
err = audio_decoder_task_create(&decode_task, "audio_dec"); err = audio_decoder_task_create(&decode_task, "audio_dec");
@ -1053,11 +1053,11 @@ static void pa_mute_timer_callback(void *priv)
// 10ms timer // 10ms timer
if (pa_mute_var.mute_flag) if (pa_mute_var.mute_flag)
{ {
printf(">>> 1.\n"); //printf(">>> 1.\n");
pa_mute_var.mute_cnt++; pa_mute_var.mute_cnt++;
if (pa_mute_var.mute_cnt > 50) if (pa_mute_var.mute_cnt > 50)
{ {
printf(">>> 11\n"); //printf(">>> 11\n");
pa_mute_var.mute_cnt = 0; pa_mute_var.mute_cnt = 0;
pa_mute_var.mute_flag = 0; pa_mute_var.mute_flag = 0;
PA_MUTE(); PA_MUTE();
@ -1066,11 +1066,11 @@ static void pa_mute_timer_callback(void *priv)
if (pa_mute_var.unmute_flag) if (pa_mute_var.unmute_flag)
{ {
printf(">>> 2.\n"); //printf(">>> 2.\n");
pa_mute_var.unmute_cnt++; pa_mute_var.unmute_cnt++;
if (pa_mute_var.unmute_cnt > 2) if (pa_mute_var.unmute_cnt > 2)
{ {
printf(">>> 22\n"); //printf(">>> 22\n");
pa_mute_var.unmute_cnt = 0; pa_mute_var.unmute_cnt = 0;
pa_mute_var.unmute_flag = 0; pa_mute_var.unmute_flag = 0;
PA_UNMUTE(); PA_UNMUTE();
@ -1092,13 +1092,13 @@ void kt_auto_mute_pa_init(void)
void audio_mix_out_automute_mute(u8 mute) void audio_mix_out_automute_mute(u8 mute)
{ {
//printf(">>> %s\n", mute ? ("MUTE") : ("UNMUTE")); ////printf(">>> %s\n", mute ? ("MUTE") : ("UNMUTE"));
if (mute) if (mute)
{ {
printf(">>> mute.\n"); //printf(">>> mute.\n");
if (app_get_curr_task() == APP_LP_TASK) if (app_get_curr_task() == APP_LP_TASK)
{ {
printf(">>> mute1\n"); //printf(">>> mute1\n");
PA_MUTE(); PA_MUTE();
pa_mute_var.mute_flag = 0; pa_mute_var.mute_flag = 0;
pa_mute_var.unmute_flag = 0; pa_mute_var.unmute_flag = 0;
@ -1108,14 +1108,14 @@ void audio_mix_out_automute_mute(u8 mute)
} }
else else
{ {
printf(">>> mute2\n"); //printf(">>> mute2\n");
//pa_mute_var.mute_cnt = 0; //pa_mute_var.mute_cnt = 0;
//pa_mute_var.mute_flag = 1; //pa_mute_var.mute_flag = 1;
} }
} }
else else
{ {
printf(">>> unmute.\n"); //printf(">>> unmute.\n");
pa_mute_var.mute_cnt = 0; pa_mute_var.mute_cnt = 0;
pa_mute_var.mute_flag = 0; pa_mute_var.mute_flag = 0;
pa_mute_var.unmute_cnt = 0; pa_mute_var.unmute_cnt = 0;
@ -1151,19 +1151,32 @@ void audio_mix_out_automute_mute(u8 mute)
} }
/* LP: 库内 UNMUTE 会吃落针“丝丝”;轮询对称 mute/unmute */ /* LP: 库内 UNMUTE 会吃落针“丝丝”;轮询对称 mute/unmute */
/* bs.txt: 报数尾音衰减至停顿,<400 最长约385msmute 需≥600ms 才不吞尾音 */ /* cq2.txt: 咔咔尖峰 max=2317/min=382 误 unmute+confirmed需 max/min 双门槛 */
/* cq.txt: 咔咔误开后 <400 可持续>600ms仍可 re-mute */ /* 确认播放后不再快速 mute避免蔡琴换气/报数尾音被吞;曲间用深静音判定 */
#define LP_UNMUTE_ENERGY_THRESH 1300 #define LP_UNMUTE_ENERGY_THRESH 1200
#define LP_UNMUTE_SUSTAIN_MS 80 #define LP_UNMUTE_MIN_ENERGY 500
#define LP_UNMUTE_SUSTAIN_MS 60
#define LP_CONFIRM_MAX_ENERGY 1200
#define LP_CONFIRM_MIN_ENERGY 500
#define LP_CONFIRM_SUSTAIN_MS 100
#define LP_FALSE_MIN_ENERGY 450
#define LP_FALSE_SUSTAIN_MS 220
#define LP_MUTE_ENERGY_THRESH 400 #define LP_MUTE_ENERGY_THRESH 400
#define LP_MUTE_SUSTAIN_MS 600 #define LP_MUTE_SUSTAIN_MS 600
#define LP_UNMUTE_HOLDOFF_MS 200 #define LP_GAP_MUTE_MIN_ENERGY 200
#define LP_GAP_MUTE_MAX_ENERGY 500
#define LP_GAP_MUTE_SUSTAIN_MS 1500
#define LP_UNMUTE_HOLDOFF_MS 80
#define LP_AUTOMUTE_POLL_MS 20 #define LP_AUTOMUTE_POLL_MS 20
static u8 lp_pa_open = 0; static u8 lp_pa_open = 0;
static u8 lp_confirmed = 0;
static u16 lp_automute_tid = 0; static u16 lp_automute_tid = 0;
static u16 lp_high_ms = 0; static u16 lp_high_ms = 0;
static u16 lp_low_ms = 0; static u16 lp_low_ms = 0;
static u16 lp_false_ms = 0;
static u16 lp_gap_ms = 0;
static u16 lp_confirm_ms = 0;
static u16 lp_holdoff_ms = 0; static u16 lp_holdoff_ms = 0;
static u16 lp_win_min = 0xffff; static u16 lp_win_min = 0xffff;
static u16 lp_win_max = 0; static u16 lp_win_max = 0;
@ -1193,13 +1206,31 @@ static void mix_out_automute_energy_dbg(void *priv)
return; return;
} }
energy = audio_energy_detect_energy_get(mix_out_automute_hdl, BIT(0)); energy = audio_energy_detect_energy_get(mix_out_automute_hdl, BIT(0));
printf("e_det energy=%d\n", energy); //printf("e_det energy=%d\n", energy);
if (app_get_curr_task() == APP_LP_TASK && lp_automute_tid) { if (app_get_curr_task() == APP_LP_TASK && lp_automute_tid) {
lp_energy_win_update(energy); lp_energy_win_update(energy);
} }
} }
#endif #endif
static void lp_automute_reset_tentative(void)
{
lp_low_ms = 0;
lp_false_ms = 0;
lp_gap_ms = 0;
lp_confirm_ms = 0;
}
static void lp_automute_force_mute(const char *reason, u16 e_max, u16 e_min)
{
audio_mix_out_automute_mute(1);
lp_pa_open = 0;
lp_confirmed = 0;
lp_high_ms = 0;
lp_automute_reset_tentative();
//printf("lp_automute: %s max=%d min=%d\n", reason, e_max, e_min);
}
static void lp_automute_poll(void *priv) static void lp_automute_poll(void *priv)
{ {
u16 e_max; u16 e_max;
@ -1217,12 +1248,41 @@ static void lp_automute_poll(void *priv)
return; return;
} }
if (e_max >= LP_UNMUTE_ENERGY_THRESH) { if (e_max >= LP_UNMUTE_ENERGY_THRESH && e_min >= LP_UNMUTE_MIN_ENERGY) {
lp_high_ms += LP_AUTOMUTE_POLL_MS; lp_high_ms += LP_AUTOMUTE_POLL_MS;
} else { } else {
lp_high_ms = 0; lp_high_ms = 0;
} }
if (!lp_pa_open && lp_high_ms >= LP_UNMUTE_SUSTAIN_MS) {
audio_mix_out_automute_mute(0);
lp_pa_open = 1;
lp_confirmed = 0;
lp_holdoff_ms = LP_UNMUTE_HOLDOFF_MS;
lp_automute_reset_tentative();
//printf("lp_automute: unmute max=%d min=%d\n", e_max, e_min);
return;
}
if (!lp_pa_open) {
return;
}
if (!lp_confirmed) {
if (e_max >= LP_CONFIRM_MAX_ENERGY && e_min >= LP_CONFIRM_MIN_ENERGY) {
lp_confirm_ms += LP_AUTOMUTE_POLL_MS;
} else {
lp_confirm_ms = 0;
}
if (lp_confirm_ms >= LP_CONFIRM_SUSTAIN_MS) {
lp_confirmed = 1;
lp_false_ms = 0;
lp_low_ms = 0;
//printf("lp_automute: confirmed max=%d min=%d\n", e_max, e_min);
return;
}
if (lp_holdoff_ms) { if (lp_holdoff_ms) {
if (lp_holdoff_ms > LP_AUTOMUTE_POLL_MS) { if (lp_holdoff_ms > LP_AUTOMUTE_POLL_MS) {
lp_holdoff_ms -= LP_AUTOMUTE_POLL_MS; lp_holdoff_ms -= LP_AUTOMUTE_POLL_MS;
@ -1230,32 +1290,47 @@ static void lp_automute_poll(void *priv)
lp_holdoff_ms = 0; lp_holdoff_ms = 0;
} }
lp_low_ms = 0; lp_low_ms = 0;
} else if (e_min < LP_MUTE_ENERGY_THRESH) { lp_false_ms = 0;
} else {
if (e_min < LP_FALSE_MIN_ENERGY) {
lp_false_ms += LP_AUTOMUTE_POLL_MS;
} else {
lp_false_ms = 0;
}
if (e_min < LP_MUTE_ENERGY_THRESH) {
lp_low_ms += LP_AUTOMUTE_POLL_MS; lp_low_ms += LP_AUTOMUTE_POLL_MS;
} else { } else {
lp_low_ms = 0; lp_low_ms = 0;
} }
}
if (!lp_pa_open && lp_high_ms >= LP_UNMUTE_SUSTAIN_MS) { if (lp_false_ms >= LP_FALSE_SUSTAIN_MS) {
audio_mix_out_automute_mute(0); lp_automute_force_mute("false-mute", e_max, e_min);
lp_pa_open = 1; } else if (lp_low_ms >= LP_MUTE_SUSTAIN_MS) {
lp_low_ms = 0; lp_automute_force_mute("mute", e_max, e_min);
lp_holdoff_ms = LP_UNMUTE_HOLDOFF_MS; }
printf("lp_automute: unmute max=%d min=%d\n", e_max, e_min); return;
} else if (lp_pa_open && lp_low_ms >= LP_MUTE_SUSTAIN_MS) { }
audio_mix_out_automute_mute(1);
lp_pa_open = 0; if (e_min < LP_GAP_MUTE_MIN_ENERGY && e_max < LP_GAP_MUTE_MAX_ENERGY) {
lp_high_ms = 0; lp_gap_ms += LP_AUTOMUTE_POLL_MS;
printf("lp_automute: mute max=%d min=%d\n", e_max, e_min); } else {
lp_gap_ms = 0;
}
if (lp_gap_ms >= LP_GAP_MUTE_SUSTAIN_MS) {
lp_automute_force_mute("gap-mute", e_max, e_min);
} }
} }
void mix_out_automute_lp_start(void) void mix_out_automute_lp_start(void)
{ {
lp_pa_open = 0; lp_pa_open = 0;
lp_confirmed = 0;
lp_high_ms = 0; lp_high_ms = 0;
lp_low_ms = 0;
lp_holdoff_ms = 0; lp_holdoff_ms = 0;
lp_automute_reset_tentative();
lp_win_min = 0xffff; lp_win_min = 0xffff;
lp_win_max = 0; lp_win_max = 0;
if (mix_out_automute_hdl) { if (mix_out_automute_hdl) {
@ -1265,18 +1340,19 @@ void mix_out_automute_lp_start(void)
if (!lp_automute_tid) { if (!lp_automute_tid) {
lp_automute_tid = sys_timer_add(NULL, lp_automute_poll, LP_AUTOMUTE_POLL_MS); lp_automute_tid = sys_timer_add(NULL, lp_automute_poll, LP_AUTOMUTE_POLL_MS);
} }
printf("lp_automute: start\n"); //printf("lp_automute: start\n");
} }
void mix_out_automute_lp_stop(void) void mix_out_automute_lp_stop(void)
{ {
lp_pa_open = 0; lp_pa_open = 0;
lp_confirmed = 0;
lp_high_ms = 0; lp_high_ms = 0;
lp_low_ms = 0;
lp_holdoff_ms = 0; lp_holdoff_ms = 0;
lp_automute_reset_tentative();
lp_win_min = 0xffff; lp_win_min = 0xffff;
lp_win_max = 0; lp_win_max = 0;
printf("lp_automute: stop\n"); //printf("lp_automute: stop\n");
} }
/* #define AUDIO_E_DET_UNMUTE (0x00) */ /* #define AUDIO_E_DET_UNMUTE (0x00) */
@ -1285,22 +1361,27 @@ void mix_out_automute_handler(u8 event, u8 ch)
{ {
if (app_get_curr_task() == APP_LP_TASK) { if (app_get_curr_task() == APP_LP_TASK) {
if (!event) { if (!event) {
printf(">>>> ch:%d UNMUTE blocked (LP poll)\n", ch); //printf(">>>> ch:%d UNMUTE blocked (LP poll)\n", ch);
return; return;
} }
printf(">>>> ch:%d MUTE (LP lib)\n", ch); if (lp_confirmed) {
//printf(">>>> ch:%d MUTE blocked (LP confirmed)\n", ch);
return;
}
//printf(">>>> ch:%d MUTE (LP lib)\n", ch);
if (ch < app_audio_output_channel_get()) { if (ch < app_audio_output_channel_get()) {
audio_mix_out_automute_mute(1); audio_mix_out_automute_mute(1);
lp_pa_open = 0; lp_pa_open = 0;
lp_confirmed = 0;
lp_high_ms = 0; lp_high_ms = 0;
lp_low_ms = 0;
lp_holdoff_ms = 0; lp_holdoff_ms = 0;
lp_automute_reset_tentative();
lp_win_min = 0xffff; lp_win_min = 0xffff;
lp_win_max = 0; lp_win_max = 0;
} }
return; return;
} }
printf(">>>> ch:%d %s\n", ch, event ? ("MUTE") : ("UNMUTE")); //printf(">>>> ch:%d %s\n", ch, event ? ("MUTE") : ("UNMUTE"));
/* ch 为通道索引(0/1...); channel_get() 返回通道总数,不可直接 == 比较 */ /* ch 为通道索引(0/1...); channel_get() 返回通道总数,不可直接 == 比较 */
if (ch < app_audio_output_channel_get()) { if (ch < app_audio_output_channel_get()) {
audio_mix_out_automute_mute(event); audio_mix_out_automute_mute(event);
@ -1326,7 +1407,7 @@ void mix_out_automute_open()
{ {
if (mix_out_automute_hdl) if (mix_out_automute_hdl)
{ {
printf("mix_out_automute is already open !\n"); //printf("mix_out_automute is already open !\n");
return; return;
} }
audio_energy_detect_param e_det_param = {0}; audio_energy_detect_param e_det_param = {0};
@ -1385,10 +1466,10 @@ void mix_out_automute_open()
e_det_param.ch_total = app_audio_output_channel_get(); e_det_param.ch_total = app_audio_output_channel_get();
#endif #endif
e_det_param.dcc = 1; e_det_param.dcc = 1;
printf("mix_out_automute e_det: mute_energy=%d unmute_energy=%d mute_time_ms=%u unmute_time_ms=%u count_cycle_ms=%u ch_total=%d\n", //printf("mix_out_automute e_det: mute_energy=%d unmute_energy=%d mute_time_ms=%u unmute_time_ms=%u count_cycle_ms=%u ch_total=%d\n",
e_det_param.mute_energy, e_det_param.unmute_energy, // e_det_param.mute_energy, e_det_param.unmute_energy,
e_det_param.mute_time_ms, e_det_param.unmute_time_ms, // e_det_param.mute_time_ms, e_det_param.unmute_time_ms,
e_det_param.count_cycle_ms, e_det_param.ch_total); // e_det_param.count_cycle_ms, e_det_param.ch_total);
mix_out_automute_hdl = audio_energy_detect_open(&e_det_param); mix_out_automute_hdl = audio_energy_detect_open(&e_det_param);
mix_out_automute_entry = audio_energy_detect_entry_get(mix_out_automute_hdl); mix_out_automute_entry = audio_energy_detect_entry_get(mix_out_automute_hdl);
#if MIX_OUT_AUTOMUTE_ENERGY_DBG_EN #if MIX_OUT_AUTOMUTE_ENERGY_DBG_EN

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -3974,7 +3974,6 @@ objs/cpu/br23/audio_dec/audio_dec.c.o
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_dec_occupy_trace_hdl,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_dec_occupy_trace_hdl,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,os_time_dly,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,os_time_dly,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_dec_init,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_dec_init,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,printf,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_decoder_task_create,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_decoder_task_create,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_audio_output_init,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_audio_output_init,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_src_base_filt_init,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_src_base_filt_init,l
@ -3996,6 +3995,7 @@ objs/cpu/br23/audio_dec/audio_dec.c.o
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,sys_timer_add,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,sys_timer_add,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_mix_out_automute_mute,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_mix_out_automute_mute,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_get_curr_task,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,app_get_curr_task,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,printf,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,gpio_set_output_value,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,gpio_set_output_value,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_lp_start,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_lp_start,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_energy_detect_skip,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_energy_detect_skip,l
@ -4017,7 +4017,6 @@ objs/cpu/br23/audio_dec/audio_dec.c.o
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_stream_clear_from,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,audio_stream_clear_from,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,os_mutex_post,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,os_mutex_post,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,digital_phase_inverter_s16,l -r=objs/cpu/br23/audio_dec/audio_dec.c.o,digital_phase_inverter_s16,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,puts,l
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_hdl,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_hdl,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_entry,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,mix_out_automute_entry,pl
-r=objs/cpu/br23/audio_dec/audio_dec.c.o,decode_task,pl -r=objs/cpu/br23/audio_dec/audio_dec.c.o,decode_task,pl

File diff suppressed because it is too large Load Diff

3493
cq2.txt Normal file

File diff suppressed because it is too large Load Diff