def _analyze_tonal_function(argument, key_signature): import abjad from abjad.tools import tonalanalysistools if isinstance(argument, tonalanalysistools.RootedChordClass): chord_class = argument else: selection = abjad.analyze(argument) chord_classes = selection.analyze_chords() assert len(chord_classes) == 1 chord_class = chord_classes[0] if chord_class is None: return None root = chord_class.root scale = tonalanalysistools.Scale(key_signature) scale_degree = scale.named_pitch_class_to_scale_degree(root) quality = chord_class.chord_quality.quality_string extent = chord_class.extent inversion = chord_class.inversion class_ = tonalanalysistools.RomanNumeral return class_.from_scale_degree_quality_extent_and_inversion( scale_degree, quality, extent, inversion, )
def test_tonalanalysistools_Scale_scale_degrees_01(): scale = tonalanalysistools.Scale('g', 'major') assert scale.tonic == pitchtools.NamedPitchClass('g') assert scale.superdominant == pitchtools.NamedPitchClass('a') assert scale.mediant == pitchtools.NamedPitchClass('b') assert scale.subdominant == pitchtools.NamedPitchClass('c') assert scale.dominant == pitchtools.NamedPitchClass('d') assert scale.submediant == pitchtools.NamedPitchClass('e') assert scale.leading_tone == pitchtools.NamedPitchClass('fs')
def test_tonalanalysistools_Scale_scale_degree_to_named_pitch_class_01(): scale = tonalanalysistools.Scale('c', 'major') assert scale.scale_degree_to_named_pitch_class(1) == \ pitchtools.NamedPitchClass('c') assert scale.scale_degree_to_named_pitch_class(2) == \ pitchtools.NamedPitchClass('d') assert scale.scale_degree_to_named_pitch_class(3) == \ pitchtools.NamedPitchClass('e') assert scale.scale_degree_to_named_pitch_class(4) == \ pitchtools.NamedPitchClass('f') assert scale.scale_degree_to_named_pitch_class(5) == \ pitchtools.NamedPitchClass('g') assert scale.scale_degree_to_named_pitch_class(6) == \ pitchtools.NamedPitchClass('a') assert scale.scale_degree_to_named_pitch_class(7) == \ pitchtools.NamedPitchClass('b')
def test_tonalanalysistools_Scale_scale_degree_to_named_pitch_class_03(): scale = tonalanalysistools.Scale('c', 'major') assert scale.scale_degree_to_named_pitch_class('sharp', 1) == \ pitchtools.NamedPitchClass('cs') assert scale.scale_degree_to_named_pitch_class('sharp', 2) == \ pitchtools.NamedPitchClass('ds') assert scale.scale_degree_to_named_pitch_class('sharp', 3) == \ pitchtools.NamedPitchClass('es') assert scale.scale_degree_to_named_pitch_class('sharp', 4) == \ pitchtools.NamedPitchClass('fs') assert scale.scale_degree_to_named_pitch_class('sharp', 5) == \ pitchtools.NamedPitchClass('gs') assert scale.scale_degree_to_named_pitch_class('sharp', 6) == \ pitchtools.NamedPitchClass('as') assert scale.scale_degree_to_named_pitch_class('sharp', 7) == \ pitchtools.NamedPitchClass('bs')
def test_tonalanalysistools_Scale_scale_degree_to_named_pitch_class_02(): scale = tonalanalysistools.Scale('c', 'major') assert scale.scale_degree_to_named_pitch_class('flat', 1) == \ pitchtools.NamedPitchClass('cf') assert scale.scale_degree_to_named_pitch_class('flat', 2) == \ pitchtools.NamedPitchClass('df') assert scale.scale_degree_to_named_pitch_class('flat', 3) == \ pitchtools.NamedPitchClass('ef') assert scale.scale_degree_to_named_pitch_class('flat', 4) == \ pitchtools.NamedPitchClass('ff') assert scale.scale_degree_to_named_pitch_class('flat', 5) == \ pitchtools.NamedPitchClass('gf') assert scale.scale_degree_to_named_pitch_class('flat', 6) == \ pitchtools.NamedPitchClass('af') assert scale.scale_degree_to_named_pitch_class('flat', 7) == \ pitchtools.NamedPitchClass('bf')
def test_tonalanalysistools_Scale_named_pitch_class_to_scale_degree_01(): scale = tonalanalysistools.Scale('c', 'major') assert scale.named_pitch_class_to_scale_degree('c') == \ tonalanalysistools.ScaleDegree(1) assert scale.named_pitch_class_to_scale_degree('d') == \ tonalanalysistools.ScaleDegree(2) assert scale.named_pitch_class_to_scale_degree('e') == \ tonalanalysistools.ScaleDegree(3) assert scale.named_pitch_class_to_scale_degree('f') == \ tonalanalysistools.ScaleDegree(4) assert scale.named_pitch_class_to_scale_degree('g') == \ tonalanalysistools.ScaleDegree(5) assert scale.named_pitch_class_to_scale_degree('a') == \ tonalanalysistools.ScaleDegree(6) assert scale.named_pitch_class_to_scale_degree('b') == \ tonalanalysistools.ScaleDegree(7)
def test_tonalanalysistools_Scale_named_pitch_class_to_scale_degree_03(): scale = tonalanalysistools.Scale('c', 'major') assert scale.named_pitch_class_to_scale_degree('cs') == \ tonalanalysistools.ScaleDegree('sharp', 1) assert scale.named_pitch_class_to_scale_degree('ds') == \ tonalanalysistools.ScaleDegree('sharp', 2) assert scale.named_pitch_class_to_scale_degree('es') == \ tonalanalysistools.ScaleDegree('sharp', 3) assert scale.named_pitch_class_to_scale_degree('fs') == \ tonalanalysistools.ScaleDegree('sharp', 4) assert scale.named_pitch_class_to_scale_degree('gs') == \ tonalanalysistools.ScaleDegree('sharp', 5) assert scale.named_pitch_class_to_scale_degree('as') == \ tonalanalysistools.ScaleDegree('sharp', 6) assert scale.named_pitch_class_to_scale_degree('bs') == \ tonalanalysistools.ScaleDegree('sharp', 7)
def test_tonalanalysistools_Scale_named_pitch_class_to_scale_degree_02(): scale = tonalanalysistools.Scale('c', 'major') assert scale.named_pitch_class_to_scale_degree('cf') == \ tonalanalysistools.ScaleDegree('flat', 1) assert scale.named_pitch_class_to_scale_degree('df') == \ tonalanalysistools.ScaleDegree('flat', 2) assert scale.named_pitch_class_to_scale_degree('ef') == \ tonalanalysistools.ScaleDegree('flat', 3) assert scale.named_pitch_class_to_scale_degree('ff') == \ tonalanalysistools.ScaleDegree('flat', 4) assert scale.named_pitch_class_to_scale_degree('gf') == \ tonalanalysistools.ScaleDegree('flat', 5) assert scale.named_pitch_class_to_scale_degree('af') == \ tonalanalysistools.ScaleDegree('flat', 6) assert scale.named_pitch_class_to_scale_degree('bf') == \ tonalanalysistools.ScaleDegree('flat', 7)
def _analyze_incomplete_tonal_function(expr, key_signature): from abjad.tools import tonalanalysistools if isinstance(expr, tonalanalysistools.RootedChordClass): chord_class = expr else: selection = tonalanalysistools.select(expr) chord_classes = selection.analyze_incomplete_chords() assert len(chord_classes) == 1 chord_class = chord_classes[0] root = chord_class.root scale = tonalanalysistools.Scale(key_signature) scale_degree = scale.named_pitch_class_to_scale_degree(root) quality = chord_class.chord_quality.quality_string extent = chord_class.extent inversion = chord_class.inversion return tonalanalysistools.RomanNumeral( scale_degree, quality, extent, inversion, )
def create_pitch_contour_reservoir(): r'''Creates pitch contour reservoir. ''' scale = tonalanalysistools.Scale('a', 'minor') pitch_ranges = { 'First Violin': pitchtools.PitchRange('[C4, A6]'), 'Second Violin': pitchtools.PitchRange('[A3, A5]'), 'Viola': pitchtools.PitchRange('[E3, A4]'), 'Cello': pitchtools.PitchRange('[A2, A3]'), 'Bass': pitchtools.PitchRange('[C3, A3]'), } reservoir = {} for instrument_name, pitch_range in pitch_ranges.items(): pitch_set = scale.create_named_pitch_set_in_pitch_range(pitch_range) pitches = sorted(pitch_set, reverse=True) pitch_descents = [] for i in range(len(pitches)): descent = tuple(pitches[:i + 1]) pitch_descents.append(descent) reservoir[instrument_name] = tuple(pitch_descents) return reservoir
def test_tonalanalysistools_Scale_scale_degree_to_named_pitch_class_04(): scale = tonalanalysistools.Scale('c', 'major') assert pytest.raises(ValueError, 'scale.scale_degree_to_named_pitch_class(99)')
def test_tonalanalysistools_Scale_diatonic_interval_class_segment_01(): scale = tonalanalysistools.Scale('a', 'major') dicg = scale.named_interval_class_segment assert str(dicg) == '<+M2, +M2, +m2, +M2, +M2, +M2, +m2>'