Machine4 – Goldberg Aria – in honor of Glenn Gould Day – 9-25-19 – #GlennGouldDay

A day late, but I only finished this part last night and ran out of time to post it. This is the first half of the Aria upon which the Goldberg Variations are based, a piece Glenn Gould recorded twice, once in 1955 and again in 1981. I have listened to them both hundreds of times, and never tire.

My intent at this time is to create some of my own variations using the machine algorithms in my preprocessor. But first I need the original. It has been devilishly hard to transcribe, with all the ornamentation and three distinct lines overlapping in every measure. I’m told it is very challenging on the piano, since it involves lots of hand crossings that are easier on the harpsichord.

The tuning in this version is very rough, and I’ll smooth out the edges later.


or download here:
Machine4 – v1

Machine3 – v8

This is another “final” version of the third machine series pieces. I added some more randomization methods to get a little ostinato going. Just a bit. The rhythm is the same as the last version. Each measure is played either a normal speed or twice as slowly, or 3x, 4x, 5x, 6x, 7 times slower. This means I stay on a measure for up to seven times longer than normal. I worked to spread the measure lengths out so that they all have the same chance of being chosen. It uses the same scales derived from the tonality diamond to the 31-limit.

  • 1:1 otonal
  • 4:3 otonal
  • 9:8 utonal
  • 16:9 otonal


or download here:
Machine3 – v8

Machine3 – v13

This is a final version of the third machine series pieces. This one disassembles “Peace in the Valley”, a song made famous by Elvis Presley and many others. My version is based on several otonal and one utonal scales from the tonality diamond to the 31-limit.

  • 1:1 otonal
  • 4:3 otonal
  • 9:8 utonal
  • 16:9 otonal

The piece uses the notes in the Thomas A. Dorsey arrangement, but messes with the rhythm, the octaves, and the envelopes quite a bit.


or download here:
Machine3 – v13

Machines3 v2 – Peace in the Valley

This is another version with a few changed keys. I’m using the 16-note otonal scales based on 4:3, 1:1, and 16:9 (F, C, B♭), and utonal scales based on 9:8 (D). The piece is in F, so one would think that the composer wanted the same F in all the measures. But in this case, the F in the 1:1 otonality is located at 471 cents, because I’m using the G major seventh chord in that key, and the F has to be 7:4 to the G. So it’s flat. In 4:3 and 16:9 otonal, it’s at 498 cents, which is probably where it belongs. In 9:8 utonal scale the F is found at 520 cents, 22 cents sharp. It’s kind of like follow the bouncing ball to know where F will be in any given measure.

I also chose a more mellow envelope for the piano tones, so it sounds less harsh.

or download here:
Machine 3 – v2

Machines2 v15

Today’s version includes some output from the preprocessor that is more helpful to understand the choices it has made. It also makes extensive use of the p0 randomization pattern, which causes the preprocessor to go through a list and pick the item that has been least often played. As a result, in this version, there are many sections of the piece that were previously unplayed. I had never used this before, and completely forgot that I had included the code to support such a feature. I’ve been playing with the preprocessor for nearly 23 years, and have no idea when I added the p0 pattern, but there it was in the source code, and I used it in this version of the piece.

I added code to the macro source file to list the choices made at different points in the piece. Here’s an example at the beginning of the piece:

  • 1 vamp, bridge, m
  • ch2 r=10
  • ch3 r=06
  • ch4 r=10
  • ch5 r=04
  • ch6 r=04
  • 16th = 6 – 10 per measure
  • 9:8 uton c a
  • loud = mp
  • a tetrad bridge
  • 4:3 oton d a
  • 8:5 oton d a
  • 16:9 oton d a
  • 1:1 oton d a
  • 4:3 oton d a

