X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fardour%2Finstrument_info.cc;h=b8c026bd029e2ee0e79f565ea4e1cc361eba164a;hb=cf52d6e4b40111eb04b244ec054055a4ec15dbe0;hp=d6c18ebd4dd83a7624997309686618978216a43a;hpb=59631acc5f41153a294c97ab820a4b41a886e24c;p=ardour.git diff --git a/libs/ardour/instrument_info.cc b/libs/ardour/instrument_info.cc index d6c18ebd4d..b8c026bd02 100644 --- a/libs/ardour/instrument_info.cc +++ b/libs/ardour/instrument_info.cc @@ -26,9 +26,10 @@ #include "ardour/midi_patch_manager.h" #include "ardour/processor.h" #include "ardour/plugin.h" +#include "ardour/plugin_insert.h" #include "ardour/rc_configuration.h" -#include "i18n.h" +#include "pbd/i18n.h" using namespace ARDOUR; using namespace MIDI::Name; @@ -80,6 +81,18 @@ InstrumentInfo::get_instrument_name () const string InstrumentInfo::get_patch_name (uint16_t bank, uint8_t program, uint8_t channel) const +{ + return get_patch_name (bank, program, channel, true); +} + +string +InstrumentInfo::get_patch_name_without (uint16_t bank, uint8_t program, uint8_t channel) const +{ + return get_patch_name (bank, program, channel, false); +} + +string +InstrumentInfo::get_patch_name (uint16_t bank, uint8_t program, uint8_t channel, bool with_extra) const { boost::shared_ptr p = internal_instrument.lock(); if (p) { @@ -87,9 +100,9 @@ InstrumentInfo::get_patch_name (uint16_t bank, uint8_t program, uint8_t channel) } MIDI::Name::PatchPrimaryKey patch_key (program, bank); - + boost::shared_ptr patch = - MIDI::Name::MidiPatchManager::instance().find_patch (external_instrument_model, + MIDI::Name::MidiPatchManager::instance().find_patch (external_instrument_model, external_instrument_mode, channel, patch_key); if (patch) { @@ -99,9 +112,13 @@ InstrumentInfo::get_patch_name (uint16_t bank, uint8_t program, uint8_t channel) #define MIDI_BP_ZERO ((Config->get_first_midi_bank_is_zero())?0:1) - return string_compose ("prg %1 bnk %2",program + MIDI_BP_ZERO , bank + MIDI_BP_ZERO); + if (with_extra) { + return string_compose ("prg %1 bnk %2",program + MIDI_BP_ZERO , bank + MIDI_BP_ZERO); + } else { + return string_compose ("%1", program + MIDI_BP_ZERO); + } } -} +} string InstrumentInfo::get_controller_name (Evoral::Parameter param) const @@ -117,7 +134,7 @@ InstrumentInfo::get_controller_name (Evoral::Parameter param) const if (!dev_names) { return ""; } - + boost::shared_ptr chan_names( dev_names->channel_name_set_by_channel( external_instrument_mode, param.channel())); @@ -132,7 +149,7 @@ InstrumentInfo::get_controller_name (Evoral::Parameter param) const } return control_names->control(param.id())->name(); -} +} boost::shared_ptr InstrumentInfo::get_patches (uint8_t channel) @@ -163,7 +180,7 @@ InstrumentInfo::plugin_programs_to_channel_name_set (boost::shared_ptr pp = insert->plugin(); - + if (pp->current_preset_uses_general_midi()) { patch_list = InstrumentInfo::general_midi_patches (); @@ -173,13 +190,9 @@ InstrumentInfo::plugin_programs_to_channel_name_set (boost::shared_ptr presets = pp->get_presets (); std::vector::iterator i; int n; - - /* XXX note the assumption that plugin presets start their numbering at - * zero - */ - + for (n = 0, i = presets.begin(); i != presets.end(); ++i, ++n) { - if ((*i).number >= 0) { + if ((*i).valid) { patch_list.push_back (boost::shared_ptr (new Patch ((*i).label, n))); } else { patch_list.push_back (boost::shared_ptr (new Patch (string_compose ("program %1", n), n))); @@ -201,14 +214,14 @@ InstrumentInfo::plugin_programs_to_channel_name_set (boost::shared_ptrset_patch_banks (patch_banks); return cns; -} +} const MIDI::Name::PatchNameList& InstrumentInfo::general_midi_patches() { if (_gm_patches.empty()) { for (int n = 0; n < 128; n++) { - _gm_patches.push_back (boost::shared_ptr (new Patch (general_midi_program_names[n], n))); + _gm_patches.push_back (boost::shared_ptr (new Patch (general_midi_program_names[n], n))); } } @@ -221,7 +234,7 @@ InstrumentInfo::get_plugin_patch_name (boost::shared_ptr p, uint16_t boost::shared_ptr insert = boost::dynamic_pointer_cast (p); if (insert) { boost::shared_ptr pp = insert->plugin(); - + if (pp->current_preset_uses_general_midi()) { return MIDI::Name::general_midi_program_names[std::min((uint8_t) 127,program)]; }