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 kPrefaderProcessorKey =
"prefaderProcessor"sv;
155 static constexpr auto kFaderKey =
"fader"sv;
157 friend void to_json (nlohmann::json &j,
const Channel &c);
158 friend void from_json (
const nlohmann::json &j, Channel &c);
160 dsp::ProcessorBase::ProcessorBaseDependencies dependencies ()
const
162 return dependencies_;
166 dsp::ProcessorBase::ProcessorBaseDependencies dependencies_;
167 plugins::PluginRegistry &plugin_registry_;
169 NameProvider name_provider_;
171 dsp::PortType signal_type_;
173 bool hard_limit_fader_output_;
180 utils::QObjectUniquePtr<plugins::PluginGroup> midi_fx_;
183 utils::QObjectUniquePtr<plugins::PluginGroup> instruments_;
186 utils::QObjectUniquePtr<plugins::PluginGroup> inserts_;
188 std::vector<utils::QObjectUniquePtr<ChannelSend>> prefader_sends_;
189 std::vector<utils::QObjectUniquePtr<ChannelSend>> postfader_sends_;
192 utils::QObjectUniquePtr<dsp::Fader> fader_;
199 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_prefader_;
200 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_prefader_;
208 utils::QObjectUniquePtr<ChannelMidiPassthroughProcessor> midi_postfader_;
209 utils::QObjectUniquePtr<ChannelAudioPassthroughProcessor> audio_postfader_;