Пример #1
0
 def _initialize_by_symbolic_string(self, symbolic_string):
     from abjad.tools import tonalanalysistools
     groups = self._symbolic_string_regex.match(symbolic_string).groups()
     accidental, roman_numeral, quality, figured_bass = groups
     scale_degree = tonalanalysistools.ScaleDegree(accidental +
                                                   roman_numeral)
     figured_bass_parts = figured_bass.split('/')
     naive_figured_bass = [x for x in figured_bass_parts if not '-' in x]
     naive_figured_bass = '/'.join(naive_figured_bass)
     extent = self._figured_bass_string_to_extent[naive_figured_bass]
     extent = tonalanalysistools.ChordExtent(extent)
     uppercase = roman_numeral == roman_numeral.upper()
     quality = self._get_quality_name(uppercase, quality, extent.number)
     quality = tonalanalysistools.ChordQuality(quality)
     inversion = self._figured_bass_string_to_inversion[naive_figured_bass]
     inversion = tonalanalysistools.ChordInversion(inversion)
     suspension = [x for x in figured_bass_parts if '-' in x]
     if not suspension:
         suspension = tonalanalysistools.ChordSuspension()
     elif 1 < len(suspension):
         message = 'no multiple suspensions yet.'
         raise NotImplementedError(message)
     else:
         suspension = tonalanalysistools.ChordSuspension(suspension[0])
     return scale_degree, quality, extent, inversion, suspension
Пример #2
0
def test_tonalanalysistools_ChordSuspension__initialize_by_reference_01():

    chord_suspension = tonalanalysistools.ChordSuspension(4, 3)
    u = tonalanalysistools.ChordSuspension(chord_suspension)

    assert chord_suspension is not u
    assert chord_suspension == u
def test_tonalanalysistools_ChordSuspension__initialize_by_symbolic_string_01():

    chord_suspension = tonalanalysistools.ChordSuspension('4-3')
    assert chord_suspension.start == tonalanalysistools.ScaleDegree(4)
    assert chord_suspension.stop == tonalanalysistools.ScaleDegree(3)

    chord_suspension = tonalanalysistools.ChordSuspension('b2-1')
    assert chord_suspension.start == tonalanalysistools.ScaleDegree('flat', 2)
    assert chord_suspension.stop == tonalanalysistools.ScaleDegree(1)
def test_tonalanalysistools_ChordSuspension_figured_bass_string_01():

    chord_suspension = tonalanalysistools.ChordSuspension(4, 3)
    assert chord_suspension.figured_bass_string == '4-3'

    chord_suspension = tonalanalysistools.ChordSuspension(('flat', 2), 1)
    assert chord_suspension.figured_bass_string == 'b2-1'

    chord_suspension = tonalanalysistools.ChordSuspension()
    assert chord_suspension.figured_bass_string == ''
Пример #5
0
def test_tonalanalysistools_ChordSuspension_title_string_01():

    chord_suspension = tonalanalysistools.ChordSuspension(4, 3)
    assert chord_suspension.title_string == 'FourThreeSuspension'

    chord_suspension = tonalanalysistools.ChordSuspension(('flat', 2), 1)
    assert chord_suspension.title_string == 'FlatTwoOneSuspension'

    chord_suspension = tonalanalysistools.ChordSuspension()
    assert chord_suspension.title_string == ''
Пример #6
0
def test_tonalanalysistools_ChordSuspension_chord_name_01():

    chord_suspension = tonalanalysistools.ChordSuspension(4, 3)
    assert chord_suspension.chord_name == 'sus4'

    chord_suspension = tonalanalysistools.ChordSuspension(('flat', 2), 1)
    assert chord_suspension.chord_name == 'susb2'

    chord_suspension = tonalanalysistools.ChordSuspension()
    assert chord_suspension.chord_name == ''
