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 <cursoragent@cursor.com>
This commit is contained in:
yuquanjun 2026-10-08 16:22:42 +08:00
parent 11ddab46f5
commit 75ee80722c
7 changed files with 20 additions and 10 deletions

View File

@ -16,7 +16,7 @@ GUI_SWITCH mGuiData[] = {
{ 0, 0, 11, GUI_TRANSPOSE}, // 0 { 0, 0, 11, GUI_TRANSPOSE}, // 0
{ 78, 40, 260, GUI_SPEED}, // 1 { 78, 40, 260, GUI_SPEED}, // 1
{ 0, 0, 1, GUI_MODE_PARAM}, // 2 ?? <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>࿪<EFBFBD><E0BFAA> 0=<3D><> 1=<3D><> { 0, 0, 1, GUI_MODE_PARAM}, // 2 ?? <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>࿪<EFBFBD><E0BFAA> 0=<3D><> 1=<3D><>
{ 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_PLAY_SECTION}, // 4
{ 0, 0, 3, GUI_TAB_INDEX}, // 5 { 0, 0, 3, GUI_TAB_INDEX}, // 5
{ 0, 0, 1, GUI_AUTOBAND_SW}, // 6 ?? <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>࿪<EFBFBD><E0BFAA> 0=<3D><> 1=<3D><> { 0, 0, 1, GUI_AUTOBAND_SW}, // 6 ?? <20>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD>࿪<EFBFBD><E0BFAA> 0=<3D><> 1=<3D><>
@ -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)); 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; uint8_t Led = 8;
bool PressFlag = 0; bool PressFlag = 0;

View File

@ -376,11 +376,21 @@ static void Func_CallBack_ProgramChange(int channel, int program)
{ {
MidiFifoItem_t midimsg; MidiFifoItem_t midimsg;
uint8_t ch = (uint8_t)(channel & 0x0F); 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); 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[0] = 0xb0 | ch;
midimsg.msg[1] = 0x00; /* CC0 Bank MSB */ midimsg.msg[1] = 0x00; /* CC0 Bank MSB */
midimsg.msg[2] = MIDI_BANK_ACCOMP; midimsg.msg[2] = bank;
midimsg.msglen = 3; midimsg.msglen = 3;
mymidififo_InQueue(&m_MidiSendFifo,&midimsg); mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
midimsg.msg[1] = 0x20; /* CC32 Bank LSB */ midimsg.msg[1] = 0x20; /* CC32 Bank LSB */

View File

@ -216,7 +216,7 @@ void drv_nvm_load_default_calibration_static_value(NvmParam_Type * pData, uint8
pData->param.UsbMode = NVM_USB_MIDI; pData->param.UsbMode = NVM_USB_MIDI;
} }
mGuiData[GUI_SPEED].Current = pData->param.BPM; mGuiData[GUI_SPEED].Current = pData->param.BPM;
/* 弦音色不跨开关机记忆,冷启动也显示第 1 项,Bank1 Program 24(音色表 25 号) */ /* 弦音色不跨开关机记忆,冷启动显示第 1 项,Bank1 Program 24 */
pData->param.Timbre = TIMBRE_BOOT_SLOT; pData->param.Timbre = TIMBRE_BOOT_SLOT;
mGuiData[GUI_TIMBRE_SELECT].Current = pData->param.Timbre; mGuiData[GUI_TIMBRE_SELECT].Current = pData->param.Timbre;
mGuiData[GUI_TRANSPOSE].Current = pData->param.Transpose; mGuiData[GUI_TRANSPOSE].Current = pData->param.Transpose;

View File

@ -220,7 +220,7 @@ const STRING_MIDI *Chord_Midi_Table[7] =
const STRING_MIDI *OrganChord_Midi_Table[7] = const STRING_MIDI *OrganChord_Midi_Table[7] =
{ OrganMIDI_1,OrganMIDI_2,OrganMIDI_3,OrganMIDI_4,OrganMIDI_5,OrganMIDI_6, OrganMIDI_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}; const uint8_t Timbre_index[5] = {0x18, 0x19, 0x1B, 0x1E, 0x21};

View File

@ -49,7 +49,7 @@ extern const STRING_MIDI OrganMIDI_7[];
extern const STRING_MIDI *Chord_Midi_Table[7]; extern const STRING_MIDI *Chord_Midi_Table[7];
extern const STRING_MIDI *OrganChord_Midi_Table[7]; extern const STRING_MIDI *OrganChord_Midi_Table[7];
extern const uint8_t Timbre_index[5]; 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 #define TIMBRE_BOOT_SLOT 0u
/* 当前使用的 MIDI 音符 */ /* 当前使用的 MIDI 音符 */

View File

@ -194,7 +194,7 @@ def main():
raise SystemExit( raise SystemExit(
"USB row overflow: label ends %d, left arrow at %d" % (label_end, tril_x) "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] gh = glyphs["0"][0].size[1]
pill_h = gh + 8 pill_h = gh + 8
pill_w = ver_w + 18 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_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))) 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)) 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) tw = text_w(ver, glyphs)
gh = glyphs["0"][0].size[1] gh = glyphs["0"][0].size[1]
draw_text(canvas, CARD_X + pill_dx + (pill_w - tw) // 2, draw_text(canvas, CARD_X + pill_dx + (pill_w - tw) // 2,

View File

@ -38,7 +38,7 @@ TONE_HDR = PROJ / "project" / "inc" / "ExtFlash_Tone_Addr.h"
IAP_DIR = REPO / "升级" / "MCU主控升级" IAP_DIR = REPO / "升级" / "MCU主控升级"
OUT_ROOT = REPO / "tools" / "out" OUT_ROOT = REPO / "tools" / "out"
FW_VER = "0.2.43" FW_VER = "0.2.44"
UI0902_RES_BASE = 0x00100000 UI0902_RES_BASE = 0x00100000
BOOT_FLASH_ADDR = 0x08000000 BOOT_FLASH_ADDR = 0x08000000
APP_FLASH_ADDR = 0x08008000 APP_FLASH_ADDR = 0x08008000