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:
parent
1cf6562236
commit
24261942d8
|
|
@ -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,14 +520,20 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
|
||||||
if(key_toggle[key] == 1)
|
if(key_toggle[key] == 1)
|
||||||
{
|
{
|
||||||
//ResetAutoPowerCount();
|
//ResetAutoPowerCount();
|
||||||
|
if(key == 1)
|
||||||
|
{
|
||||||
|
/* 尾奏:与万能模式第4键共用同一起奏路径 */
|
||||||
|
AutoBand_StartOutro();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
switch(key)
|
switch(key)
|
||||||
{
|
{
|
||||||
case 3: AutoBandTop1_Preamble(0); is_preamble = 1; break;
|
case 3: AutoBandTop1_Preamble(0); is_preamble = 1; break;
|
||||||
case 0: AutoBandTop1_Preamble(1); 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;
|
case 2: AutoBandTop1_Postamble(1); break;
|
||||||
}
|
}
|
||||||
/* 前奏/尾奏起奏前补发主音量,保证与图标一致 */
|
/* 前奏/断奏起奏前补发主音量,保证与图标一致 */
|
||||||
MasterVolume_Reapply();
|
MasterVolume_Reapply();
|
||||||
//AutoBandTop1_Start();
|
//AutoBandTop1_Start();
|
||||||
AutoBandTop1_SyncStart();
|
AutoBandTop1_SyncStart();
|
||||||
|
|
@ -521,6 +550,7 @@ void ADC_IN1_KEY_Handle(uint8_t key,bool on)
|
||||||
AutoBandTop1_Note_On(midi_note_buff[i],0x50);
|
AutoBandTop1_Note_On(midi_note_buff[i],0x50);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Stop_AutoBand();
|
Stop_AutoBand();
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue