예제 #1
0
    def write_score(self):
        # The basic section manually builds a scale note by note
        basic = {
            "treble":
            [note("c`", 8),
             note("e`", 8),
             note("g`", 8),
             note("c``", 8)],
            "bass": [note("c", 8),
                     note("e", 8),
                     note("g", 8),
                     note("c`", 8)]
        }

        # The notes section uses the notes function to build a list of notes from a single string
        intermediate = {
            "treble": notes('d` fs` a` d``', 8),
            "bass": notes('d fs a d`', 8)
        }

        # The arpeggio section uses the arpeggio function to build a scale from one note to the next
        arpeggios = {
            "treble": arpeggio('e`', 'e``', 'E Major', 8),
            "bass": arpeggio('e', 4, 'E major', 8)
        }

        # The length section uses the arpeggio function to build an arpeggio, but specifies a length, rather than a stop note
        length = {
            "treble": arpeggio('f`', 4, 'F Major', 8),
            "bass": arpeggio('f', 4, 'F Major', 8)
        }

        starts = self.arpeggio('c`', 'c``')
        stepped = {
            'treble': [[
                self.arpeggio(start, self.transpose(start, 7), 16, step=step)
                for step in [3, 3, 1]
            ] for start in starts],
            'bass': [[
                self.arpeggio(self.transpose(start, -7), start, 16, step=step)
                for step in [1, 3, 3]
            ] for start in starts]
        }

        self.score = join(basic, intermediate, arpeggios, length, stepped)
예제 #2
0
    def chords(self):
        bar = [''] * 40

        bar[1] = self.arpeggio('c`', 'e``')
        bar[2] = omit(arpeggio7('c`', 'f``', 'D Minor'), 3, 5)
        bar[3] = omit(dominant7('b', 'f``', 'G Major'), 3, 5)
        bar[4] = deepcopy(bar[1])

        bar[5] = omit(arpeggio('c`', 'a``', 'A Minor'), 4)
        bar[6] = ['c`'] + arpeggio('d`', 'd``', 'D Major')
        bar[7] = self.transpose(bar[5], -1)
        bar[8] = ['b'] + self.arpeggio('c`', 'c``')

        bar[9] = omit(arpeggio7('a', 'c``', 'A Minor'), 5)
        bar[10] = select(dominant7('d', 8, 'D Major'), 1, 3, 5, 6, 8)
        bar[11] = arpeggio('g', 5, 'G Major')
        bar[12] = select(diminished7('g', 7, 'G Minor'), 1, 2, 4, 5, 7)

        bar[13] = omit(arpeggio('f', 'd``', 'D Minor'), 4)
        bar[14] = omit(diminished7('f', 'cf``', 'D Minor'), 3, 6)
        bar[15] = self.transpose(bar[13], -1)
        bar[16] = omit(arpeggio7('e', 'f`', 'F Major'), 5)

        bar[17] = omit(arpeggio7('d', 'f`', 'D Minor'), 5)
        bar[18] = omit(dominant7('g,', 'f`', 'G Major'), 2, 4, 7)
        bar[19] = self.arpeggio('c', 'e`')
        bar[20] = omit(self.dominant7('c', 'e`'), 2)

        bar[21] = omit(arpeggio7('f,', 'e`', 'F Major'), 2, 3, 4)
        bar[22] = omit(diminished7('gf,', 'ef`', 'A Major'), 2, 4, 5)
        bar[23] = 'af, f b c` d`'
        bar[24] = omit(dominant7('g,', 'd`', 'G Major'), 2, 3)

        bar[25] = omit(self.arpeggio('g,', 'e`'), 2)
        bar[26] = 'g, d g c` f`'
        bar[27] = omit(dominant7('g,', 'f`', 'G Major'), 2, 4, 7)
        bar[28] = ['g,'] + omit(diminished7('ef', 'gf`', 'A Major'), 2, 5)

        bar[29] = omit(self.arpeggio('g,', 'g`'), 2, 6)
        bar[30] = deepcopy(bar[26])
        bar[31] = deepcopy(bar[27])
        bar[32] = omit(self.dominant7('c,', 'e`'), 2, 3, 4, 6, 9)

        return bar
