'A' : 69,
'B' : 71}
+CHROM_SCALE = { 0 : ('C', 0),
+ 1 : ('C', 1),
+ 2 : ('D', 0),
+ 3 : ('E', -1),
+ 4 : ('E', 0),
+ 5 : ('F', 0),
+ 6 : ('F', 1),
+ 7 : ('G', 0),
+ 8 : ('G', 1),
+ 9 : ('A', 0),
+ 10 : ('B', -1),
+ 11 : ('B', 0)}
+
+
FR_NOTES = {'C' : u'Do',
'D' : u'Ré',
'E' : u'Mi',
return '|'
__repr__ = __str__
+
+
+class Tone(object) :
+
+ @staticmethod
+ def midi_to_step_alter_octave(midi):
+ stepIndex = midi % 12
+ step, alter = CHROM_SCALE[stepIndex]
+ octave = midi / 12 - 1
+ return step, alter, octave
+
+
+ def __init__(self, *args) :
+ if len(args) == 3 :
+ self.step, self.alter, self.octave = args
+ elif len(args) == 1 :
+ midi = args[0]
+ self.step, self.alter, self.octave = Tone.midi_to_step_alter_octave(midi)
+
+ @property
+ def midi(self) :
+ mid = DIATO_SCALE[self.step]
+ mid = mid + (self.octave - OCTAVE_REF) * 12
+ mid = mid + self.alter
+ return mid
+
+
+ @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
+
+ @property
+ def nom(self) :
+ name = FR_NOTES[self.step]
+ if self.alter < 0 :
+ alterext = 'b'
+ else :
+ alterext = '#'
+ name = '%s%s' % (name, abs(self.alter) * alterext)
+ return name
+
-class Note(object) :
+class Note(Tone) :
scale = [55, 57, 59, 60, 62, 64, 65, 67, 69, 71, 72]
def __init__(self, node, divisions, previous) :
self._duration = self.duration + note.duration
self.divisions = 1
- @property
- def midi(self) :
- mid = DIATO_SCALE[self.step]
- mid = mid + (self.octave - OCTAVE_REF) * 12
- mid = mid + self.alter
- return mid
+# @property
+# 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
- @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
-
- @property
- def nom(self) :
- name = FR_NOTES[self.step]
- if self.alter < 0 :
- alterext = 'b'
- else :
- alterext = '#'
- name = '%s%s' % (name, abs(self.alter) * alterext)
- return name
+# @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
+#
+# @property
+# def nom(self) :
+# name = FR_NOTES[self.step]
+# if self.alter < 0 :
+# alterext = 'b'
+# else :
+# alterext = '#'
+# name = '%s%s' % (name, abs(self.alter) * alterext)
+# return name
@property
def column(self):
part.pprint()
return part
+
def main() :