gearmulator

Emulation of classic VA synths of the late 90s/2000s that are based on Motorola 56300 family DSPs
Log | Files | Refs | Submodules | README | LICENSE

commit f62ce88542a7da2e32fd9b987d64a33a709e59f5
parent bd8b1dfd766603e60504a9c6570a0a4c305fa857
Author: Tal Aviram <me@talaviram.com>
Date:   Wed,  8 Sep 2021 15:31:45 +0300

controller - matrix/mods src/dst text and updated parameters to reflect possible assignments.

Diffstat:
Msource/jucePlugin/VirusController.cpp | 334++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
1 file changed, 315 insertions(+), 19 deletions(-)

diff --git a/source/jucePlugin/VirusController.cpp b/source/jucePlugin/VirusController.cpp @@ -565,6 +565,302 @@ namespace Virus return juce::roundToInt(v) == 0 ? "Linear" : "Exponential"; } + juce::String numToModMatrixSource(float v, Parameter::Description) + { + const auto ridx = juce::roundToInt(v); + switch (ridx) + { + case 0: return "Off"; + case 1: return "PitchBnd"; + case 2: return "ChanPres"; + case 3: return "ModWheel"; + case 4: return "Breath"; + case 5: return "Contr3"; + case 6: return "Foot"; + case 7: return "Data"; + case 8: return "Balance"; + case 9: return "Contr 9"; + case 10: return "Express"; + case 11: return "Contr 12"; + case 12: return "Contr 13"; + case 13: return "Contr 14"; + case 14: return "Contr 15"; + case 15: return "Contr 16"; + case 16: return "HoldPed"; + case 17: return "PortaSw"; + case 18: return "SostPed"; + case 19: return "AmpEnv"; + case 20: return "FiltEnv"; + case 21: return "Lfo 1"; + case 22: return "Lfo 2"; + case 23: return "Lfo 3"; + case 24: return "VeloOn"; + case 25: return "VeloOff"; + case 26: return "KeyFlw"; + case 27: return "Random"; + default: return juce::String(v); + } + } + + juce::String numToModMatrixDest(float v, Parameter::Description) + { + const auto ridx = juce::roundToInt(v); + switch (ridx) + { + case 0: return "Off"; + case 1: return "PatchVol"; + case 2: return "ChannelVol"; + case 3: return "Panorama"; + case 4: return "Transpose"; + case 5: return "Portamento"; + case 6: return "Osc1Shape"; + case 7: return "Osc1PlsWdh"; + case 8: return "Osc1WavSel"; + case 9: return "Osc1Pitch"; + case 10: return "Osc1Keyflw"; + case 11: return "Osc2Shape"; + case 12: return "Osc2PlsWdh"; + case 13: return "Osc2WavSel"; + case 14: return "Osc2Pitch"; + case 15: return "Osc2Detune"; + case 16: return "Osc2FmAmt"; + case 17: return "Osc2EnvAmt"; + case 18: return "FmEnvAmt"; + case 19: return "Osc2Keyflw"; + case 20: return "OscBalance"; + case 21: return "SubOscVol"; + case 22: return "OscMainVol"; + case 23: return "NoiseVol"; + case 24: return "Cutoff"; + case 25: return "Cutoff2"; + case 26: return "Filt1Reso"; + case 27: return "Filt2Reso"; + case 28: return "Flt1EnvAmt"; + case 29: return "Flt2EnvAmt"; + case 30: return "Flt1Keyflw"; + case 31: return "Flt2Keyflw"; + case 32: return "FltBalance"; + case 33: return "FltAttack"; + case 34: return "FltDecay"; + case 35: return "FltSustain"; + case 36: return "FltSusTime"; + case 37: return "FltRelease"; + case 38: return "AmpAttack"; + case 39: return "AmpDecay"; + case 40: return "AmpSustain"; + case 41: return "AmpSusTime"; + case 42: return "AmpRelease"; + case 43: return "Lfo1Rate"; + case 44: return "Lfo1Cont"; + case 45: return "Lfo1>Osc1"; + case 46: return "Lfo1>Osc2"; + case 47: return "Lfo1>PlsWd"; + case 48: return "Lfo1>Reso"; + case 49: return "Lfo1>FltGn"; + case 50: return "Lfo2Rate"; + case 51: return "Lfo2Cont"; + case 52: return "Lfo2>Shape"; + case 53: return "Lfo2>Fm"; + case 54: return "Lfo2>Cut1"; + case 55: return "Lfo2>Cut2"; + case 56: return "Lfo2>Pan"; + case 57: return "Lfo3Rate"; + case 58: return "Lfo3OscAmt"; + case 59: return "UniDetune"; + case 60: return "UniSpread"; + case 61: return "UniLfoPhs"; + case 62: return "ChorusMix"; + case 63: return "ChorusRate"; + case 64: return "ChorusDpth"; + case 65: return "ChorusDly"; + case 66: return "ChorusFeed"; + case 67: return "EffectSend"; + case 68: return "DelayTime"; + case 69: return "DelayFeed"; + case 70: return "DelayRate"; + case 71: return "DelayDepth"; + case 72: return "Osc1ShpVel"; + case 73: return "Osc2ShpVel"; + case 74: return "PlsWhdVel"; + case 75: return "FmAmtVel"; + case 76: return "Flt1EnvVel"; + case 77: return "Flt2EnvVel"; + case 78: return "Reso1Vel"; + case 79: return "Reso2Vel"; + case 80: return "AmpVel"; + case 81: return "PanVel"; + case 82: return "Ass1Amt1"; + case 83: return "Ass2Amt1"; + case 84: return "Ass2Amt2"; + case 85: return "Ass3Amt1"; + case 86: return "Ass3Amt2"; + case 87: return "Ass3Amt3"; + case 88: return "OscInitPhs"; + case 89: return "PunchInt"; + case 90: return "RingMod"; + case 91: return "NoiseColor"; + case 92: return "DelayColor"; + case 93: return "ABoostInt"; + case 94: return "ABoostTune"; + case 95: return "DistInt"; + case 96: return "RingmodMix"; + case 97: return "Osc3Volume"; + case 98: return "Osc3Semi"; + case 99: return "Osc3Detune"; + case 100: return "Lfo1AssAmt"; + case 101: return "Lfo2AssAmt"; + case 102: return "PhaserMix"; + case 103: return "PhaserRate"; + case 104: return "PhaserDept"; + case 105: return "PhaserFreq"; + case 106: return "PhaserFdbk"; + case 107: return "PhaserSprd"; + case 108: return "RevbDecay"; + case 109: return "RevDamping"; + case 110: return "RevbColor"; + case 111: return "RevPredely"; + case 112: return "RevFeedbck"; + case 113: return "SecBalance"; + case 114: return "ArpNoteLen"; + case 115: return "ArpSwing"; + case 116: return "ArpPattern"; + case 117: return "EqMidGain"; + case 118: return "EqMidFreq"; + case 119: return "EqMidQFactor"; + case 120: return "Assign4Amt"; + case 121: return "Assign5Amt"; + case 122: return "Assign6Amt"; + default: return juce::String(v); + } + } + + juce::String numToSoftKnobDest(float v, Parameter::Description) + { + const auto ridx = juce::roundToInt(v); + switch (ridx) + { + case 0: return "Off"; + case 1: return "ModWheel"; + case 2: return "Breath"; + case 3: return "Contr3"; + case 4: return "Foot"; + case 5: return "Data"; + case 6: return "Balance"; + case 7: return "Contr9"; + case 8: return "Expression"; + case 9: return "Contr12"; + case 10: return "Contr13"; + case 11: return "Contr14"; + case 12: return "Contr15"; + case 13: return "Contr16"; + case 14: return "PatchVolume"; + case 15: return "ChannelVolume"; + case 16: return "Panorama"; + case 17: return "Transpose"; + case 18: return "Portamento"; + case 19: return "UnisonDetune"; + case 20: return "UnisonPanSprd"; + case 21: return "UnisoLfoPhase"; + case 22: return "ChorusMix"; + case 23: return "ChorusRate"; + case 24: return "ChorusDepth"; + case 25: return "ChorusDelay"; + case 26: return "ChorusFeedback"; + case 27: return "EffectSend"; + case 28: return "DelayTime(ms)"; + case 29: return "DelayFeedback"; + case 30: return "DelayRate"; + case 31: return "DelayDepth"; + case 32: return "Osc1WavSelect"; + case 33: return "Osc1PulseWidth"; + case 34: return "Osc1Semitone"; + case 35: return "Osc1Keyfollow"; + case 36: return "Osc2WavSelect"; + case 37: return "Os2PulseWidth"; + case 38: return "Osc2EnvAmount"; + case 39: return "FmEnvAmount"; + case 40: return "Osc2Keyfollow"; + case 41: return "NoiseVolume"; + case 42: return "Filt1Resonance"; + case 43: return "Filt2Resonance"; + case 44: return "Filt1EnvAmount"; + case 45: return "Filt2EnvAmount"; + case 46: return "Filt1Keyfollow"; + case 47: return "Filt2Keyfollow"; + case 48: return "Lfo1Symmetry"; + case 49: return "Lfo1>Osc1"; + case 50: return "Lfo1>Osc2"; + case 51: return "Lfo1>PulsWidth"; + case 52: return "Lfo1>Resonance"; + case 53: return "Lfo1>FiltGain"; + case 54: return "Lfo2Symmetry"; + case 55: return "Lfo2>Shape"; + case 56: return "Lfo2>FmAmount"; + case 57: return "Lfo2>Cutoff1"; + case 58: return "Lfo2>Cutoff2"; + case 59: return "Lfo2>Panorama"; + case 60: return "Lfo3Rate"; + case 61: return "Lfo3OscAmount"; + case 62: return "Osc1ShapeVel"; + case 63: return "Osc2ShapeVel"; + case 64: return "PulsWidthVel"; + case 65: return "FmAmountVel"; + case 66: return "Filt1EnvVel"; + case 67: return "Filt2EnvVel"; + case 68: return "Resonance1Vel"; + case 69: return "Resonance2Vel"; + case 70: return "AmplifierVel"; + case 71: return "PanoramaVel"; + case 72: return "Assign1Amt1"; + case 73: return "Assign2Amt1"; + case 74: return "Assign2Amt2"; + case 75: return "Assign3Amt1"; + case 76: return "Assign3Amt2"; + case 77: return "Assign3Amt3"; + case 78: return "ClockTempo"; + case 79: return "InputThru"; + case 80: return "OscInitPhase"; + case 81: return "PunchIntensity"; + case 82: return "Ringmodulator"; + case 83: return "NoiseColor"; + case 84: return "DelayColor"; + case 85: return "AnalogBoostInt"; + case 86: return "AnalogBstTune"; + case 87: return "DistortionInt"; + case 88: return "RingModMix"; + case 89: return "Osc3Volume"; + case 90: return "Osc3Semitone"; + case 91: return "Osc3Detune"; + case 92: return "Lfo1AssignAmt"; + case 93: return "Lfo2AssignAmt"; + case 94: return "PhaserMix"; + case 95: return "PhaserRate"; + case 96: return "PhaserDepth"; + case 97: return "PhaserFrequency"; + case 98: return "PhaserFeedback"; + case 99: return "PhaserSpread"; + case 100: return "RevDecayTime"; + case 101: return "ReverbDamping"; + case 102: return "ReverbColor"; + case 103: return "ReverbFeedback"; + case 104: return "SecondBalance"; + case 105: return "ArpMode"; + case 106: return "ArpPattern"; + case 107: return "ArpClock"; + case 108: return "ArpNoteLength"; + case 109: return "ArpSwing"; + case 110: return "ArpOctaves"; + case 111: return "ArpHold"; + case 112: return "EqMidGain"; + case 113: return "EqMidFreq"; + case 114: return "EqMidQFactor"; + case 115: return "Assign4Amt"; + case 116: return "Assign5Amt"; + case 117: return "Assign6Amt"; + default: return juce::String(v); + } + } + const std::initializer_list<Parameter::Description> Controller::m_paramsDescription = { {Parameter::Page::A, Parameter::Class::PERFORMANCE_CONTROLLER, 0, "Bank Select", {0, 3 + 26}, numToBank, {}, false, true, false}, // The Virus TI contains 4 banks of RAM, followed by 26 banks of ROM @@ -736,26 +1032,26 @@ namespace Virus {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 58, "Second Output Balance", {0,127}, {},{}, true, false, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 60, "Amp Velocity", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 61, "Panorama Velocity", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 62, "Soft Knob-1 Single", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 63, "Soft Knob-2 Single", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 64, "Assign1 Source", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 65, "Assign1 Destination", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 62, "Soft Knob-1 Single", {0,127}, numToSoftKnobDest, {}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 63, "Soft Knob-2 Single", {0,127}, numToSoftKnobDest, {}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 64, "Assign1 Source", {0,27}, numToModMatrixSource, {}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 65, "Assign1 Destination", {0,122}, numToModMatrixDest, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 66, "Assign1 Amount", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 67, "Assign2 Source", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 68, "Assign2 Destination1", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 67, "Assign2 Source", {0,27}, numToModMatrixSource,{}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 68, "Assign2 Destination1", {0,122}, numToModMatrixDest,{}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 69, "Assign2 Amount1", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 70, "Assign2 Destination2", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 70, "Assign2 Destination2", {0,122}, numToModMatrixDest, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 71, "Assign2 Amount2", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 72, "Assign3 Source", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 73, "Assign3 Destination1", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 72, "Assign3 Source", {0,127}, numToModMatrixSource, {}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 73, "Assign3 Destination1", {0,122}, numToModMatrixDest,{}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 74, "Assign3 Amount1", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 75, "Assign3 Destination2", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 75, "Assign3 Destination2", {0,122}, numToModMatrixDest,{}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 76, "Assign3 Amount2", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 77, "Assign2 Destination3", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 77, "Assign2 Destination3", {0,122}, numToModMatrixDest,{}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 78, "Assign2 Amount3", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 79, "LFO1 Assign Dest", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 79, "LFO1 Assign Dest", {0,122}, numToModMatrixDest, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 80, "LFO1 Assign Amount", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 81, "LFO2 Assign Dest", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 81, "LFO2 Assign Dest", {0,122}, numToModMatrixDest, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B, 82, "LFO2 Assign Amount", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 84, "Phaser Mode", {0,6}, {},{}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 85, "Phaser Mix", {0,127}, {},{}, true, false, false}, @@ -774,14 +1070,14 @@ namespace Virus {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 99, "Input Ringmodulator", {0,127}, {},{}, true, false, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 100, "Distortion Curve", {0,6}, {},{}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 101, "Distortion Intensity", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 102, "Assign 4 Source", {0,27}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 103, "Assign 4 Destination", {0,122}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 102, "Assign 4 Source", {0,27}, numToModMatrixSource,{}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 103, "Assign 4 Destination", {0,122}, numToModMatrixSource, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C,104, "Assign 4 Amount", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 105, "Assign 5 Source", {0,27}, {},{}, true, true, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 106, "Assign 5 Destination", {0,127}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 105, "Assign 5 Source", {0,27}, numToModMatrixSource, {}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 106, "Assign 5 Destination", {0,122}, numToModMatrixDest, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 107, "Assign 5 Amount", {0,127}, paramTo7bitSigned, textTo7bitSigned, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 108, "Assign 6 Source", {0,127}, {},{}, true, false, false}, - {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 109, "Assign 6 Destination", {0,122}, {},{}, true, false, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 108, "Assign 6 Source", {0,27}, numToModMatrixSource, {}, true, true, false}, + {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 109, "Assign 6 Destination", {0,122}, numToModMatrixDest, {}, true, true, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 110, "Assign 6 Amount", {0,127}, paramTo7bitSigned, {}, true, false, false}, {Parameter::Page::B, Parameter::Class::SOUNDBANK_B|Parameter::Class::VIRUS_C, 122, "Filter Select", {0,2}, {},{}, true, true, false},