Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
|
Abstract base class for a track that can be routed to. More...
#include <src/structure/tracks/group_target_track.h>
Public Member Functions | |
virtual void | update_children () final |
Updates the track's children. | |
virtual void | remove_child (Track::Uuid child_id, bool disconnect, bool recalc_graph, bool pub_events) final |
Removes a child track from the list of children. | |
void | remove_all_children (bool disconnect, bool recalc_graph, bool pub_events) |
Remove all known children. | |
void | add_child (Track::Uuid child_id, bool connect, bool recalc_graph, bool pub_events) |
Adds a child track to the list of children. | |
void | add_children (std::span< const Track::Uuid > children, bool connect, bool recalc_graph, bool pub_events) |
int | find_child (Track::Uuid track_name_hash) |
Returns the index of the child matching the given hash. | |
![]() | |
void | init_loaded (gui::old_dsp::plugins::PluginRegistry &plugin_registry, PortRegistry &port_registry) override |
Adds additional metadata to track members after deserialization. | |
Channel * | get_channel () |
const Channel * | get_channel () const |
Fader * | get_fader (bool post_fader) |
Returns the Fader (if applicable). | |
bool | get_muted () const override |
Returns if the track is muted. | |
bool | get_listened () const override |
Returns if the track is listened. | |
bool | get_implied_soloed () const override |
Returns whether the track is not soloed on its own but its direct out (or its direct out's direct out, etc.) is soloed. | |
bool | get_soloed () const override |
void | set_listened (bool listen, bool trigger_undo, bool auto_select, bool fire_events) |
Generates a menu to be used for channel-related items, eg, fader buttons, direct out, etc. | |
void | set_soloed (bool solo, bool trigger_undo, bool auto_select, bool fire_events) |
Sets track soloed, updates UI and optionally adds the action to the undo stack. | |
void | set_muted (bool mute, bool trigger_undo, bool auto_select, bool fire_events) |
Sets track muted and optionally adds the action to the undo stack. | |
Fader::Type | get_fader_type () |
Returns the Fader::Type. | |
Fader::Type | get_prefader_type () |
![]() | |
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 |
![]() | |
AutomatableTrack (PortRegistry &port_registry, bool new_identity) | |
AutomationTracklist & | get_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 * > ®ions, 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. | |
![]() | |
Tracklist * | get_tracklist () const |
dsp::PortConnectionsManager * | get_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. | |
FoldableTrack * | get_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. | |
virtual void | append_ports (std::vector< Port * > &ports, bool include_plugins) const =0 |
Appends all channel ports and optionally plugin ports to the array. | |
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 |
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 |
![]() | |
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(). | |
![]() | |
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). | |
![]() | |
UuidIdentifiableObject (const Uuid &id) | |
UuidIdentifiableObject (const UuidIdentifiableObject &other)=default | |
UuidIdentifiableObject (UuidIdentifiableObject &&other)=default | |
UuidIdentifiableObject & | operator= (const UuidIdentifiableObject &other)=default |
UuidIdentifiableObject & | operator= (UuidIdentifiableObject &&other)=default |
auto | get_uuid () const |
Data Fields | |
std::vector< Track::Uuid > | children_ |
Name hashes of tracks that are routed to this track, if group track. | |
![]() | |
utils::QObjectUniquePtr< Channel > | channel_ |
Owned channel object. | |
![]() | |
std::unique_ptr< TrackProcessor > | processor_ |
The TrackProcessor, used for processing. | |
![]() | |
AutomationTracklist * | automation_tracklist_ = nullptr |
bool | automation_visible_ = false |
Flag to set automations visible or not. | |
![]() | |
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). | |
Tracklist * | tracklist_ = nullptr |
Pointer to owner tracklist, if any. | |
std::optional< TrackSelectionStatusGetter > | track_selection_status_getter_ |
Track selection status getter. | |
Friends | |
void | init_from (GroupTargetTrack &obj, const GroupTargetTrack &other, utils::ObjectCloneType clone_type) |
void | to_json (nlohmann::json &j, const GroupTargetTrack &track) |
void | from_json (const nlohmann::json &j, GroupTargetTrack &track) |
Additional Inherited Members | |
![]() | |
using | Plugin = gui::old_dsp::plugins::Plugin |
using | PluginRegistry = gui::old_dsp::plugins::PluginRegistry |
![]() | |
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 |
![]() | |
using | TrackUuid = dsp::PortIdentifier::TrackUuid |
using | PluginUuid = dsp::PortIdentifier::PluginUuid |
using | PortUuid = dsp::PortIdentifier::PortUuid |
![]() | |
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 Track * | from_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 Track * | create_empty_at_idx_with_action (Type type, int index) |
Creates a new empty track at the given index. | |
static Track * | create_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 Track * | create_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 constexpr int | MIN_HEIGHT = 26 |
static constexpr int | DEF_HEIGHT = 52 |
![]() | |
ChannelTrack (TrackRegistry &track_registry, PluginRegistry &plugin_registry, PortRegistry &port_registry, bool new_identity) | |
void | append_member_ports (std::vector< Port * > &ports, bool include_plugins) const |
void | init_channel () |
Initializes the channel. | |
![]() | |
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 |
![]() | |
void | set_playback_caches () override |
Set the playback caches for a 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 * > ®ions, Region *region) |
![]() | |
PortRegistry & | port_registry_ |
![]() | |
PluginRegistry & | plugin_registry_ |
PortRegistry & | port_registry_ |
arrangement::ArrangerObjectRegistry & | object_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. | |
Abstract base class for a track that can be routed to.
Children are always ChannelTrack
s since they require a channel to route to a target.
Definition at line 17 of file group_target_track.h.
|
inlineprotectednoexcept |
Definition at line 20 of file group_target_track.h.
void zrythm::structure::tracks::GroupTargetTrack::add_child | ( | Track::Uuid | child_id, |
bool | connect, | ||
bool | recalc_graph, | ||
bool | pub_events ) |
Adds a child track to the list of children.
connect | Connect the child to the group track. |
void zrythm::structure::tracks::GroupTargetTrack::remove_all_children | ( | bool | disconnect, |
bool | recalc_graph, | ||
bool | pub_events ) |
Remove all known children.
disconnect | Also route the children to "None". |
|
finalvirtual |
Updates the track's children.
Used when changing track positions.
|
friend |
Definition at line 84 of file group_target_track.h.
|
friend |
Definition at line 80 of file group_target_track.h.
std::vector<Track::Uuid> zrythm::structure::tracks::GroupTargetTrack::children_ |
Name hashes of tracks that are routed to this track, if group track.
This is used when undoing track deletion.
Definition at line 106 of file group_target_track.h.