Gin
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | List of all members
ModMatrix Class Reference

Modulation matrix system for routing multiple modulation sources to parameters. More...

#include <gin_modmatrix.h>

Inheritance diagram for ModMatrix:

Public Types

enum  PolarityMode { unipolar , bipolar , sameAsSource }
 Modulation polarity modes for source-to-destination mapping. More...
 
using Function = ModFunction
 Backwards-compatible alias for ModFunction.
 

Public Member Functions

 ModMatrix ()=default
 
 ~ModMatrix () override=default
 
void setDefaultPolarityMode (PolarityMode m)
 
void stateUpdated (const juce::ValueTree &vt)
 
void updateState (juce::ValueTree &vt)
 
float getValue (gin::Parameter *p, bool smoothed=true)
 
float getValue (ModVoice &voice, gin::Parameter *p, bool smoothed=true)
 
void setMonoValue (ModSrcId id, float value)
 
void setPolyValue (ModVoice &voice, ModSrcId id, float value)
 
void finishBlock (int numSamples)
 
void addVoice (ModVoice *v)
 
ModSrcId addMonoModSource (const juce::String &id, const juce::String &name, bool bipolar)
 
ModSrcId addPolyModSource (const juce::String &id, const juce::String &name, bool bipolar)
 
void addParameter (gin::Parameter *p, bool poly, float smoothingTime=0.02f)
 
void setSampleRate (double sampleRate)
 
void build ()
 
void enableLearn (ModSrcId source) override
 
void disableLearn () override
 
ModSrcId getLearn () override
 
int getNumModSources () override
 
juce::String getModSrcName (ModSrcId src) override
 
bool getModSrcPoly (ModSrcId src) override
 
bool getModSrcBipolar (ModSrcId src) override
 
juce::String getModDstName (ModDstId dst) override
 
juce::Array< ModSrcIdgetModSources (gin::Parameter *) override
 
ParametergetParameter (ModDstId d) override
 
bool isModulated (ModDstId param) override
 
float getModDepth (ModSrcId src, ModDstId param) override
 
std::vector< std::pair< ModDstId, float > > getModDepths (ModSrcId src) override
 
std::vector< std::pair< ModSrcId, float > > getModDepths (ModDstId param) override
 
void setModDepth (ModSrcId src, ModDstId param, float f) override
 
void clearModDepth (ModSrcId src, ModDstId param) override
 
ModFunction getModFunction (ModSrcId src, ModDstId param) override
 
void setModFunction (ModSrcId src, ModDstId param, ModFunction f) override
 
bool getModEnable (ModSrcId src, ModDstId param) override
 
void setModEnable (ModSrcId src, ModDstId param, bool b) override
 
bool getModBipolarMapping (ModSrcId src, ModDstId param) override
 
void setModBipolarMapping (ModSrcId src, ModDstId param, bool b) override
 
bool shouldShowLiveModValues () override
 
juce::Array< floatgetLiveValues (gin::Parameter *p) override
 
void setOnlyShowModWhenVoiceActive (bool b)
 
void addListener (Listener *l) override
 
void removeListener (Listener *l) override
 
- Public Member Functions inherited from IModMatrix
virtual ~IModMatrix ()=default
 

Static Public Member Functions

static float shape (float v, ModFunction f, bool biPolarSrc, bool biPolarDst)
 

Static Public Attributes

static constexpr ModFunction linear = ModFunction::linear
 
static constexpr ModFunction quadraticIn = ModFunction::quadraticIn
 
static constexpr ModFunction quadraticInOut = ModFunction::quadraticInOut
 
static constexpr ModFunction quadraticOut = ModFunction::quadraticOut
 
static constexpr ModFunction sineIn = ModFunction::sineIn
 
static constexpr ModFunction sineInOut = ModFunction::sineInOut
 
static constexpr ModFunction sineOut = ModFunction::sineOut
 
static constexpr ModFunction exponentialIn = ModFunction::exponentialIn
 
static constexpr ModFunction exponentialInOut = ModFunction::exponentialInOut
 
static constexpr ModFunction exponentialOut = ModFunction::exponentialOut
 
static constexpr ModFunction invLinear = ModFunction::invLinear
 
