bugfix : collision de noms
[minwii.git] / src / songs / musicxmltosong.py
index eb5d5c3..7f5c8bb 100755 (executable)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 """
-converstion d'un fichier musicxml en objet song minwii.
+conversion d'un fichier musicxml en objet song minwii.
 
 $Id$
 $URL$
@@ -108,9 +108,14 @@ class Part(object) :
         verse.append(self.notes[-1])
         
     
-    def iterNotes(self) :
+    def iterNotes(self, indefinitely=True) :
         "exécution de la chanson avec l'alternance couplets / refrains"
-        for verse in self.verses :
+        print 'indefinitely', indefinitely
+        if indefinitely == False :
+            iterable = self.verses
+        else :
+            iterable = cycle(self.verses)
+        for verse in iterable :
             print "---partie---"
             repeats = len(verse[0].lyrics)
             if repeats > 1 :
@@ -128,7 +133,7 @@ class Part(object) :
                     yield note, 0
         
     def pprint(self) :
-        for note, verseIndex in self.iterNotes() :
+        for note, verseIndex in self.iterNotes(indefinitely=False) :
             print note, note.lyrics[verseIndex]
 
 
@@ -257,9 +262,12 @@ class Lyric(object) :
         self.syllabic = _getNodeValue(node, 'syllabic', 'single')
         self.text = _getNodeValue(node, 'text')
     
-    def __str__(self) :
+    def syllabus(self, encoding='utf-8'):
         text = self._syllabicModifiers[self.syllabic] % self.text
-        return text.encode('utf-8')
+        return text.encode(encoding)
+    
+    def __str__(self) :
+        return self.syllabus()
     __repr__  = __str__
         
         
@@ -295,32 +303,10 @@ def musicXml2Song(input, partIndex=0, printNotes=False) :
         part.pprint()
 
     return part
-
-    
-    # divisions de la noire
-#    divisions = 0
-#    midiNotes, durations, lyrics = [], [], []
-#
-#    for measureNode in leadPart.getElementsByTagName('measure') :
-#        divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
-#        for noteNode in measureNode.getElementsByTagName('note') :
-#            note = Note(noteNode, divisions)
-#            if printNotes :
-#                print note.name, note.midi, note.duration, note.lyric
-#            midiNotes.append(note.midi)
-#            durations.append(note.duration)
-#            lyrics.append(note.lyric)
-#    
-#    song = Song(None,
-#                midiNoteNumbers = midiNotes,
-#                noteLengths = durations,
-#                lyrics = lyrics,
-#                notesInExtendedScale=None)
-#    song.save(output)
     
     
 def main() :
-    usage = "%prog musicXmlFile.xml outputSongFile.smwi [options]"
+    usage = "%prog musicXmlFile.xml [options]"
     op = OptionParser(usage)
     op.add_option("-i", "--part-index", dest="partIndex"
                  , default = 0