Map universal section-4 to Postamble outro and share AutoBand_StartOutro with ADC.

Exit piece mode before Postamble so universal chord loops can switch into the style outro stage once 3.bin has PostambleMIDI.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-09-14 12:24:35 +08:00
parent 1cf6562236
commit 24261942d8
3 changed files with 61 additions and 19 deletions

View File

@ -488,6 +488,29 @@ void Accomp_UpdatePlayingChord(void)
AutoBandTop1_Note_On(midi_note_buff[i], 0x50);
}
/* 尾奏起奏:Postamble(0) + 同步起奏 + 当前和弦 Note_On。
* 供 ADC 独立尾奏键与万能模式第4段落键共用。
* 万能走 piece 循环,须先退出 piece,否则 Postamble 舞台切不过去;
* 尾奏 MIDI 须由音师写入 3.bin(见 Doc/音师需求_万能3.bin尾奏_20260914.md)。 */
void AutoBand_StartOutro(void)
{
uint8_t midi_note_buff[4] = {0,};
uint8_t note_cnt = 0;
/* 退出和弦走向 piece,再进风格尾奏舞台 */
AutoBandTop1_SetPiecePlayMode(0, 0, 0);
AutoBandTop1_Postamble(0);
/* 尾奏起奏前补发主音量,保证与图标一致 */
MasterVolume_Reapply();
AutoBandTop1_SyncStart();
wk_delay_ms(50);
note_cnt = GetChordNotesByType(KEY_ID_1629,chord_type_index_map[KEY_ID_1629].type,midi_note_buff);
for(uint8_t i = 0;i < note_cnt;i++)
{
AutoBandTop1_Note_On(midi_note_buff[i],0x50);
}
}
void ADC_IN1_KEY_Handle(uint8_t key,bool on)
{
uint8_t midi_note_buff[4] = {0,};
@ -497,14 +520,20 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
if(key_toggle[key] == 1)
{
//ResetAutoPowerCount();
if(key == 1)
{
/* 尾奏:与万能模式第4键共用同一起奏路径 */
AutoBand_StartOutro();
}
else
{
switch(key)
{
case 3: AutoBandTop1_Preamble(0); is_preamble = 1; break;
case 0: AutoBandTop1_Preamble(1); is_preamble = 1; break;
case 1: AutoBandTop1_Postamble(0); break;
case 2: AutoBandTop1_Postamble(1); break;
}
/* 前奏/尾奏起奏前补发主音量,保证与图标一致 */
/* 前奏/断奏起奏前补发主音量,保证与图标一致 */
MasterVolume_Reapply();
//AutoBandTop1_Start();
AutoBandTop1_SyncStart();
@ -521,6 +550,7 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
AutoBandTop1_Note_On(midi_note_buff[i],0x50);
}
}
}
else
{
Stop_AutoBand();

View File

@ -214,6 +214,8 @@ void GUI_Item_AjustLoopValue(GUI_SWITCH * Group, int8_t Dir);
void Send_volume(uint8_t vol);
void MasterVolume_Reapply(void);
/* 尾奏起奏:ADC 尾奏键与万能第4段落键共用 */
void AutoBand_StartOutro(void);
void ADC_IN1_KEY_Handle(uint8_t key,bool on);
void TM1617_Handle(uint8_t key);

View File

@ -237,6 +237,16 @@ void Touch_Action(int8_t FLAG, uint8_t ID, uint8_t areaIndex,uint8_t value)
}
else if(ID==GUI_PLAY_SECTION)
{
/* 万能模式第4键:改为尾奏播放(与独立尾奏键同路径),不走 main4 */
if (mGuiData[GUI_TAB_INDEX].Current == 0 && value == 3)
{
last_value = mGuiData[ID].Current;
mGuiData[ID].Current = value;
AutoBand_StartOutro();
if (!UI_SetFocus(GUI_PLAY_SECTION))
Refresh_SectionSelect(last_value, &UI_Label[ID], &mGuiData[ID]);
return;
}
if(mGuiData[ID].Current != value)
{
mGuiData[ID].Current = value;