def _parseMusic(self) :
divisions = 0
- noteIndex = 0
- next = previous = None
+ previous = None
+
for measureNode in self.node.getElementsByTagName('measure') :
+ measureNotes = []
# divisions de la noire
divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
for noteNode in measureNode.getElementsByTagName('note') :
note = Note(noteNode, divisions, previous)
if not note.isRest :
- self.notes.append(note)
- try :
- self.notes[noteIndex-1].next = note
- except IndexError:
- pass
+ measureNotes.append(note)
+ if previous :
+ previous.next = note
else :
previous.addDuration(note)
continue
-
previous = note
- noteIndex += 1
+
+ self.notes.extend(measureNotes)
def _findChorus(self):
""" le refrain correspond aux notes pour lesquelles
def pprint(self) :
for note, verseIndex in self.iterNotes() :
- print note.nom, note.name, note.midi, note.duration, note.lyrics[verseIndex]
+ print note, note.lyrics[verseIndex]
def assignNotesFromMidiNoteNumbers(self):
noteInExtendedScale -= 1
self.notes.append(noteInExtendedScale)
+
+class Barline(object) :
+
+ def __init__(self, node) :
+ self.node = node
+ self.location = node.getAttribute('location')
+ try :
+ repeat = node.getElementsByTagName('repeat')[0]
+ repeat = {'direction' : repeat.getAttribute('direction'),
+ 'times' : int(repeat.getAttribute('times') or 1)}
+ self.repeat = repeat
+ except IndexError :
+ self.repeat = None
self.previous = previous
self.next = None
+ def __str__(self) :
+ return (u'%5s %2s %2d %4s' % (self.nom, self.name, self.midi, round(self.duration, 2))).encode('utf-8')
+
+ __repr__ = __str__
+
def addDuration(self, note) :
self._duration = self.duration + note.duration
self.divisions = 1