Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
zrythm::structure::tracks::ModulatorTrack Class Referencefinal

A track that can host modulator plugins. More...

#include <src/structure/tracks/modulator_track.h>

Inheritance diagram for zrythm::structure::tracks::ModulatorTrack:
Collaboration diagram for zrythm::structure::tracks::ModulatorTrack:

Public Types

using PluginBase = gui::old_dsp::plugins::Plugin
 
using PluginPtrVariant = gui::old_dsp::plugins::PluginPtrVariant
 
using PluginRegistry = gui::old_dsp::plugins::PluginRegistry
 
- Public Types inherited from zrythm::structure::tracks::AutomatableTrack
using Plugin = gui::old_dsp::plugins::Plugin
 
using PluginRegistry = gui::old_dsp::plugins::PluginRegistry
 
- Public Types inherited from zrythm::structure::tracks::Track
enum class  Type {
  Instrument , Audio , Master , Chord ,
  Marker , Modulator , AudioBus , AudioGroup ,
  Midi , MidiBus , MidiGroup , Folder
}
 The Track's type. More...
 
using PortType = dsp::PortType
 
using PluginRegistry = gui::old_dsp::plugins::PluginRegistry
 
using PluginPtrVariant = PluginRegistry::VariantType
 
using PluginSlot = plugins::PluginSlot
 
using ArrangerObject = structure::arrangement::ArrangerObject
 
using ArrangerObjectPtrVariant
 
using ArrangerObjectRegistry = structure::arrangement::ArrangerObjectRegistry
 
using Region = structure::arrangement::Region
 
using TrackSelectionStatusGetter = std::function<bool (const TrackUuid &)>
 
using Color = zrythm::utils::Color
 
using Position = zrythm::dsp::Position
 
- Public Types inherited from IPortOwner
using TrackUuid = dsp::PortIdentifier::TrackUuid
 
using PluginUuid = dsp::PortIdentifier::PluginUuid
 
using PortUuid = dsp::PortIdentifier::PortUuid
 

Public Member Functions

PluginPtrVariant insert_modulator (plugins::PluginSlot::SlotNo slot, PluginUuidReference modulator_id, bool replace_mode, bool confirm, bool gen_automatables, bool recalc_graph, bool pub_events)
 Inserts and connects a Modulator to the Track.
 
std::optional< PluginPtrVariant > get_modulator (plugins::PluginSlot::SlotNo slot) const
 
plugins::PluginSlot get_plugin_slot (const PluginUuid &plugin_id) const
 
void init_loaded (PluginRegistry &plugin_registry, PortRegistry &port_registry) override
 Adds additional metadata to track members after deserialization.
 
void append_ports (std::vector< Port * > &ports, bool include_plugins) const final
 Appends all channel ports and optionally plugin ports to the array.
 
auto get_modulator_macro_processors () const
 
auto get_modulator_span () const
 
- Public Member Functions inherited from zrythm::structure::tracks::ProcessableTrack
 ProcessableTrack (PortRegistry &port_registry, bool new_identity)
 
void init_loaded (gui::old_dsp::plugins::PluginRegistry &plugin_registry, PortRegistry &port_registry) override
 Adds additional metadata to track members after deserialization.
 
bool get_monitor_audio () const
 Returns whether monitor audio is on.
 
void set_monitor_audio (bool monitor, bool auto_select, bool fire_events)
 Sets whether monitor audio is on.
 
void fill_midi_events (const EngineProcessTimeInfo &time_nfo, dsp::MidiEventVector &midi_events)
 Wrapper for MIDI/instrument/chord tracks to fill in MidiEvents from the timeline data.
 
void process_block (EngineProcessTimeInfo time_nfo) override
 
- Public Member Functions inherited from zrythm::structure::tracks::AutomatableTrack
 AutomatableTrack (PortRegistry &port_registry, bool new_identity)
 
AutomationTracklistget_automation_tracklist () const
 
void set_automation_visible (bool visible)
 Set automation visible and fire events.
 
void generate_automation_tracks ()
 Generates automatables for the track.
 
void clear_objects () override
 Removes all objects recursively from the track.
 
void get_regions_in_range (std::vector< Region * > &regions, const Position *p1, const Position *p2) override
 Returns all the regions inside the given range, or all the regions if both p1 and p2 are NULL.
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, AutomatableTrack> && FinalClass<base_type<DerivedT>>
std::optional< PluginPtrVariant > get_plugin_at_slot (this DerivedT &&self, PluginSlot slot)
 Returns the plugin at the given slot, if any.
 
void generate_automation_tracks_for_plugin (const Plugin::Uuid &plugin_id)
 Generates automatables for the plugin.
 
- Public Member Functions inherited from zrythm::structure::tracks::Track
Tracklistget_tracklist () const
 
dsp::PortConnectionsManagerget_port_connections_manager () const
 
bool has_piano_roll () const
 
bool should_be_visible () const
 Returns whether the track should be visible.
 
bool is_folder () const
 
bool is_audio_group () const
 
bool is_midi_group () const
 
bool is_audio_bus () const
 
bool is_midi_bus () const
 
bool is_modulator () const
 
bool is_chord () const
 
bool is_marker () const
 
bool is_audio () const
 
bool is_instrument () const
 
bool is_midi () const
 
bool is_master () const
 
bool is_deletable () const
 
bool is_copyable () const
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, Track> && FinalClass<base_type<DerivedT>>
double get_full_visible_height (this DerivedT &&self)
 Returns the full visible height (main height + height of all visible automation tracks + height of all visible lanes).
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, Track> && FinalClass<base_type<DerivedT>>
bool multiply_heights (this DerivedT &&self, double multiplier, bool visible_only, bool check_only)
 
bool is_auditioner () const
 Whether this track is part of the SampleProcessor auditioner tracklist.
 
bool can_be_group_target () const
 
bool is_frozen () const
 
template<arrangement::FinalRegionSubclass RegionT, FinalClass SelfT>
void insert_region (this SelfT &self, arrangement::ArrangerObjectUuidReference region_ref, AutomationTrack *at, std::optional< int > lane_pos, std::optional< int > idx, bool gen_name)
 Inserts a Region to the given lane or AutomationTrack of the track, at the given index.
 
void write_audio_clip_to_pool_after_adding_audio_region (AudioClip &clip) const
 
template<arrangement::FinalRegionSubclass RegionT>
void add_region (this auto &self, auto region_ref, AutomationTrack *at, std::optional< int > lane_pos, bool gen_name)
 Appends a Region to the given lane or AutomationTrack of the track.
 
void append_objects (std::vector< ArrangerObjectPtrVariant > &objects) const
 Appends all the objects in the track to objects.
 
void unselect_all ()
 Unselects all arranger objects in the track.
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, Track> && FinalClass<base_type<DerivedT>>
bool contains_uninstantiated_plugin (this DerivedT &&self)
 
utils::Utf8String get_node_name () const override
 Returns a human friendly name of the node.
 
void add_folder_parents (std::vector< FoldableTrack * > &parents, bool prepend) const
 Adds the track's folder parents to the given vector.
 
FoldableTrackget_direct_folder_parent () const
 Returns the closest foldable parent or NULL.
 
void remove_from_folder_parents ()
 Remove the track from all folders.
 
utils::Utf8String get_name () const
 Getter for the track name.
 
bool set_name_with_action_full (const utils::Utf8String &name)
 Internally called by set_name_with_action().
 
void set_name_with_action (const utils::Utf8String &name)
 Setter to be used by the UI to create an undoable action.
 
void set_name (const Tracklist &tracklist, const utils::Utf8String &name, bool pub_events)
 Setter for the track name.
 
utils::Utf8String get_unique_name (const Tracklist &tracklist, const utils::Utf8String &name)
 Returns a unique name for a new track based on the given name.
 
