💾 Archived View for thrig.me › blog › 2023 › 05 › 31 › composing-with-constraints1.gmi captured on 2023-06-14 at 14:11:28. Gemini links have been rewritten to link to archived content

View Raw

More Information

➡️ Next capture (2023-11-14)

-=-=-=-=-=-=-

Composing with Constraints: Episodes I-III

Results from "Composing with Constraints: 100 Practical Exercises in Music Composition" by Jorge Variego, for better or worse.

Exercise 1 - focal point

There were birds carrying on outside. The choices here are pretty conventional--major scale, repeat things with minor variations. This does not make much use of the available rhythmic material, but does it need to?

/music/constraint/flute1.ly

/music/constraint/flute1.midi

/music/constraint/flute1.pdf

"The Unanswered Question" by Charles Ives is probably a better example of using minor variations on a melody.

Exercise 2 - using a scale

I'm not sure how far "extracted" allows one to go with the given rhythmic components--the Diabelli Variations, for example, take some small liberties with the theme. However, the following is a fairly conservative shuffle on the rhythmic units available.

/music/constraint/oboe2.ly

/music/constraint/oboe2.midi

/music/constraint/oboe2.pdf

And by shuffle, I mean that; there was a Fisher Yates Shuffle, and more random calls for the selection of the pitches:

    #!perl
    ...

    use Music::VoiceGen;
    my @scale = qw/58 60 61 64 66 67 70 72 73/;
    my @pitches;
    while (1) {
        my $voice = Music::VoiceGen->new(
            pitches   => \@scale,
            intervals => [qw/1 2 3 -1 -2 -3 -5/],
        );
        @pitches = map { $voice->rand } 1 .. $note_count;
        # this exercise must not start and end on the same pitch
        last if $pitches[0] != $pitches[-1];
    }

This code boils down to a markov chain of choices from each note of the scale to all the other notes as limited by the semitone interval list: 58 to 60 is allowed (interval 2) but 60 to 72 is disallowed (interval 12). Then you run the code a few times, and if it's picking good results, you run with or tweak from that; if not, fiddle around with the parameters or try some other method.

Metadata about the mandated scale might be good to know.

    $ atonal-util basic c des e fis g bes c
    c,des,ees,ges,g,a
    224223
    6-30    Petrushka chord
    c,d,ees,ges,aes,a       half_prime

On the other hand some composers have complained at having to unlearn things so they can get back to composing. Probably that was Sergei Prokofiev?

Exercise 3 - using a scale and a subset

This one wan't easy and took a while, and the results probably aren't very good. I had the tempo at 120 but the instructions mandated 60... getting artists to sometimes follow directions may be a good thing.

/music/constraint/clarinet3.ly

/music/constraint/clarinet3.midi

/music/constraint/clarinet3.pdf

The demand here is to have the last four to six measures consist only of a four-note subset of the scale from the prior exercise; one might want to know what four-note subsets of that scale there are.

    $ atonal-util subsets --length=4 6-30 | xargs -n 1 atonal-util basic |
      grep ^4 | sort -u
    4-12
    4-13
    4-18    Diminished major seventh chord
    4-25
    4-27    Dominant seventh chord
    4-28    Diminished seventh chord
    4-9     Distance model
    4-Z15
    4-Z29

So, duh, dominants, and some other faff. The last four notes here involve forte number 4-28, or variations on:

    $ atonal-util findin --pitchset=4-28 g bes
    -       T(1)    des,e,g,bes
    -       T(4)    e,g,bes,des
    -       T(7)    g,bes,des,e
    -       T(10)   bes,des,e,g
    -       Ti(1)   des,bes,g,e
    -       Ti(4)   e,des,bes,g
    -       Ti(7)   g,e,des,bes
    -       Ti(10)  bes,g,e,des

For some competent atonality, try George Rochberg's Symphony No. 5.

bphflog links

bphflog index

next: Toy Orbit Simulator