Reapply master volume at boot/mode-entry/play-start and sync volume bar on settings hub.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
295a2a6fa3
commit
4aad989263
|
|
@ -303,6 +303,14 @@ void app_adc_sync_volume(uint16_t val)
|
||||||
app_adc_volume_map_level(val);
|
app_adc_volume_map_level(val);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 取当前主音量(复用扫描任务维护的最近一次有效值)。
|
||||||
|
* 模拟开关同一时刻只选中一路,离开扫描上下文直接重读 ADC 会串到
|
||||||
|
* 其它通道,故统一走 vol_last;未初始化(0xFFFF)时按静音兜底 */
|
||||||
|
uint8_t app_adc_get_volume(void)
|
||||||
|
{
|
||||||
|
return (vol_last > 127) ? 0 : (uint8_t)vol_last;
|
||||||
|
}
|
||||||
|
|
||||||
static void app_adc_volume_process(void)
|
static void app_adc_volume_process(void)
|
||||||
{
|
{
|
||||||
uint16_t val = ADC_ReadChannel(ADC_CHANNEL_1)>>5;
|
uint16_t val = ADC_ReadChannel(ADC_CHANNEL_1)>>5;
|
||||||
|
|
|
||||||
|
|
@ -27,4 +27,6 @@ void app_adc_in1_scan_part(uint8_t channel);
|
||||||
bool app_adc_usb_is_plugged(void);
|
bool app_adc_usb_is_plugged(void);
|
||||||
/* 开机/主动采样后同步 vol_last 与 level,避免扫描任务误触发或跳变 */
|
/* 开机/主动采样后同步 vol_last 与 level,避免扫描任务误触发或跳变 */
|
||||||
void app_adc_sync_volume(uint16_t val);
|
void app_adc_sync_volume(uint16_t val);
|
||||||
|
/* 取当前主音量(0~127),供 MasterVolume_Reapply 等重发场景使用 */
|
||||||
|
uint8_t app_adc_get_volume(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -460,6 +460,16 @@ void Send_volume(uint8_t vol)
|
||||||
SendMidiDataToDreamDSP(mMasterSysExVolume,12);
|
SendMidiDataToDreamDSP(mMasterSysExVolume,12);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 重发当前主音量:开机补发 / 进模式主页 / 开始播放前调用。
|
||||||
|
* Dream 上电早期可能丢 SysEx,丢失后旋钮不动就不再重发,
|
||||||
|
* 会出现"图标低音量、实际音量大";在关键时机重发可自愈 */
|
||||||
|
void MasterVolume_Reapply(void)
|
||||||
|
{
|
||||||
|
uint8_t vol = app_adc_get_volume();
|
||||||
|
app_adc_sync_volume(vol); /* 兜底刷新 level,保证图标与下发值一致 */
|
||||||
|
Send_volume(vol);
|
||||||
|
}
|
||||||
|
|
||||||
void Accomp_UpdatePlayingChord(void)
|
void Accomp_UpdatePlayingChord(void)
|
||||||
{
|
{
|
||||||
uint8_t midi_note_buff[4] = {0,};
|
uint8_t midi_note_buff[4] = {0,};
|
||||||
|
|
@ -494,6 +504,8 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
|
||||||
case 1: AutoBandTop1_Postamble(0); break;
|
case 1: AutoBandTop1_Postamble(0); break;
|
||||||
case 2: AutoBandTop1_Postamble(1); break;
|
case 2: AutoBandTop1_Postamble(1); break;
|
||||||
}
|
}
|
||||||
|
/* 前奏/尾奏起奏前补发主音量,保证与图标一致 */
|
||||||
|
MasterVolume_Reapply();
|
||||||
//AutoBandTop1_Start();
|
//AutoBandTop1_Start();
|
||||||
AutoBandTop1_SyncStart();
|
AutoBandTop1_SyncStart();
|
||||||
wk_delay_ms(50);
|
wk_delay_ms(50);
|
||||||
|
|
@ -761,6 +773,10 @@ void Pick_Handle()
|
||||||
note_cnt = GetChordNotesByType(chord_id, chord_type_index_map[chord_id].type, midi_note_buff);
|
note_cnt = GetChordNotesByType(chord_id, chord_type_index_map[chord_id].type, midi_note_buff);
|
||||||
Return_Light_buff(KEY_ID_1629);
|
Return_Light_buff(KEY_ID_1629);
|
||||||
|
|
||||||
|
/* 首次起奏前补发主音量:防开机 SysEx 丢失后"图标低、实际大" */
|
||||||
|
if (StartFlag == 0)
|
||||||
|
MasterVolume_Reapply();
|
||||||
|
|
||||||
switch(mGuiData[GUI_TAB_INDEX].Current)
|
switch(mGuiData[GUI_TAB_INDEX].Current)
|
||||||
{
|
{
|
||||||
case 3:
|
case 3:
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,7 @@ uint8_t GUI_Item_AjustValue(GUI_SWITCH * Group, int8_t Dir);
|
||||||
void GUI_Item_AjustLoopValue(GUI_SWITCH * Group, int8_t Dir);
|
void GUI_Item_AjustLoopValue(GUI_SWITCH * Group, int8_t Dir);
|
||||||
|
|
||||||
void Send_volume(uint8_t vol);
|
void Send_volume(uint8_t vol);
|
||||||
|
void MasterVolume_Reapply(void);
|
||||||
|
|
||||||
void ADC_IN1_KEY_Handle(uint8_t key,bool on);
|
void ADC_IN1_KEY_Handle(uint8_t key,bool on);
|
||||||
void TM1617_Handle(uint8_t key);
|
void TM1617_Handle(uint8_t key);
|
||||||
|
|
|
||||||
|
|
@ -163,11 +163,11 @@ void IdleProcess(DisplayTaskMessage_Type msg)
|
||||||
TM1629D_UpdateDisplay(0);
|
TM1629D_UpdateDisplay(0);
|
||||||
StartTouchTask();
|
StartTouchTask();
|
||||||
StartScanTask();
|
StartScanTask();
|
||||||
/* Dream 上电稍后可能忽略首包 SysEx:再发主音量 + 调音台(保持关机前设置) */
|
/* Dream 上电稍后可能忽略首包 SysEx:再发主音量 + 调音台(保持关机前设置)。
|
||||||
|
* 此时扫描任务已启动、模拟开关在轮询,不可现场重读 ADC(会串通道),
|
||||||
|
* 统一用 MasterVolume_Reapply 取扫描任务维护的最近一次有效音量 */
|
||||||
rt_thread_mdelay(400);
|
rt_thread_mdelay(400);
|
||||||
vol = ADC_ReadChannel(ADC_CHANNEL_1)>>5;
|
MasterVolume_Reapply();
|
||||||
app_adc_sync_volume(vol);
|
|
||||||
Send_volume(vol);
|
|
||||||
LoadConfig();
|
LoadConfig();
|
||||||
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, level, 1, WHITE, GRAY);
|
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, level, 1, WHITE, GRAY);
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -243,6 +243,8 @@ void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex,uint8_t value)
|
||||||
AutoBandTop1_SetRunVar(mGuiData[ID].Current);
|
AutoBandTop1_SetRunVar(mGuiData[ID].Current);
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
|
/* 触摸起奏前补发主音量,保证实际音量与图标一致 */
|
||||||
|
MasterVolume_Reapply();
|
||||||
AutoBandTop1_FillinWithIndex(value);
|
AutoBandTop1_FillinWithIndex(value);
|
||||||
AutoBandTop1_Start();
|
AutoBandTop1_Start();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -124,6 +124,11 @@ void UI_SystemSet_Process(DisplayTaskMessage_Type msg)
|
||||||
label_top();
|
label_top();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case MSG_ID_EC_VOL:
|
||||||
|
/* 主音量已在 MainTask 下发;此处只刷新状态栏音量条,保证与旋钮一致 */
|
||||||
|
Draw_Volume_Bar(UI0902_VOL_X, UI0902_VOL_Y, msg.HiByte, 1, WHITE, GRAY);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,6 +54,7 @@ void CallUI_Idle(void) {
|
||||||
|
|
||||||
void CallUI_SongMode(void) {
|
void CallUI_SongMode(void) {
|
||||||
app_touch_suppress(500);
|
app_touch_suppress(500);
|
||||||
|
MasterVolume_Reapply(); /* 进模式补发主音量,防开机 SysEx 丢失后实际音量与图标不符 */
|
||||||
UI_SongMode_Init();
|
UI_SongMode_Init();
|
||||||
CurrUIProcress = UI_SongMode_Process;
|
CurrUIProcress = UI_SongMode_Process;
|
||||||
app_log_set_ui_page("Song");
|
app_log_set_ui_page("Song");
|
||||||
|
|
@ -62,6 +63,7 @@ void CallUI_SongMode(void) {
|
||||||
|
|
||||||
void CallUI_ExpertMode(void) {
|
void CallUI_ExpertMode(void) {
|
||||||
app_touch_suppress(500);
|
app_touch_suppress(500);
|
||||||
|
MasterVolume_Reapply();
|
||||||
UI_ExpertMode_Init();
|
UI_ExpertMode_Init();
|
||||||
// CurrUIProcress = UI_ExpertMode_Process;
|
// CurrUIProcress = UI_ExpertMode_Process;
|
||||||
CurrUIProcress = UI_SongMode_Process;
|
CurrUIProcress = UI_SongMode_Process;
|
||||||
|
|
@ -71,6 +73,7 @@ void CallUI_ExpertMode(void) {
|
||||||
|
|
||||||
void CallUI_FreeMode(void) {
|
void CallUI_FreeMode(void) {
|
||||||
app_touch_suppress(500);
|
app_touch_suppress(500);
|
||||||
|
MasterVolume_Reapply();
|
||||||
UI_FreeMode_Init();
|
UI_FreeMode_Init();
|
||||||
// CurrUIProcress = UI_FreeMode_Process;
|
// CurrUIProcress = UI_FreeMode_Process;
|
||||||
CurrUIProcress = UI_SongMode_Process;
|
CurrUIProcress = UI_SongMode_Process;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue