def __init__(self, node, autoDetectChorus=True) :
self.node = node
self.notes = []
def __init__(self, node, autoDetectChorus=True) :
self.node = node
self.notes = []
self._parseMusic()
self.verses = [[]]
self.chorus = []
self._parseMusic()
self.verses = [[]]
self.chorus = []
for measureNode in self.node.getElementsByTagName('measure') :
measureNotes = []
for measureNode in self.node.getElementsByTagName('measure') :
measureNotes = []
+
+ # iteration sur les notes
# divisions de la noire
divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
for noteNode in measureNode.getElementsByTagName('note') :
# divisions de la noire
divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
for noteNode in measureNode.getElementsByTagName('note') :
previous.addDuration(note)
continue
previous = note
previous.addDuration(note)
continue
previous = note
self.notes.extend(measureNotes)
self.notes.extend(measureNotes)
+
+ # barres de reprises
+ try :
+ barlineNode = measureNode.getElementsByTagName('barline')[0]
+ except IndexError :
+ continue
+
+ barline = Barline(barlineNode, measureNotes)
+ if barline.repeat :
+ self.repeats.append(barline)
def _findChorus(self):
""" le refrain correspond aux notes pour lesquelles
def _findChorus(self):
""" le refrain correspond aux notes pour lesquelles
- def __init__(self, node) :
+ def __init__(self, node, measureNotes) :
- self.location = node.getAttribute('location')
+ location = self.location = node.getAttribute('location') or 'right'
- repeat = node.getElementsByTagName('repeat')[0]
- repeat = {'direction' : repeat.getAttribute('direction'),
- 'times' : int(repeat.getAttribute('times') or 1)}
+ repeatN = node.getElementsByTagName('repeat')[0]
+ repeat = {'direction' : repeatN.getAttribute('direction'),
+ 'times' : int(repeatN.getAttribute('times') or 1)}
+ if location == 'left' :
+ repeat['note'] = measureNotes[0]
+ elif location == 'right' :
+ repeat['note'] = measureNotes[-1]
+ else :
+ raise ValueError(location)
self.repeat = repeat
except IndexError :
self.repeat = None
self.repeat = repeat
except IndexError :
self.repeat = None
+
+ def __str__(self) :
+ if self.repeat :
+ if self.location == 'left' :
+ return '|:'
+ elif self.location == 'right' :
+ return ':|'
+ return '|'
+
+ __repr__ = __str__