Пример #7
0
 def __init__(self, symbol='V7'):
     from abjad.tools import tonalanalysistools
     groups = self._symbol_regex.match(symbol).groups()
     accidental, roman_numeral, quality, figured_bass = groups
     scale_degree = accidental + roman_numeral
     scale_degree = tonalanalysistools.ScaleDegree(scale_degree)
     figured_bass_parts = figured_bass.split('/')
     naive_figured_bass = [x for x in figured_bass_parts if '-' not in x]
     naive_figured_bass = '/'.join(naive_figured_bass)
     extent = self._figured_bass_string_to_extent[naive_figured_bass]
     extent = tonalanalysistools.ChordExtent(extent)
     uppercase = roman_numeral == roman_numeral.upper()
     quality = self._get_quality_name(uppercase, quality, extent.number)
     quality = tonalanalysistools.ChordQuality(quality)
     inversion = self._figured_bass_string_to_inversion[naive_figured_bass]
     inversion = tonalanalysistools.ChordInversion(inversion)
     suspension = [x for x in figured_bass_parts if '-' in x]
     if not suspension:
         suspension = None
     elif 1 < len(suspension):
         message = 'no multiple suspensions yet.'
         raise NotImplementedError(message)
     else:
         suspension = tonalanalysistools.ChordSuspension(suspension[0])
     self._root_scale_degree = scale_degree
     self._quality = quality
     self._extent = extent
     self._inversion = inversion
     if suspension is not None and suspension.start is None:
         suspension = None
     self._suspension = suspension
Пример #8
0
 def _initialize_with_suspension(self, *args):
     from abjad.tools import tonalanalysistools
     scale_degree, quality, extent, inversion, suspension = \
         self._initialize_by_scale_degree_quality_extent_and_inversion(*args[:-1])
     suspension = args[-1]
     suspension = tonalanalysistools.ChordSuspension(suspension)
     return scale_degree, quality, extent, inversion, suspension
Пример #9
0
def test_tonalanalysistools_RomanNumeral_suspension_01():

    roman_numeral = tonalanalysistools.RomanNumeral(5, 'major', 5, 0, (4, 3))

    assert roman_numeral.suspension == tonalanalysistools.ChordSuspension(4, 3)
    assert roman_numeral.suspension.start == tonalanalysistools.ScaleDegree(4)
    assert roman_numeral.suspension.stop == tonalanalysistools.ScaleDegree(3)
Пример #10
0
def test_tonalanalysistools_ChordSuspension___eq___01():

    chord_suspension = tonalanalysistools.ChordSuspension(4, 3)
    u = tonalanalysistools.ChordSuspension(4, 3)
    voice = tonalanalysistools.ChordSuspension(2, 1)

    assert chord_suspension == chord_suspension
    assert chord_suspension == u
    assert not chord_suspension == voice

    assert u == chord_suspension
    assert u == u
    assert not u == voice

    assert not voice == chord_suspension
    assert not voice == u
    assert voice == voice
Пример #11
0
 def _initialize_by_scale_degree_quality_extent_and_inversion(self, *args):
     from abjad.tools import tonalanalysistools
     scale_degree, quality, extent, inversion = args
     scale_degree = tonalanalysistools.ScaleDegree(scale_degree)
     quality = tonalanalysistools.ChordQuality(quality)
     extent = tonalanalysistools.ChordExtent(extent)
     inversion = tonalanalysistools.ChordInversion(inversion)
     suspension = tonalanalysistools.ChordSuspension()
     return scale_degree, quality, extent, inversion, suspension
Пример #12
0
def test_tonalanalysistools_ChordSuspension_is_empty_01():

    chord_suspension = tonalanalysistools.ChordSuspension()

    assert chord_suspension.is_empty
def test_tonalanalysistools_ChordSuspension_figured_bass_pair_01():

    #assert tonalanalysistools.ChordSuspension(9, 8).figured_bass_pair == (9, 8)
    assert tonalanalysistools.ChordSuspension(7, 6).figured_bass_pair == (7, 6)
    assert tonalanalysistools.ChordSuspension(4, 3).figured_bass_pair == (4, 3)
    assert tonalanalysistools.ChordSuspension(2, 1).figured_bass_pair == (2, 1)
def test_tonalanalysistools_ChordSuspension__initialize_by_pair_01():

    chord_suspension = tonalanalysistools.ChordSuspension((4, 3))

    assert chord_suspension.start == tonalanalysistools.ScaleDegree(4)
    assert chord_suspension.stop == tonalanalysistools.ScaleDegree(3)
def test_tonalanalysistools_ChordSuspension__initialize_by_start_and_stop_02():

    chord_suspension = tonalanalysistools.ChordSuspension(4, ('flat', 3))

    assert chord_suspension.start == tonalanalysistools.ScaleDegree(4)
    assert chord_suspension.stop == tonalanalysistools.ScaleDegree('flat', 3)