layers sous forme de constantes globales.
[minwii.git] / src / app / musicxml.py
index 7eedf53..36a65bc 100755 (executable)
@@ -47,15 +47,12 @@ FR_NOTES = {'C' : u'Do',
 _marker = []
 
 class Part(object) :
 _marker = []
 
 class Part(object) :
-    
-    requiresExtendedScale = False
-    scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72]
-    quarterNoteLength = 400
-    
+        
     def __init__(self, node, autoDetectChorus=True) :
         self.node = node
         self.notes = []
         self.repeats = []
     def __init__(self, node, autoDetectChorus=True) :
         self.node = node
         self.notes = []
         self.repeats = []
+        self.distinctNotes = []
         self._parseMusic()
         self.verses = [[]]
         self.chorus = []
         self._parseMusic()
         self.verses = [[]]
         self.chorus = []
@@ -66,6 +63,7 @@ class Part(object) :
     def _parseMusic(self) :
         divisions = 0
         previous = None
     def _parseMusic(self) :
         divisions = 0
         previous = None
+        distinctNotesDict = {}
 
         for measureNode in self.node.getElementsByTagName('measure') :
             measureNotes = []
 
         for measureNode in self.node.getElementsByTagName('measure') :
             measureNotes = []
@@ -83,7 +81,13 @@ class Part(object) :
                     previous.addDuration(note)
                     continue
                 previous = note
                     previous.addDuration(note)
                     continue
                 previous = note
+
             self.notes.extend(measureNotes)
             self.notes.extend(measureNotes)
+
+            for note in measureNotes :
+                if not distinctNotesDict.has_key(note.midi) :
+                    distinctNotesDict[note.midi] = True
+                    self.distinctNotes.append(note)
             
             # barres de reprises
             try :
             
             # barres de reprises
             try :
@@ -94,6 +98,9 @@ class Part(object) :
             barline = Barline(barlineNode, measureNotes)
             if barline.repeat :
                 self.repeats.append(barline)
             barline = Barline(barlineNode, measureNotes)
             if barline.repeat :
                 self.repeats.append(barline)
+        
+        self.distinctNotes.sort(lambda a, b : cmp(a.midi, b.midi))
+        
 
     def _findChorus(self):
         """ le refrain correspond aux notes pour lesquelles
 
     def _findChorus(self):
         """ le refrain correspond aux notes pour lesquelles