The text is in code to help me debug, but it shows what the preprocessor chose. 1 vamp of 480 beats, made up of 8 60 beat measures, played at medium volume. The density is such that channel 2’s notes are played 62% of the time they are called, and silent the remaining 38% of the time. Channel 3 is played only 38% of the time called, and channels 5 & 6 are played only 25% of the time. A sixteenth note gets 6 beats, and there are 10 of them per measure, which is fairly slow. The 16-tone scale is the 9:8 utonality, and the tetrad derived from that scale is primarily the “a” tetrad, with slides from the “c” to the “a”. The “a” tetrad in the utonal scale is 12/12:10:8:7. It makes a sweet minor triad with a sharp 7th. The “c” tetrad is more challenging, with ratios of 46/46:38:31:27. It’s way down in the subharmonic series. The loudness of the bridge is medium. This is an “a” tetrad bridge. The bridge is F major, Ab major, Bb major, C major, F major, which coincidentally is the bridge for Sam & Dave’s “Hold On, I’m Comin'”. Go figure. Here’s the next few measures to get an idea of what you may be hearing.

  • 1 vamp, bridge, f
  • ch2 r=08
  • ch3 r=08
  • ch4 r=04
  • ch5 r=10
  • ch6 r=06
  • 16th = 5 beats – 12 per measure
  • 8:5 oton c d
  • loud = f
  • b tetrad bridge
  • 4:3 oton a b
  • 8:5 oton a b
  • 16:9 oton a b
  • 1:1 oton a b
  • 4:3 oton a b
  • 1 vamp, bridge, m
  • ch2 r=10
  • ch3 r=10
  • ch4 r=06
  • ch5 r=04
  • ch6 r=08
  • 16th = 6 – 10 per measure
  • 9:8 uton c a
  • loud = mf
  • c tetrad bridge
  • 4:3 oton b c
  • 8:5 oton b c
  • 16:9 oton b c
  • 1:1 oton b c
  • 4:3 oton b c
  • 5 vamps, bridge, f
  • ch2 r=08
  • ch3 r=04
  • ch4 r=08
  • ch5 r=10
  • ch6 r=10
  • 16th = 5 beats – 12 per measure
  • 8:5 oton c d
  • loud = ff
  • b tetrad bridge
  • 4:3 oton a b
  • 8:5 oton a b
  • 16:9 oton a b
  • 1:1 oton a b
  • 4:3 oton a b

All in good fun.


or download here:
Machine 2 – v15

Machines2 – v10

The random algorithm in the preprocessor is adjustable. When it is set low, the system will retry the random functions a certain number of times until it gets a different result from the last time through. For example setting the “p” pattern to p0, the randomizer is called until it picks a result that it has never used before, ensuring coverage of all the options over time, but in a random pattern. p values of 1 through 8 try hard to return a different result, but sometimes repeat. p values between 9 and 31 increasingly return the same result. There are special p values. p32 always returns the same result. p33 goes forward through a list, and p34 goes backwards. p35 is the Markov Chain Drunkard’s Walk algorithm.

This version of Machine2 uses the following structure:

p22&how-many-1m*. p35&how-many-1f*. &how-many-*. &how-many-*. &how-many-*.
p8&how-many-*. p12&how-many-*. p18&how-many-*. p20&how-many-*.
p22&how-many-*. p35&how-many-*. &how-many-*. &how-many-*. p33&how-many-*.
p28&how-many-1m*. p30&end-many-1p*. p30&end-many-1p*.

It calls a routine called &how-many-*. which is a list that looks like this:

.how-many-5f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*5
.how-many-5m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*5
.how-many-4f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*4
.how-many-4m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*4
.how-many-2f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &chorus-480-*. &vel.d480d*2
.how-many-2m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &chorus-480-*. &vel.d480d*2
.how-many-2p &pick-rhy-*.&pick-key-*.&loudness-p*.&combine-480-*. &chorus-480-*. &vel.d480d*2
.how-many-6f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*6
.how-many-6m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*6
.how-many-3f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*3
.how-many-3m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*3
.how-many-3p &pick-rhy-*.&pick-key-*.&loudness-p*.&combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*3
.how-many-1f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &chorus-480-*. &chorus-480-*. &vel.d480d*3
.how-many-1m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &chorus-480-*. &chorus-480-*. &vel.d480d*3
.end-many-1pp &pick-rhy-*.&pick-key-*.&loudness-pp*.&combine-480-*. &chorus-480-*. &vel.d480d*2
.how-many-8f &pick-rhy-*.&pick-key-*.&loudness-f*.&combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*7
.how-many-8m &pick-rhy-*.&pick-key-*.&loudness-m*.&combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &combine-480-*. &chorus-480-*. &vel.d480d*7

&how-many*. is a list of different lengths, from 1 to 8 measures in a random rhythm and key and loudness (lists of these are elsewhere in the code). It might return only one 480 beat measure, and the bridge, or it might stay in the key for 8 480 beat measures, followed by the bridge.

The &how-many*. macros are prefaced by different p values. p22 is heavy on repetition. p35 is the Markov Chain Drunkard’s Walk. p8 is the default randomness. p12 is a bit more repetition, but less than 22. The p value increases with each call to p22, which is very repetitive. The last line has p set to 28 and 30, which are almost an ostinato. It makes a nice ending with a quiet loudness level.

or download here:
Machine 2 – v10