@@ -78,39 +78,28 @@ void setTempoToScore(Score* score, int tick, double beatsPerSecond)
7878
7979 auto * data = midiImportOperations.data ();
8080 if (data->trackOpers .showTempoText .value ()) {
81- const int tempoInBpm = qRound (beatsPerSecond * 60.0 );
82-
8381 Measure* measure = score->tick2measure (Fraction::fromTicks (tick));
8482 if (!measure) {
8583 LOGD (" MidiTempo::setTempoToScore: no measure for tick %d" , tick);
8684 return ;
8785 }
88- Segment* segment = measure->getSegment (SegmentType::ChordRest, Fraction::fromTicks (tick));
89- if (!segment) {
90- LOGD (" MidiTempo::setTempoToScore: no chord/rest segment for tempo at %d" , tick);
91- return ;
92- }
86+ Segment* segment = measure->getChordRestOrTimeTickSegment (Fraction::fromTicks (tick));
9387
9488 TempoText* tempoText = mu::engraving::Factory::createTempoText (segment);
9589 tempoText->setTempo (beatsPerSecond);
96- tempoText->setXmlText (QString ( " <sym>metNoteQuarterUp</sym> = %1" ).arg (tempoInBpm ));
90+ tempoText->setXmlText (String ( u " <sym>metNoteQuarterUp</sym> = %1" ).arg (beatsPerSecond * 60.0 ));
9791 tempoText->setTrack (0 );
9892 segment->add (tempoText);
9993 data->hasTempoText = true ; // to show tempo text column in the MIDI import panel
10094 }
10195}
10296
103- double roundToBpm (double beatsPerSecond)
104- {
105- return qRound (beatsPerSecond * 60.0 ) / 60.0 ;
106- }
107-
10897void applyAllTempoEvents (const std::multimap<int , MTrack>& tracks, Score* score)
10998{
11099 for (const auto & track: tracks) {
111100 if (track.second .isDivisionInTps ) { // ticks per second
112101 const double ticksPerBeat = Constants::DIVISION;
113- const double beatsPerSecond = roundToBpm ( track.second .division / ticksPerBeat) ;
102+ const double beatsPerSecond = track.second .division / ticksPerBeat;
114103 setTempoToScore (score, 0 , beatsPerSecond);
115104 } else { // beats per second
116105 for (const auto & ie : track.second .mtrack ->events ()) {
@@ -120,7 +109,7 @@ void applyAllTempoEvents(const std::multimap<int, MTrack>& tracks, Score* score)
120109 ie.first , track.second .division , false );
121110 const uchar* data = (uchar*)e.edata ();
122111 const unsigned tempo = data[2 ] + (data[1 ] << 8 ) + (data[0 ] << 16 );
123- const double beatsPerSecond = roundToBpm ( 1000000.0 / tempo) ;
112+ const double beatsPerSecond = 1000000.0 / tempo;
124113 setTempoToScore (score, tick.ticks (), beatsPerSecond);
125114 }
126115 }
@@ -164,7 +153,7 @@ void setTempo(const std::multimap<int, MTrack>& tracks, Score* score)
164153 averageTempoFactor /= counter;
165154
166155 const double basicTempo = MidiTempo::findBasicTempo (tracks, true );
167- const double tempo = roundToBpm ( basicTempo * averageTempoFactor) ;
156+ const double tempo = basicTempo * averageTempoFactor;
168157
169158 score->tempomap ()->clear (); // use only one tempo marking for all score
170159 setTempoToScore (score, 0 , tempo);
0 commit comments