diff --git a/src/plug/JaySynthMidiCC.cpp b/src/plug/JaySynthMidiCC.cpp index 4747034..bd74f82 100644 --- a/src/plug/JaySynthMidiCC.cpp +++ b/src/plug/JaySynthMidiCC.cpp @@ -55,11 +55,21 @@ JaySynthMidiCC::JaySynthMidiCC() /*pmax*/pConstraints->pmax, /*pinterval*/pConstraints->pinterval); - midiCC_containers[i].doChangeParameter = false; - midiCC_containers[i].controllerID = 0; + midiCC_containers[i].controllerID = 128 + i; midiCC_containers[i].isAssigned = false; + midiCC_containers[i].doChangeParameter = false; midiCC_containers[i].doApplyOnPatchInit = false; + if (pConstraints->midiControllerId >= 0) + { + if (pConstraints->midiControllerId > 0) + { + midiCC_containers[i].controllerID = pConstraints->midiControllerId; + } + midiCC_containers[i].doChangeParameter = true; + midiCC_containers[i].isAssigned = true; + } + // Velocity paramInfoInit(&midiCC_containers[i].curve_vel, i, pConstraints->pName); paramInfoSet(&midiCC_containers[i].curve_vel, @@ -345,7 +355,9 @@ int JaySynthMidiCC::importXML(XmlElement const *pXML_MidiCc) if (pXML_PARAM->getIntAttribute("IS_ASSIGNED", 0)) add(pMidiContainer, pXML_PARAM->getIntAttribute("CONTROLLER_ID", 0)); - + else + remove(pMidiContainer, pXML_PARAM->getIntAttribute("CONTROLLER_ID", 0)); + pXML_PARAM = pXML_PARAM->getNextElement(); } diff --git a/src/synth/param_scale.c b/src/synth/param_scale.c index f74bc49..ef5b9c3 100644 --- a/src/synth/param_scale.c +++ b/src/synth/param_scale.c @@ -15,701 +15,841 @@ static const param_info_t param_info[] = { { SYNTH_PARAM_VOLUME, + 7, "Master Volume", - /*Base*/10.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 + /*Base*/10.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1, }, { SYNTH_PARAM_VOICE_PAN_SPREAD, + 0, "Voice Pan Spread", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_TUNE, + 0, "Master Tune", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.1 }, { SYNTH_PARAM_TOTAL_NUM_VOICES, + -1, "Total num. Voices", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/MAX_POLYPHONY, /*interval*/1 }, { SYNTH_PARAM_HUMANIZE_ENABLE, + -1, "Humanize Enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_HUMANIZE_VAR_VCO, + 0, "Humanize Spread VCO", /*Base*/10.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_HUMANIZE_VAR_VCF, + 0, "Humanize Spread VCF", /*Base*/10.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_HUMANIZE_VAR_ENV, + 0, "Humanize Spread ENV", /*Base*/10.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_MONOPHONIC_ENABLE, + -1, "Monophonic Enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_MONOPHONIC_RETRIGGER_ENABLE, + -1, "Monophonic Retrigger Enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_UNISONO_ENABLE, + -1, "Unisono Enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_UNISONO_NUM_VOICES, + -1, "Unisono num. Voices", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/MAX_POLYPHONY, /*interval*/1 }, { SYNTH_PARAM_PORTAMENTO_TIME, + 0, "Portamento Time", /*Base*/10.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0.001, /*pcenter*/-1, /*max*/0.5, /*interval*/0.001 }, { SYNTH_PARAM_OSC_0_ENABLE, + -1, "OSC1 enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_OSC_1_ENABLE, + -1, "OSC2 enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_OSC_0_RESTART_ON_TRIGGER, + -1, "OSC1 restart on trigger", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_OSC_1_RESTART_ON_TRIGGER, + -1, "OSC2 restart on trigger", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1.0, /*interval*/1 }, { SYNTH_PARAM_OSC_0_LEVEL, + 0, "OSC1 level", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_1_LEVEL, + 0, "OSC2 level", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_0_DUTYCYCLE, + 0, "OSC1 pulse width", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_1_DUTYCYCLE, + 0, "OSC2 pulse width", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_0_DETUNE, + 0, "OSC1 detune", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-50, /*pcenter*/0, /*max*/+50, /*interval*/0.1 }, { SYNTH_PARAM_OSC_1_DETUNE, + 0, "OSC2 detune", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-50, /*pcenter*/0, /*max*/+50, /*interval*/0.1 }, { SYNTH_PARAM_OSC_0_TRANSPOSE, + 0, "OSC1 transpose", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-48.0, /*pcenter*/0, /*max*/+48.0, /*interval*/1 }, { SYNTH_PARAM_OSC_1_TRANSPOSE, + 0, "OSC2 transpose", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-48.0, /*pcenter*/0, /*max*/+48.0, /*interval*/1 }, { SYNTH_PARAM_OSC_0_WAVEFORM, + -1, "OSC1 shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/OSC_NUM_WAVEFORMS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_WAVEFORM, + -1, "OSC2 shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/OSC_NUM_WAVEFORMS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_PB_RANGE_MIN, + -1, "OSC1 pitch bender minimum", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-48.0, /*pcenter*/0, /*max*/+48.0, /*interval*/1 }, { SYNTH_PARAM_OSC_1_PB_RANGE_MIN, + -1, "OSC2 pitch bender minimum", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-48.0, /*pcenter*/0, /*max*/+48.0, /*interval*/1 }, { SYNTH_PARAM_OSC_0_PB_RANGE_MAX, + -1, "OSC1 pitch bender maximum", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-48.0, /*pcenter*/0, /*max*/+48.0, /*interval*/1 }, { SYNTH_PARAM_OSC_1_PB_RANGE_MAX, + -1, "OSC2 pitch bender maximum", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-48.0, /*pcenter*/0, /*max*/+48.0, /*interval*/1 }, { SYNTH_PARAM_OSC_0_FM_AMT_0, + 0, "OSC1 FM amt 1", /*Base*/10, /*kexp*/2.5, /*scenter*/0.5, /*min*/-48, /*pcenter*/0, /*max*/+48, /*interval*/0.01 }, { SYNTH_PARAM_OSC_1_FM_AMT_0, + 0, "OSC2 FM amt 1", /*Base*/10, /*kexp*/2.5, /*scenter*/0.5, /*min*/-48, /*pcenter*/0, /*max*/+48, /*interval*/0.01 }, { SYNTH_PARAM_OSC_0_FM_AMT_1, + 0, "OSC1 FM amt 2", /*Base*/1, /*kexp*/1, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.01 }, { SYNTH_PARAM_OSC_1_FM_AMT_1, + 0, "OSC2 FM amt 2", /*Base*/1, /*kexp*/1, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.01 }, { SYNTH_PARAM_OSC_0_FM_SRC_0, + -1, "OSC1 FM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_FM_SRC_0, + -1, "OSC2 FM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_FM_SRC_1, + -1, "OSC1 FM src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_FM_SRC_1, + -1, "OSC2 FM src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_FM_SRC_OP, + -1, "OSC1 FM src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_FM_SRC_OP, + -1, "OSC2 FM src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_AM_AMT_0, + 0, "OSC1 AM amt 1", /*Base*/1, /*kexp*/1, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.01 }, { SYNTH_PARAM_OSC_1_AM_AMT_0, + 0, "OSC2 AM amt 1", /*Base*/1, /*kexp*/1, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.01 }, { SYNTH_PARAM_OSC_0_AM_AMT_1, + 0, "OSC1 AM amt 2", /*Base*/1, /*kexp*/1, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.01 }, { SYNTH_PARAM_OSC_1_AM_AMT_1, + 0, "OSC2 AM amt 2", /*Base*/1, /*kexp*/1, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.01 }, { SYNTH_PARAM_OSC_0_AM_SRC_0, + -1, "OSC1 AM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_AM_SRC_0, + -1, "OSC2 AM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_AM_SRC_1, + -1, "OSC1 AM src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_AM_SRC_1, + -1, "OSC2 AM src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_AM_SRC_OP, + -1, "OSC1 AM src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_AM_SRC_OP, + -1, "OSC2 AM src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_PWM_AMT_0, + 0, "OSC1 PWM amt 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_1_PWM_AMT_0, + 0, "OSC2 PWM amt 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_0_PWM_AMT_1, + 0, "OSC1 PWM amt 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_1_PWM_AMT_1, + 0, "OSC2 PWM amt 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/+100, /*interval*/0.1 }, { SYNTH_PARAM_OSC_0_PWM_SRC_0, + -1, "OSC1 PWM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_PWM_SRC_0, + -1, "OSC2 PWM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_PWM_SRC_1, + -1, "OSC1 PWM src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_PWM_SRC_1, + -1, "OSC2 PWM src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_OSC_0_PWM_SRC_OP, + -1, "OSC1 PWM src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_OSC_1_PWM_SRC_OP, + -1, "OSC2 PWM src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_NOISE_ENABLE, + -1, "Noise enable", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/1, /*interval*/1 }, { SYNTH_PARAM_NOISE_LEVEL, + 0, "Noise level", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_NOISE_SHAPE, + -1, "Noise shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NOISE_NUM_SHAPES-1, /*interval*/1 }, { SYNTH_PARAM_VCA_ENV_AMT, + 0, "VCA Env amt", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCA_AM_AMT_0, + 0, "VCA AM amt 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCA_AM_SRC_0, + -1, "VCA AM src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_VCA_PAN_AMT_0, + 0, "VCA PAN amt 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCA_PAN_SRC_0, + -1, "VCA PAN src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_VCA_ENV_A, + 0, "VCA Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_VCA_ENV_D, + 0, "VCA Decay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_VCA_ENV_S, + 0, "VCA Sustain", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_ENV_A, + 0, "VCF Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_VCF_ENV_D, + 0, "VCF Decay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_VCF_ENV_S, + 0, "VCF Sustain", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_ENV_R, + 0, "VCF Release", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_ENV_2_A, + 0, "ENV 2 Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_ENV_2_D, + 0, "ENV 2 Decay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_ENV_2_S, + 0, "ENV 2 Sustain", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_ENV_2_R, + 0, "ENV 2 Release", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_ENV_3_A, + 0, "ENV 3 Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_ENV_3_D, + 0, "ENV 3 Decay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_ENV_3_S, + 0, "ENV 3 Sustain", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_ENV_3_R, + 0, "ENV 3 Release", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_VCA_ENV_R, + 0, "VCA Release", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/5, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_VCF_TYPE, + -1, "VCF type", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VCF_NUM_FILTERTYPES-1, /*interval*/1 }, { SYNTH_PARAM_VCF_ORDER, + -1, "VCF order", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VCF_NUM_FILTERORDER-1, /*interval*/1 }, { SYNTH_PARAM_VCF_F, + 0, "VCF Cutoff", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/FILTER_F_MIN, /*pcenter*/-1, /*max*/FILTER_F_MAX, /*interval*/0.1 }, { SYNTH_PARAM_VCF_Q, + 0, "VCF Res", /*Base*/10, /*kexp*/2.0, /*scenter*/0.0, /*min*/FILTER_Q_MIN, /*pcenter*/-1, /*max*/FILTER_Q_MAX, /*interval*/0.1 }, { SYNTH_PARAM_VCF_ENV_AMT, + 0, "VCF Env amt", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_F_AMT_0, + 0, "VCF Cutoff amt 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_F_AMT_1, + 0, "VCF Cutoff amt 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_F_SRC_0, + -1, "VCF Cutoff src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_VCF_F_SRC_1, + -1, "VCF Cutoff src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_VCF_F_SRC_OP, + -1, "VCF Cutoff src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_VCF_Q_AMT_0, + 0, "VCF Resonance amt 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_Q_AMT_1, + 0, "VCF Resonance amt 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_VCF_Q_SRC_0, + -1, "VCF Resonance src 1", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_SOURCES_0-1, /*interval*/1 }, { SYNTH_PARAM_VCF_Q_SRC_1, + -1, "VCF Resonance src 2", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/(VOICE_NUM_MOD_SOURCES_1-1)*VOICE_NUM_MOD_OPS + 1-1, /*interval*/1 }, { SYNTH_PARAM_VCF_Q_SRC_OP, + -1, "VCF Resonance src OP", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_NUM_MOD_OPS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_0_SPEED, + 0, "LFO 1 speed", /*Base*/20, /*kexp*/1.0, /*scenter*/0.0, /*min*/0.01, /*pcenter*/-1, /*max*/200.0, /*interval*/0.01 }, { SYNTH_PARAM_LFO_1_SPEED, + 0, "LFO 2 speed", /*Base*/20, /*kexp*/1.0, /*scenter*/0.0, /*min*/0.01, /*pcenter*/-1, /*max*/200.0, /*interval*/0.01 }, { SYNTH_PARAM_LFO_2_SPEED, + 0, "LFO 3 speed", /*Base*/20, /*kexp*/1.0, /*scenter*/0.0, /*min*/0.01, /*pcenter*/-1, /*max*/200.0, /*interval*/0.01 }, { SYNTH_PARAM_LFO_3_SPEED, + 0, "LFO 4 speed", /*Base*/20, /*kexp*/1.0, /*scenter*/0.0, /*min*/0.01, /*pcenter*/-1, /*max*/200.0, /*interval*/0.01 }, { SYNTH_PARAM_LFO_0_SMOOTH, + 0, "LFO 1 smooth", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_1_SMOOTH, + 0, "LFO 2 smooth", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_2_SMOOTH, + 0, "LFO 3 smooth", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_3_SMOOTH, + 0, "LFO 4 smooth", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_0_DELAY, + 0, "LFO 1 Delay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_LFO_1_DELAY, + 0, "LFO 2 Delay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_LFO_2_DELAY, + 0, "LFO 3 Delay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_LFO_3_DELAY, + 0, "LFO 4 Delay", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/30000, /*interval*/1 }, { SYNTH_PARAM_LFO_0_ATTACK, + 0, "LFO 1 Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_LFO_1_ATTACK, + 0, "LFO 2 Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_LFO_2_ATTACK, + 0, "LFO 3 Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_LFO_3_ATTACK, + 0, "LFO 4 Attack", /*Base*/150, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/10000, /*interval*/1 }, { SYNTH_PARAM_LFO_0_SHAPE, + -1, "LFO 1 shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_WAVEFORMS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_1_SHAPE, + -1, "LFO 2 shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_WAVEFORMS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_2_SHAPE, + -1, "LFO 3 shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_WAVEFORMS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_3_SHAPE, + -1, "LFO 4 shape", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_WAVEFORMS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_0_MODE, + -1, "LFO 1 mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_1_MODE, + -1, "LFO 2 mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_2_MODE, + -1, "LFO 3 mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_3_MODE, + -1, "LFO 4 mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_0_SYNC, + -1, "LFO 1 sync", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_SYNCS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_1_SYNC, + -1, "LFO 2 sync", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_SYNCS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_2_SYNC, + -1, "LFO 3 sync", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_SYNCS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_3_SYNC, + -1, "LFO 4 sync", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/VOICE_LFO_NUM_SYNCS-1, /*interval*/1 }, { SYNTH_PARAM_LFO_0_SYMMETRY, + 0, "LFO 1 symmetry", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_1_SYMMETRY, + 0, "LFO 2 symmetry", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_2_SYMMETRY, + 0, "LFO 3 symmetry", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_3_SYMMETRY, + 0, "LFO 4 symmetry", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.5, /*min*/-100, /*pcenter*/0, /*max*/100, /*interval*/0.1 }, { SYNTH_PARAM_LFO_0_MIDISYNC_MODE, + -1, "LFO 1 Midi Sync Mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_SYNC_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_1_MIDISYNC_MODE, + -1, "LFO 2 Midi Sync Mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_SYNC_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_2_MIDISYNC_MODE, + -1, "LFO 3 Midi Sync Mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_SYNC_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_3_MIDISYNC_MODE, + -1, "LFO 4 Midi Sync Mode", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/0, /*pcenter*/-1, /*max*/LFO_NUM_SYNC_MODES-1, /*interval*/1 }, { SYNTH_PARAM_LFO_0_MIDISYNC_BEATDIV, + 0, "LFO 1 Midi Sync Beat Divisor", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/32, /*interval*/1 }, { SYNTH_PARAM_LFO_1_MIDISYNC_BEATDIV, + 0, "LFO 2 Midi Sync Beat Divisor", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/32, /*interval*/1 }, { SYNTH_PARAM_LFO_2_MIDISYNC_BEATDIV, + 0, "LFO 3 Midi Sync Beat Divisor", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/32, /*interval*/1 }, { SYNTH_PARAM_LFO_3_MIDISYNC_BEATDIV, + 0, "LFO 4 Midi Sync Beat Divisor", /*Base*/1.0, /*kexp*/1.0, /*scenter*/0.0, /*min*/1, /*pcenter*/-1, /*max*/32, /*interval*/1 }, diff --git a/src/synth/param_scale.h b/src/synth/param_scale.h index a29a726..9aa182d 100644 --- a/src/synth/param_scale.h +++ b/src/synth/param_scale.h @@ -156,6 +156,7 @@ enum typedef struct _sparam_info_t { UINT32 id; + int midiControllerId; char *pName; synth_float_t base, kexp, scenter, pmin, pcenter, pmax, pinterval;