diff --git a/Global/Global.c b/Global/Global.c index 1b177cb..78e2925 100644 --- a/Global/Global.c +++ b/Global/Global.c @@ -693,20 +693,27 @@ void TM1629_Handle(uint8_t key) switch(key) { - case 0: + case 0: PressFlag = 0; - if(/*StartFlag &&*/ mGuiData[GUI_TAB_INDEX].Current == 0) + if(mGuiData[GUI_TAB_INDEX].Current == 2) + { + /* 普通:松手立即结束当前和弦伴奏 */ + KEY_ID_1629 = 0; + if (StartFlag) + Stop_AutoBand(); + } + else if(mGuiData[GUI_TAB_INDEX].Current == 0) { //StartFlag = 0; //tick_ever_positive = false; //osTimerStart(Delay_stop_timer,1000); rt_timer_start(OutTime_Stop_timer); - } + } break; case 22:Tap_to_Speed(); break; case 23:Stop_AutoBand(); break; - default: // 1 - 21 - if (key >= 1 && key <= 21) + default: // 1 - 21 + if (key >= 1 && key <= 21) { if(mGuiData[GUI_TAB_INDEX].Current == 0) { @@ -714,6 +721,11 @@ void TM1629_Handle(uint8_t key) rt_timer_stop(OutTime_Stop_timer); //osTimerStop(Delay_stop_timer); } + else if(mGuiData[GUI_TAB_INDEX].Current == 2) + { + /* 普通:按住指板,等待拨片起奏当前和弦 */ + PressFlag = 1; + } uint8_t group = (key - 1) / 3; /* 1~3→0, 4~6→1, ..., 19~21→6 */ KEY_ID_1629 = key; MIDI = (STRING_MIDI *)Chord_Midi_Table[group]; @@ -802,8 +814,10 @@ void Pick_Handle() uint8_t note_cnt = 0; uint8_t chord_id = KEY_ID_1629; - /* 左手未触发和弦板(或落在拍速/停止键)时:拨片默认发当前调一级大和弦伴奏 */ - if (chord_id == 0 || chord_id == 22 || chord_id == 23) + /* 左手未触发和弦板(或落在拍速/停止键)时:拨片默认发当前调一级大和弦伴奏; + * 普通模式除外——必须左手按住指板再拨,不做一级兜底 */ + if (mGuiData[GUI_TAB_INDEX].Current != 2 && + (chord_id == 0 || chord_id == 22 || chord_id == 23)) { KEY_ID_1629 = 1; chord_type_index_map[1].type = 0; @@ -848,21 +862,20 @@ void Pick_Handle() break; case 2: - /* 普通:节奏/本地曲目均用 StartWithNote;切库后允许再次拨片起奏 */ - if (StartFlag == 0 || mGuiData[GUI_AUTOBAND_SW].Current) - { - StartFlag = 1; - AutoBandTop1_Stop(); - AutoBandTop1_SetLoopMode(0,1); - AutoBandTop1_SetRunVar(mGuiData[GUI_PLAY_SECTION].Current); - /* 起调必须用 0x3C+移调;勿用和弦音区 MIDI(如 48),否则本地曲目起奏异常 */ - midi = 0x3C + mGuiData[GUI_TRANSPOSE].Current; - AutoBandTop1_StartWithNote(midi); - AutoBandTop1_StartWithNotes(midi_note_buff, note_cnt); - if (mGuiData[GUI_AUTOBAND_SW].Current) - LOG_I("pick", "local/normal root=%u name=%s", midi, - AutoBandTop1_GetPresetName() ? AutoBandTop1_GetPresetName() : "?"); - } + /* 普通:左手按住指板 + 拨片起奏当前和弦;松手由 TM1629 停 */ + if (PressFlag == 0 || chord_id == 0 || chord_id > 21) + break; /* 未按指板:不响、不兜底一级 */ + StartFlag = 1; + AutoBandTop1_Stop(); + AutoBandTop1_SetLoopMode(0,1); + AutoBandTop1_SetRunVar(mGuiData[GUI_PLAY_SECTION].Current); + /* 起调必须用 0x3C+移调;勿用和弦音区 MIDI(如 48),否则本地曲目起奏异常 */ + midi = 0x3C + mGuiData[GUI_TRANSPOSE].Current; + AutoBandTop1_StartWithNote(midi); + AutoBandTop1_StartWithNotes(midi_note_buff, note_cnt); + if (mGuiData[GUI_AUTOBAND_SW].Current) + LOG_I("pick", "local/normal root=%u name=%s", midi, + AutoBandTop1_GetPresetName() ? AutoBandTop1_GetPresetName() : "?"); break; case 1: