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_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 == ''
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 == ''
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 == ''
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
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
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)
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
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
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)