57class Channel :
public QObject
62 Q_PROPERTY (QVariant preFader READ preFader CONSTANT)
72 using PortType = zrythm::dsp::PortType;
75 using PluginPtrVariant = plugins::PluginPtrVariant;
76 using PluginUuid = Plugin::Uuid;
83 dsp::PortType signal_type,
84 NameProvider name_provider,
85 bool hard_limit_fader_output,
87 QObject * parent =
nullptr);
93 dsp::Fader * fader ()
const {
return fader_.get (); }
94 QVariant preFader ()
const
96 return is_midi () ? QVariant::fromValue (midi_prefader_.get ())
97 : QVariant::fromValue (audio_prefader_.get ());
102 ? std::addressof (audio_postfader_->get_audio_out_port ())
107 return is_midi () ? std::addressof (midi_postfader_->get_midi_out_port (0))
116 bool is_midi ()
const {
return signal_type_ == PortType::Midi; }
117 bool is_audio ()
const {
return signal_type_ == PortType::Audio; }
124 void get_plugins (std::vector<plugins::PluginUuidReference> &plugins)
const;
132 plugins::PluginUuidReference
remove_plugin (plugins::Plugin::Uuid
id);
134 friend void init_from (
136 const Channel &other,
139 dsp::Fader &get_fader ()
const {
return *fader_; }
140 auto &get_midi_pre_fader ()
const {
return *midi_prefader_; }
141 auto &get_audio_pre_fader ()
const {
return *audio_prefader_; }
142 auto &get_midi_post_fader ()
const {
return *midi_postfader_; }
143 auto &get_audio_post_fader ()
const {
return *audio_postfader_; }
145 auto &pre_fader_sends ()
const {
return prefader_sends_; }
146 auto &post_fader_sends ()
const {
return postfader_sends_; }
149 static constexpr auto kMidiFxKey =
"midiFx"sv;
150 static constexpr auto kInstrumentsKey =
"instruments"sv;
151 static constexpr auto kInsertsKey =
"inserts"sv;
152 static constexpr auto kPreFaderSendsKey =
"preFaderSends"sv;
153 static constexpr auto kPostFaderSendsKey =
"postFaderSends"sv;
154 static constexpr auto kFaderKey =
"fader"sv;
156 friend void to_json (nlohmann::json &j,
const Channel &c);
157 friend void from_json (
const nlohmann::json &j, Channel &c);
159 utils::IObjectRegistry ®istry ()
const {
return registry_; }
162 utils::IObjectRegistry ®istry_;
164 utils::QObjectUniquePtr<utils::ObjectRegistry> local_registry_;
166 NameProvider name_provider_;
168 dsp::PortType signal_type_;
170 bool hard_limit_fader_output_;
177 utils::QObjectUniquePtr<plugins::PluginGroup> midi_fx_;
180 utils::QObjectUniquePtr<plugins::PluginGroup> instruments_;
183 utils::QObjectUniquePtr<plugins::PluginGroup> inserts_;
185 std::vector<utils::QObjectUniquePtr<ChannelSend>> prefader_sends_;
186 std::vector<utils::QObjectUniquePtr<ChannelSend>> postfader_sends_;
189 utils::QObjectUniquePtr<dsp::Fader> fader_;
196 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_prefader_;
197 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_prefader_;
205 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_postfader_;
206 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_postfader_;