merge: feature_bank dual MIDI bank + toneRes 0916_bank into develop
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
commit
30af9c75ed
|
|
@ -101,8 +101,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,14}; /* major.minor.patch — 0.2.14: local song mid-play no Stop+Start; power-on reset KEY_ID */
|
||||
|
||||
const uint8_t Version[3] = {0,2,14}; /* major.minor.patch — 0.2.14: local song mid-play fix + power-on KEY_ID reset + dual MIDI bank (merge) */
|
||||
uint8_t Led = 8;
|
||||
bool PressFlag = 0;
|
||||
|
||||
|
|
|
|||
|
|
@ -329,9 +329,19 @@ static int App_Auto_MapNoteOn(int channel, int key)
|
|||
static void Func_CallBack_ProgramChange(int channel, int program)
|
||||
{
|
||||
MidiFifoItem_t midimsg;
|
||||
uint8_t ch = (uint8_t)(channel & 0x0F);
|
||||
LOG_I("REG", "pc ch%u prog=%d", (unsigned)channel, program);
|
||||
midimsg.msg[0] = 0xc0 | (channel & 0x0F);
|
||||
midimsg.msg[1] = program;
|
||||
/* 双音色库:伴奏一律先切 Bank0(CC0 MSB=0, CC32 LSB=0)再 PC */
|
||||
midimsg.msg[0] = 0xb0 | ch;
|
||||
midimsg.msg[1] = 0x00; /* CC0 Bank MSB */
|
||||
midimsg.msg[2] = MIDI_BANK_ACCOMP;
|
||||
midimsg.msglen = 3;
|
||||
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
|
||||
midimsg.msg[1] = 0x20; /* CC32 Bank LSB */
|
||||
midimsg.msg[2] = 0;
|
||||
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
|
||||
midimsg.msg[0] = 0xc0 | ch;
|
||||
midimsg.msg[1] = (uint8_t)program;
|
||||
midimsg.msg[2] = 0;
|
||||
midimsg.msglen = 2;
|
||||
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
|
||||
|
|
|
|||
|
|
@ -85,7 +85,14 @@ extern int8_t delta;
|
|||
extern STRING_MIDI USE_MIDI;
|
||||
void LoadConfig(void)
|
||||
{
|
||||
SendProgramChangeMidiEvent(0,Timbre_index[mGuiData[GUI_TIMBRE_SELECT].Current]);
|
||||
uint8_t ch;
|
||||
|
||||
/* 双音色库:主弦走 Bank1,先选 bank 再 PC */
|
||||
SendProgramWithBankMidiEvent(0, MIDI_BANK_STRING, Timbre_index[mGuiData[GUI_TIMBRE_SELECT].Current]);
|
||||
|
||||
/* 伴奏通道预置 Bank0,避免上电后首个 PC 前误用残留 bank */
|
||||
for (ch = 1; ch <= 15; ch++)
|
||||
SendBankChangeMidiEvent(ch, MIDI_BANK_ACCOMP);
|
||||
|
||||
uint8_t val_127 = (faders[0].val * 127) / 10;
|
||||
SendVolumeChangeMidiEvent(1,val_127);
|
||||
|
|
|
|||
|
|
@ -942,7 +942,8 @@ void label_TimbreSelece_ui(const LEBEL_UI *UI, GUI_SWITCH * Group)
|
|||
switch(Group->Id)
|
||||
{
|
||||
case GUI_TIMBRE_SELECT:
|
||||
SendProgramChangeMidiEvent(0,Timbre_index[Group->Current]);
|
||||
/* 双音色库:主弦走 Bank1,先选 bank 再 PC */
|
||||
SendProgramWithBankMidiEvent(0, MIDI_BANK_STRING, Timbre_index[Group->Current]);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -27,10 +27,21 @@ void SendVolumeChangeMidiEvent(uint8_t channel,uint8_t CC)
|
|||
SendMidiDataToDreamDSP(midibuff,3);
|
||||
}
|
||||
|
||||
void SendBankChangeMidiEvent(uint8_t CC)
|
||||
/* Bank Select:CC0(MSB)=bank,CC32(LSB)=0。Dream 双音色库:0=伴奏,1=主弦 */
|
||||
void SendBankChangeMidiEvent(uint8_t channel, uint8_t bank)
|
||||
{
|
||||
uint8_t midibuff[3] = {0xB0 ,0x00, CC };
|
||||
uint8_t midibuff[3] = {0xB0|(channel & 0x0F) ,0x00, bank };
|
||||
SendMidiDataToDreamDSP(midibuff,3);
|
||||
midibuff[1] = 0x20; /* CC32 Bank LSB */
|
||||
midibuff[2] = 0;
|
||||
SendMidiDataToDreamDSP(midibuff,3);
|
||||
}
|
||||
|
||||
/* 先选 Bank 再 Program Change,避免漏发 Bank Select 落到错误音色库 */
|
||||
void SendProgramWithBankMidiEvent(uint8_t channel, uint8_t bank, uint8_t program)
|
||||
{
|
||||
SendBankChangeMidiEvent(channel, bank);
|
||||
SendProgramChangeMidiEvent(channel, program);
|
||||
}
|
||||
|
||||
void SendMidiDataToDreamDSP(uint8_t* buff, uint16_t cnt)
|
||||
|
|
|
|||
|
|
@ -2,11 +2,16 @@
|
|||
#define __MIDI_SEND_H__
|
||||
|
||||
|
||||
/* Dream 音色库 Bank:0=自动伴奏,1=主音色/弦 */
|
||||
#define MIDI_BANK_ACCOMP 0
|
||||
#define MIDI_BANK_STRING 1
|
||||
|
||||
/* MIDI 发送函数 */
|
||||
void SendNoteOnMidiEvent(uint8_t Key, uint8_t OnVal);
|
||||
void SendNoteOffMidiEvent(uint8_t Key, uint8_t OffVal);
|
||||
void SendProgramChangeMidiEvent(uint8_t channel, uint8_t CC);
|
||||
void SendBankChangeMidiEvent(uint8_t CC);
|
||||
void SendBankChangeMidiEvent(uint8_t channel, uint8_t bank);
|
||||
void SendProgramWithBankMidiEvent(uint8_t channel, uint8_t bank, uint8_t program);
|
||||
void SendVolumeChangeMidiEvent(uint8_t channel, uint8_t CC);
|
||||
void SendMidiDataToDreamDSP(uint8_t* buff, uint16_t cnt);
|
||||
void DefaultTask_SendMsg(uint16_t Data1, uint16_t Data2, uint16_t Data3, uint16_t Data4);
|
||||
|
|
|
|||
|
|
@ -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:24尼龙 / 25钢弦 / 27清音 / 30失真 / 33 Finger贝斯 */
|
||||
/* UI槽位0~4 → MIDI Program Change(Bank1):24尼龙 / 25钢弦 / 27清音 / 30失真 / 33电贝司 */
|
||||
const uint8_t Timbre_index[5] = {0x18, 0x19, 0x1B, 0x1E, 0x21};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -4,10 +4,10 @@
|
|||
/* Auto-generated by tools/pack_extflash_tone_0903.py — do not hand-edit. */
|
||||
/* W25Q128 absolute offsets. Boot logo display uses UI0902_BOOT_LOGO_ADDR. */
|
||||
/* Tone resource pack has no in-bin version field; release tag = EXTFLASH_TONE_RES_VER. */
|
||||
#define EXTFLASH_TONE_RES_VER "0915"
|
||||
#define EXTFLASH_TONE_RES_VER "0916"
|
||||
#define EXTFLASH_TONE_RES_VER_MAJOR 0
|
||||
#define EXTFLASH_TONE_RES_VER_MINOR 9
|
||||
#define EXTFLASH_TONE_RES_VER_PATCH 15
|
||||
#define EXTFLASH_TONE_RES_VER_PATCH 16
|
||||
|
||||
#define EXTFLASH_LOGO_ADDR 0x00000000UL
|
||||
#define EXTFLASH_LOGO_SIZE 52080UL
|
||||
|
|
@ -18,13 +18,13 @@
|
|||
#define EXTFLASH_CHARGING_H 190
|
||||
|
||||
#define EXTFLASH_BIN1_RHYTHM_ADDR 0x0001B8F0UL
|
||||
#define EXTFLASH_BIN1_RHYTHM_SIZE 506071UL
|
||||
#define EXTFLASH_BIN1_RHYTHM_SIZE 506746UL
|
||||
|
||||
#define EXTFLASH_BIN2_SONG_HAITIAN_ADDR 0x0009D07DUL
|
||||
#define EXTFLASH_BIN2_SONG_HAITIAN_SIZE 41914UL
|
||||
|
||||
#define EXTFLASH_BIN3_UNIVERSAL_ADDR 0x000A7437UL
|
||||
#define EXTFLASH_BIN3_UNIVERSAL_SIZE 33815UL
|
||||
#define EXTFLASH_BIN3_UNIVERSAL_SIZE 33945UL
|
||||
|
||||
/* Convenience aliases used by UI ADDRESS */
|
||||
#define FLASH_ADDR_MODE_NORMAL EXTFLASH_BIN1_RHYTHM_ADDR /* 普通 */
|
||||
|
|
@ -35,8 +35,8 @@
|
|||
/* Legacy AutoBand bank — not repacked; may overlap 2.bin — do not enable until remapped */
|
||||
#define FLASH_ADDR_AUTOBAND_LEGACY 0x0009EB5FUL
|
||||
|
||||
#define EXTFLASH_TONE_PACK_END 0x000AF84EUL
|
||||
#define EXTFLASH_TONE_PACK_SIZE 718926UL
|
||||
#define EXTFLASH_TONE_PACK_END 0x000AF8D0UL
|
||||
#define EXTFLASH_TONE_PACK_SIZE 719056UL
|
||||
#define UI0902_RES_BASE_SAFE_GAP (0x00100000UL - EXTFLASH_TONE_PACK_END)
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -1,16 +1,16 @@
|
|||
/* Auto-generated by tools/gen_git_user_fw_ver.py — do not edit.
|
||||
* git HEAD (dirty): 8a8c7ec377314f1b712d58afbedeb0c631dfaba5
|
||||
* git HEAD (dirty): merge-in-progress
|
||||
* branch: develop → develop
|
||||
* 01 0C wire: develop_8a8c7e*
|
||||
* 01 0C wire: develop_merge*
|
||||
*/
|
||||
#ifndef GIT_USER_FW_VER_H
|
||||
#define GIT_USER_FW_VER_H
|
||||
|
||||
#define GIT_COMMIT_ID_FULL "8a8c7ec377314f1b712d58afbedeb0c631dfaba5"
|
||||
#define GIT_COMMIT_ID_FULL "0000000000000000000000000000000000000000"
|
||||
#define GIT_BRANCH_NAME "develop"
|
||||
#define GIT_COMMIT_SHORT6 "8a8c7e"
|
||||
#define GIT_COMMIT_SHORT6 "000000"
|
||||
#define GIT_DIRTY (1)
|
||||
#define GIT_BUILD_ID "develop_8a8c7e*"
|
||||
#define GIT_BUILD_ID "develop_000000*"
|
||||
#define GIT_BUILD_ID_LEN 15u
|
||||
|
||||
#endif /* GIT_USER_FW_VER_H */
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""Pack external W25Q128 tone/logo image for K1 (0915).
|
||||
"""Pack external W25Q128 tone/logo image for K1 (0916_bank).
|
||||
|
||||
Layout (absolute W25Q128 offsets):
|
||||
0x00000000 logo.bin (legacy pad; boot UI uses UI0902 full-screen logo)
|
||||
|
|
@ -10,10 +10,10 @@ Layout (absolute W25Q128 offsets):
|
|||
after 2.bin 3.bin 万能模式(随 2.bin 长度后移;写入 ExtFlash_Tone_Addr.h)
|
||||
|
||||
Outputs:
|
||||
tools/out/extflash_tone_0915.bin / .res
|
||||
tools/out/extflash_ALL_tone0915_ui0902.res
|
||||
tools/out/extflash_tone_0916.bin / .res
|
||||
tools/out/extflash_ALL_tone0916_ui0902.res
|
||||
project/inc/ExtFlash_Tone_Addr.h
|
||||
Doc/音色文件/0915/FLASH_MAP.txt
|
||||
Doc/音色文件/0916_bank/FLASH_MAP.txt
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
|
|
@ -25,7 +25,7 @@ from pathlib import Path
|
|||
ROOT = Path(__file__).resolve().parents[1] # firmware project root
|
||||
REPO = ROOT.parent.parent # 一诺国际吉他
|
||||
OUT_DIR = ROOT / "tools" / "out"
|
||||
TONE_TAG = "0915"
|
||||
TONE_TAG = "0916"
|
||||
OUT_BIN = OUT_DIR / f"extflash_tone_{TONE_TAG}.bin"
|
||||
OUT_RES = OUT_DIR / f"extflash_tone_{TONE_TAG}.res"
|
||||
OUT_ALL_RES = OUT_DIR / f"extflash_ALL_tone{TONE_TAG}_ui0902.res"
|
||||
|
|
@ -34,11 +34,10 @@ OUT_BIN_LEGACY = OUT_DIR / "extflash_tone_0903.bin"
|
|||
OUT_RES_LEGACY = OUT_DIR / "extflash_tone_0903.res"
|
||||
OUT_ALL_LEGACY = OUT_DIR / "extflash_ALL_tone0903_ui0902.res"
|
||||
OUT_HDR = ROOT / "project" / "inc" / "ExtFlash_Tone_Addr.h"
|
||||
OUT_MAP = REPO / "Doc" / "音色文件" / TONE_TAG / "FLASH_MAP.txt"
|
||||
TONE_DIR = REPO / "Doc" / "音色文件" / "0916_bank"
|
||||
OUT_MAP = TONE_DIR / "FLASH_MAP.txt"
|
||||
UI0902_BIN = OUT_DIR / "ui0902_res.bin"
|
||||
|
||||
TONE_DIR = REPO / "Doc" / "音色文件" / TONE_TAG
|
||||
|
||||
OFF_LOGO = 0x00000000
|
||||
OFF_CHARGING = 0x0000CB70
|
||||
OFF_BIN1 = 0x0001B8F0
|
||||
|
|
@ -164,7 +163,7 @@ def main() -> None:
|
|||
#define EXTFLASH_TONE_RES_VER "{TONE_TAG}"
|
||||
#define EXTFLASH_TONE_RES_VER_MAJOR 0
|
||||
#define EXTFLASH_TONE_RES_VER_MINOR 9
|
||||
#define EXTFLASH_TONE_RES_VER_PATCH 15
|
||||
#define EXTFLASH_TONE_RES_VER_PATCH 16
|
||||
|
||||
#define EXTFLASH_LOGO_ADDR 0x{by_name['LOGO'][1]:08X}UL
|
||||
#define EXTFLASH_LOGO_SIZE {by_name['LOGO'][2]}UL
|
||||
|
|
|
|||
|
|
@ -30,10 +30,10 @@ BOOT_BIN = (
|
|||
/ "Exe"
|
||||
/ "AT32F403ARCT7_BOOT.bin"
|
||||
)
|
||||
TONE_RES_VER = "0915"
|
||||
TONE_RES_VER = "0916"
|
||||
TONE_BIN = PROJ / "tools" / "out" / f"extflash_tone_{TONE_RES_VER}.bin"
|
||||
UI0902_BIN = PROJ / "tools" / "out" / "ui0902_res.bin"
|
||||
MAP_TXT = REPO / "Doc" / "音色文件" / TONE_RES_VER / "FLASH_MAP.txt"
|
||||
MAP_TXT = REPO / "Doc" / "音色文件" / "0916_bank" / "FLASH_MAP.txt"
|
||||
TONE_HDR = PROJ / "project" / "inc" / "ExtFlash_Tone_Addr.h"
|
||||
IAP_DIR = REPO / "升级" / "MCU主控升级"
|
||||
OUT_ROOT = REPO / "tools" / "out"
|
||||
|
|
@ -91,7 +91,7 @@ def verify_tone_layout(tone: bytes, check_sources: bool = True) -> None:
|
|||
"""Refuse to ship ALL.res if logo/charg/1/2/3.bin missing, shifted, or mismatch."""
|
||||
dab = b"\xABDAB"
|
||||
addrs = read_tone_addrs()
|
||||
tone_dir = REPO / "Doc" / "音色文件" / TONE_RES_VER
|
||||
tone_dir = REPO / "Doc" / "音色文件" / "0916_bank"
|
||||
ziliao = None
|
||||
for p in REPO.iterdir():
|
||||
if p.is_dir() and (p / "logo.bin").is_file() and (p / "Charg.bin").is_file():
|
||||
|
|
|
|||
Loading…
Reference in New Issue