void addLyricsToScore(const std::multimap<ReducedFraction, std::string> &lyricTrack, const Staff *staffAddTo) { Score *score = staffAddTo->score(); int textCounter = 0; for (const auto &e: lyricTrack) { const auto &tick = e.first; QString str = MidiCharset::convertToCharset(e.second); if (tick == ReducedFraction(0, 1)) { addTitle(score, str, &textCounter); } else { QString text = removeSlashes(str); score->addLyrics(tick.ticks(), staffAddTo->idx(), text); } } }
void addLyricsToScore( const std::multimap<ReducedFraction, std::string> &lyricTrack, const std::vector<std::pair<ReducedFraction, ReducedFraction>> &matchedLyricTimes, const Staff *staffAddTo) { Score *score = staffAddTo->score(); addTitleIfAny(lyricTrack, score); for (const auto &timePair: matchedLyricTimes) { const auto quantizedTime = timePair.first; const auto originalTime = timePair.second; const auto it = lyricTrack.find(originalTime); Q_ASSERT_X(it != lyricTrack.end(), "MidiLyrics::addLyricsToScore", "Lyric time not found"); QString text = MidiCharset::convertToCharset(it->second); if (originalTime != ReducedFraction(0, 1) || !isTitlePrefix(text)) { // not title score->addLyrics(quantizedTime.ticks(), staffAddTo->idx(), removeSlashes(text).toHtmlEscaped()); } } }
void MTrack::processMeta(int tick, const MidiEvent& mm) { if (!staff) { qDebug("processMeta: no staff"); return; } const uchar* data = (uchar*)mm.edata(); int staffIdx = staff->idx(); Score* cs = staff->score(); switch (mm.metaType()) { case META_TEXT: case META_LYRIC: { QString s((char*)data); cs->addLyrics(tick, staffIdx, s); } break; case META_TRACK_NAME: name = (const char*)data; break; case META_TEMPO: { unsigned tempo = data[2] + (data[1] << 8) + (data[0] <<16); double t = 1000000.0 / double(tempo); cs->setTempo(tick, t); // TODO: create TempoText } break; case META_KEY_SIGNATURE: { int key = ((const char*)data)[0]; if (key < -7 || key > 7) { qDebug("ImportMidi: illegal key %d", key); break; } KeySigEvent ks; ks.setAccidentalType(key); (*staff->keymap())[tick] = ks; hasKey = true; } break; case META_COMPOSER: // mscore extension case META_POET: case META_TRANSLATOR: case META_SUBTITLE: case META_TITLE: { Text* text = new Text(cs); switch(mm.metaType()) { case META_COMPOSER: text->setTextStyleType(TEXT_STYLE_COMPOSER); break; case META_TRANSLATOR: text->setTextStyleType(TEXT_STYLE_TRANSLATOR); break; case META_POET: text->setTextStyleType(TEXT_STYLE_POET); break; case META_SUBTITLE: text->setTextStyleType(TEXT_STYLE_SUBTITLE); break; case META_TITLE: text->setTextStyleType(TEXT_STYLE_TITLE); break; } text->setText((const char*)(mm.edata())); MeasureBase* measure = cs->first(); if (measure->type() != Element::VBOX) { measure = new VBox(cs); measure->setTick(0); measure->setNext(cs->first()); cs->add(measure); } measure->add(text); } break; case META_COPYRIGHT: cs->setMetaTag("Copyright", QString((const char*)(mm.edata()))); break; case META_TIME_SIGNATURE: qDebug("midi: meta timesig: %d, division %d", tick, MScore::division); cs->sigmap()->add(tick, Fraction(data[0], 1 << data[1])); break; default: if (MScore::debugMode) qDebug("unknown meta type 0x%02x", mm.metaType()); break; } }