コード例 #1
0
    def test_secondary_chord(self):
        print('----- test_secondary_tonality -----')
        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("C"))
        chort_t_i = TertianChordTemplate.parse('tI')
        chord_i = chort_t_i.create_chord(diatonic_tonality)

        chord_v_ii = SecondaryChordTemplate.parse('V/ii').create_chord(
            diatonic_tonality)
        chord_vi_v = SecondaryChordTemplate.parse('vi/V').create_chord(
            diatonic_tonality)

        chord_t_ii = TertianChordTemplate.parse('tii')
        chord_ii = chord_t_ii.create_chord(diatonic_tonality)

        hc_track = HarmonicContextTrack()
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_i, Duration(1)))
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_v_ii, Duration(1)))
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_vi_v, Duration(1)))
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_ii, Duration(1)))
        TestTFlip.print_hct(hc_track)

        tune = [('C:5', (1, 1)), ('E:5', (1, 1)), ('E:5', (1, 1)),
                ('G:5', (1, 1))]
        line = TestTFlip.build_line(tune)

        cue = DiatonicPitch(5, 'd')

        tflip = TDiatonicReflection(line, hc_track, cue)

        temporal_extent = Interval(Fraction(0), Fraction(4))
        score_line, score_hct = tflip.apply(temporal_extent, cue)
        TestTFlip.print_notes(score_line)
        TestTFlip.print_hct(score_hct)

        notes = score_line.get_all_notes()
        assert len(notes) == 4
        assert str(notes[0].diatonic_pitch) == 'E:5'
        assert str(notes[1].diatonic_pitch) == 'C#:5'
        assert str(notes[2].diatonic_pitch) == 'C:5'
        assert str(notes[3].diatonic_pitch) == 'A:4'

        hc_list = score_hct.hc_list()
        assert len(hc_list) == 4
        assert hc_list[1].chord.primary_chord.chord_template.scale_degree == 7
        assert {t[0].diatonic_symbol
                for t in hc_list[1].chord.tones} == {'C#', 'E', 'G'}
        assert hc_list[1].chord.primary_chord.chord_template.inversion == 3

        assert hc_list[2].chord.primary_chord.chord_template.scale_degree == 7
        assert {t[0].diatonic_symbol
                for t in hc_list[2].chord.tones} == {'C', 'F#', 'A'}
        assert hc_list[2].chord.primary_chord.chord_template.inversion == 3
コード例 #2
0
    def test_standards(self):
        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("G"))

        template = SecondaryChordTemplate.parse('V/ii')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'E, G#, B'

        template = SecondaryChordTemplate.parse('V/IV')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'G, B, D'

        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("G"))
        template = SecondaryChordTemplate.parse('V/ii')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'E, G#, B'

        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("Bb"))
        template = SecondaryChordTemplate.parse('VI/ii')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'A, C, Eb'
コード例 #3
0
    def test_interesting(self):
        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("F"))

        template = SecondaryChordTemplate.parse('V/V[NaturalMinor]')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'G, Bb, D'
コード例 #4
0
    def test_sample(self):
        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("C"))

        template = SecondaryChordTemplate.parse('qVIPPaa/iv[Major]')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'D, G, C, F#, B#'

        template = SecondaryChordTemplate.parse('qIIIPPaa/V[MelodicMinor]')
        print(template)
        t_chord = template.create_chord(diatonic_tonality)
        print(t_chord)

        s = ', '.join(str(tone[0].diatonic_symbol) for tone in t_chord.tones)
        print(s)
        assert s == 'Bb, Eb, Ab, D, G#'
コード例 #5
0
    def test_book_examples(self):
        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicTone("A"))

        template = SecondaryChordTemplate.parse('V/V')
        if template:
            print('succeeded')
            chord = template.create_chord(diatonic_tonality)
            print(chord)
        else:
            print("failed")

        template = SecondaryChordTemplate.parse('III/II')
        chord = template.create_chord(diatonic_tonality)
        print(chord)

        template = SecondaryChordTemplate.parse('CMaj7/II')
        chord = template.create_chord(diatonic_tonality)
        print(chord)

        template = SecondaryChordTemplate.parse('V/V[NaturalMinor]')
        chord = template.create_chord(diatonic_tonality)
        print(chord)

        template = SecondaryChordTemplate.parse('V/V[Phrygian]')
        chord = template.create_chord(diatonic_tonality)
        print(chord)

        template = SecondaryChordTemplate.parse('QVIPPAP@2/V')
        chord = template.create_chord(diatonic_tonality)
        print(chord)
コード例 #6
0
    def test_secondary_chord(self):
        print('----- test_secondary_tonality -----')
        diatonic_tonality = Tonality.create(ModalityType.Major,
                                            DiatonicFoundation.get_tone("C"))
        chort_t_i = TertianChordTemplate.parse('tI')
        chord_i = chort_t_i.create_chord(diatonic_tonality)

        chord_v_ii = SecondaryChordTemplate.parse('V/ii').create_chord(
            diatonic_tonality)
        chord_vi_v = SecondaryChordTemplate.parse('vi/V').create_chord(
            diatonic_tonality)

        chord_t_ii = TertianChordTemplate.parse('tii')
        chord_ii = chord_t_ii.create_chord(diatonic_tonality)

        hc_track = HarmonicContextTrack()
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_i, Duration(1)))
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_v_ii, Duration(1)))
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_vi_v, Duration(1)))
        hc_track.append(
            HarmonicContext(diatonic_tonality, chord_ii, Duration(1)))
        TestTChromaticFlip.print_hct(hc_track)

        tune = [('C:5', (1, 1)), ('E:5', (1, 1)), ('E:5', (1, 1)),
                ('G:5', (1, 1))]
        line = TestTChromaticFlip.build_line(tune)

        cue = DiatonicPitch(5, 'd')

        tflip = TChromaticReflection(line, hc_track, cue)

        score_line, score_hct = tflip.apply()
        TestTChromaticFlip.print_notes(score_line)
        TestTChromaticFlip.print_hct(score_hct)
コード例 #7
0
    def generic_chord_template_parse(chord_txt):
        """
        Generic text parse into chord template.
        
        Args:
          chord_txt: String
        Returns:
          ChordTemplate or None if fails.
        """

        #  Try parsing chord text through known chord templates.
        #  If all fail, just return None.
        from harmonicmodel.secondary_chord_template import SecondaryChordTemplate, SecondaryChordException
        try:
            chord_template = SecondaryChordTemplate.parse(chord_txt)
            return chord_template
        except SecondaryChordException:
            pass
        from harmonicmodel.tertian_chord_template import TertianChordTemplate, TertianChordException
        try:
            chord_template = TertianChordTemplate.parse(chord_txt)
            return chord_template
        except TertianChordException:
            pass
        from harmonicmodel.secundal_chord_template import SecundalChordTemplate, SecundalChordException
        try:
            chord_template = SecundalChordTemplate.parse(chord_txt)
            return chord_template
        except SecundalChordException:
            pass
        from harmonicmodel.quartal_chord_template import QuartalChordTemplate
        try:
            chord_template = QuartalChordTemplate.parse(chord_txt)
            return chord_template
        except QuartalChordTemplate:
            return None