Ejemplo n.º 1
0
std::multimap<ReducedFraction, std::string>
extractLyricsFromTrack(const MidiTrack &lyricsTrack, int division)
      {
      std::multimap<ReducedFraction, std::string> lyrics;

      for (const auto &i: lyricsTrack.events()) {
            const auto& e = i.second;
            if (isLyricEvent(e)) {
                  const uchar* data = (uchar*)e.edata();
                  std::string text = MidiCharset::fromUchar(data);
                  if (isLyricText(text)) {
                        const auto tick = toMuseScoreTicks(i.first, division);
                                    // no charset handling here
                        lyrics.insert({tick, text});
                        }
                  }
            }
      return lyrics;
      }
Ejemplo n.º 2
0
void applyAllTempoEvents(const std::multimap<int, MTrack> &tracks, Score *score)
      {
      for (const auto &track: tracks) {
            if (track.second.isDivisionInTps) {     // ticks per second
                  const double ticksPerBeat = MScore::division;
                  const double beatsPerSecond = roundToBpm(track.second.division / ticksPerBeat);
                  setTempoToScore(score, 0, beatsPerSecond);
                  }
            else {      // beats per second
                  for (const auto &ie : track.second.mtrack->events()) {
                        const MidiEvent &e = ie.second;
                        if (e.type() == ME_META && e.metaType() == META_TEMPO) {
                              const auto tick = toMuseScoreTicks(
                                                ie.first, track.second.division, false);
                              const uchar* data = (uchar*)e.edata();
                              const unsigned tempo = data[2] + (data[1] << 8) + (data[0] << 16);
                              const double beatsPerSecond = roundToBpm(1000000.0 / tempo);
                              setTempoToScore(score, tick.ticks(), beatsPerSecond);
                              }
                        }
                  }
            }
      }