Vital
|
A SynthModule and NoteHandler that manages a pool of polyphonic voices, handles note-on/off logic, and routes the data to multiple processors. More...
#include <voice_handler.h>
Public Types | |
enum | { kPolyphony , kVoicePriority , kVoiceOverride , kNumInputs } |
Input indexes for VoiceHandler control parameters. More... | |
enum | VoiceOverride { kKill , kSteal , kNumVoiceOverrides } |
Behavior for assigning a new note when at max polyphony. More... | |
enum | VoicePriority { kNewest , kOldest , kHighest , kLowest , kRoundRobin , kNumVoicePriorities } |
Determines the voice stealing strategy (oldest, newest, highest, etc.). More... | |
Public Member Functions | |
VoiceHandler (int num_outputs, int polyphony, bool control_rate=false) | |
Constructs a VoiceHandler with a given polyphony and outputs. | |
VoiceHandler ()=delete | |
Disabled default constructor; must specify polyphony and output count. | |
virtual | ~VoiceHandler () |
Virtual destructor. | |
virtual Processor * | clone () const override |
Clones this VoiceHandler. Not supported for this class. | |
virtual void | process (int num_samples) override |
Processes audio for a block of samples. For each active voice, triggers events, updates parameters, and runs its Processor. | |
virtual void | init () override |
Initializes the voice and global routers, then calls SynthModule::init(). | |
virtual void | setSampleRate (int sample_rate) override |
Sets the sample rate for both mono/global and voice (poly) routers. | |
void | setTuning (const Tuning *tuning) |
Sets the custom Tuning object (if any) for note->frequency conversion. | |
int | getNumActiveVoices () |
Returns the number of currently active voices (not dead). | |
force_inline int | getNumPressedNotes () |
Returns how many notes are pressed (including partial states). | |
bool | isNotePlaying (int note) |
Checks if a given MIDI note is playing. | |
bool | isNotePlaying (int note, int channel) |
Checks if a given MIDI note is playing on a particular channel. | |
void | allSoundsOff () override |
Immediately turns off all sounding notes and stops all sound production. | |
void | allNotesOff (int sample) override |
Turns off all currently active notes, optionally specifying a sample index for timing. | |
void | allNotesOff (int sample, int channel) override |
Turns off all currently active notes on a specific MIDI channel, optionally specifying a sample index. | |
void | allNotesOffRange (int sample, int from_channel, int to_channel) |
virtual void | noteOn (int note, mono_float velocity, int sample, int channel) override |
Handles a MIDI note-on event, starting a note with a specified velocity and timing. | |
virtual void | noteOff (int note, mono_float velocity, int sample, int channel) override |
Handles a MIDI note-off event, releasing a currently active note. | |
void | setAftertouch (int note, mono_float aftertouch, int sample, int channel) |
Handles per-note aftertouch for a specific note and channel. | |
void | setChannelAftertouch (int channel, mono_float aftertouch, int sample) |
Sets channel-wide aftertouch (applies to all voices on that channel). | |
void | setChannelRangeAftertouch (int from_channel, int to_channel, mono_float aftertouch, int sample) |
Sets channel-wide aftertouch for a range of channels. | |
void | setChannelSlide (int channel, mono_float aftertouch, int sample) |
Sets channel-wide MPE "slide" for a single channel. | |
void | setChannelRangeSlide (int from_channel, int to_channel, mono_float aftertouch, int sample) |
Sets channel-wide MPE "slide" for a range of channels. | |
void | sustainOn (int channel) |
Turns on sustain for a single channel. | |
void | sustainOff (int sample, int channel) |
Turns off sustain for a single channel, prompting voices to release. | |
void | sostenutoOn (int channel) |
Turns on sostenuto for a single channel. | |
void | sostenutoOff (int sample, int channel) |
Turns off sostenuto for a single channel, prompting release if not sustained. | |
void | sustainOnRange (int from_channel, int to_channel) |
Turns on sustain for a range of channels. | |
void | sustainOffRange (int sample, int from_channel, int to_channel) |
Turns off sustain for a range of channels, prompting voices to release. | |
void | sostenutoOnRange (int from_channel, int to_channel) |
Turns on sostenuto for a range of channels. | |
void | sostenutoOffRange (int sample, int from_channel, int to_channel) |
Turns off sostenuto for a range of channels, prompting release if not sustained. | |
poly_mask | getCurrentVoiceMask () |
Returns a mask for the last active voice, used for writing to output buffers. | |
force_inline void | setModWheel (mono_float value, int channel=0) |
Sets the mod wheel value for a single channel. | |
force_inline void | setModWheelAllChannels (mono_float value) |
Sets the mod wheel value for all channels at once. | |
force_inline void | setPitchWheel (mono_float value, int channel=0) |
Sets the pitch wheel value for a single channel, applying to all held voices on that channel. | |
force_inline void | setZonedPitchWheel (mono_float value, int from_channel, int to_channel) |
Sets pitch wheel in a zoned manner for a range of MIDI channels. | |
force_inline Output * | voice_event () |
Returns a pointer to the voice_event Output, used to track voice On/Off/Kill events. | |
force_inline Output * | retrigger () |
Returns a pointer to the retrigger Output, used for controlling certain envelope triggers. | |
force_inline Output * | reset () |
Returns a pointer to the reset Output, indicating a full voice reset (On from Dead). | |
force_inline Output * | note () |
Returns a pointer to the note Output, giving the current tuned note frequency or pitch. | |
force_inline Output * | last_note () |
Returns a pointer to the last_note Output, giving the previous note (for legato transitions). | |
force_inline Output * | note_pressed () |
Returns a pointer to the note_pressed Output, a count of how many times a note was pressed. | |
force_inline Output * | note_count () |
Returns a pointer to note_count, a global note counter. | |
force_inline Output * | note_in_octave () |
Returns a pointer to note_in_octave, a fractional note position in [0..1). | |
force_inline Output * | channel () |
Returns a pointer to channel, indicating the MIDI channel of the voice. | |
force_inline Output * | velocity () |
Returns a pointer to velocity, the note-on velocity. | |
force_inline Output * | lift () |
Returns a pointer to lift, the note-off velocity or release velocity. | |
force_inline Output * | aftertouch () |
Returns a pointer to aftertouch, storing per-voice or channel-based aftertouch. | |
force_inline Output * | slide () |
Returns a pointer to slide, the MPE "slide" expression value. | |
force_inline Output * | active_mask () |
Returns a pointer to active_mask, a mask that indicates which voices are active. | |
force_inline Output * | pitch_wheel () |
Returns a pointer to pitch_wheel, storing the pitch-bend range for each channel. | |
force_inline Output * | pitch_wheel_percent () |
Returns a pointer to pitch_wheel_percent, a normalized [0..1] version of pitch_wheel. | |
force_inline Output * | local_pitch_bend () |
Returns a pointer to local_pitch_bend, the per-voice pitch bend output. | |
force_inline Output * | mod_wheel () |
Returns a pointer to mod_wheel, storing the mod wheel value for each channel. | |
force_inline Output * | getAccumulatedOutput (Output *output) |
Retrieves the accumulated Output associated with a given output pointer. | |
force_inline int | polyphony () |
Returns the current maximum polyphony (number of active voices allowed). | |
mono_float | getLastActiveNote () const |
Gets the last active note's tuned frequency (or 0 if none). | |
virtual ProcessorRouter * | getMonoRouter () override |
Returns the monophonic (global) ProcessorRouter for this VoiceHandler. | |
virtual ProcessorRouter * | getPolyRouter () override |
Returns the polyphonic (voice) ProcessorRouter for this VoiceHandler. | |
void | addProcessor (Processor *processor) override |
Adds a Processor to be managed by this router. | |
void | addIdleProcessor (Processor *processor) override |
Adds a Processor that should remain idle (not processed) in the router. | |
void | removeProcessor (Processor *processor) override |
Removes a Processor from this router. | |
void | addGlobalProcessor (Processor *processor) |
Adds a Processor to the "global" (monophonic) router, e.g. for final mixing or master effects. | |
void | removeGlobalProcessor (Processor *processor) |
Removes a Processor from the global router. | |
void | resetFeedbacks (poly_mask reset_mask) override |
Resets any feedback paths in the poly router, applying the given mask. | |
Output * | registerOutput (Output *output) override |
Registers an Output with this VoiceHandler, returning a pointer to a new accumulated or single-lane Output. | |
Output * | registerControlRateOutput (Output *output, bool active) |
Registers a control-rate Output with the VoiceHandler. | |
Output * | registerOutput (Output *output, int index) override |
Not implemented index-based registerOutput override (asserts false). | |
void | setPolyphony (int polyphony) |
Sets the polyphony to a new value, allocating or freeing voices as needed. | |
force_inline void | setVoiceKiller (const Output *killer) |
Specifies an Output from a Processor used to detect silence or inactivity for voice killing. | |
force_inline void | setVoiceKiller (const Processor *killer) |
Overload for setting the voice killer from a Processor directly. | |
force_inline void | setVoiceMidi (const Output *midi) |
Sets the Output that provides the current MIDI note for the voice. | |
force_inline void | setLegato (bool legato) |
Enables or disables legato mode (disables retriggers if still in Held state). | |
force_inline bool | legato () |
Returns true if legato mode is enabled. | |
bool | isPolyphonic (const Processor *processor) const override |
Checks if a given Processor is handled by the poly (voice) router. | |
virtual void | setOversampleAmount (int oversample) override |
Sets the oversampling factor for both SynthModule and the internal poly/mono routers. | |
void | setActiveNonaccumulatedOutput (Output *output) |
Marks an Output as "active" for non-accumulated usage (e.g., for the last active voice only). | |
void | setInactiveNonaccumulatedOutput (Output *output) |
Marks an Output as "inactive" for non-accumulated usage, effectively disabling it. | |
![]() | |
SynthModule (int num_inputs, int num_outputs, bool control_rate=false) | |
Constructs a SynthModule with specified I/O and control rate. | |
virtual | ~SynthModule () |
Destructor. | |
control_map | getControls () |
Returns a map of all controls from this module and its submodules. | |
Output * | getModulationSource (std::string name) |
Retrieves a modulation source output by name. | |
const StatusOutput * | getStatusOutput (std::string name) const |
Retrieves a StatusOutput by name. | |
Processor * | getModulationDestination (std::string name, bool poly) |
Retrieves a modulation destination Processor by name and poly mode. | |
Processor * | getMonoModulationDestination (std::string name) |
Retrieves a mono modulation destination by name. | |
Processor * | getPolyModulationDestination (std::string name) |
Retrieves a poly modulation destination by name. | |
ValueSwitch * | getModulationSwitch (std::string name, bool poly) |
Retrieves a modulation switch by name and poly mode. | |
ValueSwitch * | getMonoModulationSwitch (std::string name) |
Retrieves a mono modulation switch by name. | |
ValueSwitch * | getPolyModulationSwitch (std::string name) |
Retrieves a poly modulation switch by name. | |
void | updateAllModulationSwitches () |
Updates all modulation switches based on whether their destinations have inputs. | |
output_map & | getModulationSources () |
Returns a reference to the map of modulation sources. | |
input_map & | getMonoModulationDestinations () |
Returns a reference to the map of mono modulation destinations. | |
input_map & | getPolyModulationDestinations () |
Returns a reference to the map of poly modulation destinations. | |
virtual output_map & | getMonoModulations () |
Returns a reference to the map of mono modulation readouts. | |
virtual output_map & | getPolyModulations () |
Returns a reference to the map of poly modulation readouts. | |
virtual void | correctToTime (double seconds) |
Allows correction of module state to a given time (if needed). | |
void | enableOwnedProcessors (bool enable) |
Enables or disables all owned processors. | |
virtual void | enable (bool enable) override |
Enables or disables this SynthModule and its owned processors. | |
void | addMonoProcessor (Processor *processor, bool own=true) |
Adds a mono processor to this module. | |
void | addIdleMonoProcessor (Processor *processor) |
Adds a mono processor that is considered idle (not part of main processing chain). | |
void | addSubmodule (SynthModule *module) |
Adds a submodule to this SynthModule. | |
![]() | |
ProcessorRouter (int num_inputs=0, int num_outputs=0, bool control_rate=false) | |
Constructs a ProcessorRouter with a specified number of inputs and outputs. | |
ProcessorRouter (const ProcessorRouter &original) | |
Copy constructor. Creates a new ProcessorRouter from an existing one. | |
virtual | ~ProcessorRouter () |
Destructor. | |
virtual void | addProcessorRealTime (Processor *processor) |
Adds a Processor to the router in real-time (no memory allocations). | |
void | connect (Processor *destination, const Output *source, int index) |
Connects a source Output to a destination Processor input by index. | |
void | disconnect (const Processor *destination, const Output *source) |
Disconnects a source Output from a destination Processor. | |
bool | isDownstream (const Processor *first, const Processor *second) const |
Checks if one Processor is downstream from another, i.e., if there's a path from the second to the first. | |
bool | areOrdered (const Processor *first, const Processor *second) const |
Checks if the order of two Processors is fixed in the router's processing sequence. | |
![]() | |
Processor (int num_inputs, int num_outputs, bool control_rate=false, int max_oversample=1) | |
Constructs a Processor with a given number of inputs/outputs and oversampling. | |
virtual | ~Processor () |
Virtual destructor. | |
virtual bool | hasState () const |
Indicates whether this Processor requires per-voice state. | |
virtual void | processWithInput (const poly_float *audio_in, int num_samples) |
An optional processing function taking explicit input buffer. Fallback is an assertion failure (not supported). | |
virtual void | reset (poly_mask reset_mask) |
Called to reset the Processor's per-voice state (e.g., on note-on). | |
virtual void | hardReset () |
Called to perform a "hard" reset for all voices. | |
bool | initialized () |
Returns whether this Processor has been initialized. | |
force_inline bool | enabled () const |
Checks if this Processor is enabled. | |
force_inline int | getSampleRate () const |
Retrieves the current (effective) sample rate. | |
force_inline int | getOversampleAmount () const |
Retrieves the current oversampling factor. | |
force_inline bool | isControlRate () const |
Checks if this Processor is running at control rate (buffer_size == 1). | |
virtual void | setControlRate (bool control_rate) |
Sets whether this Processor runs at control rate. | |
force_inline poly_mask | getResetMask (int input_index) const |
Retrieves a mask indicating which voices triggered a note-on event. Compares the input's trigger_value to kVoiceOn. | |
force_inline void | clearOutputBufferForReset (poly_mask reset_mask, int input_index, int output_index) const |
Clears output samples for voices that are about to be reset, based on the trigger offset. | |
bool | inputMatchesBufferSize (int input=0) |
Checks whether the buffer size of a particular input matches the size needed by this Processor. | |
bool | checkInputAndOutputSize (int num_samples) |
Checks if all inputs and outputs have buffers big enough for num_samples . | |
virtual bool | isPolyphonic () const |
Checks if this Processor is polyphonic by querying its ProcessorRouter. | |
void | plug (const Output *source) |
Connects an external Output to this Processor's first input. | |
void | plug (const Output *source, unsigned int input_index) |
Connects an external Output to a specified input index. | |
void | plug (const Processor *source) |
Connects the first output of a Processor to this Processor's first input. | |
void | plug (const Processor *source, unsigned int input_index) |
Connects the first output of a Processor to a specified input index. | |
void | plugNext (const Output *source) |
Connects an external Output to the first available (unplugged) input. | |
void | plugNext (const Processor *source) |
Connects the first output of a Processor to the first available (unplugged) input. | |
void | useInput (Input *input) |
Uses an existing Input object as this Processor's first input. | |
void | useInput (Input *input, int index) |
Uses an existing Input object at a specified input index. | |
void | useOutput (Output *output) |
Uses an existing Output object as this Processor's first output. | |
void | useOutput (Output *output, int index) |
Uses an existing Output object at a specified output index. | |
int | connectedInputs () |
Counts how many inputs are connected to a real source (not null_source_). | |
virtual void | unplugIndex (unsigned int input_index) |
Removes the connection at a specified input index, if any. | |
virtual void | unplug (const Output *source) |
Removes a connection to a given Output from all inputs. | |
virtual void | unplug (const Processor *source) |
Removes connections to all outputs from a given Processor. | |
virtual void | numInputsChanged () |
Called when the number of inputs changes (e.g., new connections). Subclasses may override for dynamic behavior. | |
force_inline void | router (ProcessorRouter *router) |
Sets the ProcessorRouter that owns or manages this Processor. | |
force_inline ProcessorRouter * | router () const |
Returns the ProcessorRouter that currently owns this Processor. | |
ProcessorRouter * | getTopLevelRouter () const |
Gets the topmost (root) ProcessorRouter by traversing parent routers. | |
virtual void | registerInput (Input *input, int index) |
Registers a new input, appending it to the input list. | |
virtual void | registerInput (Input *input) |
Registers a new Input by appending it to the end of the input list. | |
force_inline int | numInputs () const |
Returns the total number of Input pointers (owned or otherwise). | |
force_inline int | numOutputs () const |
Returns the total number of Output pointers (owned or otherwise). | |
force_inline int | numOwnedInputs () const |
Returns how many Input objects this Processor owns. | |
force_inline int | numOwnedOutputs () const |
Returns how many Output objects this Processor owns. | |
force_inline Input * | input (unsigned int index=0) const |
Retrieves the Input pointer at a given index. | |
force_inline bool | isInputSourcePolyphonic (int index=0) |
Checks if the input source at a given index is polyphonic. | |
force_inline Input * | ownedInput (unsigned int index=0) const |
Retrieves an owned Input pointer at a given index. | |
force_inline Output * | output (unsigned int index=0) const |
Retrieves the Output pointer at a given index. | |
force_inline Output * | ownedOutput (unsigned int index=0) const |
Retrieves an owned Output pointer at a given index. | |
void | setPluggingStart (int start) |
Sets the position at which plugNext starts searching for an open input. | |
![]() | |
virtual | ~NoteHandler () |
Virtual destructor. | |
Static Public Attributes | |
static constexpr mono_float | kLocalPitchBendRange = 48.0f |
Range of local pitch bend in semitones for each voice. | |
Protected Member Functions | |
virtual bool | shouldAccumulate (Output *output) |
Determines whether an Output should be summed across voices (accumulated) or handled individually. | |
![]() | |
Value * | createBaseControl (std::string name, bool audio_rate=false, bool smooth_value=false) |
Creates a simple control processor for a given parameter name. | |
Output * | createBaseModControl (std::string name, bool audio_rate=false, bool smooth_value=false, Output *internal_modulation=nullptr) |
Creates a base mod control, which is a control combined with a modulation input. | |
Output * | createMonoModControl (std::string name, bool audio_rate=false, bool smooth_value=false, Output *internal_modulation=nullptr) |
Creates a monophonic mod control, including applying parameter scaling. | |
Output * | createPolyModControl (std::string name, bool audio_rate=false, bool smooth_value=false, Output *internal_modulation=nullptr, Input *reset=nullptr) |
Creates a polyphonic mod control, including applying parameter scaling. | |
Output * | createTempoSyncSwitch (std::string name, Processor *frequency, const Output *beats_per_second, bool poly, Input *midi=nullptr) |
Creates a tempo sync switch that toggles between tempo-based frequency and free-running frequency. | |
void | createStatusOutput (std::string name, Output *source) |
Creates a status output associated with a given Output. | |
![]() | |
virtual void | addFeedback (Feedback *feedback) |
Adds a Feedback node to handle a feedback loop introduced by a connection. | |
virtual void | removeFeedback (Feedback *feedback) |
Removes a previously added Feedback node. | |
void | reorder (Processor *processor) |
Reorders the internal processing sequence to account for a Processor's dependencies. | |
virtual void | updateAllProcessors () |
Updates all processors to match the global order. Called when changes occur. | |
force_inline bool | shouldUpdate () |
Checks if local changes need to be synchronized with global changes. | |
virtual void | createAddedProcessors () |
Creates any processors that were added at the global level but not yet replicated locally. | |
virtual void | deleteRemovedProcessors () |
Deletes any processors that were removed at the global level but not yet removed locally. | |
const Processor * | getContext (const Processor *processor) const |
Gets the processor context within this router for a global Processor reference. | |
void | getDependencies (const Processor *processor) const |
Populates the internal dependencies structure for a given Processor. | |
Processor * | getLocalProcessor (const Processor *global_processor) |
Retrieves the local instance of a globally defined Processor. | |
![]() | |
Output * | addOutput (int oversample=1) |
Creates and registers a new Output. Handles control rate vs. audio rate. | |
Input * | addInput () |
Creates and registers a new Input, initially connected to null_source_. | |
Additional Inherited Members | |
![]() | |
std::shared_ptr< ModuleData > | data_ |
Shared data storage for this SynthModule. | |
![]() | |
std::shared_ptr< CircularQueue< Processor * > > | global_order_ |
Global processing order reference. | |
std::shared_ptr< CircularQueue< Processor * > > | global_reorder_ |
Temporary storage for reorder operations. | |
CircularQueue< Processor * > | local_order_ |
Local ordering of Processors. | |
std::map< const Processor *, std::pair< int, std::unique_ptr< Processor > > > | processors_ |
Map of global to local Processors. | |
std::map< const Processor *, std::unique_ptr< Processor > > | idle_processors_ |
Idle Processors that are not active in the graph. | |
std::shared_ptr< std::vector< const Feedback * > > | global_feedback_order_ |
Global order of Feedback nodes. | |
std::vector< Feedback * > | local_feedback_order_ |
Local copies of Feedback nodes. | |
std::map< const Processor *, std::pair< int, std::unique_ptr< Feedback > > > | feedback_processors_ |
Map of global to local Feedback processors. | |
std::shared_ptr< int > | global_changes_ |
Global change counter. | |
int | local_changes_ |
Local change counter to track synchronization with global changes. | |
std::shared_ptr< CircularQueue< const Processor * > > | dependencies_ |
Queue for dependencies calculations. | |
std::shared_ptr< CircularQueue< const Processor * > > | dependencies_visited_ |
Queue of visited processors for dependencies calc. | |
std::shared_ptr< CircularQueue< const Processor * > > | dependency_inputs_ |
Queue of processors to check inputs for dependencies. | |
![]() | |
std::shared_ptr< ProcessorState > | state_ |
Shared state (sample rate, oversample, etc.) | |
int | plugging_start_ |
The index at which plugNext starts searching for an unplugged input. | |
std::vector< std::shared_ptr< Input > > | owned_inputs_ |
Inputs owned by this Processor. | |
std::vector< std::shared_ptr< Output > > | owned_outputs_ |
Outputs owned by this Processor. | |
std::shared_ptr< std::vector< Input * > > | inputs_ |
All inputs, owned or external. | |
std::shared_ptr< std::vector< Output * > > | outputs_ |
All outputs, owned or external. | |
ProcessorRouter * | router_ |
The ProcessorRouter that manages this Processor. | |
![]() | |
static const Output | null_source_ |
A null (dummy) source used for unconnected inputs. | |
A SynthModule and NoteHandler that manages a pool of polyphonic voices, handles note-on/off logic, and routes the data to multiple processors.
The VoiceHandler class takes in note events (MIDI or otherwise) and dispatches them to available or stolen voices, tracks voice states (e.g., sustaining), and provides outputs that other modules can use to render audio or handle modulation based on active voices.
anonymous enum |
Input indexes for VoiceHandler control parameters.
vital::VoiceHandler::VoiceHandler | ( | int | num_outputs, |
int | polyphony, | ||
bool | control_rate = false ) |
Constructs a VoiceHandler with a given polyphony and outputs.
num_outputs | How many output channels to allocate (e.g., for various mod outputs). |
polyphony | Number of voices to allow. |
control_rate | True if running at control rate (buffer_size == 1). |
|
delete |
Disabled default constructor; must specify polyphony and output count.
|
virtual |
Virtual destructor.
|
inline |
Returns a pointer to active_mask, a mask that indicates which voices are active.
void vital::VoiceHandler::addGlobalProcessor | ( | Processor * | processor | ) |
Adds a Processor to the "global" (monophonic) router, e.g. for final mixing or master effects.
|
overridevirtual |
Adds a Processor that should remain idle (not processed) in the router.
processor | The idle Processor to add. |
Reimplemented from vital::ProcessorRouter.
|
overridevirtual |
Adds a Processor to be managed by this router.
processor | The Processor to add. |
The Processor becomes part of the routing graph. The router ensures that the Processor is run at the appropriate point in the signal flow.
Reimplemented from vital::ProcessorRouter.
|
inline |
Returns a pointer to aftertouch, storing per-voice or channel-based aftertouch.
|
overridevirtual |
Turns off all currently active notes, optionally specifying a sample index for timing.
sample | The sample index at which to turn off notes. |
Implements vital::NoteHandler.
|
overridevirtual |
Turns off all currently active notes on a specific MIDI channel, optionally specifying a sample index.
sample | The sample index at which to turn off notes. |
channel | The MIDI channel for which to turn off notes. |
Implements vital::NoteHandler.
void vital::VoiceHandler::allNotesOffRange | ( | int | sample, |
int | from_channel, | ||
int | to_channel ) |
|
overridevirtual |
Immediately turns off all sounding notes and stops all sound production.
Implements vital::NoteHandler.
|
inline |
Returns a pointer to channel, indicating the MIDI channel of the voice.
|
inlineoverridevirtual |
Clones this VoiceHandler. Not supported for this class.
Reimplemented from vital::SynthModule.
Reimplemented in vital::EffectsModulationHandler, and vital::SynthVoiceHandler.
|
inline |
poly_mask vital::VoiceHandler::getCurrentVoiceMask | ( | ) |
Returns a mask for the last active voice, used for writing to output buffers.
mono_float vital::VoiceHandler::getLastActiveNote | ( | ) | const |
Gets the last active note's tuned frequency (or 0 if none).
|
inlineoverridevirtual |
Returns the monophonic (global) ProcessorRouter for this VoiceHandler.
Reimplemented from vital::ProcessorRouter.
int vital::VoiceHandler::getNumActiveVoices | ( | ) |
Returns the number of currently active voices (not dead).
|
inline |
Returns how many notes are pressed (including partial states).
|
inlineoverridevirtual |
Returns the polyphonic (voice) ProcessorRouter for this VoiceHandler.
Reimplemented from vital::ProcessorRouter.
|
overridevirtual |
Initializes the voice and global routers, then calls SynthModule::init().
Reimplemented from vital::ProcessorRouter.
Reimplemented in vital::EffectsModulationHandler, and vital::SynthVoiceHandler.
bool vital::VoiceHandler::isNotePlaying | ( | int | note | ) |
Checks if a given MIDI note is playing.
note | The MIDI note to check. |
bool vital::VoiceHandler::isNotePlaying | ( | int | note, |
int | channel ) |
Checks if a given MIDI note is playing on a particular channel.
note | The MIDI note to check. |
channel | The MIDI channel to check. |
|
overridevirtual |
Checks if a given Processor is handled by the poly (voice) router.
processor | The Processor to check. |
processor
belongs to the voice_router_, false otherwise. Reimplemented from vital::ProcessorRouter.
|
inline |
Returns a pointer to the last_note Output, giving the previous note (for legato transitions).
|
inline |
Returns true if legato mode is enabled.
|
inline |
Returns a pointer to lift, the note-off velocity or release velocity.
|
inline |
Returns a pointer to local_pitch_bend, the per-voice pitch bend output.
|
inline |
Returns a pointer to mod_wheel, storing the mod wheel value for each channel.
|
inline |
Returns a pointer to the note Output, giving the current tuned note frequency or pitch.
|
inline |
Returns a pointer to note_count, a global note counter.
|
inline |
Returns a pointer to note_in_octave, a fractional note position in [0..1).
|
inline |
Returns a pointer to the note_pressed Output, a count of how many times a note was pressed.
|
overridevirtual |
Handles a MIDI note-off event, releasing a currently active note.
note | The MIDI note number (0-127). |
lift | The release velocity (0.0 to 1.0). |
sample | The sample index at which the note-off occurs. |
channel | The MIDI channel on which the note-off occurred. |
Implements vital::NoteHandler.
Reimplemented in vital::EffectsModulationHandler, and vital::SynthVoiceHandler.
|
overridevirtual |
Handles a MIDI note-on event, starting a note with a specified velocity and timing.
note | The MIDI note number (0-127). |
velocity | The velocity of the note-on event (0.0 to 1.0). |
sample | The sample index at which the note-on occurs. |
channel | The MIDI channel on which the note-on occurred. |
Implements vital::NoteHandler.
Reimplemented in vital::EffectsModulationHandler, and vital::SynthVoiceHandler.
|
inline |
Returns a pointer to pitch_wheel, storing the pitch-bend range for each channel.
|
inline |
Returns a pointer to pitch_wheel_percent, a normalized [0..1] version of pitch_wheel.
|
inline |
Returns the current maximum polyphony (number of active voices allowed).
|
overridevirtual |
Processes audio for a block of samples. For each active voice, triggers events, updates parameters, and runs its Processor.
num_samples | The number of samples in this processing block. |
Reimplemented from vital::ProcessorRouter.
Reimplemented in vital::EffectsModulationHandler, and vital::SynthVoiceHandler.
Registers a control-rate Output with the VoiceHandler.
output | The original Output pointer. |
active | Whether this output is "active" (if false, it won't get updates). |
Registers an Output with this VoiceHandler, returning a pointer to a new accumulated or single-lane Output.
Reimplemented from vital::Processor.
Not implemented index-based registerOutput override (asserts false).
Reimplemented from vital::Processor.
void vital::VoiceHandler::removeGlobalProcessor | ( | Processor * | processor | ) |
Removes a Processor from the global router.
|
overridevirtual |
Removes a Processor from this router.
processor | The Processor to remove. |
Reimplemented from vital::ProcessorRouter.
|
inline |
Returns a pointer to the reset Output, indicating a full voice reset (On from Dead).
|
overridevirtual |
Resets any feedback paths in the poly router, applying the given mask.
reset_mask | The mask of voices to reset. |
Reimplemented from vital::ProcessorRouter.
|
inline |
Returns a pointer to the retrigger Output, used for controlling certain envelope triggers.
void vital::VoiceHandler::setActiveNonaccumulatedOutput | ( | Output * | output | ) |
void vital::VoiceHandler::setAftertouch | ( | int | note, |
mono_float | aftertouch, | ||
int | sample, | ||
int | channel ) |
Handles per-note aftertouch for a specific note and channel.
note | The MIDI note. |
aftertouch | The aftertouch value. |
sample | The sample index for the event. |
channel | MIDI channel. |
void vital::VoiceHandler::setChannelAftertouch | ( | int | channel, |
mono_float | aftertouch, | ||
int | sample ) |
Sets channel-wide aftertouch (applies to all voices on that channel).
channel | MIDI channel. |
aftertouch | The aftertouch value. |
sample | The sample index for the event. |
void vital::VoiceHandler::setChannelRangeAftertouch | ( | int | from_channel, |
int | to_channel, | ||
mono_float | aftertouch, | ||
int | sample ) |
Sets channel-wide aftertouch for a range of channels.
void vital::VoiceHandler::setChannelRangeSlide | ( | int | from_channel, |
int | to_channel, | ||
mono_float | aftertouch, | ||
int | sample ) |
Sets channel-wide MPE "slide" for a range of channels.
void vital::VoiceHandler::setChannelSlide | ( | int | channel, |
mono_float | aftertouch, | ||
int | sample ) |
Sets channel-wide MPE "slide" for a single channel.
void vital::VoiceHandler::setInactiveNonaccumulatedOutput | ( | Output * | output | ) |
|
inline |
Enables or disables legato mode (disables retriggers if still in Held state).
legato | True to enable legato mode, false otherwise. |
|
inline |
Sets the mod wheel value for a single channel.
value | The new mod wheel value [0..1]. |
channel | The MIDI channel. |
|
inline |
Sets the mod wheel value for all channels at once.
value | The new mod wheel value [0..1]. |
|
inlineoverridevirtual |
Sets the oversampling factor for both SynthModule and the internal poly/mono routers.
oversample | The new oversampling factor. |
Reimplemented from vital::ProcessorRouter.
|
inline |
Sets the pitch wheel value for a single channel, applying to all held voices on that channel.
value | The new pitch wheel value [0..1]. |
channel | The MIDI channel. |
void vital::VoiceHandler::setPolyphony | ( | int | polyphony | ) |
Sets the polyphony to a new value, allocating or freeing voices as needed.
polyphony | The desired number of voices (1..kMaxActivePolyphony). |
|
overridevirtual |
Sets the sample rate for both mono/global and voice (poly) routers.
sample_rate | The base sample rate (pre-oversampling). |
Reimplemented from vital::ProcessorRouter.
|
inline |
|
inline |
|
inline |
Overload for setting the voice killer from a Processor directly.
|
inline |
|
inline |
Sets pitch wheel in a zoned manner for a range of MIDI channels.
value | The new pitch wheel value. |
from_channel | Starting channel. |
to_channel | Ending channel (inclusive). |
|
protectedvirtual |
Determines whether an Output should be summed across voices (accumulated) or handled individually.
output | The Output pointer. |
Reimplemented in vital::EffectsModulationHandler, and vital::SynthVoiceHandler.
|
inline |
Returns a pointer to slide, the MPE "slide" expression value.
void vital::VoiceHandler::sostenutoOff | ( | int | sample, |
int | channel ) |
Turns off sostenuto for a single channel, prompting release if not sustained.
void vital::VoiceHandler::sostenutoOffRange | ( | int | sample, |
int | from_channel, | ||
int | to_channel ) |
Turns off sostenuto for a range of channels, prompting release if not sustained.
void vital::VoiceHandler::sostenutoOn | ( | int | channel | ) |
Turns on sostenuto for a single channel.
void vital::VoiceHandler::sostenutoOnRange | ( | int | from_channel, |
int | to_channel ) |
Turns on sostenuto for a range of channels.
void vital::VoiceHandler::sustainOff | ( | int | sample, |
int | channel ) |
Turns off sustain for a single channel, prompting voices to release.
void vital::VoiceHandler::sustainOffRange | ( | int | sample, |
int | from_channel, | ||
int | to_channel ) |
Turns off sustain for a range of channels, prompting voices to release.
void vital::VoiceHandler::sustainOn | ( | int | channel | ) |
Turns on sustain for a single channel.
void vital::VoiceHandler::sustainOnRange | ( | int | from_channel, |
int | to_channel ) |
Turns on sustain for a range of channels.
|
inline |
Returns a pointer to velocity, the note-on velocity.
|
inline |
Returns a pointer to the voice_event Output, used to track voice On/Off/Kill events.
|
staticconstexpr |
Range of local pitch bend in semitones for each voice.