projects
/
minwii.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Clignotement du curseur basé sur un thread indépendant de pygame.
[minwii.git]
/
src
/
app
/
logfilereader.py
diff --git
a/src/app/logfilereader.py
b/src/app/logfilereader.py
index
a32d834
..
64711c1
100755
(executable)
--- a/
src/app/logfilereader.py
+++ b/
src/app/logfilereader.py
@@
-13,11
+13,17
@@
from synth import Synth
from musicxml import musicXml2Song
import pygame
from musicxml import musicXml2Song
import pygame
-SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0
-alpha
'
+SUPPORTED_FILE_HEADER = 'ENV winwii log format version : 1.0'
class LogFileReader(object) :
class LogFileReader(object) :
+ """
+ classe utilitaire pour l'accès aux données d'un fichier de log MinWii.
+ """
def __init__(self, logfile) :
def __init__(self, logfile) :
+ """ logfile : chemin d'accès au fichier de log MinWii.
+ le format supporté est actuellement la version 1.0 uniquement.
+ """
if isinstance(logfile, str) :
self.logfile = open(logfile, 'r')
else :
if isinstance(logfile, str) :
self.logfile = open(logfile, 'r')
else :
@@
-28,6
+34,7
@@
class LogFileReader(object) :
def getSongFile(self) :
def getSongFile(self) :
+ "retourne le chemin d'accès au fichier musicxml de la chanson"
f = self.logfile
pos = f.tell()
f = self.logfile
pos = f.tell()
@@
-40,6
+47,7
@@
class LogFileReader(object) :
return songfile
def getSoundFontFile(self) :
return songfile
def getSoundFontFile(self) :
+ "retourne le chemin d'accès au fichier de la soundfont (*.sf2)"
f = self.logfile
pos = f.tell()
f.seek(0)
f = self.logfile
pos = f.tell()
f.seek(0)
@@
-51,6
+59,7
@@
class LogFileReader(object) :
return soundFontFile
def getBank(self) :
return soundFontFile
def getBank(self) :
+ "retourne le paramètre bank du synthétiseur (entier)"
f = self.logfile
pos = f.tell()
f.seek(0)
f = self.logfile
pos = f.tell()
f.seek(0)
@@
-62,6
+71,7
@@
class LogFileReader(object) :
return int(bank)
def getPreset(self) :
return int(bank)
def getPreset(self) :
+ "retourne le paramètre preset du synthétiseur (entier)"
f = self.logfile
pos = f.tell()
f.seek(0)
f = self.logfile
pos = f.tell()
f.seek(0)
@@
-73,6
+83,7
@@
class LogFileReader(object) :
return int(preset)
def getScreenResolution(self) :
return int(preset)
def getScreenResolution(self) :
+ "retourne la résolution écran (tuple de deux entiers)"
f = self.logfile
pos = f.tell()
f.seek(0)
f = self.logfile
pos = f.tell()
f.seek(0)
@@
-84,6
+95,7
@@
class LogFileReader(object) :
return screenResolution
def getFirstEventTicks(self) :
return screenResolution
def getFirstEventTicks(self) :
+ "retourne le timecode du premier événement (entier)"
f = self.logfile
pos = f.tell()
f.seek(0)
f = self.logfile
pos = f.tell()
f.seek(0)
@@
-105,6
+117,11
@@
class LogFileReader(object) :
return line
def getEventsIterator(self) :
return line
def getEventsIterator(self) :
+ """ Retourne un itérateur sur les événements.
+ Chaque itération retourne un tuple de 3 éléments :
+ (timecode, nom_événement, données) avec le typage :
+ (entier, chaîne, chaîne)
+ """
self.logfile.seek(0)
while True :
try :
self.logfile.seek(0)
while True :
try :
@@
-116,9
+133,11
@@
class LogFileReader(object) :
continue
try :
ticks, eventName, message = l.split(None, 3)[1:]
continue
try :
ticks, eventName, message = l.split(None, 3)[1:]
+ ticks = int(ticks)
yield ticks, eventName, message
except ValueError :
ticks, eventName = l.split(None, 3)[1:]
yield ticks, eventName, message
except ValueError :
ticks, eventName = l.split(None, 3)[1:]
+ ticks = int(ticks)
yield ticks, eventName, ''
yield ticks, eventName, ''
@@
-154,7
+173,6
@@
class LogFilePlayer(PlayingScreenBase) :
for ticks, eventName, message in eIter :
t0 = pygame.time.get_ticks()
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 :
if eventName == 'COLSTATECHANGE' :
parts = message.split(None, 4)
if len(parts) == 4 :
@@
-174,9
+192,12
@@
class LogFilePlayer(PlayingScreenBase) :
chan, key = [int(v) for v in message.split(None, 1)]
self.synth.noteoff(chan, key)
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()
+ pygame.event.clear()
dirty = self.draw(pygame.display.get_surface())
pygame.display.update(dirty)
dirty = self.draw(pygame.display.get_surface())
pygame.display.update(dirty)
@@
-187,12
+208,7
@@
class LogFilePlayer(PlayingScreenBase) :
pygame.time.wait(delay)
previousTicks = ticks
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()
+
+ self.stop()
\ No newline at end of file
\ No newline at end of file