Exemple #1
0
 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,
     )
Exemple #2
0
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')
Exemple #3
0
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')
Exemple #4
0
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')
Exemple #5
0
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')
Exemple #6
0
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)
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
 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,
     )
Exemple #10
0
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
Exemple #11
0
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)')
Exemple #12
0
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>'