K1Guitar/MyCode/App_Auto.c

125 lines
3.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* App_Auto.c
*
* Created on: Apr 16, 2026
* Author: monosail
*/
#include "autobandtop1.h"
#include <stdint.h>
#include "output2.bin.h"
#include "mymidififo1.h"
#include <stdlib.h>
#include "includes.h"
MidiFifoSeq_t m_MidiSendFifo;
#define PRESET_BUFFER_SIZE (1024*20)
static int m_presetCount = 0;
static uint8_t pStoreBuffer[PRESET_BUFFER_SIZE];
//static uint8_t* pStoreBuffer;
#define DEFAULT_TEMPO 100
static void Func_CallBack_ProgramChange(int channel, int program)
{
MidiFifoItem_t midimsg;
midimsg.msg[0] = 0xc0 | channel;
midimsg.msg[1] = program;
midimsg.msg[2] = 0;
midimsg.msglen = 2;
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
}
static void Func_CallBack_NoteOff(int channel,int key)
{
MidiFifoItem_t midimsg;
midimsg.msg[0] = 0x80 | channel;
midimsg.msg[1] = key;
midimsg.msg[2] = 0;
midimsg.msglen = 3;
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
}
static void Func_CallBack_NoteOn(int channel,int key,int vel)
{
MidiFifoItem_t midimsg;
midimsg.msg[0] = 0x90 | channel;
midimsg.msg[1] = key;
midimsg.msg[2] = vel;
midimsg.msglen = 3;
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
}
static void Func_CallBack_CC(int channel,int cc,int value)
{
if(cc == 7|| cc == 11)
{
return;
}
MidiFifoItem_t midimsg;
midimsg.msg[0] = 0xb0 | channel;
midimsg.msg[1] = cc;
midimsg.msg[2] = value;
midimsg.msglen = 3;
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
}
static void Func_CallBack_PitchWheel(int channel,int cc,int value)
{
MidiFifoItem_t midimsg;
midimsg.msg[0] = 0xe0 | channel;
midimsg.msg[1] = cc;
midimsg.msg[2] = value;
midimsg.msglen = 3;
mymidififo_InQueue(&m_MidiSendFifo,&midimsg);
}
static int Func_CallBack_ReadFlash(int address,int length,uint8_t* pOutput)
{
W25Q128_Read(pOutput, (uint32_t)ADDRESS+address, length);
return 0;
}
//
void App_Auto_Init(void)
{
AutoBandTop1_SetPresetStoreBuffer(pStoreBuffer,PRESET_BUFFER_SIZE);
AutoBandTop1_Init();
AutoBandTop1_RegisterCallBack_NoteOn(Func_CallBack_NoteOn);
AutoBandTop1_RegisterCallBack_NoteOff(Func_CallBack_NoteOff);
AutoBandTop1_RegisterCallBack_ProgChange(Func_CallBack_ProgramChange);
AutoBandTop1_RegisterCallBack_CC(Func_CallBack_CC);
AutoBandTop1_RegisterCallBack_PitchWheel(Func_CallBack_PitchWheel);
AutoBandTop1_RegisterReadFlashCallback(Func_CallBack_ReadFlash);
m_presetCount = AutoBandTop1_GetPresetItemCount();
int ret = AutoBandTop1_LoadPresetItemFromFlash(0);
if(ret != 0)
{
for(;;);
}
AutoBandTop1_ChangeBPM(mGuiData[1].Current);
}
//void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
//{
// if (htim == (&htim6)) {
// // 1ms timer
// AutoBandTop1_Metronome_External_1msTick();
// }
//}
// 接下来的<E69DA5>??????题是如何测试<E6B58B>??????
// <20>??????以调<E4BBA5>??????
//void AutoBandTop1_Start(void); //<2F>??????动节<E58AA8>??????
//void AutoBandTop1_Stop(void); //停<>??伴<>??
//void AutoBandTop1_SyncStart(void);//同<>?<3F><EFBFBD>??????
//void AutoBandTop1_SetRunVar(int varIndex);//设置变<E7BDAE>?<3F>0-3<>??????
//void AutoBandTop1_Preamble(int index);//设置前<E7BDAE>?<3F>0-3<>??????
//void AutoBandTop1_Postamble(int index);//位置尾<E7BDAE>?<3F>0-3<>??????
//void AutoBandTop1_Fillin(void);//触发一<E58F91>??????插入
//如果<E5A682>??????同<>?<3F><EFBFBD>??????需要再调用void AutoBandTop1_Note_On(int32_t key,int32_t vel);来输入一<E585A5>??????音<>?<3F><EFBC88>?<3F>C3<EFBC89>??????定和弦根<E5BCA6>??????
//在哪里调用这些函数?