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); 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) void ADC_IN1_KEY_Handle(uint8_t key,bool on)
{ {
uint8_t midi_note_buff[4] = {0,}; uint8_t midi_note_buff[4] = {0,};
@ -497,28 +520,35 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
if(key_toggle[key] == 1) if(key_toggle[key] == 1)
{ {
//ResetAutoPowerCount(); //ResetAutoPowerCount();
switch(key) if(key == 1)
{ {
case 3: AutoBandTop1_Preamble(0); is_preamble = 1; break; /* 尾奏:与万能模式第4键共用同一起奏路径 */
case 0: AutoBandTop1_Preamble(1); is_preamble = 1; break; AutoBand_StartOutro();
case 1: AutoBandTop1_Postamble(0); break;
case 2: AutoBandTop1_Postamble(1); break;
} }
/* 前奏/尾奏起奏前补发主音量,保证与图标一致 */ else
MasterVolume_Reapply();
//AutoBandTop1_Start();
AutoBandTop1_SyncStart();
wk_delay_ms(50);
/* 音师:前奏起始 = 当前调一级和弦第一把位(index 1 + maj,再经移调) */
if (is_preamble)
{ {
KEY_ID_1629 = 1; switch(key)
chord_type_index_map[1].type = 0; {
} case 3: AutoBandTop1_Preamble(0); is_preamble = 1; break;
note_cnt = GetChordNotesByType(KEY_ID_1629,chord_type_index_map[KEY_ID_1629].type,midi_note_buff); case 0: AutoBandTop1_Preamble(1); is_preamble = 1; break;
for(uint8_t i = 0;i < note_cnt;i++) case 2: AutoBandTop1_Postamble(1); break;
{ }
AutoBandTop1_Note_On(midi_note_buff[i],0x50); /* 前奏/断奏起奏前补发主音量,保证与图标一致 */
MasterVolume_Reapply();
//AutoBandTop1_Start();
AutoBandTop1_SyncStart();
wk_delay_ms(50);
/* 音师:前奏起始 = 当前调一级和弦第一把位(index 1 + maj,再经移调) */
if (is_preamble)
{
KEY_ID_1629 = 1;
chord_type_index_map[1].type = 0;
}
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);
}
} }
} }
else else

View File

@ -214,6 +214,8 @@ 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 MasterVolume_Reapply(void);
/* 尾奏起奏:ADC 尾奏键与万能第4段落键共用 */
void AutoBand_StartOutro(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);

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) 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) if(mGuiData[ID].Current != value)
{ {
mGuiData[ID].Current = value; mGuiData[ID].Current = value;