void update_positions (bool from_ticks, bool bpm_change, dsp::FramesPerTick frames_per_tick)
 Updates the frames/ticks of each position in each child of the track recursively.
 
int get_index () const
 
void set_index (int index)
 
auto get_input_signal_type () const
 
auto get_output_signal_type () const
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, Track> && FinalClass<base_type<DerivedT>>
void get_plugins (this DerivedT &&self, std::vector< zrythm::gui::old_dsp::plugins::Plugin * > &arr)
 Fills in the given array with all plugins in the track.
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, Track> && FinalClass<base_type<DerivedT>>
void activate_all_plugins (this DerivedT &&self, bool activate)
 Activate or deactivate all plugins.
 
utils::Utf8String get_comment () const
 
void set_comment (const utils::Utf8String &comment, bool undoable)
 
void set_comment_with_action (const utils::Utf8String &comment)
 
void set_color (const Color &color, bool undoable, bool fire_events)
 Sets the track color.
 
void set_icon (const utils::Utf8String &icon_name, bool undoable, bool fire_events)
 Sets the track icon.
 
void track_freeze (bool freeze)
 Freezes or unfreezes the track.
 
template<typename DerivedT>
requires std::derived_from<base_type<DerivedT>, Track> && FinalClass<base_type<DerivedT>>
PluginPtrVariant insert_plugin (this DerivedT &&self, PluginUuid plugin_id, plugins::PluginSlot slot, bool instantiate_plugin, bool replacing_plugin, bool moving_plugin, bool confirm, bool gen_automatables, bool recalc_graph, bool fire_events)
 Wrapper over Channel.add_plugin() and ModulatorTrack.insert_modulator().
 
template<typename SelfT>
requires ( std::derived_from<SelfT, ChannelTrack> || std::is_same_v<SelfT, ModulatorTrack>)
void remove_plugin (this SelfT &self, plugins::PluginSlot slot, bool moving_plugin=false, bool deleting_plugin=true)
 Removes a plugin at the given slot from the track.
 
template<typename SelfT>
requires ( std::derived_from<SelfT, ChannelTrack> || std::is_same_v<SelfT, ModulatorTrack>)
plugins::PluginSlot get_plugin_slot (this const SelfT &self, const PluginUuid &plugin_id)
 
bool is_enabled () const
 
bool get_enabled () const
 
bool get_disabled () const
 
void set_enabled (bool enabled)
 
void set_enabled (bool enabled, bool trigger_undo, bool auto_select, bool fire_events)
 
int get_total_bars (const engine::session::Transport &transport, int total_bars) const
 
void set_caches (CacheType types)
 Set various caches (snapshots, track name hash, plugin input/output ports, etc).
 
void set_port_metadata_from_owner (dsp::PortIdentifier &id, PortRange &range) const override
 Function that will be called by the Port to update the identifier's relevant members based on this port owner.
 
utils::Utf8String get_full_designation_for_port (const dsp::PortIdentifier &id) const override
 
virtual bool get_muted () const
 
virtual bool get_listened () const
 
