Skip to content

Commit

Permalink
fix for midi export
Browse files Browse the repository at this point in the history
  • Loading branch information
wschweer committed Apr 8, 2013
1 parent 1942269 commit c061718
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 13 deletions.
4 changes: 3 additions & 1 deletion libmscore/exportmidi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -226,6 +226,8 @@ bool ExportMidi::write(const QString& name, bool midiExpandRepeats)
cs->updateRepeatList(midiExpandRepeats);
writeHeader();

printf("=========tracks %d\n", tracks->size());

foreach (MidiTrack* track, *tracks) {
Staff* staff = track->staff();
Part* part = staff->part();
Expand Down Expand Up @@ -258,7 +260,7 @@ bool ExportMidi::write(const QString& name, bool midiExpandRepeats)


EventMap events;
cs->renderPart(&events, part);
cs->renderStaff(&events, staff);

for (auto i = events.begin(); i != events.end(); ++i) {
Event event(i->second);
Expand Down
1 change: 0 additions & 1 deletion libmscore/midifile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -861,7 +861,6 @@ void MidiTrack::extractTimeSig(TimeSigMap* sigmap)
int n = 1;
for (int i = 0; i < nn; ++i)
n *= 2;
qDebug("add timesig at %d\n", e.ontime());
sigmap->add(e.ontime(), Fraction(z, n));
}
else
Expand Down
20 changes: 10 additions & 10 deletions libmscore/rendermidi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -212,10 +212,10 @@ struct OttavaShiftSegment {
// collectMeasureEvents
//---------------------------------------------------------

static void collectMeasureEvents(EventMap* events, Measure* m, Part* part, int tickOffset)
static void collectMeasureEvents(EventMap* events, Measure* m, Staff* staff, int tickOffset)
{
int firstStaffIdx = m->score()->staffIdx(part);
int nextStaffIdx = firstStaffIdx + part->nstaves();
int firstStaffIdx = staff->idx();
int nextStaffIdx = firstStaffIdx + 1;

Segment::SegmentTypes st = Segment::SegChordRestGrace;
int strack = firstStaffIdx * VOICES;
Expand Down Expand Up @@ -509,24 +509,24 @@ void Score::updateVelo()
}

//---------------------------------------------------------
// renderPart
// renderStaff
//---------------------------------------------------------

void Score::renderPart(EventMap* events, Part* part)
void Score::renderStaff(EventMap* events, Staff* staff)
{
Measure* lastMeasure = 0;
foreach (const RepeatSegment* rs, *repeatList()) {
int startTick = rs->tick;
int endTick = startTick + rs->len;
int tickOffset = rs->utick - rs->tick;
for (Measure* m = tick2measure(startTick); m; m = m->nextMeasure()) {
if (lastMeasure && m->isRepeatMeasure(part)) {
if (lastMeasure && m->isRepeatMeasure(staff->part())) {
int offset = m->tick() - lastMeasure->tick();
collectMeasureEvents(events, lastMeasure, part, tickOffset + offset);
collectMeasureEvents(events, lastMeasure, staff, tickOffset + offset);
}
else {
lastMeasure = m;
collectMeasureEvents(events, m, part, tickOffset);
collectMeasureEvents(events, lastMeasure, staff, tickOffset);
}
if (m->tick() + m->ticks() >= endTick)
break;
Expand Down Expand Up @@ -850,8 +850,8 @@ void Score::renderMidi(EventMap* events)
updateChannel();
updateVelo();

foreach (Part* part, _parts)
renderPart(events, part);
foreach (Staff* part, _staves)
renderStaff(events, part);

// add metronome ticks
foreach (const RepeatSegment* rs, *repeatList()) {
Expand Down
2 changes: 1 addition & 1 deletion libmscore/score.h
Original file line number Diff line number Diff line change
Expand Up @@ -680,7 +680,7 @@ class Score : public QObject {

void pasteStaff(XmlReader&, ChordRest* dst);
void renderMidi(EventMap* events);
void renderPart(EventMap* events, Part*);
void renderStaff(EventMap* events, Staff*);
int mscVersion() const { return _mscVersion; }
void setMscVersion(int v) { _mscVersion = v; }

Expand Down

0 comments on commit c061718

Please sign in to comment.