125 lines
3.5 KiB
C
125 lines
3.5 KiB
C
|
|
/*
|
|||
|
|
* 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>??????
|
|||
|
|
//在哪里调用这些函数?
|
|||
|
|
|