Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
automatable_track.h
1// SPDX-FileCopyrightText: © 2024-2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
6#include "dsp/processor_base.h"
7#include "structure/tracks/automation_tracklist.h"
8
9namespace zrythm::structure::tracks
10{
17class AutomatableTrackMixin : public QObject
18{
19 Q_OBJECT
20 QML_ELEMENT
21 Q_PROPERTY (
22 bool automationVisible READ automationVisible WRITE setAutomationVisible
23 NOTIFY automationVisibleChanged)
24 Q_PROPERTY (
25 AutomationTracklist * automationTracklist READ automationTracklist CONSTANT)
26
27public:
28 AutomatableTrackMixin (
30 QObject * parent = nullptr);
31
32 // ========================================================================
33 // QML Interface
34 // ========================================================================
35
36 bool automationVisible () const { return automation_visible_; }
37 void setAutomationVisible (bool visible);
38 Q_SIGNAL void automationVisibleChanged (bool visible);
39
40 AutomationTracklist * automationTracklist () const
41 {
42 return automation_tracklist_.get ();
43 }
44
45 // ========================================================================
46
52 const dsp::ProcessorBase &processor) const
53 {
54 z_debug (
55 "generating automation tracks for {}...", processor.get_node_name ());
56 for (const auto &param_ref : processor.get_parameters ())
57 {
58 auto * const param =
59 param_ref.template get_object_as<dsp::ProcessorParameter> ();
60 if (!param->automatable ())
61 continue;
62
63 ret.emplace_back (
64 utils::make_qobject_unique<AutomationTrack> (
65 dependencies_.tempo_map_, dependencies_.file_audio_source_registry_,
66 dependencies_.object_registry_, param_ref));
67 }
68 }
69
70protected:
71 friend void init_from (
73 const AutomatableTrackMixin &other,
74 utils::ObjectCloneType clone_type);
75
76private:
77 static constexpr auto kAutomationTracklistKey = "automationTracklist"sv;
78 static constexpr auto kAutomationVisibleKey = "automationVisible"sv;
79 friend void to_json (nlohmann::json &j, const AutomatableTrackMixin &track)
80 {
81 j[kAutomationTracklistKey] = track.automation_tracklist_;
82 j[kAutomationVisibleKey] = track.automation_visible_;
83 }
84 friend void from_json (const nlohmann::json &j, AutomatableTrackMixin &track)
85 {
86 track.automation_tracklist_ = utils::make_qobject_unique<
87 AutomationTracklist> (track.dependencies_, &track);
88 from_json (j.at (kAutomationTracklistKey), *track.automation_tracklist_);
89 j.at (kAutomationVisibleKey).get_to (track.automation_visible_);
90 }
91
92private:
93 AutomationTrackHolder::Dependencies dependencies_;
94
96
98 bool automation_visible_{};
99};
100}
A base class for processors in the DSP graph.
utils::Utf8String get_node_name() const final
Returns a human friendly name of the node.
Mixin for a track that has automatable parameters, to be used via composition.
void generate_automation_tracks_for_processor(std::vector< utils::QObjectUniquePtr< AutomationTrack > > &ret, const dsp::ProcessorBase &processor) const
Generates automatables for the given processor.
A container that manages a list of automation tracks.
A unique pointer for QObject objects that also works with QObject-based ownership.
Definition qt.h:25