SynthLab SDK
|
This is an aggregate of 4 wavetable oscillators being controlled with the single object that appears as an oscillator to the voice objecgt. More...
#include <wsoscillator.h>
Public Member Functions | |
WSOscillator (std::shared_ptr< MidiInputData > _midiInputData, std::shared_ptr< WSOscParameters > _parameters, std::shared_ptr< WavetableDatabase > _waveTableDatabase, uint32_t blockSize=64) | |
Constructs Wave Sequencing Oscillator module. More... | |
virtual | ~WSOscillator () |
virtual bool | reset (double _sampleRate) override |
Resets object to initialized state. More... | |
virtual bool | update () override |
Updates the the two active oscillators. More... | |
virtual bool | render (uint32_t samplesToProcess=1) override |
Renders audio from the selected core. More... | |
virtual bool | doNoteOn (MIDINoteEvent ¬eEvent) override |
Calls the note-on handler for all cores on all four internal oscillators so that they will be running during the round-robin render phase. More... | |
virtual bool | doNoteOff (MIDINoteEvent ¬eEvent) override |
Calls the note-off handler on four internal oscillators. More... | |
virtual bool | startGlideModulation (GlideInfo &glideInfo) override |
Calls the startGlideModulation handler for the first two oscillators; these will always be the first two in the sequence. More... | |
void | makeWaveStringMap () |
Creates a mapping that links the waveform names to their underlying cores and oscillators. More... | |
void | mixOscBuffers (std::shared_ptr< AudioBuffer > oscBuffers, uint32_t samplesInBlock, double scaling) |
Helper function to mix oscillator buffers together during render() phase into the audio buffers on this SynthModule. More... | |
bool | oscIsFree (uint32_t oscIndex, uint32_t waveAIndex, uint32_t waveBIndex) |
Finds out if oscillator has the same core and waveform index as the selection. More... | |
bool | oscHasWaveIndex (uint32_t oscIndex, uint32_t waveIndex) |
Finds out if oscillator has the same waveform index as the selection. More... | |
void | setNewOscWaveA (uint32_t oscIndex, uint32_t waveAIndex, double oscAMixCoeff) |
Change oscillator's waveform to Wave A. More... | |
void | setNewOscWaveB (uint32_t oscIndex, uint32_t waveBIndex, double oscBMixCoeff) |
Change oscillator's waveform to Wave B. More... | |
std::shared_ptr< Modulators > | getWSOscModulationInput (uint32_t oscIndex) |
Gets the modulation input array pointer from one of the internal oscillators. More... | |
std::shared_ptr< WTOscillator > | getWTOscillator (uint32_t index) |
Provides direct access to internal oscillator objects. More... | |
void | updateActiveOscillators () |
Updates the two active oscillators during the update() phase. More... | |
Public Member Functions inherited from SynthLab::SynthModule | |
SynthModule (std::shared_ptr< MidiInputData > _midiInputData) | |
Constructs a SynthModule. More... | |
virtual | ~SynthModule () |
Removes cores, if any. | |
virtual bool | initialize (const char *_dllDirectory) |
virtual int32_t | getState () |
virtual bool | shutdown () |
std::shared_ptr< Modulators > | getModulationInput () |
std::shared_ptr< Modulators > | getModulationOutput () |
std::shared_ptr< AudioBuffer > | getAudioBuffers () |
void | setUnisonMode (double _unisonDetuneCents, double _unisonStarPhase) |
void | setFMBuffer (std::shared_ptr< AudioBuffer > pmBuffer) |
void | clearFMBuffer () |
virtual bool | getModuleStrings (std::vector< std::string > &moduleStrings, std::string ignoreStr="") |
Gets a std::vector of Module Strings. More... | |
virtual bool | getModuleStrings (uint32_t coreIndex, std::vector< std::string > &moduleStrings, std::string ignoreStr) |
Gets a std::vector of Module Strings from a particular core. More... | |
virtual bool | getAllModuleStrings (std::vector< std::string > &moduleStrings, std::string ignoreStr) |
Gets a std::vector of all Module Strings concatenated from all cores in succession. More... | |
virtual bool | getModKnobStrings (std::vector< std::string > &modKnobStrings) |
Gets a std::vector of Mod Knob label strings for the selected core. More... | |
virtual bool | getModKnobStrings (uint32_t coreIndex, std::vector< std::string > &modKnobStrings) |
Gets a std::vector of Mod Knob label strings for a given core; if the core cannot be found returs the mod knob labels of the module itself. More... | |
virtual bool | getModuleCoreStrings (std::vector< std::string > &moduleCoreStrings) |
Gets a std::vector of the names of the four cores in this module. More... | |
virtual bool | addModuleCore (std::shared_ptr< ModuleCore > core) |
adds a module core to the module's set of four More... | |
virtual uint32_t | getSelectedCoreIndex () |
get the index of the selected core More... | |
virtual bool | selectModuleCore (uint32_t index) |
Select a core. More... | |
virtual bool | selectDefaultModuleCore () |
Select the default core, which is always the first in the list. More... | |
virtual void | packCores () |
packs the cores into non-null ordering | |
virtual bool | clearModuleCores () |
Clears out the module core pointer list. More... | |
virtual void | setStandAloneMode (bool b) |
Sets the stand-alone mode flag on all cores. More... | |
Protected Attributes | |
std::shared_ptr< WSOscParameters > | parameters = nullptr |
std::shared_ptr< WTOscillator > | waveSeqOsc [NUM_WS_OSCILLATORS] = { nullptr, nullptr, nullptr, nullptr } |
std::shared_ptr< WTOscParameters > | waveSeqParams [NUM_WS_OSCILLATORS] = { nullptr, nullptr, nullptr, nullptr } |
uint32_t | activeOsc [2] = { 0, 1 } |
active pair | |
int32_t | currSoloWave = -1 |
double | oscMixCoeff [NUM_WS_OSCILLATORS] = { 0.0, 0.0, 0.0, 0.0 } |
bool | initRoundRobin = true |
std::vector< WaveStringData > | waveStringFinder |
Protected Attributes inherited from SynthLab::SynthModule | |
std::shared_ptr< Modulators > | modulationInput = std::make_shared<Modulators>() |
std::shared_ptr< Modulators > | modulationOutput = std::make_shared<Modulators>() |
std::shared_ptr< MidiInputData > | midiInputData = nullptr |
std::shared_ptr< AudioBuffer > | audioBuffers = nullptr |
std::unique_ptr< GlideModulator > | glideModulator |
std::shared_ptr< AudioBuffer > | fmBuffer = nullptr |
std::shared_ptr< ModuleCore > | moduleCores [NUM_MODULE_CORES] |
std::shared_ptr< ModuleCore > | selectedCore = nullptr |
ModuleCoreData | moduleData |
modulestrings (16) and mod knob labels (4) More... | |
double | unisonDetuneCents = 0.0 |
double | unisonStartPhase = 0.0 |
bool | standAloneMode = false |
CoreProcData | coreProcessData |
std::string | dllDirectory |
This is an aggregate of 4 wavetable oscillators being controlled with the single object that appears as an oscillator to the voice objecgt.
Base Class: SynthModule
Databases: WavetableDatabase
GUI Parameters: WTOscParameters
std::shared_ptr<WTOscParameters> getParameters()
Ordinarily, this operation happens just prior to calling the render() function so that is the preferred method of operation to avoid multiple calls to the update() function, which is usually the most CPU intensive function of the SynthModule.
Access to Modulators
Access to audio buffers (I/O)
Reads:
Writes:
Construction:
(1) For use within a synth project, the constructor is specialized to use shared recources for:
The owning object (SynthVoice for the SynthLab projects) must pass these valid pointers to the object at construction time. Typically the engine or voice will be the primary synthesizers of these resources. See the 2nd Edition Synth Book for more information.
(2) Standalone:
To use in standalone mode, call the constructor with the shared resoure pointers as null:
WTOscillator(nullptr, nullptr, nullptr, 64);
In standalone mode, the object creates and maintains these resources:
Render:
SynthLab::WSOscillator::WSOscillator | ( | std::shared_ptr< MidiInputData > | _midiInputData, |
std::shared_ptr< WSOscParameters > | _parameters, | ||
std::shared_ptr< WavetableDatabase > | _waveTableDatabase, | ||
uint32_t | blockSize = 64 |
||
) |
Constructs Wave Sequencing Oscillator module.
One and only specialized constructor; pointers may be null for stanalone
_midiInputData | shared MIDI input resource; may be nullptr |
_parameters | shared GUI and operational parameters; may be nullptr |
_waveTableDatabase | shared wavetable resource; may be nullptr |
blockSize | the synth block process size in frames (stereo) |
|
inlinevirtual |
Destructor is empty: all resources are smart pointers
|
overridevirtual |
Calls the note-off handler on four internal oscillators.
Implements SynthLab::SynthModule.
|
overridevirtual |
Calls the note-on handler for all cores on all four internal oscillators so that they will be running during the round-robin render phase.
Implements SynthLab::SynthModule.
std::shared_ptr< Modulators > SynthLab::WSOscillator::getWSOscModulationInput | ( | uint32_t | oscIndex | ) |
Gets the modulation input array pointer from one of the internal oscillators.
functions for accessing oscillators and modulation inputs
oscIndex | index in oscillator array |
std::shared_ptr< WTOscillator > SynthLab::WSOscillator::getWTOscillator | ( | uint32_t | oscIndex | ) |
Provides direct access to internal oscillator objects.
oscIndex | index in oscillator array |
void SynthLab::WSOscillator::makeWaveStringMap | ( | ) |
Creates a mapping that links the waveform names to their underlying cores and oscillators.
functions for dealing with multiple oscillators
void SynthLab::WSOscillator::mixOscBuffers | ( | std::shared_ptr< AudioBuffer > | oscBuffers, |
uint32_t | samplesInBlock, | ||
double | scaling | ||
) |
Helper function to mix oscillator buffers together during render() phase into the audio buffers on this SynthModule.
oscBuffers | audio buffers to add to the audio output buffers |
samplesInBlock | samples to add |
scaling | a multiplier/divider used for scaling during mixing |
bool SynthLab::WSOscillator::oscHasWaveIndex | ( | uint32_t | oscIndex, |
uint32_t | waveIndex | ||
) |
Finds out if oscillator has the same waveform index as the selection.
oscIndex | index in oscillator array |
waveIndex | index of waveform for the wave-string-finder |
bool SynthLab::WSOscillator::oscIsFree | ( | uint32_t | oscIndex, |
uint32_t | waveAIndex, | ||
uint32_t | waveBIndex | ||
) |
Finds out if oscillator has the same core and waveform index as the selection.
functions for setting or swapping oscillators
oscIndex | index in oscillator array |
waveAIndex | index of waveform A for the wave-string-finder |
waveBIndex | index of waveform B for the wave-string-finder |
|
overridevirtual |
Renders audio from the selected core.
samplesToProcess | the number of samples in this audio block |
Implements SynthLab::SynthModule.
|
overridevirtual |
Resets object to initialized state.
SynthModule Overrides
_sampleRate | the current sample rate in Hz |
Implements SynthLab::SynthModule.
void SynthLab::WSOscillator::setNewOscWaveA | ( | uint32_t | oscIndex, |
uint32_t | waveAIndex, | ||
double | oscAMixCoeff | ||
) |
Change oscillator's waveform to Wave A.
oscIndex | index in oscillator array |
waveAIndex | index of waveform A for the wave-string-finder |
oscAMixCoeff | mixing coefficient for the waveform to try to keep levels consistent across oscillators and waveforms |
void SynthLab::WSOscillator::setNewOscWaveB | ( | uint32_t | oscIndex, |
uint32_t | waveBIndex, | ||
double | oscBMixCoeff | ||
) |
Change oscillator's waveform to Wave B.
oscIndex | index in oscillator array |
waveBIndex | index of waveform B for the wave-string-finder |
oscAMixCoeff | mixing coefficient for the waveform to try to keep levels consistent across oscillators and waveforms |
|
overridevirtual |
Calls the startGlideModulation handler for the first two oscillators; these will always be the first two in the sequence.
Reimplemented from SynthLab::SynthModule.
|
overridevirtual |
Updates the the two active oscillators.
Implements SynthLab::SynthModule.
void SynthLab::WSOscillator::updateActiveOscillators | ( | ) |