Skip to content

Commit

Permalink
Merge pull request #1372 from Igevorse/import-export
Browse files Browse the repository at this point in the history
Export port information to MIDI and MusicXML
  • Loading branch information
lasconic committed Oct 31, 2014
2 parents 1ffb9f3 + c148f49 commit f4b9318
Show file tree
Hide file tree
Showing 93 changed files with 144 additions and 1 deletion.
9 changes: 9 additions & 0 deletions libmscore/part.cpp
Expand Up @@ -237,6 +237,15 @@ int Part::midiChannel() const
return score()->midiChannel(instr(0)->channel(0).channel);
}

//---------------------------------------------------------
// midiPort
//---------------------------------------------------------

int Part::midiPort() const
{
return score()->midiPort(instr(0)->channel(0).channel);
}

//---------------------------------------------------------
// setMidiChannel
// called from importmusicxml
Expand Down
1 change: 1 addition & 0 deletions libmscore/part.h
Expand Up @@ -103,6 +103,7 @@ class Part : public QObject {
void setMidiProgram(int, int bank = 0);

int midiChannel() const;
int midiPort() const;
void setMidiChannel(int) const;

void insertStaff(Staff*, int idx);
Expand Down
12 changes: 11 additions & 1 deletion mscore/exportmidi.cpp
Expand Up @@ -230,7 +230,7 @@ bool ExportMidi::write(const QString& name, bool midiExpandRepeats)
Staff* staff = cs->staff(staffIdx);
Part* part = staff->part();
int channel = part->midiChannel();
track.setOutPort(0);
track.setOutPort(part->midiPort());
track.setOutChannel(channel);

if (staff->isTop()) {
Expand Down Expand Up @@ -260,6 +260,16 @@ bool ExportMidi::write(const QString& name, bool midiExpandRepeats)
EventMap events;
cs->renderStaff(&events, staff);

// Export port to MIDI META event
MidiEvent ev;
ev.setType(ME_META);
ev.setMetaType(META_PORT_CHANGE);
ev.setLen(1);
unsigned char* data = new unsigned char[1];
data[0] = int(track.outPort());
ev.setEData(data);
track.insert(0, ev);

for (auto i = events.begin(); i != events.end(); ++i) {
NPlayEvent event(i->second);
int eventChannel = cs->midiChannel(event.channel());
Expand Down
4 changes: 4 additions & 0 deletions mscore/exportxml.cpp
Expand Up @@ -4069,6 +4069,8 @@ void ExportMusicXml::write(QIODevice* dev)
xml.etag();
}
}
xml.tag(QString("midi-device port=\"%1\"").arg(part->midiPort() + 1), "");

for (int i = 0; i < 128; ++i) {
DrumInstrument di = drumset->drum(i);
if (di.notehead != NoteHead::Group::HEAD_INVALID) {
Expand All @@ -4089,6 +4091,8 @@ void ExportMusicXml::write(QIODevice* dev)
xml.tag("instrument-name", MScoreTextToMXML::toPlainText(part->longName()));
xml.etag();

xml.tag(QString("midi-device id=\"P%1-I%2\" port=\"%3\"").arg(idx+1).arg(3).arg(part->midiPort() + 1), "");

xml.stag(QString("midi-instrument id=\"P%1-I%2\"").arg(idx+1).arg(3));
if (part->midiChannel() >= 0) // <0 is not valid
xml.tag("midi-channel", part->midiChannel() + 1);
Expand Down
3 changes: 3 additions & 0 deletions mscore/importmidi.cpp
Expand Up @@ -269,6 +269,9 @@ void MTrack::processMeta(int tick, const MidiEvent& mm)
break;
case META_TIME_SIGNATURE:
break; // added earlier
case META_PORT_CHANGE:
// TODO
break;
default:
if (MScore::debugMode)
qDebug("unknown meta type 0x%02x", mm.metaType());
Expand Down
4 changes: 4 additions & 0 deletions mscore/importxml.cpp
Expand Up @@ -1558,6 +1558,10 @@ void MusicXml::xmlScorePart(QDomElement e, QString id, int& parts)
domError(ee);
}
}
else if (e.tagName() == "midi-device") {
// TODO
domNotImplemented(e);
}
else
domError(e);
}
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testAccidentals1.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Staff 1</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testAccidentals2.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Staff 1</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testAccidentals3.xml
Expand Up @@ -16,6 +16,7 @@
<score-instrument id="P1-I3">
<instrument-name></instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>74</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testArpGliss1.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testArpGliss2.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testArpGliss3.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testBarStyles.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Staff 1</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testChordDiagrams1.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name></instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testChordNoVoice_ref.xml
Expand Up @@ -17,6 +17,7 @@
<score-instrument id="P1-I3">
<instrument-name></instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testClefs1.xml
Expand Up @@ -17,6 +17,7 @@
<score-instrument id="P1-I3">
<instrument-name>Staff 1</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testCompleteMeasureRests.xml
Expand Up @@ -17,6 +17,7 @@
<score-instrument id="P1-I3">
<instrument-name></instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>74</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDCalCoda.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Guitar</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDCalFine.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Guitar</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDalSegno.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Guitar</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDirections1.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Staff 1</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDrumset1.xml
Expand Up @@ -40,6 +40,7 @@
<score-instrument id="P1-I65">
<instrument-name>low conga</instrument-name>
</score-instrument>
<midi-device port="1"></midi-device>
<midi-instrument id="P1-I36">
<midi-channel>10</midi-channel>
<midi-program>1</midi-program>
Expand Down
3 changes: 3 additions & 0 deletions mtest/musicxml/io/testDrumset2.xml
Expand Up @@ -28,6 +28,7 @@
<score-instrument id="P1-I64">
<instrument-name>open high conga</instrument-name>
</score-instrument>
<midi-device port="1"></midi-device>
<midi-instrument id="P1-I36">
<midi-channel>10</midi-channel>
<midi-program>1</midi-program>
Expand Down Expand Up @@ -63,6 +64,7 @@
<score-instrument id="P2-I64">
<instrument-name>open high conga</instrument-name>
</score-instrument>
<midi-device port="1"></midi-device>
<midi-instrument id="P2-I64">
<midi-channel>10</midi-channel>
<midi-program>1</midi-program>
Expand All @@ -77,6 +79,7 @@
<score-instrument id="P3-I39">
<instrument-name>Acoustic Snare</instrument-name>
</score-instrument>
<midi-device port="1"></midi-device>
<midi-instrument id="P3-I39">
<midi-channel>10</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDurationRoundingError_ref.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Guitar</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>25</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testDynamics1.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Staff 1</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
2 changes: 2 additions & 0 deletions mtest/musicxml/io/testDynamics2.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand All @@ -30,6 +31,7 @@
<score-instrument id="P2-I3">
<instrument-name>Piano</instrument-name>
</score-instrument>
<midi-device id="P2-I3" port="1"></midi-device>
<midi-instrument id="P2-I3">
<midi-channel>2</midi-channel>
<midi-program>1</midi-program>
Expand Down
2 changes: 2 additions & 0 deletions mtest/musicxml/io/testDynamics3_ref.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand All @@ -30,6 +31,7 @@
<score-instrument id="P2-I3">
<instrument-name>Piano</instrument-name>
</score-instrument>
<midi-device id="P2-I3" port="1"></midi-device>
<midi-instrument id="P2-I3">
<midi-channel>2</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testEmptyMeasure_ref.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Flute</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>74</midi-program>
Expand Down
2 changes: 2 additions & 0 deletions mtest/musicxml/io/testEmptyVoice1_ref.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand All @@ -30,6 +31,7 @@
<score-instrument id="P2-I3">
<instrument-name>Piano</instrument-name>
</score-instrument>
<midi-device id="P2-I3" port="1"></midi-device>
<midi-instrument id="P2-I3">
<midi-channel>2</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testFiguredBass1.xml
Expand Up @@ -19,6 +19,7 @@
<score-instrument id="P1-I3">
<instrument-name>Bass Guitar</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>35</midi-program>
Expand Down
2 changes: 2 additions & 0 deletions mtest/musicxml/io/testFiguredBass2.xml
Expand Up @@ -19,6 +19,7 @@
<score-instrument id="P1-I3">
<instrument-name>Flute</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>74</midi-program>
Expand All @@ -32,6 +33,7 @@
<score-instrument id="P2-I3">
<instrument-name>Harpsichord</instrument-name>
</score-instrument>
<midi-device id="P2-I3" port="1"></midi-device>
<midi-instrument id="P2-I3">
<midi-channel>2</midi-channel>
<midi-program>7</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testGrace1.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testGrace2.xml
Expand Up @@ -18,6 +18,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testHarmony1.xml
Expand Up @@ -17,6 +17,7 @@
<score-instrument id="P1-I3">
<instrument-name>Music</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testHarmony2.xml
Expand Up @@ -17,6 +17,7 @@
<score-instrument id="P1-I3">
<instrument-name>Music</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testHarmony3.xml
Expand Up @@ -19,6 +19,7 @@
<score-instrument id="P1-I3">
<instrument-name>Voice</instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>53</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testHarmony4.xml
Expand Up @@ -17,6 +17,7 @@
<score-instrument id="P1-I3">
<instrument-name></instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>1</midi-program>
Expand Down
1 change: 1 addition & 0 deletions mtest/musicxml/io/testHarmony5.xml
Expand Up @@ -13,6 +13,7 @@
<score-instrument id="P1-I3">
<instrument-name></instrument-name>
</score-instrument>
<midi-device id="P1-I3" port="1"></midi-device>
<midi-instrument id="P1-I3">
<midi-channel>1</midi-channel>
<midi-program>74</midi-program>
Expand Down

0 comments on commit f4b9318

Please sign in to comment.