Skip to content

Commit

Permalink
Merge pull request #21541 from bakajikara/midi-lyrics
Browse files Browse the repository at this point in the history
Fix #15925: Include lyrics in MIDI export
  • Loading branch information
RomanPudashkin committed Aug 13, 2024
2 parents 11c16c9 + 4d5a905 commit c5467bb
Showing 1 changed file with 26 additions and 0 deletions.
26 changes: 26 additions & 0 deletions src/importexport/midi/internal/midiexport/exportmidi.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "exportmidi.h"

#include "engraving/dom/key.h"
#include "engraving/dom/lyrics.h"
#include "engraving/dom/masterscore.h"
#include "engraving/dom/note.h"
#include "engraving/dom/part.h"
Expand Down Expand Up @@ -370,6 +371,31 @@ bool ExportMidi::write(QIODevice* device, bool midiExpandRepeats, bool exportRPN
}
}
}

// Export lyrics
SegmentType st = SegmentType::ChordRest;
for (Segment* seg = m_score->firstMeasure()->first(st); seg; seg = seg->next1(st)) {
for (track_idx_t i = part->startTrack(); i < part->endTrack(); ++i) {
ChordRest* cr = toChordRest(seg->element(i));
if (cr) {
for (const auto& lyric : cr->lyrics()) {
muse::ByteArray lyricText = lyric->plainText().toUtf8();
size_t len = lyricText.size() + 1;
unsigned char* data = new unsigned char[len];

memcpy(data, lyricText.constData(), len);

MidiEvent ev;
ev.setType(ME_META);
ev.setMetaType(META_LYRIC);
ev.setEData(data);
ev.setLen(static_cast<int>(len));

track.insert(cr->tick().ticks(), ev);
}
}
}
}
++staffIdx;
}
return !m_midiFile.write(device);
Expand Down

0 comments on commit c5467bb

Please sign in to comment.