static constexpr ModFunction invQuadraticIn = ModFunction::invQuadraticIn
 
static constexpr ModFunction invQuadraticInOut = ModFunction::invQuadraticInOut
 
static constexpr ModFunction invQuadraticOut = ModFunction::invQuadraticOut
 
static constexpr ModFunction invSineIn = ModFunction::invSineIn
 
static constexpr ModFunction invSineInOut = ModFunction::invSineInOut
 
static constexpr ModFunction invSineOut = ModFunction::invSineOut
 
static constexpr ModFunction invExponentialIn = ModFunction::invExponentialIn
 
static constexpr ModFunction invExponentialInOut = ModFunction::invExponentialInOut
 
static constexpr ModFunction invExponentialOut = ModFunction::invExponentialOut
 

Detailed Description

Modulation matrix system for routing multiple modulation sources to parameters.

The ModMatrix provides a flexible modulation routing system commonly used in synthesizers and audio effects. It allows multiple modulation sources (LFOs, envelopes, velocity, etc.) to control multiple destination parameters with configurable depth, enable/disable, and curve shaping.

Key Features:

Usage:

  1. Create a ModMatrix instance in your synthesizer
  2. Add all parameters using addParameter()
  3. Add modulation sources using addMonoModSource() or addPolyModSource()
  4. Update mod source values from your processing loop
  5. Always retrieve parameter values through the ModMatrix using getValue()

Example:

ModMatrix modMatrix;
// Setup
modMatrix.addParameter(filterCutoff, false);
auto lfo1 = modMatrix.addMonoModSource("lfo1", "LFO 1", true);
auto env1 = modMatrix.addPolyModSource("env1", "Envelope 1", false);
// In processing loop
modMatrix.setPolyValue(voice, env1, envelopeOutput);
float cutoff = modMatrix.getValue(filterCutoff);
Modulation matrix system for routing multiple modulation sources to parameters.
Definition gin_modmatrix.h:98
void setMonoValue(ModSrcId id, float value)
Definition gin_modmatrix.h:302
void setPolyValue(ModVoice &voice, ModSrcId id, float value)
Definition gin_modmatrix.h:310
ModSrcId addPolyModSource(const juce::String &id, const juce::String &name, bool bipolar)
float getValue(gin::Parameter *p, bool smoothed=true)
Definition gin_modmatrix.h:237
ModSrcId addMonoModSource(const juce::String &id, const juce::String &name, bool bipolar)
void addParameter(gin::Parameter *p, bool poly, float smoothingTime=0.02f)
A lightweight 2D point class for projects that don't use juce_graphics.
Definition gin_point.h:25
See also
ModVoice, ModSrcId, ModDstId, IModMatrix

Member Typedef Documentation

◆ Function

Backwards-compatible alias for ModFunction.

Member Enumeration Documentation

◆ PolarityMode

Modulation polarity modes for source-to-destination mapping.

PolarityMode determines how modulation values are interpreted when applied to parameters:

  • unipolar: Modulation ranges from 0 to 1 (always positive)
  • bipolar: Modulation ranges from -1 to 1 (positive and negative)
  • sameAsSource: Use the polarity of the modulation source

This affects how modulation depth is applied and visualized in the UI.

See also
ModMatrix, ModSrcId, ModDstId
Enumerator
unipolar 

0 to 1 (positive only)

bipolar 

-1 to 1 (positive and negative)

sameAsSource 

Match source polarity.

Constructor & Destructor Documentation

◆ ModMatrix()

ModMatrix::ModMatrix ( )
default

◆ ~ModMatrix()

ModMatrix::~ModMatrix ( )
overridedefault

Member Function Documentation

◆ setDefaultPolarityMode()

void ModMatrix::setDefaultPolarityMode ( PolarityMode  m)

◆ stateUpdated()

void ModMatrix::stateUpdated ( const juce::ValueTree &  vt)

◆ updateState()

void ModMatrix::updateState ( juce::ValueTree &  vt)

◆ shape()

static float ModMatrix::shape ( float  v,
ModFunction  f,
bool  biPolarSrc,
bool  biPolarDst 
)
static

