X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/blobdiff_plain/9d4a748a0863cd7f9dd919362fb2c989e41f5f06..1bdf29a0b4412135ee91f6165e3c3125e05096f8:/src/app/musicxml.py diff --git a/src/app/musicxml.py b/src/app/musicxml.py index 7eedf53..49e1984 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 @@ -273,37 +280,10 @@ class Note(Tone) : self._duration = self.duration + note.duration self.divisions = 1 -# @property -# def midi(self) : -# mid = DIATO_SCALE[self.step] -# mid = mid + (self.octave - OCTAVE_REF) * 12 -# mid = mid + self.alter -# return mid - @property def duration(self) : return self._duration / self.divisions -# @property -# def name(self) : -# name = '%s%d' % (self.step, self.octave) -# if self.alter < 0 : -# alterext = 'b' -# else : -# alterext = '#' -# name = '%s%s' % (name, abs(self.alter) * alterext) -# return name -# -# @property -# def nom(self) : -# name = FR_NOTES[self.step] -# if self.alter < 0 : -# alterext = 'b' -# else : -# alterext = '#' -# name = '%s%s' % (name, abs(self.alter) * alterext) -# return name - @property def column(self): return self.scale.index(self.midi)