Vincent Gauché 1 day ago committed by GitHub
commit 0a34d49975
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
  1. 10
      .gitignore
  2. 169
      src/uimenu.cpp
  3. 9
      src/uimenu.h

10
.gitignore vendored

@ -46,7 +46,15 @@ sdcard
*.swp
*.swo
.vscode/
# temporary tests
src/test/*.bin
src/test/bin
src/test/results
src/test/objects
CMSIS_5/
Synth_Dexed/
circle-stdlib/
minidexed_*
minidexed_*

@ -29,6 +29,10 @@
#include <cmath>
#include <circle/sysconfig.h>
#include <assert.h>
#include <chrono>
#include <random>
#include <dexed.h>
using namespace std;
LOGMODULE ("uimenu");
@ -85,6 +89,7 @@ const CUIMenu::TMenuItem CUIMenu::s_TGMenu[] =
{"Modulation", MenuHandler, s_ModulationMenu},
{"Channel", EditTGParameter, 0, CMiniDexed::TGParameterMIDIChannel},
{"Edit Voice", MenuHandler, s_EditVoiceMenu},
{"Random", CUIMenu::GenerateRandomPreset, nullptr, 0},
{0}
};
@ -141,6 +146,7 @@ const CUIMenu::TMenuItem CUIMenu::s_ReverbMenu[] =
{"Low pass", EditGlobalParameter, 0, CMiniDexed::ParameterReverbLowPass},
{"Diffusion", EditGlobalParameter, 0, CMiniDexed::ParameterReverbDiffusion},
{"Level", EditGlobalParameter, 0, CMiniDexed::ParameterReverbLevel},
{"Random", CUIMenu::GenerateRandomFX, nullptr, 0},
{0}
};
@ -179,31 +185,31 @@ const CUIMenu::TMenuItem CUIMenu::s_EditVoiceMenu[] =
};
const CUIMenu::TMenuItem CUIMenu::s_OperatorMenu[] =
{
{"Output Level",EditOPParameter, 0, DEXED_OP_OUTPUT_LEV},
{"Freq Coarse", EditOPParameter, 0, DEXED_OP_FREQ_COARSE},
{"Freq Fine", EditOPParameter, 0, DEXED_OP_FREQ_FINE},
{"Osc Detune", EditOPParameter, 0, DEXED_OP_OSC_DETUNE},
{"Osc Mode", EditOPParameter, 0, DEXED_OP_OSC_MODE},
{"EG Rate 1", EditOPParameter, 0, DEXED_OP_EG_R1},
{"EG Rate 2", EditOPParameter, 0, DEXED_OP_EG_R2},
{"EG Rate 3", EditOPParameter, 0, DEXED_OP_EG_R3},
{"EG Rate 4", EditOPParameter, 0, DEXED_OP_EG_R4},
{"EG Level 1", EditOPParameter, 0, DEXED_OP_EG_L1},
{"EG Level 2", EditOPParameter, 0, DEXED_OP_EG_L2},
{"EG Level 3", EditOPParameter, 0, DEXED_OP_EG_L3},
{"EG Level 4", EditOPParameter, 0, DEXED_OP_EG_L4},
{"Break Point", EditOPParameter, 0, DEXED_OP_LEV_SCL_BRK_PT},
{"L Key Depth", EditOPParameter, 0, DEXED_OP_SCL_LEFT_DEPTH},
{"R Key Depth", EditOPParameter, 0, DEXED_OP_SCL_RGHT_DEPTH},
{"L Key Scale", EditOPParameter, 0, DEXED_OP_SCL_LEFT_CURVE},
{"R Key Scale", EditOPParameter, 0, DEXED_OP_SCL_RGHT_CURVE},
{"Rate Scaling",EditOPParameter, 0, DEXED_OP_OSC_RATE_SCALE},
{"A Mod Sens.", EditOPParameter, 0, DEXED_OP_AMP_MOD_SENS},
{"K Vel. Sens.",EditOPParameter, 0, DEXED_OP_KEY_VEL_SENS},
{"Enable", EditOPParameter, 0, DEXED_OP_ENABLE},
{0}
};
{
{"Output Level", EditOPParameter, 0, DEXED_OP_OUTPUT_LEV},
{"Freq Coarse", EditOPParameter, 0, DEXED_OP_FREQ_COARSE},
{"Freq Fine", EditOPParameter, 0, DEXED_OP_FREQ_FINE},
{"Osc Detune", EditOPParameter, 0, DEXED_OP_OSC_DETUNE},
{"Osc Mode", EditOPParameter, 0, DEXED_OP_OSC_MODE},
{"EG Rate 1", EditOPParameter, 0, DEXED_OP_EG_R1},
{"EG Rate 2", EditOPParameter, 0, DEXED_OP_EG_R2},
{"EG Rate 3", EditOPParameter, 0, DEXED_OP_EG_R3},
{"EG Rate 4", EditOPParameter, 0, DEXED_OP_EG_R4},
{"EG Level 1", EditOPParameter, 0, DEXED_OP_EG_L1},
{"EG Level 2", EditOPParameter, 0, DEXED_OP_EG_L2},
{"EG Level 3", EditOPParameter, 0, DEXED_OP_EG_L3},
{"EG Level 4", EditOPParameter, 0, DEXED_OP_EG_L4},
{"Break Point", EditOPParameter, 0, DEXED_OP_LEV_SCL_BRK_PT},
{"L Key Depth", EditOPParameter, 0, DEXED_OP_SCL_LEFT_DEPTH},
{"R Key Depth", EditOPParameter, 0, DEXED_OP_SCL_RGHT_DEPTH},
{"L Key Scale", EditOPParameter, 0, DEXED_OP_SCL_LEFT_CURVE},
{"R Key Scale", EditOPParameter, 0, DEXED_OP_SCL_RGHT_CURVE},
{"Rate Scaling", EditOPParameter, 0, DEXED_OP_OSC_RATE_SCALE},
{"A Mod Sens.", EditOPParameter, 0, DEXED_OP_AMP_MOD_SENS},
{"K Vel. Sens.", EditOPParameter, 0, DEXED_OP_KEY_VEL_SENS},
{"Enable", EditOPParameter, 0, DEXED_OP_ENABLE},
{"Random", CUIMenu::GenerateRandomOperator, nullptr, 0},
{0}};
const CUIMenu::TMenuItem CUIMenu::s_SaveMenu[] =
{
@ -337,7 +343,8 @@ const CUIMenu::TMenuItem CUIMenu::s_PerformanceMenu[] =
{
{"Load", PerformanceMenu, 0, 0},
{"Save", MenuHandler, s_SaveMenu},
{"Delete", PerformanceMenu, 0, 1},
{"Delete", PerformanceMenu, 0, 1},
{"Random", CUIMenu::GenerateRandomPerformance, nullptr, 0},
{"Bank", EditPerformanceBankNumber, 0, 0},
{"PCCH", EditGlobalParameter, 0, CMiniDexed::ParameterPerformanceSelectChannel},
{0}
@ -2007,5 +2014,115 @@ void CUIMenu::EditTGParameterModulation (CUIMenu *pUIMenu, TMenuEvent Event)
pUIMenu->m_pParentMenu[pUIMenu->m_nCurrentMenuItem].Name,
Value.c_str (),
nValue > rParam.Minimum, nValue < rParam.Maximum);
}
// RANDOMIZATION
int CUIMenu::GetRandomValue(int min, int max)
{
static std::mt19937 gen(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count());
std::uniform_int_distribution<int> dice(min, max);
return dice(gen);
}
void CUIMenu::GenerateRandomOperator(CUIMenu *pUIMenu, TMenuEvent Event)
{
if (Event != TMenuEvent::MenuEventSelect)
{
return;
}
size_t nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth - 3];
size_t nOP = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth - 1];
CUIMenu::GenerateRandomOperatorTG(pUIMenu, nTG, nOP);
}
void CUIMenu::GenerateRandomOperatorTG(CUIMenu *pUIMenu, size_t nTG, size_t nOP)
{
assert(nTG < CConfig::ToneGenerators);
assert(nOP <= OPERATORS::OP6);
for (int nParam = DexedVoiceOPParameters::DEXED_OP_EG_R1; nParam <= DexedVoiceOPParameters::DEXED_OP_OSC_DETUNE; ++nParam)
{
TParameter param = CUIMenu::s_OPParameter[nParam];
uint8_t value = (uint8_t)CUIMenu::GetRandomValue(param.Minimum, param.Maximum);
pUIMenu->m_pMiniDexed->SetVoiceParameter(nParam, value, nOP, nTG);
}
}
void CUIMenu::GenerateRandomVoice(CUIMenu *pUIMenu, size_t nTG)
{
assert(nTG < CConfig::ToneGenerators);
for (size_t nOP = OPERATORS::OP1; nOP <= OPERATORS::OP6; ++nOP)
{
CUIMenu::GenerateRandomOperatorTG(pUIMenu, nTG, nOP);
}
for (int nParam = DexedVoiceParameters::DEXED_PITCH_EG_R1; nParam < DexedVoiceParameters::DEXED_NAME; ++nParam)
{
TParameter param = CUIMenu::s_VoiceParameter[nParam];
uint8_t value = (uint8_t)CUIMenu::GetRandomValue(param.Minimum, param.Maximum);
pUIMenu->m_pMiniDexed->SetVoiceParameter(nParam, value, CMiniDexed::NoOP, nTG);
}
}
void CUIMenu::GenerateRandomPreset(CUIMenu *pUIMenu, TMenuEvent Event)
{
if (Event != TMenuEvent::MenuEventSelect)
{
return;
}
size_t nTG = pUIMenu->m_nMenuStackParameter[pUIMenu->m_nCurrentMenuDepth - 1];
CUIMenu::GenerateRandomPresetTG(pUIMenu, nTG);
}
void CUIMenu::GenerateRandomPresetTG(CUIMenu *pUIMenu, size_t nTG)
{
assert(nTG < CConfig::ToneGenerators);
CUIMenu::GenerateRandomVoice(pUIMenu, nTG);
for (int nParam = CMiniDexed::TTGParameter::TGParameterVolume; nParam < CMiniDexed::TTGParameter::TGParameterUnknown; ++nParam)
{
TParameter param = CUIMenu::s_TGParameter[nParam];
uint8_t value = (uint8_t)CUIMenu::GetRandomValue(param.Minimum, param.Maximum);
pUIMenu->m_pMiniDexed->SetTGParameter(static_cast<CMiniDexed::TTGParameter>(nParam), value, nTG);
}
pUIMenu->m_pMiniDexed->SetTGParameter(CMiniDexed::TTGParameter::TGParameterMIDIChannel, CMIDIDevice::OmniMode, nTG);
}
void CUIMenu::GenerateRandomFX(CUIMenu *pUIMenu, TMenuEvent Event)
{
if (Event != TMenuEvent::MenuEventSelect)
{
return;
}
for (int nParam = CMiniDexed::TParameter::ParameterCompressorEnable; nParam < CMiniDexed::TParameter::ParameterUnknown; ++nParam)
{
TParameter param = CUIMenu::s_GlobalParameter[nParam];
uint8_t value = (uint8_t)CUIMenu::GetRandomValue(param.Minimum, param.Maximum);
pUIMenu->m_pMiniDexed->SetParameter(static_cast<CMiniDexed::TParameter>(nParam), value);
}
}
void CUIMenu::GenerateRandomPerformance(CUIMenu *pUIMenu, TMenuEvent Event)
{
if (Event != TMenuEvent::MenuEventSelect)
{
return;
}
for (size_t nTG = 0; nTG < CConfig::ToneGenerators; ++nTG)
{
CUIMenu::GenerateRandomPresetTG(pUIMenu, nTG);
}
CUIMenu::GenerateRandomFX(pUIMenu, Event);
}

@ -128,6 +128,15 @@ private:
static void InputTxt (CUIMenu *pUIMenu, TMenuEvent Event);
static void TimerHandlerNoBack (TKernelTimerHandle hTimer, void *pParam, void *pContext);
static int GetRandomValue(int min, int max);
static void GenerateRandomOperator(CUIMenu *pUIMenu, TMenuEvent Event);
static void GenerateRandomOperatorTG(CUIMenu *pUIMenu, size_t nTG, size_t nOp);
static void GenerateRandomVoice(CUIMenu *pUIMenu, size_t nTG);
static void GenerateRandomPreset(CUIMenu *pUIMenu, TMenuEvent Event);
static void GenerateRandomPresetTG(CUIMenu *pUIMenu, size_t nTG);
static void GenerateRandomFX(CUIMenu *pUIMenu, TMenuEvent Event);
static void GenerateRandomPerformance(CUIMenu *pUIMenu, TMenuEvent Event);
private:
CUserInterface *m_pUI;

Loading…
Cancel
Save