From 7a0c63dc85eee41f5982574cc282e7c636705a83 Mon Sep 17 00:00:00 2001 From: pin Date: Tue, 9 Feb 2010 14:39:18 +0000 Subject: [PATCH] =?utf8?q?On=20en=20reste=20l=C3=A0=20pour=20le=20support?= =?utf8?q?=20des=20r=C3=A9p=C3=A9titions=20(non=20impl=C3=A9ment=C3=A9=20p?= =?utf8?q?our=20l'instant).?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@19 fe552daf-6dbe-4428-90eb-1537e0879342 --- src/songs/musicxmltosong.py | 41 ++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/songs/musicxmltosong.py b/src/songs/musicxmltosong.py index 91feeae..eb5d5c3 100755 --- a/src/songs/musicxmltosong.py +++ b/src/songs/musicxmltosong.py @@ -41,6 +41,7 @@ class Part(object) : def __init__(self, node, autoDetectChorus=True) : self.node = node self.notes = [] + self.repeats = [] self._parseMusic() self.verses = [[]] self.chorus = [] @@ -54,6 +55,8 @@ class Part(object) : 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') : @@ -66,8 +69,17 @@ class Part(object) : previous.addDuration(note) continue previous = note - 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 @@ -133,17 +145,32 @@ class Part(object) : class Barline(object) : - def __init__(self, node) : + def __init__(self, node, measureNotes) : self.node = node - self.location = node.getAttribute('location') + location = self.location = node.getAttribute('location') or 'right' try : - 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 - + + def __str__(self) : + if self.repeat : + if self.location == 'left' : + return '|:' + elif self.location == 'right' : + return ':|' + return '|' + + __repr__ = __str__ class Note(object) : -- 2.20.1