From: pin Date: Fri, 5 Feb 2010 12:36:07 +0000 (+0000) Subject: — Prise en charge des altérations ; X-Git-Url: https://scm.cri.mines-paristech.fr/git/minwii.git/commitdiff_plain/e5335f94e64a4a312512be3953a212a5593c18ba?ds=sidebyside — Prise en charge des altérations ; — Ajout de l'option -p pour imprimer les notes (debug) git-svn-id: https://svn.cri.ensmp.fr/svn/minwii/trunk@5 fe552daf-6dbe-4428-90eb-1537e0879342 --- diff --git a/src/songs/musicxmltosong.py b/src/songs/musicxmltosong.py index 0db98be..ffb5247 100755 --- a/src/songs/musicxmltosong.py +++ b/src/songs/musicxmltosong.py @@ -27,6 +27,7 @@ class Note(object) : def __init__(self, node, divisions) : 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') @@ -36,11 +37,23 @@ class Note(object) : 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 + 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 + @@ -55,7 +68,7 @@ def _getNodeValue(node, path, default=_marker) : else : return default -def musicXml2Song(input, output, partIndex=0) : +def musicXml2Song(input, output, partIndex=0, printNotes=False) : if isinstance(input, StringTypes) : input = open(input, 'r') @@ -76,6 +89,8 @@ def musicXml2Song(input, output, partIndex=0) : 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) @@ -94,13 +109,17 @@ def main() : op.add_option("-i", "--part-index", dest="partIndex" , default = 0 , help = "Index de la partie qui contient le champ.") + op.add_option("-p", '--print', dest='printNotes' + , action="store_true" + , default = False + , help = "Affiche les notes sur la sortie standard (debug)") options, args = op.parse_args() if len(args) != 2 : raise SystemExit(op.format_help()) - musicXml2Song(*args) + musicXml2Song(args[0], args[1], partIndex=options.partIndex, printNotes=options.printNotes)