summaryrefslogtreecommitdiff
path: root/muse2/muse/instruments
diff options
context:
space:
mode:
authorTim E. Real <termtech@rogers.com>2011-06-19 01:26:26 +0000
committerTim E. Real <termtech@rogers.com>2011-06-19 01:26:26 +0000
commit02941424387a064301372c12bda3e8c3ab3fee45 (patch)
treee4cdea4400d8a34060a1c4d2b32da8e7ef46ab90 /muse2/muse/instruments
parent448d81436ed8c2bc501506c2663a9bdb8c0dd023 (diff)
Major work, all synthesizers. Other fixes. Please see ChangeLog.
Diffstat (limited to 'muse2/muse/instruments')
-rw-r--r--muse2/muse/instruments/minstrument.cpp42
-rw-r--r--muse2/muse/instruments/minstrument.h3
2 files changed, 42 insertions, 3 deletions
diff --git a/muse2/muse/instruments/minstrument.cpp b/muse2/muse/instruments/minstrument.cpp
index 10cb3ec2..613e5bdf 100644
--- a/muse2/muse/instruments/minstrument.cpp
+++ b/muse2/muse/instruments/minstrument.cpp
@@ -333,6 +333,7 @@ void removeMidiInstrument(const MidiInstrument* instr)
void MidiInstrument::init()
{
+ _tmpMidiStateVersion = 1; // Assume old version. readMidiState will overwrite anyway.
_nullvalue = -1;
_initScript = 0;
_midiInit = new EventList();
@@ -675,9 +676,44 @@ void Patch::write(int level, Xml& xml)
//---------------------------------------------------------
void MidiInstrument::readMidiState(Xml& xml)
- {
- _midiState->read(xml, "midistate", true);
- }
+{
+ ///_midiState->read(xml, "midistate", true);
+
+ // p4.0.27 A kludge to support old midistates by wrapping them in the proper header.
+ _tmpMidiStateVersion = 1; // Assume old (unmarked) first version 1.
+ for (;;)
+ {
+ Xml::Token token = xml.parse();
+ const QString tag = xml.s1();
+ switch (token)
+ {
+ case Xml::Error:
+ case Xml::End:
+ return;
+ case Xml::TagStart:
+ if (tag == "event")
+ {
+ Event e(Note);
+ e.read(xml);
+ _midiState->add(e);
+ }
+ else
+ xml.unknown("midistate");
+ break;
+ case Xml::Attribut:
+ if(tag == "version")
+ _tmpMidiStateVersion = xml.s2().toInt();
+ else
+ xml.unknown("MidiInstrument");
+ break;
+ case Xml::TagEnd:
+ if(tag == "midistate")
+ return;
+ default:
+ break;
+ }
+ }
+}
//---------------------------------------------------------
// read
diff --git a/muse2/muse/instruments/minstrument.h b/muse2/muse/instruments/minstrument.h
index 15942537..dacd17fc 100644
--- a/muse2/muse/instruments/minstrument.h
+++ b/muse2/muse/instruments/minstrument.h
@@ -77,6 +77,9 @@ class MidiInstrument {
EventList* _midiInit;
EventList* _midiReset;
EventList* _midiState;
+ // Set when loading midi state in SynthI::read, to indicate version
+ // to SynthI::initInstance, which is called later.
+ int _tmpMidiStateVersion;
char* _initScript;
QString _name;
QString _filePath;