diff options
author | Florian Jung <flo@windfisch.org> | 2011-06-28 12:38:56 +0000 |
---|---|---|
committer | Florian Jung <flo@windfisch.org> | 2011-06-28 12:38:56 +0000 |
commit | 1ee2c8cb621fdc9b165b891f6d8d4607dadabf9b (patch) | |
tree | 27174350316c57d48f8ecaad54f7919f0ba106e1 /muse2/muse/instruments | |
parent | 2f4a98c62adf7241944ea7949d4b6a50d4b4af36 (diff) | |
parent | 933aeb536f3d90eb38bc96308de628eeedd81755 (diff) |
merged with current trunk. i hope this works...
Diffstat (limited to 'muse2/muse/instruments')
-rw-r--r-- | muse2/muse/instruments/minstrument.cpp | 42 | ||||
-rw-r--r-- | muse2/muse/instruments/minstrument.h | 3 |
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; |