56class Channel :
public QObject
61 Q_PROPERTY (QVariant preFader READ preFader CONSTANT)
71 using PortType = zrythm::dsp::PortType;
74 using PluginPtrVariant = plugins::PluginPtrVariant;
75 using PluginUuid = Plugin::Uuid;
81 plugins::PluginRegistry &plugin_registry,
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::PluginPtrVariant> &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 dsp::ProcessorBase::ProcessorBaseDependencies dependencies ()
const
161 return dependencies_;
165 dsp::ProcessorBase::ProcessorBaseDependencies local_processor_deps ();
167 dsp::ProcessorBase::ProcessorBaseDependencies dependencies_;
168 plugins::PluginRegistry &plugin_registry_;
170 dsp::PortRegistry local_port_registry_;
171 dsp::ProcessorParameterRegistry local_param_registry_;
173 NameProvider name_provider_;
175 dsp::PortType signal_type_;
177 bool hard_limit_fader_output_;
184 utils::QObjectUniquePtr<plugins::PluginGroup> midi_fx_;
187 utils::QObjectUniquePtr<plugins::PluginGroup> instruments_;
190 utils::QObjectUniquePtr<plugins::PluginGroup> inserts_;
192 std::vector<utils::QObjectUniquePtr<ChannelSend>> prefader_sends_;
193 std::vector<utils::QObjectUniquePtr<ChannelSend>> postfader_sends_;
196 utils::QObjectUniquePtr<dsp::Fader> fader_;
203 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_prefader_;
204 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_prefader_;
212 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_postfader_;
213 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_postfader_;