]> CRI, Mines Paris - PSL - minwii.git/commitdiff
Affichage du titre de la chanson.
authorpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Fri, 30 Jul 2010 14:00:44 +0000 (14:00 +0000)
committerpin <pin@fe552daf-6dbe-4428-90eb-1537e0879342>
Fri, 30 Jul 2010 14:00:44 +0000 (14:00 +0000)
git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@308 fe552daf-6dbe-4428-90eb-1537e0879342

src/minwii/loganalyse.py
src/minwii/logfilereader.py

index ec1b025e73700bb130e16998e6526c5e02e1a194..ab8c819583045932d361a9f1241985b47eb74673 100755 (executable)
@@ -12,6 +12,8 @@ from minwii.musicxml import musicXml2Song
 from minwii.globals import PLAYING_MODES
 from statlib import stats
 from datetime import timedelta
+from xml.etree import ElementTree
+import os.path
 
 PLAYING_MODES = dict(PLAYING_MODES)
 
@@ -73,6 +75,10 @@ class LogFileAnalyser(LogFileReader) :
         try :
             self.mode = mode = self.getMode()
             results.append(('Mode de jeu', PLAYING_MODES.get(mode, mode)))
+
+            self.songTitle = LogFileAnalyser.getSongTitle(self.getSongFile())
+            results.append(('Chanson', self.songTitle))
+
             for name in self.POSSIBLE_ANALYSES[mode] :
                 meth = getattr(self, name)
                 results.append((meth.__doc__, meth()))
@@ -81,6 +87,23 @@ class LogFileAnalyser(LogFileReader) :
         
         return results
     
+    @staticmethod
+    def getSongTitle(file) :
+        if os.path.exists(file) :
+            it = ElementTree.iterparse(file, ['start', 'end'])
+            creditFound = False
+
+            for evt, el in it :
+                if el.tag == 'credit' :
+                    creditFound = True
+                if el.tag == 'credit-words' and creditFound:
+                    return el.text
+                if el.tag == 'part-list' :
+                    # plus de chance de trouver un titre
+                    return os.path.basename(file)
+        else :
+            return os.path.basename(file)
+
     def _toTimeDelta(self, milliseconds) :
         duration = milliseconds / 1000.
         duration = int(round(duration, 0))
index 50da29ccce861bfd203f5d39e3d0ac2e72f6077a..a5a2d359bdf68f0f2948edc750194f86ad690fb1 100755 (executable)
@@ -177,7 +177,10 @@ class LogFileReader(object) :
         f = self.logfile
         f.seek(0)
         before = f.readline()
-        after = f.read()
+        line = f.readline()
+        while line.startswith('METADATA ') :
+            line = f.readline()
+        after = line + f.read()
         
         lines = []
         for name, value in metadata :