Ejemplo n.º 1
0
 def _get_quality_symbol(self):
     from abjad.tools import tonalanalysistools
     if self.extent == tonalanalysistools.ChordExtent(5):
         if self.quality == tonalanalysistools.ChordQuality('diminished'):
             return 'o'
         elif self.quality == tonalanalysistools.ChordQuality('augmented'):
             return '+'
         else:
             return ''
     elif self.extent == tonalanalysistools.ChordExtent(7):
         if self.quality == tonalanalysistools.ChordQuality('dominant'):
             return ''
         elif self.quality == tonalanalysistools.ChordQuality('major'):
             return 'M'
         elif self.quality == \
             tonalanalysistools.ChordQuality('diminished'):
             return 'o'
         elif self.quality == \
             tonalanalysistools.ChordQuality('half diminished'):
             return '@'
         elif self.quality == tonalanalysistools.ChordQuality('augmented'):
             return '+'
         else:
             return ''
     else:
         raise NotImplementedError
Ejemplo n.º 2
0
def test_tonalanalysistools_ChordExtent___init___02():
    r'''Initialize by reference.
    '''

    chord_extent = tonalanalysistools.ChordExtent(7)
    new = tonalanalysistools.ChordExtent(chord_extent)

    assert new.number == 7
    assert new == chord_extent
    assert new is not chord_extent
Ejemplo n.º 3
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
Ejemplo n.º 4
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
def test_tonalanalysistools_ChordExtent___eq___01():

    chord_extent = tonalanalysistools.ChordExtent(5)
    u = tonalanalysistools.ChordExtent(5)
    voice = tonalanalysistools.ChordExtent(7)

    assert chord_extent == chord_extent
    assert chord_extent == u
    assert not chord_extent == voice

    assert u == chord_extent
    assert u == u
    assert not u == voice

    assert not voice == chord_extent
    assert not voice == u
    assert voice == voice
Ejemplo n.º 6
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
Ejemplo n.º 7
0
    def extent(self):
        r'''Extent of rooted chord-class.

        ::

            >>> chord_class.extent
            ChordExtent(number=7)

        Returns chord extent.
        '''
        from abjad.tools import tonalanalysistools
        extent = self.cardinality_to_extent(self.cardinality)
        return tonalanalysistools.ChordExtent(extent)
Ejemplo n.º 8
0
    def extent(self):
        r'''Gets extent.

        ..  container:: example

            >>> abjad.tonalanalysistools.RootedChordClass('g', 'dominant', 7).extent
            ChordExtent(7)

        Returns chord extent.
        '''
        from abjad.tools import tonalanalysistools
        extent = self.cardinality_to_extent(self.cardinality)
        return tonalanalysistools.ChordExtent(extent)
Ejemplo n.º 9
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
Ejemplo n.º 10
0
def test_tonalanalysistools_ChordExtent___init___01():
    r'''Initialize from number.
    '''

    assert tonalanalysistools.ChordExtent(7).number == 7
def test_tonalanalysistools_ChordExtent_name_01():

    assert tonalanalysistools.ChordExtent(5).name == 'triad'
    assert tonalanalysistools.ChordExtent(7).name == 'seventh'
    assert tonalanalysistools.ChordExtent(9).name == 'ninth'