X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/blobdiff_plain/9d4a748a0863cd7f9dd919362fb2c989e41f5f06..760a2904b59a2c59dd006def017dbdb45b64516a:/src/app/musicxml.py?ds=inline diff --git a/src/app/musicxml.py b/src/app/musicxml.py index 7eedf53..36a65bc 100755 --- a/src/app/musicxml.py +++ b/src/app/musicxml.py @@ -47,15 +47,12 @@ FR_NOTES = {'C' : u'Do', _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 = [] + self.distinctNotes = [] self._parseMusic() self.verses = [[]] self.chorus = [] @@ -66,6 +63,7 @@ class Part(object) : def _parseMusic(self) : divisions = 0 previous = None + distinctNotesDict = {} for measureNode in self.node.getElementsByTagName('measure') : measureNotes = [] @@ -83,7 +81,13 @@ class Part(object) : previous.addDuration(note) continue previous = note + 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 : @@ -94,6 +98,9 @@ class Part(object) : 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