summaryrefslogtreecommitdiff
path: root/libs/midi++2
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-06-10 16:42:17 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-06-10 16:42:17 +0000
commit23350c195db2a8a777ca8d471174b44255c96ec4 (patch)
treeed17d2c8545b38fdc879e96ddb13a22c6986218f /libs/midi++2
parentdf6222b3b408ecf2aa673beb0fdff2fa309a81a1 (diff)
remove craziness of propagating MIDI 7 bit limits into MIDNAM handling by replacing bank_msb/lsb with "bank" ; move responsibility for discovering patch names into MIDI trackview (soon to move again)
git-svn-id: svn://localhost/ardour2/branches/3.0@12647 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/midi++2')
-rw-r--r--libs/midi++2/midi++/midnam_patch.h28
-rw-r--r--libs/midi++2/midnam_patch.cc9
2 files changed, 16 insertions, 21 deletions
diff --git a/libs/midi++2/midi++/midnam_patch.h b/libs/midi++2/midi++/midnam_patch.h
index 11bdb79f8b..cbf64299ea 100644
--- a/libs/midi++2/midi++/midnam_patch.h
+++ b/libs/midi++2/midi++/midnam_patch.h
@@ -39,42 +39,36 @@ namespace Name
struct PatchPrimaryKey
{
public:
- int msb;
- int lsb;
+ int bank_number;
int program_number;
-
- PatchPrimaryKey(int a_msb = -1, int a_lsb = -1, int a_program_number = -1) {
- msb = a_msb;
- lsb = a_lsb;
+
+ PatchPrimaryKey(int a_bank_number = -1, int a_program_number = -1) {
+ bank_number = a_bank_number;
program_number = a_program_number;
}
bool is_sane() {
- return ((msb >= 0) && (msb <= 127) &&
- (lsb >= 0) && (lsb <= 127) &&
+ return ((bank_number >= 0) && (bank_number <= 16384) &&
(program_number >=0 ) && (program_number <= 127));
}
inline PatchPrimaryKey& operator=(const PatchPrimaryKey& id) {
- msb = id.msb;
- lsb = id.lsb;
+ bank_number = id.bank_number;
program_number = id.program_number;
return *this;
}
inline bool operator==(const PatchPrimaryKey& id) const {
- return (msb == id.msb && lsb == id.lsb && program_number == id.program_number);
+ return (bank_number == id.bank_number && program_number == id.program_number);
}
/**
* obey strict weak ordering or crash in STL containers
*/
inline bool operator<(const PatchPrimaryKey& id) const {
- if (msb < id.msb) {
- return true;
- } else if (msb == id.msb && lsb < id.lsb) {
+ if (bank_number < id.bank_number) {
return true;
- } else if (msb == id.msb && lsb == id.lsb && program_number < id.program_number) {
+ } else if (bank_number == id.bank_number && program_number < id.program_number) {
return true;
}
@@ -168,7 +162,7 @@ public:
boost::shared_ptr<Patch> previous_patch(PatchPrimaryKey& key) {
assert(key.is_sane());
- std::cerr << "finding patch with " << key.msb << "/" << key.lsb << "/" <<key.program_number << std::endl;
+ std::cerr << "finding patch with " << key.bank_number << "/" <<key.program_number << std::endl;
for (PatchList::const_iterator i = _patch_list.begin();
i != _patch_list.end();
++i) {
@@ -186,7 +180,7 @@ public:
boost::shared_ptr<Patch> next_patch(PatchPrimaryKey& key) {
assert(key.is_sane());
- std::cerr << "finding patch with " << key.msb << "/" << key.lsb << "/" <<key.program_number << std::endl;
+ std::cerr << "finding patch with " << key.bank_number << "/" <<key.program_number << std::endl;
for (PatchList::const_iterator i = _patch_list.begin();
i != _patch_list.end();
++i) {
diff --git a/libs/midi++2/midnam_patch.cc b/libs/midi++2/midnam_patch.cc
index 86edc7504e..66d3219310 100644
--- a/libs/midi++2/midnam_patch.cc
+++ b/libs/midi++2/midnam_patch.cc
@@ -78,10 +78,12 @@ int initialize_primary_key_from_commands (PatchPrimaryKey& id, const XMLNode* no
string value = node->property("Value")->value();
assert(value != "");
+ id.bank_number = 0;
+
if (control == "0") {
- id.msb = PBD::atoi(value);
+ id.bank_number |= (PBD::atoi (value)<<7);
} else if (control == "32") {
- id.lsb = PBD::atoi(value);
+ id.bank_number |= PBD::atoi (value);
}
} else if (node->name() == "ProgramChange") {
string number = node->property("Number")->value();
@@ -135,8 +137,7 @@ Patch::use_bank_info (PatchBank* bank)
{
if (bank) {
if (bank->patch_primary_key() ) {
- _id.msb = bank->patch_primary_key()->msb;
- _id.lsb = bank->patch_primary_key()->lsb;
+ _id.bank_number = bank->patch_primary_key()->bank_number;
} else {
return -1;
}