diff --git a/loading.py b/loading.py index dc05c527bcf6482edb303f9be91069fba7d41f3f..c49e033992f0c95b6a5fe4171335793a288915c9 100644 --- a/loading.py +++ b/loading.py @@ -1,6 +1,6 @@ from st3m.ui.view import BaseView, ViewTransitionBlend import gc -import sys_display +import time import song import utils @@ -43,5 +43,10 @@ class LoadingView(BaseView): utils.blm_timeout(self, delta_ms) if self.vm.transitioning or not self.is_active(): return #gc.collect() - self.vm.replace(song.SongView(self.app, self.song, self.difficulty), ViewTransitionBlend()) + t = time.ticks_ms() + view = song.SongView(self.app, self.song, self.difficulty) + t = time.ticks_ms() - t + if t < 2000: + time.sleep_ms(2000 - t) + self.vm.replace(view, ViewTransitionBlend()) gc.collect() diff --git a/midireader.py b/midireader.py index 26a981dab5896ac5c3dc580970a616b16c28d294..25f26757d498e85bdd44bc732f30d702374569ba 100644 --- a/midireader.py +++ b/midireader.py @@ -124,6 +124,9 @@ class MidiReader(midi.MidiOutStream): self.track = Track() self.nTracks = -1 self.ignored = False + + self.current_tempo_marker = 0 + self.scaledTime = 0 def addEvent(self, track, event): time = event.time @@ -139,26 +142,27 @@ class MidiReader(midi.MidiOutStream): #elif track < len(self.tracks): # self.tracks[track].addEvent(time, event) - def abs_time(self): - def ticksToBeats(ticks, bpm): - return (60000.0 * ticks) / (bpm * self.ticksPerBeat) + def ticksToBeats(self, ticks, bpm): + return (60000.0 * ticks) / (bpm * self.ticksPerBeat) + def abs_time(self): if self.bpm: currentTime = midi.MidiOutStream.abs_time(self) - # Find out the current scaled time. - # Yeah, this is reeally slow, but fast enough :) - scaledTime = 0.0 - tempoMarkerTime = 0.0 # Find out the current scaled time. + if self.current_tempo_marker == 0: + tempoMarkerTime, currentBpm = 0.0, self.bpm + else: + tempoMarkerTime, currentBpm = self.tempoMarkers[self.current_tempo_marker - 1] - currentBpm = self.bpm - for i in range(len(self.tempoMarkers)): - time, bpm = self.tempoMarkers[i] + while len(self.tempoMarkers) > self.current_tempo_marker: + time, bpm = self.tempoMarkers[self.current_tempo_marker] if time > currentTime: break - scaledTime += ticksToBeats(time - tempoMarkerTime, currentBpm) + self.scaledTime += self.ticksToBeats(time - tempoMarkerTime, currentBpm) + self.current_tempo_marker += 1 tempoMarkerTime, currentBpm = time, bpm - return scaledTime + ticksToBeats(currentTime - tempoMarkerTime, currentBpm) + + return self.scaledTime + self.ticksToBeats(currentTime - tempoMarkerTime, currentBpm) return 0.0 def header(self, format, nTracks, division):