The latter is only really relevant for Audio Units.
This fixes an issue with vocoders or audio-plugins that simply have
a MIDI input for other purposes to be wrongly categorized as Instruments..
.. and thereby override strict-i/o rules (prefer stereo)
virtual PluginPtr load (Session& session) = 0;
virtual bool is_instrument() const;
- virtual bool needs_midi_input() const { return is_instrument (); }
+ virtual bool needs_midi_input() const;
virtual bool in_category (const std::string &) const { return false; }
virtual std::vector<Plugin::PresetRecord> get_presets (bool user_only) const = 0;
bool has_no_inputs() const;
bool has_no_audio_inputs() const;
- bool needs_midi_input() const;
+ bool is_instrument () const;
bool has_output_presets (
ChanCount in = ChanCount (DataType::MIDI, 1),
ChanCount out = ChanCount (DataType::AUDIO, 2)
PBD::Signal2<void, std::string, Plugin*> Plugin::PresetsChanged;
+bool
+PluginInfo::needs_midi_input () const
+{
+ return (n_inputs.n_midi() != 0);
+}
+
bool
PluginInfo::is_instrument () const
{
- return (n_inputs.n_midi() != 0) && (n_outputs.n_audio() > 0);
+ return (n_inputs.n_midi() != 0) && (n_outputs.n_audio() > 0) && (n_inputs.n_audio() == 0);
}
Plugin::Plugin (AudioEngine& e, Session& s)
}
bool
-PluginInsert::needs_midi_input() const
+PluginInsert::is_instrument() const
{
PluginInfoPtr pip = _plugins[0]->get_info();
- if (pip->needs_midi_input ()) {
+ if (pip->is_instrument ()) {
return true;
}
- return pip->n_inputs.n_midi() != 0 && pip->n_outputs.n_audio() != 0;
+ return pip->n_inputs.n_midi () != 0 && pip->n_outputs.n_audio () > 0 && pip->n_inputs.n_audio () == 0;
}
bool
return false;
}
}
- if (!needs_midi_input ()) {
+ if (!is_instrument ()) {
return false;
}
return true;
m.strict_io = true;
/* special case MIDI instruments */
- if (needs_midi_input ()) {
+ if (is_instrument ()) {
// output = midi-bypass + at most master-out channels.
ChanCount max_out (DataType::AUDIO, 2); // TODO use master-out
max_out.set (DataType::MIDI, out.get(DataType::MIDI));