X-Git-Url: https://scm.cri.ensmp.fr/git/minwii.git/blobdiff_plain/46f3ffd7fdde386f41020171b5733e55a8e64a85..c958fad0633273abbc1357fd5a9857e674c3707f:/src/minwii/logfilereader.py diff --git a/src/minwii/logfilereader.py b/src/minwii/logfilereader.py index 64711c1..44c3611 100755 --- a/src/minwii/logfilereader.py +++ b/src/minwii/logfilereader.py @@ -15,6 +15,15 @@ import pygame SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0' +def inplaceread(m) : + def readinplace(self, *args, **kw) : + pos = self.logfile.tell() + self.logfile.seek(0) + ret = m(self, *args, **kw) + self.logfile.seek(pos) + return ret + return readinplace + class LogFileReader(object) : """ classe utilitaire pour l'accès aux données d'un fichier de log MinWii. @@ -31,79 +40,70 @@ class LogFileReader(object) : firstline = self.next() assert firstline == SUPPORTED_FILE_HEADER - + + @inplaceread def getSongFile(self) : "retourne le chemin d'accès au fichier musicxml de la chanson" - f = self.logfile - pos = f.tell() - - f.seek(0) for l in self : if l.startswith('APP chanson :') : break songfile = l.split(':', 1)[1].strip() - f.seek(pos) return songfile + @inplaceread def getSoundFontFile(self) : "retourne le chemin d'accès au fichier de la soundfont (*.sf2)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('ENV soundfont :') : break soundFontFile = l.split(':', 1)[1].strip() - f.seek(pos) return soundFontFile - + + @inplaceread def getBank(self) : "retourne le paramètre bank du synthétiseur (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('APP bank :') : break - f.seek(pos) bank = l.split(':', 1)[1].strip() return int(bank) + @inplaceread def getPreset(self) : "retourne le paramètre preset du synthétiseur (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('APP preset :') : break - f.seek(pos) preset = l.split(':', 1)[1].strip() return int(preset) + @inplaceread def getScreenResolution(self) : "retourne la résolution écran (tuple de deux entiers)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('ENV résolution écran :') : break screenResolution = eval(l.split(':', 1)[1].strip()) - f.seek(pos) return screenResolution + @inplaceread + def getMode(self) : + "retourne le niveau de difficulté" + for l in self : + if l.startswith('APP mode :') : + break + + mode = l.split(':', 1)[1].strip() + return mode + + @inplaceread def getFirstEventTicks(self) : "retourne le timecode du premier événement (entier)" - f = self.logfile - pos = f.tell() - f.seek(0) for l in self : if l.startswith('EVT ') : break firstTicks = int(l.split(None, 2)[1]) - f.seek(pos) return firstTicks def __del__(self) :