def test_1(self): midi = Midi(60) expected = '''<pitch> <step>C</step> <octave>4</octave> </pitch> ''' self.assertEqual(expected, midi.get_pitch_rest().to_string())
def test_5(self): midi = Midi(58, accidental=Accidental(mode='sharp')) expected = '''<pitch> <step>A</step> <alter>1</alter> <octave>3</octave> </pitch> ''' self.assertEqual(expected, midi.get_pitch_rest().to_string())
def test_4(self): midi = Midi(59, accidental=Accidental(mode='enharmonic_2')) expected = '''<pitch> <step>A</step> <alter>2</alter> <octave>3</octave> </pitch> ''' self.assertEqual(expected, midi.get_pitch_rest().to_string())
def test_3(self): midis = { 'flat': [Midi(value, accidental=Accidental('flat', force_show=True)) for value in range(60, 72)], 'sharp': [Midi(value, accidental=Accidental('sharp', force_show=True)) for value in range(60, 72)] } sf = SimpleFormat(midis=midis['flat'] + midis['sharp']) for chord in sf.chords: chord.add_harmonic(5) self.score.set_time_signatures(times={1: [12, 4]}) sf.to_stream_voice().add_to_score(self.score) xml_path = path + '_test_3.xml' self.score.write(xml_path)
def add_midi(self, val): if val == 0: raise ValueError('midi with value 0 can not be added.') if not isinstance(val, Midi): val = Midi(val) self._midis.append(val) return val
def mirror(self, pivot=None): if pivot is None: pivot = self.chords[0].midis[0] elif not isinstance(pivot, Midi): pivot = Midi(pivot) else: pass for midi in [m for ch in self.chords for m in ch.midis]: transposition_interval = (pivot.value - midi.value) * 2 midi.transpose(transposition_interval)
def _set_midis(self, midis): def _is_value(x): try: float(x) return True except (ValueError, TypeError): return False def _is_midi(x): if isinstance(x, Midi): return True else: return False if midis is None: midis = [] else: try: midis = list(midis) except TypeError: midis = [midis] self._midis = [] for m in midis: if _is_midi(m): self._midis.append(m) elif _is_value(m): self._midis.append(Midi(m)) elif isinstance(m, list) or isinstance(m, tuple): tmp = [] for midi in m: if _is_midi(midi): tmp.append(midi) elif _is_value(midi): tmp.append(Midi(midi)) else: raise TypeError self._midis.append(tmp) else: raise TypeError
def optimal_range(self, val): if not val: val = [None, None] if not hasattr(val, '__iter__'): raise TypeError('{} must be an iterator.'.format(val)) if not len(val) == 2: raise TypeError('{} must have two elements.'.format(val)) for index, x in enumerate(val): if x and not isinstance(x, Midi): val[index] = Midi(x) self._optimal_range = val
def test_chord_midi(self): chord = TreeChord(Midi(63, accidental = Accidental(mode='sharp')), quarter_duration=2) tree_note = chord.notes[0] tree_note.update_duration(divisions=1) result = '''<note> <pitch> <step>D</step> <alter>1</alter> <octave>4</octave> </pitch> <duration>2</duration> </note> ''' self.assertEqual(tree_note.to_string(), result)
def midis(self, values): try: values = list(values) except TypeError: values = [values] output = [] for midi in values: if not isinstance(midi, Midi): output.append(Midi(midi)) else: output.append(midi) for midi in output: if midi.value == 0 and len(values) > 1: raise ValueError('midi with value 0 must be alone.') output = sorted(output, key=lambda midi: midi.value) self._midis = output
def test_2(self): midi = Midi(0) expected = '''<rest/> ''' self.assertEqual(expected, midi.get_pitch_rest().to_string())
def test_8(self): midi = Midi(61) expected = 'C#4' self.assertEqual(expected, midi.__name__)
def test_6(self): midi = Midi(59) expected = 'B3' self.assertEqual(expected, midi.__name__)
def test_7(self): midi = Midi(58) expected = 'Bb3' self.assertEqual(expected, midi.__name__)
def test_9(self): midi = Midi(61.5) expected = 'D-4' self.assertEqual(expected, midi.__name__)
def test_12(self): midi = Midi(60.5, accidental=Accidental(mode='flat')) expected = 'Db-4' self.assertEqual(expected, midi.__name__)
def test_11(self): midi = Midi(60.5, accidental=Accidental(mode='sharp')) expected = 'C+4' self.assertEqual(expected, midi.__name__)