◆ getValue() [1/2]

float ModMatrix::getValue ( gin::Parameter *  p,
bool  smoothed = true 
)

◆ getValue() [2/2]

float ModMatrix::getValue ( ModVoice voice,
gin::Parameter *  p,
bool  smoothed = true 
)

References shape().

◆ setMonoValue()

void ModMatrix::setMonoValue ( ModSrcId  id,
float  value 
)

◆ setPolyValue()

void ModMatrix::setPolyValue ( ModVoice voice,
ModSrcId  id,
float  value 
)

◆ finishBlock()

void ModMatrix::finishBlock ( int  numSamples)

◆ addVoice()

void ModMatrix::addVoice ( ModVoice v)

◆ addMonoModSource()

ModSrcId ModMatrix::addMonoModSource ( const juce::String &  id,
const juce::String &  name,
bool  bipolar 
)

◆ addPolyModSource()

ModSrcId ModMatrix::addPolyModSource ( const juce::String &  id,
const juce::String &  name,
bool  bipolar 
)

◆ addParameter()

void ModMatrix::addParameter ( gin::Parameter *  p,
bool  poly,
float  smoothingTime = 0.02f 
)

◆ setSampleRate()

void ModMatrix::setSampleRate ( double  sampleRate)

◆ build()

void ModMatrix::build ( )

◆ enableLearn()

void ModMatrix::enableLearn ( ModSrcId  source)
overridevirtual

Implements IModMatrix.

◆ disableLearn()

void ModMatrix::disableLearn ( )
overridevirtual

Implements IModMatrix.

◆ getLearn()

ModSrcId ModMatrix::getLearn ( )
overridevirtual

Implements IModMatrix.

◆ getNumModSources()

int ModMatrix::getNumModSources ( )
overridevirtual

Implements IModMatrix.

◆ getModSrcName()

juce::String ModMatrix::getModSrcName ( ModSrcId  src)
overridevirtual

Implements IModMatrix.

References ModSrcId::id.

◆ getModSrcPoly()

bool ModMatrix::getModSrcPoly ( ModSrcId  src)
overridevirtual

Implements IModMatrix.

References ModSrcId::id.

◆ getModSrcBipolar()

bool ModMatrix::getModSrcBipolar ( ModSrcId  src)
overridevirtual

Implements IModMatrix.

References ModSrcId::id.

◆ getModDstName()

juce::String ModMatrix::getModDstName ( ModDstId  dst)
overridevirtual

Implements IModMatrix.

◆ getModSources()

juce::Array< ModSrcId > ModMatrix::getModSources ( gin::Parameter *  )
overridevirtual

Implements IModMatrix.

◆ getParameter()

Parameter * ModMatrix::getParameter ( ModDstId  d)
overridevirtual

Implements IModMatrix.

◆ isModulated()

bool ModMatrix::isModulated ( ModDstId  param)
overridevirtual

Implements IModMatrix.

◆ getModDepth()

float ModMatrix::getModDepth ( ModSrcId  src,
ModDstId  param 
)
overridevirtual

Implements IModMatrix.

◆ getModDepths() [1/2]

std::vector< std::pair< ModDstId, float > > ModMatrix::getModDepths ( ModSrcId  src)
overridevirtual

Implements IModMatrix.

◆ getModDepths() [2/2]

std::vector< std::pair< ModSrcId, float > > ModMatrix::getModDepths ( ModDstId  param)
overridevirtual

Implements IModMatrix.

◆ setModDepth()

void ModMatrix::setModDepth ( ModSrcId  src,
ModDstId  param,
float  f 
)
overridevirtual

Implements IModMatrix.

◆ clearModDepth()

void ModMatrix::clearModDepth ( ModSrcId  src,
ModDstId  param 
)
overridevirtual

Implements IModMatrix.

◆ getModFunction()

ModFunction ModMatrix::getModFunction ( ModSrcId  src,
ModDstId  param 
)
overridevirtual

Implements IModMatrix.

◆ setModFunction()

void ModMatrix::setModFunction ( ModSrcId  src,
ModDstId  param,
ModFunction  f 
)
overridevirtual

Implements IModMatrix.

◆ getModEnable()

