from types import StringTypes
from xml.dom.minidom import parse
from optparse import OptionParser
-from Song import Song
+#from Song import Song
# Do4 <=> midi 60
OCTAVE_REF = 4
class Part(object) :
+ requiresExtendedScale = False
+ scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72]
+ quarterNoteLength = 400
+
def __init__(self, node, autoDetectChorus=True) :
self.node = node
self.notes = []
def pprint(self) :
for note, verseIndex in self.iterNotes() :
print note.nom, note.name, note.midi, note.duration, note.lyrics[verseIndex]
+
+
+ def assignNotesFromMidiNoteNumbers(self):
+ # TODO faire le mapping bande hauteur midi
+ for i in range(len(self.midiNoteNumbers)):
+ noteInExtendedScale = 0
+ while self.midiNoteNumbers[i] > self.scale[noteInExtendedScale] and noteInExtendedScale < len(self.scale)-1:
+ noteInExtendedScale += 1
+ if self.midiNoteNumbers[i]<self.scale[noteInExtendedScale]:
+ noteInExtendedScale -= 1
+ self.notes.append(noteInExtendedScale)
+
class Note(object) :
+ scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72]
+
def __init__(self, node, divisions, previous) :
self.node = node
self.step = _getNodeValue(node, 'pitch/step')
name = '%s%s' % (name, abs(self.alter) * alterext)
return name
+ @property
+ def column(self):
+ return self.scale.index(self.midi)
+
class Lyric(object) :
else :
return default
-def musicXml2Song(input, output, partIndex=0, printNotes=False) :
+def musicXml2Song(input, partIndex=0, printNotes=False) :
if isinstance(input, StringTypes) :
input = open(input, 'r')
if printNotes :
part.pprint()
+
+ return part
+
# divisions de la noire
# divisions = 0
options, args = op.parse_args()
- if len(args) != 2 :
+ if len(args) != 1 :
raise SystemExit(op.format_help())
- musicXml2Song(args[0], args[1], partIndex=options.partIndex, printNotes=options.printNotes)
+ musicXml2Song(args[0], partIndex=options.partIndex, printNotes=options.printNotes)