From 75ee80722c845648a9a10584f7ccd4b705df0a4c Mon Sep 17 00:00:00 2001 From: yuquanjun Date: Thu, 8 Oct 2026 16:22:42 +0800 Subject: [PATCH] fix(midi): map concert steel to Bank1 program 24 Bump firmware to 0.2.44 so slot 1 stays Bank1 program 24 and slot 2 stays program 25. Rhythm presets no longer replace the string voice on channel 0. Co-authored-by: Cursor --- Global/Global.c | 4 ++-- MyCode/App_Auto.c | 14 ++++++++++++-- driver/drv_nvm.c | 2 +- midi/midi_tables.c | 2 +- midi/midi_tables.h | 2 +- tools/gen_sysset_font.py | 4 ++-- tools/publish_k1_release.py | 2 +- 7 files changed, 20 insertions(+), 10 deletions(-) diff --git a/Global/Global.c b/Global/Global.c index 57b6dfe..1ba61db 100644 --- a/Global/Global.c +++ b/Global/Global.c @@ -16,7 +16,7 @@ GUI_SWITCH mGuiData[] = { { 0, 0, 11, GUI_TRANSPOSE}, // 0 { 78, 40, 260, GUI_SPEED}, // 1 { 0, 0, 1, GUI_MODE_PARAM}, // 2 ?? �Զ����࿪�� 0=�� 1=�� - { TIMBRE_BOOT_SLOT, 0, 4, GUI_TIMBRE_SELECT}, // 3 显示第 1 项,Bank1 Program 24(音色表 25 号) + { TIMBRE_BOOT_SLOT, 0, 4, GUI_TIMBRE_SELECT}, // 3 显示第 1 项,Bank1 Program 24 { 0, 0, 3, GUI_PLAY_SECTION}, // 4 { 0, 0, 3, GUI_TAB_INDEX}, // 5 { 0, 0, 1, GUI_AUTOBAND_SW}, // 6 ?? �Զ����࿪�� 0=�� 1=�� @@ -111,7 +111,7 @@ int16_t MIC_VOL_MAP[11]= {-9000,-7000,-5000,-3000,-1000,1000,3000,5000,7000,9000 uint8_t TOUCH_AREA_NUM = (sizeof(Touch_Areas)/sizeof(Touch_AreaTypeDef)); -const uint8_t Version[3] = {0,2,43}; /* major.minor.patch — 0.2.43: 开机弦音色显示第 1 项 / Bank1 Program 24 */ +const uint8_t Version[3] = {0,2,44}; /* major.minor.patch — 0.2.44: 音乐会钢弦 Bank1/24,经典钢弦 Bank1/25 */ uint8_t Led = 8; bool PressFlag = 0; diff --git a/MyCode/App_Auto.c b/MyCode/App_Auto.c index 16885b4..be229fc 100644 --- a/MyCode/App_Auto.c +++ b/MyCode/App_Auto.c @@ -376,11 +376,21 @@ static void Func_CallBack_ProgramChange(int channel, int program) { MidiFifoItem_t midimsg; uint8_t ch = (uint8_t)(channel & 0x0F); + uint8_t bank = MIDI_BANK_ACCOMP; + /* 通道 0 是硅胶弦。节奏预设常在这里放钢琴(Program 0),会盖掉弦音色。 */ + if (ch == 0) + { + uint8_t slot = mGuiData[GUI_TIMBRE_SELECT].Current; + if (slot > 4u) + slot = 0; + bank = MIDI_BANK_STRING; + program = Timbre_index[slot]; + } LOG_I("REG", "pc ch%u prog=%d", (unsigned)channel, program); - /* 双音色库:伴奏一律先切 Bank0(CC0 MSB=0, CC32 LSB=0)再 PC */ + /* 伴奏走 Bank0;弦音色走 Bank1。先 Bank Select 再 PC */ midimsg.msg[0] = 0xb0 | ch; midimsg.msg[1] = 0x00; /* CC0 Bank MSB */ - midimsg.msg[2] = MIDI_BANK_ACCOMP; + midimsg.msg[2] = bank; midimsg.msglen = 3; mymidififo_InQueue(&m_MidiSendFifo,&midimsg); midimsg.msg[1] = 0x20; /* CC32 Bank LSB */ diff --git a/driver/drv_nvm.c b/driver/drv_nvm.c index 742ef1f..be66753 100644 --- a/driver/drv_nvm.c +++ b/driver/drv_nvm.c @@ -216,7 +216,7 @@ void drv_nvm_load_default_calibration_static_value(NvmParam_Type * pData, uint8 pData->param.UsbMode = NVM_USB_MIDI; } mGuiData[GUI_SPEED].Current = pData->param.BPM; - /* 弦音色不跨开关机记忆,冷启动也显示第 1 项,Bank1 Program 24(音色表 25 号) */ + /* 弦音色不跨开关机记忆,冷启动显示第 1 项,Bank1 Program 24 */ pData->param.Timbre = TIMBRE_BOOT_SLOT; mGuiData[GUI_TIMBRE_SELECT].Current = pData->param.Timbre; mGuiData[GUI_TRANSPOSE].Current = pData->param.Transpose; diff --git a/midi/midi_tables.c b/midi/midi_tables.c index 30f59b3..6655983 100644 --- a/midi/midi_tables.c +++ b/midi/midi_tables.c @@ -220,7 +220,7 @@ const STRING_MIDI *Chord_Midi_Table[7] = const STRING_MIDI *OrganChord_Midi_Table[7] = { OrganMIDI_1,OrganMIDI_2,OrganMIDI_3,OrganMIDI_4,OrganMIDI_5,OrganMIDI_6, OrganMIDI_7 }; -/* UI槽位0~4 → MIDI Program Change(Bank1):24音乐会钢弦 / 25经典钢弦 / 27清音 / 30失真 / 33电贝司 */ +/* UI槽位0~4 → Bank1 Program:24音乐会钢弦 / 25经典钢弦 / 27清音 / 30失真 / 33电贝司 */ const uint8_t Timbre_index[5] = {0x18, 0x19, 0x1B, 0x1E, 0x21}; diff --git a/midi/midi_tables.h b/midi/midi_tables.h index bd4ed93..e045395 100644 --- a/midi/midi_tables.h +++ b/midi/midi_tables.h @@ -49,7 +49,7 @@ extern const STRING_MIDI OrganMIDI_7[]; extern const STRING_MIDI *Chord_Midi_Table[7]; extern const STRING_MIDI *OrganChord_Midi_Table[7]; extern const uint8_t Timbre_index[5]; -/* 开机不记忆:显示第 1 项,Bank1 Program 24(音色表 25 号)= Timbre_index[0] */ +/* 开机不记忆:显示第 1 项「音乐会钢弦吉他」= Bank1 Program 24 = Timbre_index[0] */ #define TIMBRE_BOOT_SLOT 0u /* 当前使用的 MIDI 音符 */ diff --git a/tools/gen_sysset_font.py b/tools/gen_sysset_font.py index dd83c78..7329295 100644 --- a/tools/gen_sysset_font.py +++ b/tools/gen_sysset_font.py @@ -194,7 +194,7 @@ def main(): raise SystemExit( "USB row overflow: label ends %d, left arrow at %d" % (label_end, tril_x) ) - ver_w = text_w("0.2.43", glyphs) + ver_w = text_w("0.2.44", glyphs) gh = glyphs["0"][0].size[1] pill_h = gh + 8 pill_w = ver_w + 18 @@ -377,7 +377,7 @@ def preview(pics, glyphs, back, back_xy, chev, chev_xy, tri_l, tl, tri_r, tr, paste(canvas, tri_l, tl[0], row_y + (tl[1] - (CARD_Y0 + CARD_PITCH))) paste(canvas, tri_r, tr[0], row_y + (tr[1] - (CARD_Y0 + CARD_PITCH))) fill_round(canvas, CARD_X + pill_dx, CARD_Y0 + pill_dy, pill_w, pill_h, 6, (0, 8, 19)) - ver = "0.2.43" + ver = "0.2.44" tw = text_w(ver, glyphs) gh = glyphs["0"][0].size[1] draw_text(canvas, CARD_X + pill_dx + (pill_w - tw) // 2, diff --git a/tools/publish_k1_release.py b/tools/publish_k1_release.py index ceca63c..dc267f3 100644 --- a/tools/publish_k1_release.py +++ b/tools/publish_k1_release.py @@ -38,7 +38,7 @@ TONE_HDR = PROJ / "project" / "inc" / "ExtFlash_Tone_Addr.h" IAP_DIR = REPO / "升级" / "MCU主控升级" OUT_ROOT = REPO / "tools" / "out" -FW_VER = "0.2.43" +FW_VER = "0.2.44" UI0902_RES_BASE = 0x00100000 BOOT_FLASH_ADDR = 0x08000000 APP_FLASH_ADDR = 0x08008000