示例#1
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
示例#2
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
示例#3
0
def test_tonalanalysistools_ChordInversion_extent_to_figured_bass_string_01():

    chord_inversion = tonalanalysistools.ChordInversion(0)
    assert chord_inversion.extent_to_figured_bass_string(5) == ''
    assert chord_inversion.extent_to_figured_bass_string(7) == '7'

    chord_inversion = tonalanalysistools.ChordInversion(1)
    assert chord_inversion.extent_to_figured_bass_string(5) == '6'
    assert chord_inversion.extent_to_figured_bass_string(7) == '6/5'

    chord_inversion = tonalanalysistools.ChordInversion(2)
    assert chord_inversion.extent_to_figured_bass_string(5) == '6/4'
    assert chord_inversion.extent_to_figured_bass_string(7) == '4/3'

    chord_inversion = tonalanalysistools.ChordInversion(3)
    assert chord_inversion.extent_to_figured_bass_string(7) == '4/2'
示例#4
0
def test_tonalanalysistools_ChordInversion___eq___01():

    chord_inversion = tonalanalysistools.ChordInversion(0)
    u = tonalanalysistools.ChordInversion(0)
    voice = tonalanalysistools.ChordInversion(1)

    assert chord_inversion == chord_inversion
    assert chord_inversion == u
    assert not chord_inversion == voice

    assert u == chord_inversion
    assert u == u
    assert not u == voice

    assert not voice == chord_inversion
    assert not voice == u
    assert voice == voice
示例#5
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
示例#6
0
    def from_scale_degree_quality_extent_and_inversion(
        scale_degree,
        quality,
        extent,
        inversion,
    ):
        r'''Makes Roman numeral from `scale_degree`, `quality`, `extent` and
        `inversion`.

        Returns new Roman numeral.
        '''
        from abjad.tools import tonalanalysistools
        scale_degree = tonalanalysistools.ScaleDegree(scale_degree)
        quality = tonalanalysistools.ChordQuality(quality)
        extent = tonalanalysistools.ChordExtent(extent)
        inversion = tonalanalysistools.ChordInversion(inversion)
        roman_numeral = RomanNumeral()
        roman_numeral._root_scale_degree = scale_degree
        roman_numeral._quality = quality
        roman_numeral._extent = extent
        roman_numeral._inversion = inversion
        return roman_numeral