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

Abstract class for a track that can be recorded. More...

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

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

Public Member Functions

void init_loaded (PluginRegistry &plugin_registry, PortRegistry &port_registry) override
 Adds additional metadata to track members after deserialization.
 
bool get_recording () const
 
void set_recording (this auto &&self, bool recording)
 Sets recording and connects/disconnects the JACK ports.
 
std::optional< ArrangerObjectPtrVariant > get_recording_region () const
 
template<typename DerivedT>
void init_recordable_track (this DerivedT &self, GenericBoolGetter autoarm_enabled_checker)
 Initializes a recordable track.
 
- Public Member Functions inherited from zrythm::structure::tracks::ProcessableTrack
 ProcessableTrack (PortRegistry &port_registry, bool new_identity)
 
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.
 
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
 
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
 

Data Fields

std::optional< PortUuidReferencerecording_id_
 Recording or not.
 
bool record_set_automatically_ = false
 Whether record was set automatically when the channel was selected.
 
std::optional< Region::Uuid > recording_region_
 Region currently recording on.
 
bool recording_start_sent_ = false
 This is a flag to let the recording manager know that a START signal was already sent for recording.
 
bool recording_stop_sent_ = false
 This is a flag to let the recording manager know that a STOP signal was already sent for recording.i.
 
bool recording_paused_ = false
 This must only be set by the RecordingManager when temporarily pausing recording, eg when looping or leaving the punch range.
 
- 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.
 

Protected Member Functions

 RecordableTrack (PortRegistry &port_registry, bool new_identity)
 
void append_member_ports (std::vector< Port * > &ports, bool include_plugins) const
 
ControlPortget_recording_port () const
 
- 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)
 

Friends

void init_from (RecordableTrack &obj, const RecordableTrack &other, utils::ObjectCloneType clone_type)
 
void to_json (nlohmann::json &j, const RecordableTrack &track)
 
void from_json (const nlohmann::json &j, RecordableTrack &track)
 

Additional Inherited Members

- 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
 
- 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 Attributes inherited from zrythm::structure::tracks::Track
static constexpr int MIN_HEIGHT = 26
 
static constexpr int DEF_HEIGHT = 52
 
- 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

Abstract class for a track that can be recorded.

Definition at line 32 of file recordable_track.h.

Member Function Documentation

◆ get_recording()

bool zrythm::structure::tracks::RecordableTrack::get_recording ( ) const
inline

Definition at line 46 of file recordable_track.h.

◆ get_recording_port()

ControlPort & zrythm::structure::tracks::RecordableTrack::get_recording_port ( ) const
inlineprotected

Definition at line 117 of file recordable_track.h.

◆ get_recording_region()

std::optional< ArrangerObjectPtrVariant > zrythm::structure::tracks::RecordableTrack::get_recording_region ( ) const
inline

Definition at line 77 of file recordable_track.h.

◆ init_loaded()

void zrythm::structure::tracks::RecordableTrack::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::ProcessableTrack.

◆ init_recordable_track()

template<typename DerivedT>
void zrythm::structure::tracks::RecordableTrack::init_recordable_track ( this DerivedT & self,
GenericBoolGetter autoarm_enabled_checker )
inline

Initializes a recordable track.

Definition at line 88 of file recordable_track.h.

◆ set_recording()

void zrythm::structure::tracks::RecordableTrack::set_recording ( this auto && self,
bool recording )
inline

Sets recording and connects/disconnects the JACK ports.

Definition at line 54 of file recordable_track.h.

Friends And Related Symbol Documentation

◆ from_json

void from_json ( const nlohmann::json & j,
RecordableTrack & track )
friend

Definition at line 130 of file recordable_track.h.

◆ init_from

void init_from ( RecordableTrack & obj,
const RecordableTrack & other,
utils::ObjectCloneType clone_type )
friend

Definition at line 105 of file recordable_track.h.

◆ to_json

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

Definition at line 125 of file recordable_track.h.

Field Documentation

◆ record_set_automatically_

bool zrythm::structure::tracks::RecordableTrack::record_set_automatically_ = false

Whether record was set automatically when the channel was selected.

This is so that it can be unset when selecting another track. If we don't do this all the tracks end up staying on record mode.

Definition at line 146 of file recordable_track.h.

◆ recording_id_

std::optional<PortUuidReference> zrythm::structure::tracks::RecordableTrack::recording_id_

Recording or not.

Definition at line 138 of file recordable_track.h.

◆ recording_paused_

bool zrythm::structure::tracks::RecordableTrack::recording_paused_ = false

This must only be set by the RecordingManager when temporarily pausing recording, eg when looping or leaving the punch range.

See RECORDING_EVENT_TYPE_PAUSE_TRACK_RECORDING.

Definition at line 179 of file recordable_track.h.

◆ recording_region_

std::optional<Region::Uuid> zrythm::structure::tracks::RecordableTrack::recording_region_

Region currently recording on.

This must only be set by the RecordingManager when processing an event and should not be touched by anything else.

Definition at line 154 of file recordable_track.h.

◆ recording_start_sent_

bool zrythm::structure::tracks::RecordableTrack::recording_start_sent_ = false

This is a flag to let the recording manager know that a START signal was already sent for recording.

This is because recording_region_ takes a cycle or 2 to become non-NULL.

Definition at line 163 of file recordable_track.h.

◆ recording_stop_sent_

bool zrythm::structure::tracks::RecordableTrack::recording_stop_sent_ = false

This is a flag to let the recording manager know that a STOP signal was already sent for recording.i.

This is because recording_region_ takes a cycle or 2 to become NULL.

Definition at line 171 of file recordable_track.h.


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