commit b0845d94ec3d24d9a8fd84646b7c1379554b5a0d
parent 8af79e49d6499eacf4d9aefc9028733b54d932fb
Author: dsp56300 <dsp56300@users.noreply.github.com>
Date: Tue, 28 Dec 2021 21:16:45 +0100
define parameter enum to get rid of magic values
Diffstat:
2 files changed, 370 insertions(+), 0 deletions(-)
diff --git a/source/jucePlugin/VirusController.cpp b/source/jucePlugin/VirusController.cpp
@@ -14,6 +14,8 @@ namespace Virus
Controller::Controller(AudioPluginAudioProcessor &p, unsigned char deviceId) : m_processor(p), m_deviceId(deviceId)
{
+ assert(sizeof(m_paramsDescription) / sizeof(Parameter::Description) == Param_Count && "size of enum must match size of parameter descriptions");
+
registerParams();
// add lambda to enforce updating patches when virus switch from/to multi/single.
(findSynthParam(0, 0x72, 0x7a))->onValueChanged = [this] {
diff --git a/source/jucePlugin/VirusController.h b/source/jucePlugin/VirusController.h
@@ -8,6 +8,374 @@ class AudioPluginAudioProcessor;
namespace Virus
{
+ enum ParameterType
+ {
+ Param_BankSelect,
+ Param_ModWheel,
+ Param_BreathControl,
+ Param_Control3,
+ Param_FootControl,
+ Param_PortamentoTime,
+ Param_Data,
+ Param_ChannelVolume,
+ Param_Balance,
+ Param_Control9,
+ Param_Panorama,
+ Param_Expression,
+ Param_Control12,
+ Param_Control13,
+ Param_Control14,
+ Param_Control15,
+ Param_Control16,
+ Param_Osc1Shape,
+ Param_Osc1PW,
+ Param_Osc1Wave,
+ Param_Osc1Semitone,
+ Param_Osc1Keyfollow,
+ Param_Osc2Shape,
+ Param_Osc2PW,
+ Param_Osc2Wave,
+ Param_Osc2Semitone,
+ Param_Osc2Detune,
+ Param_Osc2FMAmount,
+ Param_Osc2Sync,
+ Param_Osc2FltEnvAmt,
+ Param_FMFiltEnvAmt,
+ Param_Osc2Keyfollow,
+ Param_PerfControl_BankSelect,
+ Param_OscBalance,
+ Param_SubOscVolume,
+ Param_SubOscShape,
+ Param_OscMainVolume,
+ Param_NoiseVolume,
+ Param_RingModMVolume,
+ Param_NoiseColor,
+ Param_FilterCutA,
+ Param_FilterCutB,
+ Param_FilterResA,
+ Param_FilterResB,
+ Param_FilterEnvAmtA,
+ Param_FilterEnvAmtB,
+ Param_FilterKeyFollowA,
+ Param_FilterKeyFollowB,
+ Param_FilterBalance,
+ Param_SaturationCurve,
+ Param_FilterModeA,
+ Param_FilterModeB,
+ Param_FilterRouting,
+ Param_FilterEnvAttack,
+ Param_FilterEnvDecay,
+ Param_FilterEnvSustain,
+ Param_FilterEnvSustainTime,
+ Param_FilterEnvRelease,
+ Param_AmpEnvAttack,
+ Param_AmpEnvDecay,
+ Param_AmpEnvSustain,
+ Param_AmpEnvSustainTime,
+ Param_AmpEnvRelease,
+ Param_HoldPedal,
+ Param_PortamentoPedal,
+ Param_SostenutoPedal,
+ Param_Lfo1Rate,
+ Param_Lfo1Shape,
+ Param_Lfo1EnvMode,
+ Param_Lfo1Mode,
+ Param_Lfo1Symmetry,
+ Param_Lfo1Keyfollow,
+ Param_Lfo1KeyTrigger,
+ Param_Osc1Lfo1Amount,
+ Param_Osc2Lfo1Amount,
+ Param_PWLfo1Amount,
+ Param_ResoLfo1Amount,
+ Param_FltGainLfo1Amount,
+ Param_Lfo2Rate,
+ Param_Lfo2Shape,
+ Param_Lfo2EnvMode,
+ Param_Lfo2Mode,
+ Param_Lfo2Symmetry,
+ Param_Lfo2Keyfollow,
+ Param_Lfo2Keytrigger,
+ Param_OscShapeLfo2Amount,
+ Param_FmAmountLfo2Amount,
+ Param_Cutoff1Lfo2Amount,
+ Param_Cutoff2Lfo2Amount,
+ Param_PanoramaLfo2Amount,
+ Param_PatchVolume,
+ Param_Transpose,
+ Param_KeyMode,
+ Param_UnisonMode,
+ Param_UnisonDetune,
+ Param_UnisonPanSpread,
+ Param_UnisonLfoPhase,
+ Param_InputMode,
+ Param_InputSelect,
+ Param_ChorusMix,
+ Param_ChorusRate,
+ Param_ChorusDepth,
+ Param_ChorusDelay,
+ Param_ChorusFeedback,
+ Param_ChorusLfoShape,
+ Param_DelayReverMode,
+ Param_EffectSend,
+ Param_DelayTime,
+ Param_DelayFeedback,
+ Param_DelayRateReverbDecayTime,
+ Param_DelayDepthReverbRoomSize,
+ Param_DelayLfoShape,
+ Param_DelayColor,
+ Param_KeybLocal,
+ Param_AllNotesOff,
+
+ Param_ArpMode,
+ Param_ArpPatternSelect,
+ Param_ArpOctaveRange,
+ Param_ArpHoldEnable,
+ Param_ArpNoteLength,
+ Param_ArpSwing,
+
+ Param_Lfo3Rate,
+ Param_Lfo3Shape,
+ Param_Lfo3Mode,
+ Param_Lfo3Keyfollow,
+ Param_Lfo3Destination,
+ Param_OscLfo3Amount,
+ Param_Lfo3FadeInTime,
+ Param_ClockTempo,
+ Param_ArpClock,
+ Param_Lfo1Clock,
+ Param_Lfo2Clock,
+ Param_DelayClock,
+ Param_Lfo3Clock,
+ Param_ControlSmoothMode,
+ Param_BenderRangeUp,
+ Param_BenderRangeDown,
+ Param_BenderScale,
+ Param_Filter1EnvPolarity,
+ Param_Filter2EnvPolarity,
+ Param_Filter2CutoffLink,
+ Param_FilterKeytrackBase,
+ Param_OscFMMode,
+ Param_OscInitPhase,
+ Param_PunchIntensity,
+ Param_InputFollowMode,
+ Param_VocoderMode,
+ Param_Osc3Mode,
+ Param_Osc3Volume,
+ Param_Osc3Semitone,
+ Param_Osc3Detune,
+ Param_LowEqFreq,
+ Param_HighEqFreq,
+ Param_Osc1ShapeVelocity,
+ Param_Osc2ShapeVelocity,
+ Param_PulseWidthVelocity,
+ Param_FmAmountVelocity,
+ Param_SoftKnob1ShortName,
+ Param_SoftKnob2ShortName,
+ Param_Filter1EnvAmtVelocity,
+ Param_Filter2EnvAmtVelocity,
+ Param_Resonance1Velocity,
+ Param_Resonance2Velocity,
+ Param_SecondOutputBalance,
+ Param_AmpVelocity,
+ Param_PanoramaVelocity,
+ Param_SoftKnob1Single,
+ Param_SoftKnob2Single,
+ Param_Assign1Source,
+ Param_Assign1Destination,
+ Param_Assign1Amount,
+ Param_Assign2Source,
+ Param_Assign2Destination1,
+ Param_Assign2Amount1,
+ Param_Assign2Destination2,
+ Param_Assign2Amount2,
+ Param_Assign3Source,
+ Param_Assign3Destination1,
+ Param_Assign3Amount1,
+ Param_Assign3Destination2,
+ Param_Assign3Amount2,
+ Param_Assign2Destination3,
+ Param_Assign2Amount3,
+ Param_Lfo1AssignDest,
+ Param_Lfo1AssignAmount,
+ Param_Lfo2AssignDest,
+ Param_Lfo2AssignAmount,
+ Param_PhaserMode,
+ Param_PhaserMix,
+ Param_PhaserRate,
+ Param_PhaserDepth,
+ Param_PhaserFreq,
+ Param_PhaserFeedback,
+ Param_PhaserSpread,
+ Param_MidEqGain,
+ Param_MidEqFreq,
+ Param_MidEqQFactor,
+ Param_LowEqGain,
+ Param_HighEqGain,
+ Param_BassIntensity,
+ Param_BassTune,
+ Param_InputRingMod,
+ Param_DistortionCurve,
+ Param_DistortionIntensity,
+ Param_Assign4Source,
+ Param_Assign4Destination,
+ Param_Assign4Amount,
+ Param_Assign5Source,
+ Param_Assign5Destination,
+ Param_Assign5Amount,
+ Param_Assign6Source,
+ Param_Assign6Destination,
+ Param_Assign6Amount,
+ Param_FilterSelect,
+
+ Param_DelayOutputSelect,
+ Param_PartBankSelect,
+ Param_PartBankChange,
+ Param_PartProgramChange,
+ Param_PartMidiChannel,
+ Param_PartLowKey,
+ Param_PartHighKey,
+ Param_PartTranspose,
+ Param_PartDetune,
+ Param_PartVolume,
+ Param_PartMidiVolumeInit,
+ Param_PartOutputSelect,
+ Param_GlobalSecondOutputSelect,
+ Param_GlobalKeybTransposeButtons,
+ Param_GlobalKeybLocal,
+ Param_GlobalKeybMode,
+ Param_GlobalKeybTranspose,
+ Param_GlobalKeyModWheelControl,
+ Param_GlobalKeybPedal1Control,
+ Param_GlobalKeybPedal2Control,
+ Param_GlobalKeybPressureSensitive,
+ Param_PartEnable,
+ Param_PartMidiVolumeEnable,
+ Param_PartHoldPedalEnable,
+ Param_KeybToMidi,
+ Param_NoteStealPriority,
+ Param_PartProgChangeEnable,
+ Param_GlobalProgChangeEnable,
+ Param_MultiProgChangeEnable,
+ Param_GlobalMidiVolumeEnable,
+ Param_InputThruLevel,
+ Param_InputBoost,
+ Param_MasterTune,
+ Param_DeviceID,
+ Param_MidiControlLowPage,
+ Param_MidiControlHighPage,
+ Param_MidiArpSend,
+ Param_KnobDisplay,
+ Param_MidiDumpTX,
+ Param_MidiDumpRX,
+ Param_MultiProgramChange,
+ Param_MidiClockRX,
+ Param_SoftKnob1Mode,
+ Param_SoftKnob2Mode,
+ Param_SoftKnob1Global,
+ Param_SoftKnob2Global,
+ Param_SoftKnob1Midi,
+ Param_SoftKnob2Midi,
+ Param_ExpertMode,
+ Param_KnobMode,
+ Param_MemoryProtect,
+ Param_SoftThru,
+ Param_PanelDestination,
+ Param_PlayMode,
+ Param_PartNumber,
+ Param_GlobalChannel,
+ Param_LedMode,
+ Param_LcdContrast,
+ Param_MasterVolume,
+
+ // UNDEFINED / UNUSED / STUBS
+ Param_PageA_Undefined92,
+ Param_PageA_Undefined95,
+ Param_PageA_Undefined96,
+ Param_PageA_Undefined111,
+ Param_PageA_Undefined120,
+ Param_PageA_Undefined121,
+ Param_PageA_Undefined124,
+ Param_PageA_Undefined125,
+ Param_PageA_Undefined126,
+ Param_PageA_Undefined127,
+ Param_PageB_Undefined0,
+ Param_PageB_Undefined14,
+ Param_PageB_Undefined15,
+ Param_PageB_Undefined22,
+ Param_PageB_Undefined23,
+ Param_PageB_Undefined24,
+ Param_PageB_Undefined29,
+ Param_PageB_Undefined37,
+ Param_PageB_Undefined40,
+ Param_PageB_Undefined53,
+ Param_PageB_Undefined69,
+ Param_PageB_Undefined83,
+ Param_PageB_Undefined91,
+ Param_PageB_Undefined111,
+ Param_PageB_Undefined123,
+ Param_PageB_Undefined124,
+ Param_PageC_Undefined0,
+ Param_PageC_Undefined1,
+ Param_PageC_Undefined2,
+ Param_PageC_Undefined3,
+ Param_PageC_Undefined4,
+ Param_PageC_Undefined15,
+ Param_PageC_Undefined16,
+ Param_PageC_Undefined17,
+ Param_PageC_Undefined18,
+ Param_PageC_Undefined19,
+ Param_PageC_Undefined20,
+ Param_PageC_Undefined21,
+ Param_PageC_Undefined23,
+ Param_PageC_Undefined24,
+ Param_PageC_Undefined25,
+ Param_PageC_Undefined26,
+ Param_PageC_Undefined27,
+ Param_PageC_Undefined28,
+ Param_PageC_Undefined29,
+ Param_PageC_Undefined30,
+ Param_PageC_Undefined76,
+ Param_PageC_Undefined79,
+ Param_PageC_Undefined80,
+ Param_PageC_Undefined81,
+ Param_PageC_Undefined82,
+ Param_PageC_Undefined83,
+ Param_PageC_Undefined84,
+ Param_PageC_Undefined88,
+ Param_PageC_Undefined89,
+ Param_PageC_Undefined100,
+ Param_PageC_Undefined101,
+ Param_PageC_Undefined102,
+ Param_PageC_Undefined103,
+ Param_PageC_Undefined104,
+ Param_PageC_Undefined119,
+ // Text Chars / Unused
+ Param_PageB_Undefined110,
+ Param_PageB_Undefined111_,
+ Param_PageB_Undefined112,
+ Param_PageB_Undefined113,
+ Param_PageB_Undefined114,
+ Param_PageB_Undefined115,
+ Param_PageB_Undefined116,
+ Param_PageB_Undefined117,
+ Param_PageB_Undefined118,
+ Param_PageB_Undefined119,
+ Param_PageB_Undefined120,
+ Param_PageB_Undefined121,
+ Param_PageC_Undefined5,
+ Param_PageC_Undefined6,
+ Param_PageC_Undefined7,
+ Param_PageC_Undefined8,
+ Param_PageC_Undefined9,
+ Param_PageC_Undefined10,
+ Param_PageC_Undefined11,
+ Param_PageC_Undefined12,
+ Param_PageC_Undefined13,
+ Param_PageC_Undefined14,
+
+ Param_Count
+ };
+
using SysEx = std::vector<uint8_t>;
class Controller : private juce::Timer
{