131 lines
4.3 KiB
C++
131 lines
4.3 KiB
C++
/*
|
|
sonnenlicht poly ensemble
|
|
|
|
Copyright 2025 Gordon JC Pearce <gordonjcp@gjcp.net>
|
|
|
|
Permission to use, copy, modify, and/or distribute this software for any
|
|
purpose with or without fee is hereby granted, provided that the above
|
|
copyright notice and this permission notice appear in all copies.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
|
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
|
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
|
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
#include "sonnenlicht.hpp"
|
|
|
|
void Sonnenlicht::initParameter(uint32_t index, Parameter& parameter) {
|
|
// define all the different control input parameters
|
|
switch (index) {
|
|
case pContraBass:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Contrabass";
|
|
parameter.symbol = "s_contra";
|
|
parameter.ranges.def = 1;
|
|
break;
|
|
|
|
case pCello:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Cello";
|
|
parameter.symbol = "s_cello";
|
|
parameter.ranges.def = 0;
|
|
break;
|
|
|
|
case pViola:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Viola";
|
|
parameter.symbol = "s_viola";
|
|
parameter.ranges.def = 1;
|
|
break;
|
|
|
|
case pViolin:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Violin";
|
|
parameter.symbol = "s_violin";
|
|
parameter.ranges.def = 1;
|
|
break;
|
|
|
|
case pTrumpet:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Trumpet";
|
|
parameter.symbol = "s_trumpet";
|
|
parameter.ranges.def = 0;
|
|
break;
|
|
case pHorn:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Horn";
|
|
parameter.symbol = "s_horn";
|
|
parameter.ranges.def = 0;
|
|
break;
|
|
|
|
case pChorale:
|
|
parameter.hints = kParameterIsAutomatable | kParameterIsBoolean;
|
|
parameter.name = "Chorale";
|
|
parameter.symbol = "s_chorale";
|
|
parameter.ranges.def = 1;
|
|
break;
|
|
|
|
case pBassVolume:
|
|
parameter.hints = kParameterIsAutomatable;
|
|
parameter.name = "Bass Volume";
|
|
parameter.symbol = "s_bassvol";
|
|
parameter.ranges.min = 0.0f;
|
|
parameter.ranges.max = 1.0f;
|
|
parameter.ranges.def = 0.7f;
|
|
break;
|
|
case pAttack:
|
|
parameter.hints = kParameterIsAutomatable;
|
|
parameter.name = "Attack";
|
|
parameter.symbol = "s_attack";
|
|
parameter.ranges.min = 0.0f;
|
|
parameter.ranges.max = 1.0f;
|
|
parameter.ranges.def = 0.7f;
|
|
break;
|
|
case pSustain:
|
|
parameter.hints = kParameterIsAutomatable;
|
|
parameter.name = "Sustain";
|
|
parameter.symbol = "s_sustain";
|
|
parameter.ranges.min = 0.0f;
|
|
parameter.ranges.max = 1.0f;
|
|
parameter.ranges.def = 0.7f;
|
|
break;
|
|
}
|
|
}
|
|
|
|
void Sonnenlicht::setParameterValue(uint32_t index, float value) {
|
|
switch (index) {
|
|
case pViola:
|
|
viola = value;
|
|
break;
|
|
case pViolin:
|
|
violin = value;
|
|
break;
|
|
case pBassVolume:
|
|
bassVolume = value;
|
|
default:
|
|
break;
|
|
}
|
|
// we don't need to handle a default condition
|
|
// if there's a parameter left unhandled, it's probably
|
|
// a mistake by the plugin host, and we don't much care
|
|
}
|
|
|
|
float Sonnenlicht::getParameterValue(uint32_t index) const {
|
|
switch (index) {
|
|
case pViola:
|
|
return viola;
|
|
|
|
case pBassVolume:
|
|
return bassVolume;
|
|
|
|
default:
|
|
return 0;
|
|
}
|
|
// if we fall all the way through...
|
|
return 2;
|
|
}
|