X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/blobdiff_plain/03cc372eac638f066800c45d6929b2b50701f36e..1ba1c6642bcd08f1fde82e6b0d99927346df752b:/src/minwii/logfilereader.py diff --git a/src/minwii/logfilereader.py b/src/minwii/logfilereader.py index a08855a..648cdee 100755 --- a/src/minwii/logfilereader.py +++ b/src/minwii/logfilereader.py @@ -12,14 +12,16 @@ from events import eventCodes from synth import Synth from musicxml import musicXml2Song import pygame +from backwardsfilereader import BackwardsReader SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0' def inplaceread(m) : def readinplace(self, *args, **kw) : - self.savePos() + pos = self.logfile.tell() + self.logfile.seek(0) ret = m(self, *args, **kw) - self.recallPos() + self.logfile.seek(pos) return ret return readinplace @@ -37,18 +39,10 @@ class LogFileReader(object) : else : self.logfile = logfile - self.__pos = 0 - firstline = self.next() assert firstline == SUPPORTED_FILE_HEADER - def savePos(self) : - self.__pos = self.logfile.tell() - self.logfile.seek(0) - - def recallPos(self) : - self.logfile.seek(self.__pos) - + @inplaceread def getSongFile(self) : "retourne le chemin d'accès au fichier musicxml de la chanson" @@ -113,6 +107,16 @@ class LogFileReader(object) : firstTicks = int(l.split(None, 2)[1]) return firstTicks + @inplaceread + def getLastEventTicks(self) : + "retourne le timecode du dernier événement (entier)" + for l in self.getBackwardLineIterator() : + if l.startswith('EVT ') : + break + + lastTicks = int(l.split(None, 2)[1]) + return lastTicks + def __del__(self) : self.logfile.close() @@ -146,6 +150,14 @@ class LogFileReader(object) : ticks, eventName = l.split(None, 3)[1:] ticks = int(ticks) yield ticks, eventName, '' + + def getBackwardLineIterator(self) : + br = BackwardsReader(self.logfile, BLKSIZE=128) + line = br.readline() + while line : + yield line.strip() + line = br.readline() + class LogFilePlayer(PlayingScreenBase) :