virtual bool get_implied_soloed () const
 Returns whether the track is not soloed on its own but its direct out (or its direct out's direct out, etc.) is soloed.
 
virtual bool get_soloed () const
 
void set_selection_status_getter (TrackSelectionStatusGetter getter)
 
void unset_selection_status_getter ()
 
auto & get_plugin_registry () const
 
auto & get_plugin_registry ()
 
auto & get_port_registry () const
 
auto & get_port_registry ()
 
auto & get_object_registry () const
 
auto & get_object_registry ()
 
auto get_type () const
 
auto get_icon_name () const
 
- Public Member Functions inherited from zrythm::dsp::graph::IProcessable
virtual nframes_t get_single_playback_latency () const
 Returns the latency of only the given processable, without adding the previous/next latencies.
 
virtual void prepare_for_processing (sample_rate_t sample_rate, nframes_t max_block_length)
 Called to allocate resources required for processing.
 
virtual void release_resources ()
 Called to release resources allocated by prepare_for_processing().
 
- Public Member Functions inherited from IPortOwner
virtual void on_control_change_event (const PortUuid &port_uuid, const dsp::PortIdentifier &id, float val)
 Will be called when a control port's value changes.
 
virtual void on_midi_activity (const dsp::PortIdentifier &id)
 Called during processing if the MIDI port contains new MIDI events.
 
virtual bool should_sum_data_from_backend () const
 Whether during processing, the port should sum the data from its backend buffers coming in.
 
virtual bool should_bounce_to_master (utils::audio::BounceStep step) const
 Whether the port should add its data to the master output when bouncing.
 
virtual bool are_events_on_midi_channel_approved (midi_byte_t channel) const
 Returns whether MIDI events on this channel on an input port should be processed (not ignored).
 
- Public Member Functions inherited from zrythm::utils::UuidIdentifiableObject< Track >
 UuidIdentifiableObject (const Uuid &id)
 
 UuidIdentifiableObject (const UuidIdentifiableObject &other)=default
 
 UuidIdentifiableObject (UuidIdentifiableObject &&other)=default
 
UuidIdentifiableObjectoperator= (const UuidIdentifiableObject &other)=default
 
UuidIdentifiableObjectoperator= (UuidIdentifiableObject &&other)=default
 
auto get_uuid () const
 
- Public Member Functions inherited from zrythm::utils::InitializableObject< ModulatorTrack >
 Z_DISABLE_COPY_MOVE (InitializableObject)
 

Data Fields

std::vector< PluginUuidReferencemodulators_
 Modulators.
 
std::vector< std::unique_ptr< ModulatorMacroProcessor > > modulator_macro_processors_
 Modulator macros.
 
- Data Fields inherited from zrythm::structure::tracks::ProcessableTrack
std::unique_ptr< TrackProcessorprocessor_
 The TrackProcessor, used for processing.
 
- Data Fields inherited from zrythm::structure::tracks::AutomatableTrack
AutomationTracklistautomation_tracklist_ = nullptr
 
bool automation_visible_ = false
 Flag to set automations visible or not.
 
- Data Fields inherited from zrythm::structure::tracks::Track
bool bounce_ {}
 Set to ON during bouncing if this track should be included.
 
bool bounce_to_master_ = false
 Whether to temporarily route the output to master (e.g., when bouncing the track on its own without its parents).
 
bool disconnecting_ = false
 Whether currently disconnecting.
 
bool trigger_midi_activity_ = false
 Flag to tell the UI that this channel had MIDI activity.
 
std::optional< AudioClip::Uuid > frozen_clip_id_
 Pool ID of the clip if track is frozen (unset if not frozen).
 
Tracklisttracklist_ = nullptr
 Pointer to owner tracklist, if any.
 
std::optional< TrackSelectionStatusGetter > track_selection_status_getter_
 Track selection status getter.
 

Friends

class InitializableObject
 
struct ModulatorImportData
 
void init_from (ModulatorTrack &obj, const ModulatorTrack &other, utils::ObjectCloneType clone_type)
 
void to_json (nlohmann::json &j, const ModulatorTrack &track)
 
void from_json (const nlohmann::json &j, ModulatorTrack &track)
 

Additional Inherited Members

- Static Public Member Functions inherited from zrythm::structure::tracks::Track
static Fader::Type type_get_prefader_type (const Type type)
 Returns the prefader type.
 
static constexpr bool type_can_have_direct_out (Type type)
 
static bool type_can_have_region_type (Type type, ArrangerObject::Type region_type)
 
static constexpr bool type_is_copyable (Type type)
 
static constexpr bool type_is_deletable (Type type)
 Returns whether a track of the given type should be deletable by the user.
 
static Type type_get_from_plugin_descriptor (const zrythm::plugins::PluginDescriptor &descr)
 
static consteval bool type_has_mono_compat_switch (const Type tt)
 
static constexpr bool type_is_compatible_for_moving (const Type type1, const Type type2)
 Returns if regions in tracks from type1 can be moved to type2.
 
static constexpr bool type_has_piano_roll (const Type type)
 Returns if the Track should have a piano roll.
 
static constexpr bool type_has_inputs (const Type type)
 Returns if the Track should have an inputs selector.
 
static bool type_can_be_group_target (const Type type)
 Returns if the Track can be a direct route target.
 
template<typename T>
static consteval Type get_type_for_class ()
 
static Trackfrom_variant (const TrackPtrVariant &variant)
 
static bool is_plugin_descriptor_valid_for_slot_type (const plugins::PluginDescriptor &descr, zrythm::plugins::PluginSlotType slot_type, Track::Type track_type)
 Returns if descr can be dropped at slot_type in a track of type track_type.
 
static void create_with_action (Type type, const zrythm::plugins::PluginConfiguration *pl_setting, const FileDescriptor *file_descr, const dsp::Position *pos, int index, int num_tracks, int disable_track_idx, TracksReadyCallback ready_cb)
 Creates a new track with the given parameters.
 
static Trackcreate_empty_at_idx_with_action (Type type, int index)
 Creates a new empty track at the given index.
 
static Trackcreate_for_plugin_at_idx_w_action (Type type, const zrythm::plugins::PluginConfiguration *pl_setting, int index)
 Creates a new track for the given plugin at the given index.
 
template<typename T = Track>
static T * create_for_plugin_at_idx_w_action (const zrythm::plugins::PluginConfiguration *pl_setting, int index)
 
static Trackcreate_empty_with_action (Type type)
 Creates a new empty track at the end of the tracklist.
 
template<typename T = Track>
static T * create_empty_with_action ()
 
static TrackUniquePtrVariant create_track (Type type, const utils::Utf8String &name, int pos)
 Create a track of the given type with the given name and position.
 
- Static Public Member Functions inherited from zrythm::utils::InitializableObject< ModulatorTrack >
static std::shared_ptr< ModulatorTrack > create_shared (Args &&... args)
 Creates a shared pointer to initialized object.
 
static std::unique_ptr< ModulatorTrack > create_unique (Args &&... args)
 Creates a unique pointer to initialized object.
 
- Static Public Attributes inherited from zrythm::structure::tracks::Track
static constexpr int MIN_HEIGHT = 26
 
static constexpr int DEF_HEIGHT = 52
 
- Protected Member Functions inherited from zrythm::structure::tracks::ProcessableTrack
void fill_events_common (const EngineProcessTimeInfo &time_nfo, dsp::MidiEventVector *midi_events, std::optional< std::pair< AudioPort &, AudioPort & > > stereo_ports) const
 Common logic for audio and MIDI/instrument tracks to fill in MidiEvents or StereoPorts from the timeline data.
 
void append_member_ports (std::vector< Port * > &ports, bool include_plugins) const
 
- Protected Member Functions inherited from zrythm::structure::tracks::AutomatableTrack
void set_playback_caches () override
 Set the playback caches for a track.
 
- Protected Member Functions inherited from zrythm::structure::tracks::Track
 Track (Type type, PortType in_signal_type, PortType out_signal_type, PluginRegistry &plugin_registry, PortRegistry &port_registry, ArrangerObjectRegistry &obj_registry)
 Constructor to be used by subclasses.
 
void add_region_if_in_range (const dsp::Position *p1, const dsp::Position *p2, std::vector< Region * > &regions, Region *region)
 
- Protected Member Functions inherited from zrythm::utils::InitializableObject< ModulatorTrack >
 InitializableObject ()=default
 Protected constructor to prevent instantiation.
 
- Protected Attributes inherited from zrythm::structure::tracks::ProcessableTrack
PortRegistryport_registry_
 
- Protected Attributes inherited from zrythm::structure::tracks::Track
PluginRegistryplugin_registry_
 
PortRegistryport_registry_
 
arrangement::ArrangerObjectRegistryobject_registry_
 
int pos_ = 0
 Position in the Tracklist.
 
Type type_ = {}
 The type of track this is.
 
utils::Utf8String name_
 Track name, used in channel too.
 
utils::Utf8String icon_name_
 Icon name of the track.
 
bool visible_ = true
 Track Widget created dynamically.
 
bool filtered_ = false
 Track will be hidden if true (temporary and not serializable).
 
double main_height_ { DEF_HEIGHT }
 Height of the main part (without lanes).
 
bool enabled_ = true
 Active (enabled) or not.
 
Color color_
 Track color.
 
PortType in_signal_type_ = {}
 The input signal type (eg audio bus tracks have audio input signals).
 
PortType out_signal_type_ = {}
 The output signal type (eg midi tracks have MIDI output signals).
 
utils::Utf8String comment_
 User comments.
 

Detailed Description

A track that can host modulator plugins.

Definition at line 19 of file modulator_track.h.

Member Typedef Documentation

◆ PluginBase

◆ PluginPtrVariant

using zrythm::structure::tracks::ModulatorTrack::PluginPtrVariant = gui::old_dsp::plugins::PluginPtrVariant

Definition at line 36 of file modulator_track.h.

◆ PluginRegistry

Member Function Documentation

◆ append_ports()

void zrythm::structure::tracks::ModulatorTrack::append_ports ( std::vector< Port * > & ports,
bool include_plugins ) const
finalvirtual

Appends all channel ports and optionally plugin ports to the array.

Implements zrythm::structure::tracks::Track.

◆ get_modulator_macro_processors()

auto zrythm::structure::tracks::ModulatorTrack::get_modulator_macro_processors ( ) const
inline

Definition at line 72 of file modulator_track.h.

◆ get_modulator_span()

auto zrythm::structure::tracks::ModulatorTrack::get_modulator_span ( ) const
inline

Definition at line 77 of file modulator_track.h.

◆ init_loaded()

void zrythm::structure::tracks::ModulatorTrack::init_loaded ( PluginRegistry & plugin_registry,
PortRegistry & port_registry )
overridevirtual

Adds additional metadata to track members after deserialization.

Note
Each implementor must chain up to its direct superclass.

Reimplemented from zrythm::structure::tracks::AutomatableTrack.

◆ insert_modulator()

PluginPtrVariant zrythm::structure::tracks::ModulatorTrack::insert_modulator ( plugins::PluginSlot::SlotNo slot,
PluginUuidReference modulator_id,
bool replace_mode,
bool confirm,
bool gen_automatables,
bool recalc_graph,
bool pub_events )

Inserts and connects a Modulator to the Track.

Parameters
replace_modeWhether to perform the operation in replace mode (replace current modulator if true, not touching other modulators, or push other modulators forward if false).

Friends And Related Symbol Documentation

◆ InitializableObject

friend class InitializableObject
friend

Definition at line 29 of file modulator_track.h.

◆ ModulatorImportData

friend struct ModulatorImportData
friend

Definition at line 30 of file modulator_track.h.

◆ to_json

void to_json ( nlohmann::json & j,
const ModulatorTrack & track )
friend

Definition at line 82 of file modulator_track.h.

Field Documentation

◆ modulator_macro_processors_

std::vector<std::unique_ptr<ModulatorMacroProcessor> > zrythm::structure::tracks::ModulatorTrack::modulator_macro_processors_

Modulator macros.

Definition at line 100 of file modulator_track.h.

◆ modulators_

std::vector<PluginUuidReference> zrythm::structure::tracks::ModulatorTrack::modulators_

Modulators.

Definition at line 96 of file modulator_track.h.


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