bool ModMatrix::getModEnable ( ModSrcId  src,
ModDstId  param 
)
overridevirtual

Implements IModMatrix.

◆ setModEnable()

void ModMatrix::setModEnable ( ModSrcId  src,
ModDstId  param,
bool  b 
)
overridevirtual

Implements IModMatrix.

◆ getModBipolarMapping()

bool ModMatrix::getModBipolarMapping ( ModSrcId  src,
ModDstId  param 
)
overridevirtual

Implements IModMatrix.

◆ setModBipolarMapping()

void ModMatrix::setModBipolarMapping ( ModSrcId  src,
ModDstId  param,
bool  b 
)
overridevirtual

Implements IModMatrix.

◆ shouldShowLiveModValues()

bool ModMatrix::shouldShowLiveModValues ( )
overridevirtual

Implements IModMatrix.

◆ getLiveValues()

juce::Array< float > ModMatrix::getLiveValues ( gin::Parameter *  p)
overridevirtual

Implements IModMatrix.

◆ setOnlyShowModWhenVoiceActive()

void ModMatrix::setOnlyShowModWhenVoiceActive ( bool  b)

◆ addListener()

void ModMatrix::addListener ( Listener l)
overridevirtual

Implements IModMatrix.

◆ removeListener()

void ModMatrix::removeListener ( Listener l)
overridevirtual

Implements IModMatrix.

Member Data Documentation

◆ linear

constexpr ModFunction ModMatrix::linear = ModFunction::linear
staticconstexpr

◆ quadraticIn

constexpr ModFunction ModMatrix::quadraticIn = ModFunction::quadraticIn
staticconstexpr

◆ quadraticInOut

constexpr ModFunction ModMatrix::quadraticInOut = ModFunction::quadraticInOut
staticconstexpr

◆ quadraticOut

constexpr ModFunction ModMatrix::quadraticOut = ModFunction::quadraticOut
staticconstexpr

◆ sineIn

constexpr ModFunction ModMatrix::sineIn = ModFunction::sineIn
staticconstexpr

◆ sineInOut

constexpr ModFunction ModMatrix::sineInOut = ModFunction::sineInOut
staticconstexpr

◆ sineOut

constexpr ModFunction ModMatrix::sineOut = ModFunction::sineOut
staticconstexpr

◆ exponentialIn

constexpr ModFunction ModMatrix::exponentialIn = ModFunction::exponentialIn
staticconstexpr

◆ exponentialInOut

constexpr ModFunction ModMatrix::exponentialInOut = ModFunction::exponentialInOut
staticconstexpr

◆ exponentialOut

constexpr ModFunction ModMatrix::exponentialOut = ModFunction::exponentialOut
staticconstexpr

◆ invLinear

constexpr ModFunction ModMatrix::invLinear = ModFunction::invLinear
staticconstexpr

◆ invQuadraticIn

constexpr ModFunction ModMatrix::invQuadraticIn = ModFunction::invQuadraticIn
staticconstexpr

◆ invQuadraticInOut

constexpr ModFunction ModMatrix::invQuadraticInOut = ModFunction::invQuadraticInOut
staticconstexpr

◆ invQuadraticOut

constexpr ModFunction ModMatrix::invQuadraticOut = ModFunction::invQuadraticOut
staticconstexpr

◆ invSineIn

constexpr ModFunction ModMatrix::invSineIn = ModFunction::invSineIn
staticconstexpr

◆ invSineInOut

constexpr ModFunction ModMatrix::invSineInOut = ModFunction::invSineInOut
staticconstexpr

◆ invSineOut

constexpr ModFunction ModMatrix::invSineOut = ModFunction::invSineOut
staticconstexpr

◆ invExponentialIn

constexpr ModFunction ModMatrix::invExponentialIn = ModFunction::invExponentialIn
staticconstexpr

◆ invExponentialInOut

constexpr ModFunction ModMatrix::invExponentialInOut = ModFunction::invExponentialInOut
staticconstexpr

◆ invExponentialOut

constexpr ModFunction ModMatrix::invExponentialOut = ModFunction::invExponentialOut
staticconstexpr

The documentation for this class was generated from the following file: