diff --git a/src/importexport/midi/internal/midiimport/importmidi_tempo.cpp b/src/importexport/midi/internal/midiimport/importmidi_tempo.cpp
index e4e2b7618646d..4408701ea4258 100644
--- a/src/importexport/midi/internal/midiimport/importmidi_tempo.cpp
+++ b/src/importexport/midi/internal/midiimport/importmidi_tempo.cpp
@@ -78,39 +78,28 @@ void setTempoToScore(Score* score, int tick, double beatsPerSecond)
auto* data = midiImportOperations.data();
if (data->trackOpers.showTempoText.value()) {
- const int tempoInBpm = qRound(beatsPerSecond * 60.0);
-
Measure* measure = score->tick2measure(Fraction::fromTicks(tick));
if (!measure) {
LOGD("MidiTempo::setTempoToScore: no measure for tick %d", tick);
return;
}
- Segment* segment = measure->getSegment(SegmentType::ChordRest, Fraction::fromTicks(tick));
- if (!segment) {
- LOGD("MidiTempo::setTempoToScore: no chord/rest segment for tempo at %d", tick);
- return;
- }
+ Segment* segment = measure->getChordRestOrTimeTickSegment(Fraction::fromTicks(tick));
TempoText* tempoText = mu::engraving::Factory::createTempoText(segment);
tempoText->setTempo(beatsPerSecond);
- tempoText->setXmlText(QString("metNoteQuarterUp = %1").arg(tempoInBpm));
+ tempoText->setXmlText(String(u"metNoteQuarterUp = %1").arg(beatsPerSecond * 60.0));
tempoText->setTrack(0);
segment->add(tempoText);
data->hasTempoText = true; // to show tempo text column in the MIDI import panel
}
}
-double roundToBpm(double beatsPerSecond)
-{
- return qRound(beatsPerSecond * 60.0) / 60.0;
-}
-
void applyAllTempoEvents(const std::multimap& tracks, Score* score)
{
for (const auto& track: tracks) {
if (track.second.isDivisionInTps) { // ticks per second
const double ticksPerBeat = Constants::DIVISION;
- const double beatsPerSecond = roundToBpm(track.second.division / ticksPerBeat);
+ const double beatsPerSecond = track.second.division / ticksPerBeat;
setTempoToScore(score, 0, beatsPerSecond);
} else { // beats per second
for (const auto& ie : track.second.mtrack->events()) {
@@ -120,7 +109,7 @@ void applyAllTempoEvents(const std::multimap& tracks, Score* score)
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);
+ const double beatsPerSecond = 1000000.0 / tempo;
setTempoToScore(score, tick.ticks(), beatsPerSecond);
}
}
@@ -164,7 +153,7 @@ void setTempo(const std::multimap& tracks, Score* score)
averageTempoFactor /= counter;
const double basicTempo = MidiTempo::findBasicTempo(tracks, true);
- const double tempo = roundToBpm(basicTempo * averageTempoFactor);
+ const double tempo = basicTempo * averageTempoFactor;
score->tempomap()->clear(); // use only one tempo marking for all score
setTempoToScore(score, 0, tempo);
diff --git a/src/importexport/midi/tests/midiimport_data/human_tempo-ref.mscx b/src/importexport/midi/tests/midiimport_data/human_tempo-ref.mscx
index c559b65fd1fe7..4a172bcaca7a5 100644
--- a/src/importexport/midi/tests/midiimport_data/human_tempo-ref.mscx
+++ b/src/importexport/midi/tests/midiimport_data/human_tempo-ref.mscx
@@ -101,9 +101,9 @@
4
- 2.2
+ 2.19233
G_G
- metNoteQuarterUp = 132
+ metNoteQuarterUp = 131.539816
H_H