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