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')
+ self.lyric = _getNodeValue(node, 'lyric/text', '')
self.divisions = divisions
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
+
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')
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)
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)