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 kMidiPrefaderKey =
"midiPrefader"sv;
155 static constexpr auto kAudioPrefaderKey =
"audioPrefader"sv;
156 static constexpr auto kFaderKey =
"fader"sv;
158 friend void to_json (nlohmann::json &j,
const Channel &c)
160 j[kMidiFxKey] = *c.midi_fx_;
161 j[kInsertsKey] = *c.inserts_;
162 j[kPreFaderSendsKey] = c.prefader_sends_;
163 j[kPostFaderSendsKey] = c.postfader_sends_;
164 j[kInstrumentsKey] = *c.instruments_;
165 j[kMidiPrefaderKey] = c.midi_prefader_;
166 j[kAudioPrefaderKey] = c.audio_prefader_;
167 j[kFaderKey] = c.fader_;
169 friend void from_json (
const nlohmann::json &j, Channel &c);
171 dsp::ProcessorBase::ProcessorBaseDependencies dependencies ()
const
173 return dependencies_;
177 dsp::ProcessorBase::ProcessorBaseDependencies dependencies_;
178 plugins::PluginRegistry &plugin_registry_;
180 NameProvider name_provider_;
182 dsp::PortType signal_type_;
184 bool hard_limit_fader_output_;
191 utils::QObjectUniquePtr<plugins::PluginGroup> midi_fx_;
194 utils::QObjectUniquePtr<plugins::PluginGroup> instruments_;
197 utils::QObjectUniquePtr<plugins::PluginGroup> inserts_;
199 std::vector<utils::QObjectUniquePtr<ChannelSend>> prefader_sends_;
200 std::vector<utils::QObjectUniquePtr<ChannelSend>> postfader_sends_;
203 utils::QObjectUniquePtr<dsp::Fader> fader_;
210 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_prefader_;
211 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_prefader_;
219 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_postfader_;
220 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_postfader_;