예제 #3
0
    def create_chords(self):

        self.aI = self.arpeggio(self.key.root, 6)
        self.aiii = [
            self.transpose(t, -1) if letter(t) == self.key.root else t
            for t in self.aI
        ]
        self.aiii7 = [
            self.transpose(t, 1) if letter(t) == self.key.root else t
            for t in self.aI
        ]
        self.aii = self.transpose(self.aI, 1)
        self.aii7 = self.transpose(select(self.aii, 1), -1) + subset(
            self.aii, 2, 6)

        self.bI7 = self.arpeggio(self.transpose(self.key.root, -1, 'octave'),
                                 4) + self.arpeggio7(
                                     self.transpose(self.key.root, 9), 4)
        self.biii = arpeggio(self.transpose(self.key.root, -8),
                             4,
                             key=self.IIIt)
        self.biii += arpeggio(self.transpose(self.key.root, 9),
                              4,
                              key=self.IIIt)
        self.biii7 = [
            self.transpose(t, i)
            for t, i in zip(self.bI7, [1, 0, 0, 1, -1, 0, 0, 0])
        ]
        self.bii7 = self.transpose(subset(self.bI7, 1, 4), 1) + self.transpose(
            subset(self.bI7, 5, 7), -1) + select(self.bI7, 8)
        self.bii7d5 = [
            self.transpose(t, i, 'semitone')
            for t, i in zip(self.bii7, [0, 0, -1, 0, 0, 0, -1, 0])
        ]

        self.diii = self.transpose(
            self.transpose(self.arpeggio(self.key.root, 3), 2), 1, 'octave')
        self.dI = [self.transpose(self.key.root, 2, 'octave')]
        self.dii = self.transpose(
            [self.key.root,
             self.transpose(self.IIt.v, -1, "semitone")], 2,
            'octave') + [self.transpose(self.key.v, 2, 'octave')]
        def tremble(tone):
            bass_tone = self.transpose(tone, -2, 'octave')
            start_grace = grace(notes([self.transpose(bass_tone, -1, 'semitone'), bass_tone, self.transpose(bass_tone, 2, 'semitone')], 32))
            stop_grace = notes([self.transpose(bass_tone, -1, 'semitone'), bass_tone], 32)

            treble_chord = chord(arpeggio(tone, -4, key=letter(tone) + ' major'), 2)
            if tone == 'b`':
                add(treble_chord, 'a')
            return {
                'treble': treble_chord,
                'bass': start_grace + after_grace(note(bass_tone, 2, ornamentation='trill'), stop_grace)
            }
