'B' : 71}
_marker = []
+class Part(object) :
+
+ def __init__(self, node) :
+ self.node = node
+ self.notes = []
+ self._parseMusic()
+
+ def _parseMusic(self) :
+ divisions = 0
+
+ for measureNode in self.node.getElementsByTagName('measure') :
+ divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
+ next = previous = None
+ for i, noteNode in enumerate(measureNode.getElementsByTagName('note')) :
+ note = Note(noteNode, divisions, previous)
+ self.notes.append(note)
+ try :
+ self.notes[i-1].next = note
+ except IndexError:
+ pass
+ previous = note
+
+ def pprint(self) :
+ for note in self.notes :
+ print note.name, note.midi, note.duration, note.lyrics
+
+
+
+
class Note(object) :
- def __init__(self, node, divisions) :
+ def __init__(self, node, divisions, previous) :
+ self.node = node
self.step = _getNodeValue(node, 'pitch/step')
self.octave = int(_getNodeValue(node, 'pitch/octave'))
self.alter = int(_getNodeValue(node, 'pitch/alter', 0))
self._duration = float(_getNodeValue(node, 'duration'))
- self.lyric = _getNodeValue(node, 'lyric/text')
+ self.lyrics = []
+ for ly in node.getElementsByTagName('lyric') :
+ self.lyrics.append(Lyric(ly))
self.divisions = divisions
+ self.previous = previous
+ self.next = None
@property
def midi(self) :
alterext = '#'
name = '%s%s' % (name, abs(self.alter) * alterext)
return name
+
+
+class Lyric(object) :
+ def __init__(self, node) :
+ self.node = node
+ self.syllabic = _getNodeValue(node, 'syllabic', 'single')
+ self.text = _getNodeValue(node, 'text')
+
+ def __str__(self) :
+ return self.text.encode('utf-8')
+ __repr__ = __str__
parts = doc.getElementsByTagName('part')
leadPart = parts[partIndex]
+ part = Part(leadPart)
+
+ if printNotes :
+ part.pprint()
+
# divisions de la noire
- divisions = 0
- midiNotes, durations, lyrics = [], [], []
-
- for measureNode in leadPart.getElementsByTagName('measure') :
- divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
- for noteNode in measureNode.getElementsByTagName('note') :
- note = Note(noteNode, divisions)
- if printNotes :
- print note.name, note.midi, note.duration, note.lyric
- midiNotes.append(note.midi)
- durations.append(note.duration)
- lyrics.append(note.lyric)
-
- song = Song(None,
- midiNoteNumbers = midiNotes,
- noteLengths = durations,
- lyrics = lyrics,
- notesInExtendedScale=None)
- song.save(output)
+# divisions = 0
+# midiNotes, durations, lyrics = [], [], []
+#
+# for measureNode in leadPart.getElementsByTagName('measure') :
+# divisions = int(_getNodeValue(measureNode, 'attributes/divisions', divisions))
+# for noteNode in measureNode.getElementsByTagName('note') :
+# note = Note(noteNode, divisions)
+# if printNotes :
+# print note.name, note.midi, note.duration, note.lyric
+# midiNotes.append(note.midi)
+# durations.append(note.duration)
+# lyrics.append(note.lyric)
+#
+# song = Song(None,
+# midiNoteNumbers = midiNotes,
+# noteLengths = durations,
+# lyrics = lyrics,
+# notesInExtendedScale=None)
+# song.save(output)
def main() :