renommage de app en minwii (ça va tout péter…).
[minwii.git] / src / app / logfilereader.py
diff --git a/src/app/logfilereader.py b/src/app/logfilereader.py
deleted file mode 100755 (executable)
index 9955623..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Module de lecture des fichiers de log minwii
-
-$Id$
-$URL$
-"""
-
-from widgets.playingscreen import PlayingScreenBase
-from eventutils import EventDispatcher
-from events import eventCodes
-from synth import Synth
-from musicxml import musicXml2Song
-import pygame
-
-SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0-alpha'
-
-class LogFileReader(object) :
-    
-    def __init__(self, logfile) :
-        if isinstance(logfile, str) :
-            self.logfile = open(logfile, 'r')
-        else :
-            self.logfile = logfile
-        
-        firstline = self.next()
-        assert firstline == SUPPORTED_FILE_HEADER
-        
-    
-    def getSongFile(self) :
-        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
-    
-    def getSoundFontFile(self) :
-        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
-
-    def getBank(self) :
-        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)
-    
-    def getPreset(self) :
-        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)
-
-    def getScreenResolution(self) :
-        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
-    
-    def getFirstEventTicks(self) :
-        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) :
-        self.logfile.close()
-    
-    def __iter__(self) :
-        return self
-    
-    def next(self) :
-        line = self.logfile.next().strip()
-        return line
-    
-    def getEventsIterator(self) :
-        self.logfile.seek(0)
-        while True :
-            try :
-                l = self.next()
-            except StopIteration :
-                break
-            
-            if not l.startswith('EVT ') :
-                continue
-            try :
-                ticks, eventName, message = l.split(None, 3)[1:]
-                yield ticks, eventName, message
-            except ValueError :
-                ticks, eventName = l.split(None, 3)[1:]
-                yield ticks, eventName, ''
-                
-
-class LogFilePlayer(PlayingScreenBase) :
-    """
-    ré-exécution d'une chanson sur la base de son fichier de log.
-    """
-
-    def __init__(self, logfile) :
-        lfr = self.lfr = LogFileReader(logfile)
-        songFile = lfr.getSongFile()
-        soundFontFile = lfr.getSoundFontFile()
-        sfPath = lfr.getSoundFontFile()
-        bank = lfr.getBank()
-        preset = lfr.getPreset()
-        synth = Synth(sfPath=sfPath)
-        synth.program_select(0, bank, preset)
-        self.song = musicXml2Song(songFile)
-        screenResolution = lfr.getScreenResolution()
-        
-        pygame.display.set_mode(screenResolution)
-        
-        super(LogFilePlayer, self).__init__(synth, self.song.distinctNotes)
-    
-    def run(self):
-        self._running = True
-        clock = pygame.time.Clock()
-        pygame.display.flip()
-        pygame.mouse.set_visible(False)
-        
-        previousTicks = self.lfr.getFirstEventTicks()
-        eIter = self.lfr.getEventsIterator()
-
-        for ticks, eventName, message in eIter :
-            t0 = pygame.time.get_ticks()
-            ticks = int(ticks)
-            if eventName == 'COLSTATECHANGE' :
-                parts = message.split(None, 4)
-                if len(parts) == 4 :
-                    parts.append('')
-                index, state, midi, name, syllabus = parts
-                index = int(index)
-                midi = int(midi)
-                state = state == 'True'
-                col = self.columns[midi]
-                col.update(state, syllabus=syllabus.decode('utf-8'))
-
-            elif eventName == 'NOTEON':
-                chan, key, vel = [int(v) for v in message.split(None, 2)]
-                self.synth.noteon(chan, key, vel)
-
-            elif eventName == 'NOTEOFF':
-                chan, key = [int(v) for v in message.split(None, 1)]
-                self.synth.noteoff(chan, key)
-            
-            elif eventName.startswith('COL') :
-                pos = [int(n) for n in message.split(None, 4)[-1].strip('()').split(',')]
-                self.cursor.setPosition(pos)
-            
-                
-            pygame.event.clear() # à virer
-            #EventDispatcher.dispatchEvents()
-
-            dirty = self.draw(pygame.display.get_surface())
-            pygame.display.update(dirty)
-            execTime = pygame.time.get_ticks() - t0
-            
-            delay = ticks - previousTicks - execTime
-            if delay > 0 :
-                pygame.time.wait(delay)
-            
-            previousTicks = ticks
-            #print ticks, eventName, message
-            
-        #while self._running :
-        #    EventDispatcher.dispatchEvents()
-        #    dirty = self.draw(pygame.display.get_surface())
-        #    pygame.display.update(dirty)
-        #    clock.tick()
-        
-    
\ No newline at end of file