예제 #5
0
    def create_chords(self):
        self.aI = self.arpeggio('f', 6)
        self.aiii = arpeggio('e', 6, 'A Minor')
        self.aiii7 = pattern(arpeggio7('g', 7, 'A Minor'), 1, 2, 3, 5, 6, 7)
        self.aii = arpeggio('g', 6, 'G Minor')
        self.aii7 = ['f'] + subset(self.aii, 2, 6)

        self.bI7 = self.arpeggio('f,', 4) + self.arpeggio7('a`', 4)
        self.biii = arpeggio('e,', 4, 'A Minor') + arpeggio('a`', 4, 'A minor')
        self.biii7 = [
            self.transpose(t, i)
            for t, i in zip(self.bI7, [1, 0, 0, 1, -1, 0, 0, 0])
        ]
        self.bii7 = arpeggio('g,', 4, 'G Minor') + arpeggio('g`', 4, 'G Minor')
        self.bii7d5 = [
            self.transpose(t, i, 'semitone')
            for t, i in zip(self.bii7, [0, 0, -1, 0, 0, 0, -1, 0])
        ]

        self.diii = arpeggio('a`', 3, 'A Minor')
        self.dI = ['f``', 'f``']
        self.dii = ['f``', 'df``', 'c``']
    def write_score(self):

        """ Intro """

        def rise(tone):
            return grace(notes([self.transpose(tone, -13, 'semitone'), self.transpose(tone, -1, 'octave'), tone], 32))

        def fall(tone):
            return self.harmonize(note(tone, 8, articulation='.'), -1, 'octave')

        def fall2(tone):
            return note(self.transpose(tone, -1, 'octave'), 8, articulation='.')

        def plink(tone):
            return rise(tone) + fall(tone) + rests(8)

        def plonk(tone):
            return rise(tone) + rep(fall(tone), 3) + rests(8)

        def plonk2(tone):
            return rise(tone) + rep(fall2(tone), 3) + rests(8)

        def plonk3(tone):
            return rise(tone) + rep(fall(tone), 2) + rest(4)

        def plod(tones):
            tones = tonify(tones)
            return rep(plink(tones[0]), 2) + plonk(tones[1])

        plodding = flatten([plod(x) for x in 4 * ['ef ef'] + ['ef f', 'f gf', 'ef f']] + [plonk('f') + plonk2('bf')])
        plodding[3].prefix += '\\stemDown'

        def drone1(tone, interval=-2):
            note = notes(tone, 2)
            chord1 = self.harmonize(note, interval, 'scale')
            chord2 = self.transpose(chord1, -1, 'scale')
            chord3 = self.transpose(chord2, -1, 'semitone')
            return chord1 + chord2 + chord3 + deepcopy(chord2)

        def drone2(tone, interval=-2):
            return self.harmonize(self.scale(tone, -4, 2), interval, 'scale')

        drone_a = drone1('ef`') + drone1('cf`')
        self.set_key('bf minor')
        drone_b = drone2('gf`') + subset(drone1('ef`'), 1, 3) + notes('bf', 2)
        drone_b[0].articulation = ">"

        intro = {
            'treble': repeat(rests(1, 1, 1, 1, 1, 1, 1, 1)),
            'bass': voices(drone_a + drone_b, plodding)
        }

        intro['bass'][0].markup = "Play first repeat one octave lower and \\bold {\\italic {pp}}, second as written and \\bold {\\italic {p}}"
        intro['treble'][0].prefix = '\\grace s16. ' + intro['treble'][0].prefix
        intro['bass'][-1].suffix += linebreak

        # """ Bold Chords """

        self.set_key('ef minor')

        rh_melody = [[]] * 9
        rh_melody[1] = self.scale('cf``', 'f`', ['4.', 8, 4], step=2) + notes('f` f`', ['8.', 16])
        rh_melody[2] = self.scale('af`', 'ef`', [8, 8, '8.', 16]) + notes('f`', 2)
        rh_melody[3] = self.scale('gf`', 'cf``', [4, '8.', 16, '4.']) + notes('af`', 8)
        rh_melody[4] = self.scale('f`', 'ef``', [8, 8, '8.', 16], step=2) + notes('df``', 2)
        rh_melody[5] = self.scale('bf`', 'ef``', [4, '8.', 16, '4.']) + notes('cf``', 8)
        rh_melody[6] = notes('bf` af` bf`', [4, 4, 2])
        rh_melody[7] = deepcopy(rh_melody[5])
        rh_melody[8] = self.scale('bf`', 'gf`', [4, 4, 2])

        lh_melody = self.transpose(rh_melody, -1, 'octave')
        lh_melody[3] = rests(2) + self.scale('af,', 'ef', [4, '8.', 16], step=2)
        lh_melody[4] = rests(2) + self.scale('bf,', 'f', [4, '8.', 16], step=2)
        lh_melody[5] = rests(['2..']) + notes('cf`', 8)
        lh_melody[7] = subset(lh_melody[7], 1, 3) + rests(2)
        lh_melody[8] = self.transpose(lh_melody[8], 2)

        rh_harmony = [[]] * 9
        rh_harmony[1] = flatten([chord(diminished7('d`', note.tone, key='d minor'), note.dur) for note in rh_melody[1]])
        rh_harmony[2] = chord('c` ef`', 4) + chord('a c`', '8.') + chord('a c`', 16) + chord('bf d`', 2)
        rh_harmony[3] = flatten([chord(self.arpeggio('bf', 'gf`'), note.dur) for note in subset(rh_melody[3], 1, 3)]) + chord(arpeggio('cf`', 'gf`', key='cf major'), 2)
        rh_harmony[4] = chord('df` f`', 4) + flatten([chord('df` f` af`', d) for d in ['8.', 16, 2]])
        rh_harmony[5] = flatten([chord(self.arpeggio('ef`', 'bf`'), note.dur) for note in rh_melody[5]])
        remove(select(rh_harmony[5], 5), 'bf`')
        rh_harmony[6] = chord('df` gf`', 4) + chord('df` f`', 4) + chord('d` f` af`', 2)
        rh_harmony[7] = deepcopy(subset(rh_harmony[5], 1, 4)) + chord('ef` af`', 8)
        rh_harmony[8] = notes('gf`', 4) + chord('df` f`', 4) + notes('df`', 2)

        lh_harmony = self.transpose(rh_harmony, -1, 'octave')
        add(subset(lh_harmony[1], 1, 4), 'bf,')
        add(lh_harmony[2], 'bf,')
        remove(lh_harmony[2], 'a,')
        lh_harmony[3] = flatten([chord('ef gf', dur=c.dur) for c in rh_harmony[3]])
        add(subset(lh_harmony[4], 1, 3), 'af cf`')
        remove(select(lh_harmony[4], 4), 'df')
        add(subset(lh_harmony[5], 1, 3), 'df`')
        add(subset(lh_harmony[5], 4, 5), 'cf')
        lh_harmony[7] = deepcopy(subset(lh_harmony[5], 1, 4)) + chord('cf ef af', 8)
        remove(lh_harmony[7], 'df`')
        lh_harmony[8] = chord('df gf', 4) + chord('df f', 4) + chord('gf, df', 2)

        rh_harmony[1][0].dynamics = "rfz"
        rh_harmony[3][0].dynamics = "f"
        rh_harmony[6][2].articulation = ">"
        lh_harmony[6][2].articulation = ">"
        rh_harmony[7][0].dynamics = "p"

        bold_chords = {
            'treble': voices(rh_melody, rh_harmony),
            'bass': voices(lh_melody, lh_harmony)
        }

        # """ Intro again """

        self.set_key('fs minor')
        shifted_bass = self.transpose(plodding[0:119], 3, 'semitone') + time_signature('2/4', plonk('gs'), '4/4')
        shifted_bass[0].prefix = self.key_signature + shifted_bass[0].prefix

        drone_c = drone1('fs`', 5) + drone1('d`', 5)
        add(drone_c, 'fs`')
        drone_c[0].prefix = self.key_signature + '\\grace s16.'
        drone_c[0].dynamics = "p"

        self.set_key('cs minor')
        drone_d = merge(drone2('a`', 5) + drone1('fs`', 5)[0:3], notes('cs`` cs`` bs` a` a` gs` fs`', 2))
        drone_d[0].articulation = ">"
        drone_d[-1].suffix += linebreak

        intro2 = {
            'treble': drone_c + drone_d,
            'bass': shifted_bass
        }

        # """ Bold Chords again """

        self.set_key('fs minor')

        rh_melody2 = self.transpose(rh_melody[0:7], 3, 'semitone')
        rh_melody2[4] = note('gs`', 8) + self.scale('b`', 'e``', [8, '8.', 16, 2])
        rh_melody2[6] = self.scale('b`', 'a``', [8, 8, '8.', 16], step=2) + note('gs``', 2)

        lh_melody2 = self.transpose(lh_melody[0:7], 3, 'semitone')
        lh_melody2[5] = rest(2) + self.scale('d', 'a', [4, '8.', 16], step=2)
        lh_melody2[6] = rest(2) + self.scale('e', 'd`', [8, 8, '8.', 16], step=2)

        self.set_key('cs major')

        rh_harmony2 = self.transpose(rh_harmony[0:7], 3, 'semitone')
        add(subset(rh_harmony2[1], 3, 5), 'cs`')
        rh_harmony2[2] = chord('d` fs`', 4) + chord('b d`', '8.') + chord('b d`', 16) + chord(self.arpeggio('cs`', 3), 2)
        rh_harmony2[5] = subset(rh_harmony2[5], 1, 4)
        remove(subset(rh_harmony2[5], 1, 3), 'fs`')
        add(subset(rh_harmony2[5], 1, 3), 'e`')
        rh_harmony2[5][3].dur = 2
        rh_harmony2[6] = chord('gs` b`', 4) + chord('gs` b` cs``', '8.') + chord('b` cs`` fs``', 16) + chord(select(diminished7('gs`', 5, key='gs minor'), 1, 2, 3, 5), 2)

        lh_harmony2 = self.transpose(lh_harmony[0:7], 3, 'semitone')
        replace(lh_harmony2[2], 'ds', 'd')
        add(subset(lh_harmony2[3], 1, 3), 'cs')
        add(select(lh_harmony2[3], 1), 'fs,')
        add(select(lh_harmony2[4], 1), 'b')
        remove(select(lh_harmony2[4], 4), 'e')
        lh_harmony2[5] = subset(lh_harmony2[5], 1, 3) + chord('a cs`', 2)
        remove(lh_harmony2[5], 'e`')
        add(select(lh_harmony2[5], 1), 'a,')
        lh_harmony2[6] = chord('gs b d` fs`', 4) + chord('gs b d` fs`', '8.') + chord('gs b d` fs`', 16) + chord('e gs b d`', 2)

        rh_harmony2[5][0].dynamics = "cresc"
        rh_harmony2[5][1].dynamics = "!"
        lh_melody2[6][1].suffix = "^\\>"
        lh_melody2[6][4].suffix = "\\!"

        bold_chords2 = {
            'treble': voices(rh_melody2, rh_harmony2),
            'bass': voices(lh_melody2, lh_harmony2)
        }

        # """ bridge """

        bridge_rhythm = [4, '8.', 16]

        def bridge_chords(tone):
            self.set_key(letter(tone) + ' major')
            tones = self.arpeggio(tone, -8)
            return {
                'treble': chords([subset(tones, 1, 4)], bridge_rhythm),
                'bass': chords([subset(tones, 5, 8)], bridge_rhythm)
            }

        def tremble(tone):
            bass_tone = self.transpose(tone, -2, 'octave')
            start_grace = grace(notes([self.transpose(bass_tone, -1, 'semitone'), bass_tone, self.transpose(bass_tone, 2, 'semitone')], 32))
            stop_grace = notes([self.transpose(bass_tone, -1, 'semitone'), bass_tone], 32)

            treble_chord = chord(arpeggio(tone, -4, key=letter(tone) + ' major'), 2)
            if tone == 'b`':
                add(treble_chord, 'a')
            return {
                'treble': treble_chord,
                'bass': start_grace + after_grace(note(bass_tone, 2, ornamentation='trill'), stop_grace)
            }

        def bridge_motif(tone):
            return join(bridge_chords(tone), tremble(self.transpose(tone, -3)))

        bridge_part_1 = join(bridge_motif('af``'), bridge_motif('gf``'), bridge_motif('e``'))

        def bridge_grace(passage):
            return subset(passage, 1, 2) + grace(note(passage[1].tone, 16)) + subset(passage, 3, len(passage))

        bridge_rhythm4 = [8, 8, '8.', 16]

        bridge_part_2_melody = {
            'treble': rep(notes('e`', bridge_rhythm) + self.scale('e`', -4, 8) + self.scale('e`', 4, bridge_rhythm + [2]), 2) + rep(rests(1), 2),
            'bass': rests(1, 2) + bridge_grace(self.scale('e,', -4, 8)) + notes(['b,,'] + self.scale('e,', 3), 8) + note('a,', 2) + self.scale('a,', -4, 8) + self.scale('e,', -4, bridge_rhythm4) + self.scale('b,,', -4, 8) + notes('e,, ds,, d,,', [4, 4, 1])
        }

        bridge_part_2_harmony = {'treble': [[]] * 6, 'bass': [[]] * 9}
        bridge_part_2_harmony['treble'][1] = bridge_chords('e`')['treble'] + chords(['fs a b', 'e a', 'ds a'], [4, 8, 8])
        bridge_part_2_harmony['treble'][2] = chords([self.arpeggio('e', 4), 'fs b e`', self.arpeggio('gs', 4)], bridge_rhythm) + chord(select(dominant7('a', 5, key='b major'), 1, 2, 4, 5), 2)
        bridge_part_2_harmony['treble'][3] = replace(deepcopy(bridge_part_2_harmony['treble'][1]), 'a', 'b')
        bridge_part_2_harmony['treble'][4] = deepcopy(bridge_part_2_harmony['treble'][2])

        bridge_part_2_harmony['bass'][1] = chords(['b,, b,'], bridge_rhythm)
        bridge_part_2_harmony['bass'][2] = tremble('b`')['bass']
        bridge_part_2_harmony['bass'][3] = chords(['e, b,'], bridge_rhythm)
        bridge_part_2_harmony['bass'][4] = note('b,', 2)
        bridge_part_2_harmony['bass'][5] = notes('b,', bridge_rhythm)
        bridge_part_2_harmony['bass'][6] = tremble('b`')['bass']
        bridge_part_2_harmony['bass'][7] = notes('b,', bridge_rhythm)
        bridge_part_2_harmony['bass'][8] = note('b,', 2)

        bridge_part_2 = {
            'treble': clef('bass', voices(bridge_part_2_melody['treble'], bridge_part_2_harmony['treble'])),
            'bass': voices(bridge_part_2_harmony['bass'], bridge_part_2_melody['bass'])
        }
        bridge_part_2_melody['bass'][-1].suffix += linebreak

        bridge_part_1['treble'][0].dynamics = "p"
        bridge_part_2_harmony['treble'][1][0].dynamics = "p"

        bridge_part_2_melody['treble'][0].prefix = self.key_signature + bridge_part_2_melody['treble'][0].prefix
        bridge_part_2_harmony['bass'][1][0].prefix = self.key_signature + bridge_part_2_harmony['bass'][1][0].prefix

        bridge_part_2['bass'][-1].suffix += linebreak

        bridge = join(bridge_part_1, bridge_part_2)

        # """ Intro again again """

        self.set_key('Ef Minor')
        intro3_treble = drone1('ef') + drone1('cf')
        intro3_bass = rep(plod('ef, ef,'), 4)

        self.set_key('ef harmonic')
        mini_motif = self.harmonize(notes('bf', ['4.', 8]) + self.scale('bf', -4, 4), -2)
        intro3_treble += (self.harmonize(notes('gf ef af', 2) + grace(note('gf', 16)) + note('f', 2), -2)
                          + mini_motif + chord('d cf', 2) + deepcopy(mini_motif) + note('ef', 2) + rep(chord('d af cf`', 2, articulation='>') + note('ef', 2), 2) + chord('d af cf`', 1, articulation='>'))
        intro3_bass += (plod('ef, af,') + plod('f, bf,') + plod('gf, cf') + plod('bf, af,')
                        + rep(plink('gf,'), 2) + plonk3('cf') + plonk3('bf,') + plonk('ef,')
                        + rest(2) + rep(plink('ef,'), 2) + rest(2) + plonk('ef,') + rest(1))

        intro3_treble[0].suffix += "^\\pp"
        intro3_treble[8].articulation = '>'
        intro3_bass[68].markup = '\\italic{poco cresc.}'
        intro3_treble[10].articulation = '>'
        intro3_treble[13].articulation = '>'
        intro3_treble[19].articulation = '>'
        intro3_treble[20].markup = '\\italic {dim.}'
        intro3_treble[22].suffix += '^\\>'
        intro3_treble[26].dynamics = 'pp'
        intro3_bass[-1].suffix += linebreak + pagebreak

        intro3 = {
            'treble': clef('treble', rest(1, prefix=self.key_signature + ' \\grace s16.')) + rest(1) * 12,
            'bass': key_signature(self.key, voices(intro3_treble, intro3_bass))
        }

        # """ Cascade """

        self.set_key('ef major')

        def set_cascade_melody(melody, bars=8, is_repeated=False, end=False, key=False):
            section = {
                'treble': voices(melody, rep(self.scale('ef`', -4, 8), bars)),
                'bass': voices(rep(self.scale('g', -4, 8), bars), rep(note('ef,', 2, articulation='>'), bars))
            }
            if key:
                section['treble'] = key_signature(self.key, section['treble'])
                section['bass'] = key_signature(self.key, section['bass'])
            if is_repeated:
                section['bass'] = repeat(section['bass'])
            if end:
                section['bass'][-1].suffix += pagebreak
            else:
                section['bass'][-1].suffix += linebreak
            return section

        cascade_melody_1a = notes('g` af` g` af` bf` g` af`', [4, 4, 4, 8, 8, 4, 4])
        cascade_melody_1 = cascade_melody_1a + notes('g` f`', 4) + deepcopy(cascade_melody_1a) + note('g`', 2)
        cascade_meldody_2a = self.arpeggio('g`', 3, 4)
        cascade_meldody_2b = deepcopy(cascade_meldody_2a) + notes('bf` af`', 8)
        cascade_melody_2 = cascade_meldody_2b + cascade_meldody_2a + note('bf`', 4) + deepcopy(cascade_meldody_2b) + notes('g` af` bf` g`', [4, 8, 8, '4.']) + rest(8)
        cascade_melody_3a = notes('ef`` c`` d`` c`` g` g`', [4, 8, 8, 4, 4, 2])
        cascade_melody_3 = notes('c`` g`', 4) + cascade_melody_3a + notes('g` c`` d``', [4, 8, 8]) + deepcopy(cascade_melody_3a)
        cascade_melody_4 = deepcopy(subset(cascade_melody_1, 1, 14)) + notes('g` f` ef` g`', [4, 8, 8, 2])
        cascade_melody_5 = self.arpeggio('g`', 3, 4) + note('c``', 8) + self.scale('d``', -5, [8, 4, 8, 8, 2]) + note('g`', 4) + 2 * self.scale('c``', 3, [8, 8, 4]) + notes('g` f` g`', [8, 8, 2])
        cascade_melody_6 = deepcopy(cascade_melody_4)

        cascade_melody_1[0].dynamics = "f"
        cascade_melody_2[0].dynamics = "f"
        cascade_melody_3[0].dynamics = "ff"
        cascade_melody_3[16].dynamics = ">"
        cascade_melody_4[0].dynamics = "p"
        cascade_melody_5[0].dynamics = "ff"
        cascade_melody_5[18].dynamics = ">"
        cascade_melody_6[0].dynamics = "pp"

        cascade = join(set_cascade_melody(cascade_melody_1, is_repeated=True, key=True),
                       set_cascade_melody(cascade_melody_2, is_repeated=True),
                       set_cascade_melody(cascade_melody_3),
                       set_cascade_melody(cascade_melody_4),
                       set_cascade_melody(cascade_melody_5),
                       set_cascade_melody(cascade_melody_6, end=True)
                       )

        # """ Intro 4 """

        self.set_key('ef minor')

        intro4 = {
            'treble': key_signature(self.key, rep(rest(1), 8)),
            'bass': key_signature(self.key, voices(
                deepcopy(drone_a + drone_b),
                plodding
            ))
        }

        intro4['bass'][-1].suffix += linebreak
        intro4['bass'][0].markup += "Play left hand one octave lower"
        intro4['bass'][16].suffix += "^\\p"

        # """ bold chords 3 """

        rh_melody3 = deepcopy(subset(rh_melody, 1, 5)) + self.transpose(subset(rh_melody, 4, 5), 2)

        rh_harmony3 = deepcopy(rh_harmony[0:7])
        add(rh_harmony3[1], 'bf')
        rh_harmony3[2] = chords(['bf cf` ef`', 'af cf`', 'af cf`', 'af bf d`'], [4, '8.', 16, 2])
        rh_harmony3[5] = subset(rh_harmony3[5], 1, 3) + chord('ef` gf` bf`', 2)
        rh_harmony3[6] = self.transpose(rh_harmony3[4], 2)
        add(select(rh_harmony3[6], 3), 'ef``')
        add(select(rh_harmony3[6], 4), 'df``')

        lh_melody3 = deepcopy(subset(lh_melody, 1, 4)) + [rest(2) + self.scale('bf,', 'af', [8, 8, '8.', 16], step=2)]
        lh_melody3 += [self.transpose(lh_melody3[3], 2), self.transpose(lh_melody3[4], 2)]

        lh_harmony3 = deepcopy(lh_harmony[0:7])
        add(lh_harmony3[1], 'bf,')
        add(subset(lh_harmony3[3], 1, 3), 'bf,')
        add(select(lh_harmony3[3], 1), 'ef,')
        add(select(lh_harmony3[4], 1), 'f,')
        add(select(lh_harmony3[4], 4), 'df')
        lh_harmony3[5] = subset(lh_harmony3[5], 1, 3) + chord('ef gf bf', 2)
        add(select(lh_harmony3[5], 1), 'gf,')
        lh_harmony3[6] = self.transpose(lh_harmony3[4], 2)
        add(select(lh_harmony3[6], 4), 'df`')

        rh_harmony3[5][0].dynamics = "cresc"
        rh_harmony3[5][1].dynamics = "!"
        lh_melody3[6][1].suffix += "^\\<"
        lh_melody3[6][4].dynamics = "!"

        bold_chords3 = {
            'treble': voices(rh_melody3, rh_harmony3),
            'bass': voices(lh_melody3, lh_harmony3)
        }

        # """ bridge 2 """

        bridge2_part_1 = join(bridge_motif('gf``'), bridge_motif('f``'), bridge_motif('e``'))

        bridge2_part_2_melody = {
            'treble': key_signature(self.key, subset(bridge_part_2_melody['treble'], 1, 14) + bridge_grace(self.scale('e`', -4, bridge_rhythm4)) + note('b', 8) + self.scale('e`', 3, 8) + note('a`', 2) + rests(1, 1)),
            'bass': key_signature(self.key, rests(1, 2) + bridge_grace(self.scale('e,', -4, bridge_rhythm4)) + notes(['b,,'] + self.scale('e,', 3), 8) + bridge_grace(self.scale('e', -8, bridge_rhythm4 + [8, 8, 8, 8])) + bridge_grace(self.scale('e,', -8, bridge_rhythm4 + [8, 8, 8, 8])) + notes('e,, ds,, d,,', [4, 4, 1]))
        }

        bridge2_part_2_harmony = deepcopy(bridge_part_2_harmony)
        bridge2_part_2_harmony['treble'][3] = bridge_chords('e`')['treble'] + chord('fs b', 2)
        bridge2_part_2_harmony['treble'][4] = chords(['e b', 'fs b e`', 'gs b e`', 'a b fs`'], [4, 8, 8, 2])
        bridge2_part_2_harmony['bass'][6] = note('a,', 2)

        bridge2_part_2 = {
            'treble': clef('bass', voices(bridge2_part_2_melody['treble'], bridge2_part_2_harmony['treble'])),
            'bass': voices(bridge2_part_2_harmony['bass'], bridge2_part_2_melody['bass'])
        }

        bridge2_part_1['treble'][0].dynamics = "p"
        bridge2_part_2['bass'][-1].suffix += linebreak

        bridge2 = join(bridge2_part_1, bridge2_part_2)

        # """ outro """

        self.set_key('ef minor')

        outro = {
            'treble': key_signature(self.key, rep(rest(1), 15)),
            'bass': key_signature(self.key, deepcopy(voices(intro3_treble[0:19] + chord('c ef', 2) + intro3_treble[13:17] + rest(2, ornamentation='fermata') + intro3_treble[17:19] + rest(2, ornamentation='fermata') + intro3_treble[26:31] + rep(chord('d af cf`', 2, articulation=">"), 2) + chord('d af cf`', 1, articulation=">"),
                                                            intro3_bass[0:151] + rest(4) + rest(2) + plonk3('bf,') + rest(2) + rep(plink('ef,'), 2) + rest(2) + plonk('ef,') + rest(2) + rep(plink('ef,'), 2) + rests(1, 1))))
        }

        outro['treble'][0].prefix += '\\grace s16.'
        outro['treble'][-1].suffix = linebreak

        outro['bass'][13] = chord(outro['bass'][13].tones, outro['bass'][13].dur, articulation='>')
        outro['bass'][17].dynamics = ''
        outro['bass'][20].suffix = '^\\pp'
        outro['bass'][20].articulation = ''
        outro['bass'][28].suffix = '^\\ppp'
        outro['bass'][28].dynamics = ''
        outro['bass'][34].markdown = '\\italic { dim. }'
        outro['bass'][35].markdown += '\\italic { dim. }'
        outro['bass'][104].markup = ''

        # """ outro 2 """

        self.set_key('ef major')

        outro2 = {
            'treble': key_signature(self.key, clef('bass', voices(chords(['ef g bf'], [2, 4]) + chord('ef af bf', 4) + chords(['ef g bf'], [2, 2]),
                                                                  rep(self.scale('g', -4, 8), 4)))) + chord('ef g bf', 1, ornamentation='arpeggio'),
            'bass': key_signature(self.key, rep(voices(self.scale('ef', -4, 8), chord('ef, bf,', 2)), 4)) + chord('ef,, bf,, ef, bf,', 1, ornamentation='arpeggio')
        }

        outro2['treble'][0].dynamics = 'mf'
        outro2['treble'][1].markdown = '\\italic { dim. }'
        outro2['treble'][3].markdown = '\\italic { rall. }'
        outro2['treble'][4].dynamics = 'pp'
        outro2['treble'][-1].dynamics = 'ppp'

        self.score = join(intro, bold_chords, intro2, bold_chords2, bridge, intro3, cascade, intro4, bold_chords3, bridge2, outro, outro2)