namespace Name
{
-
+
Patch::Patch (std::string name, uint8_t p_number, uint16_t b_number)
: _name (name)
, _id (p_number, b_number)
initialize_primary_key_from_commands (
const XMLTree& tree, PatchPrimaryKey& id, const XMLNode* node)
{
- id.bank_number = 0;
+ uint16_t bank = 0;
+ uint8_t program = 0;
const XMLNodeList events = node->children();
for (XMLNodeList::const_iterator i = events.begin(); i != events.end(); ++i) {
const string& value = node->property("Value")->value();
if (control == "0") {
- id.bank_number |= string_to_int(tree, value) << 7;
+ bank |= string_to_int(tree, value) << 7;
} else if (control == "32") {
- id.bank_number |= string_to_int(tree, value);
+ bank |= string_to_int(tree, value);
}
} else if (node->name() == "ProgramChange") {
const string& number = node->property("Number")->value();
assert(number != "");
- id.program_number = string_to_int(tree, number);
+ program = string_to_int(tree, number);
}
}
+ id = PatchPrimaryKey(program, bank);
return 0;
}
/* XXX this is totally wrong */
- node->add_property("Number", string_compose ("%1", _id.program_number));
+ node->add_property("Number", string_compose ("%1", _id.program()));
node->add_property("Name", _name);
/*
- typedef std::list< boost::shared_ptr< Evoral::MIDIEvent<double> > > PatchMidiCommands;
+ typedef std::list< boost::shared_ptr< Evoral::MIDIEvent<Evoral::Beats> > > PatchMidiCommands;
XMLNode* commands = node->add_child("PatchMIDICommands");
for (PatchMidiCommands::const_iterator event = _patch_midi_commands.begin();
event != _patch_midi_commands.end();
const XMLProperty* program_change = node.property("ProgramChange");
if (program_change) {
- _id.program_number = string_to_int(tree, program_change->value());
+ _id = PatchPrimaryKey(string_to_int(tree, program_change->value()), _id.bank());
}
const XMLProperty* name = node.property("Name");
return -1; // Failed to find a program number anywhere
}
}
-
+
XMLNode* use_note_name_list = node.child("UsesNoteNameList");
if (use_note_name_list) {
_note_list_name = use_note_name_list->property ("Name")->value();
Note::get_state (void)
{
XMLNode* node = new XMLNode("Note");
- node->add_property("Number", _number + 1);
+ node->add_property("Number", _number);
node->add_property("Name", _name);
return *node;
assert(node.name() == "Note");
const int num = string_to_int(tree, node.property("Number")->value());
- if (num < 1 || num > 128) {
+ if (num > 127) {
PBD::warning << string_compose("%1: Note number %2 (%3) out of range",
tree.filename(), num, _name)
<< endmsg;
return -1;
}
- _number = num - 1;
+ _number = num;
_name = node.property("Name")->value();
return 0;
if (initialize_primary_key_from_commands (tree, id, commands)) {
return -1;
}
- _number = id.bank_number;
+ _number = id.bank();
}
XMLNode* patch_name_list = node.child("PatchNameList");
os << (int) (*x) << ' ';
}
os << endl;
-
+
for (ChannelNameSet::PatchBanks::const_iterator pbi = cns._patch_banks.begin(); pbi != cns._patch_banks.end(); ++pbi) {
os << "\tPatch Bank " << (*pbi)->name() << " with " << (*pbi)->patch_name_list().size() << " patches\n";
for (PatchNameList::const_iterator pni = (*pbi)->patch_name_list().begin(); pni != (*pbi)->patch_name_list().end(); ++pni) {
ChannelNameSet::set_patch_banks (const ChannelNameSet::PatchBanks& pb)
{
_patch_banks = pb;
-
+
_patch_map.clear ();
_patch_list.clear ();
_patch_list_name = "";
_available_for_channels.clear ();
-
+
for (PatchBanks::const_iterator pbi = _patch_banks.begin(); pbi != _patch_banks.end(); ++pbi) {
for (PatchNameList::const_iterator pni = (*pbi)->patch_name_list().begin(); pni != (*pbi)->patch_name_list().end(); ++pni) {
_patch_map[(*pni)->patch_primary_key()] = (*pni);
}
}
-boost::shared_ptr<CustomDeviceMode>
+boost::shared_ptr<CustomDeviceMode>
MasterDeviceNames::custom_device_mode_by_name(const std::string& mode_name)
{
return _custom_device_modes[mode_name];
}
-boost::shared_ptr<ChannelNameSet>
+boost::shared_ptr<ChannelNameSet>
MasterDeviceNames::channel_name_set_by_channel(const std::string& mode, uint8_t channel)
{
boost::shared_ptr<CustomDeviceMode> cdm = custom_device_mode_by_name(mode);
return cns;
}
-boost::shared_ptr<Patch>
-MasterDeviceNames::find_patch(const std::string& mode, uint8_t channel, const PatchPrimaryKey& key)
+boost::shared_ptr<Patch>
+MasterDeviceNames::find_patch(const std::string& mode, uint8_t channel, const PatchPrimaryKey& key)
{
boost::shared_ptr<ChannelNameSet> cns = channel_name_set_by_channel(mode, channel);
if (!cns) return boost::shared_ptr<Patch>();
return "";
}
+ boost::shared_ptr<const NoteNameList> note_names;
boost::shared_ptr<const Patch> patch(
find_patch(mode_name, channel, PatchPrimaryKey(program, bank)));
- if (!patch) {
- return "";
+ if (patch) {
+ note_names = note_name_list(patch->note_list_name());
}
- boost::shared_ptr<const NoteNameList> note_names(
- note_name_list(patch->note_list_name()));
if (!note_names) {
/* No note names specific to this patch, check the ChannelNameSet */
boost::shared_ptr<ChannelNameSet> chan_names = channel_name_set_by_channel(
return nothing;
}
-MIDINameDocument::MIDINameDocument (const string& filename)
+MIDINameDocument::MIDINameDocument (const string& file_path)
+ : _file_path(file_path)
{
- if (!_document.read (filename)) {
+ XMLTree document;
+ if (!document.read (file_path)) {
throw failed_constructor ();
}
- _document.set_filename (filename);
- set_state (_document, *_document.root());
+ document.set_filename (file_path);
+ set_state (document, *document.root());
}
int
error << "No author information in MIDNAM file" << endmsg;
return -1;
}
-
+
if (author->front()->children().size() > 0) {
_author = author->front()->children().front()->content();
}
_master_device_names_list.insert(
std::pair<std::string, boost::shared_ptr<MasterDeviceNames> >
(*model, master_device_names));
-
+
_all_models.insert(*model);
}
}