We lost about 3 days figuring out the broken music, and the competition was starting to draw near. The pressure was turning way up. Seven was still building out sections and my music wasn't getting smaller. We had reached Cut Iteration 4 and based on the minimal gains I made there I was ready to declare that no more music could be cut.
But Seven kept sending status updates with the full production hovering in the 9k area. This wasn't good. We started talking about crazy things, like how Clinkster creates and counts virtual instruments that aren't really there and if I could eliminate any of them, or maybe Seven could start hacking at Clinkster itself, or putting the song in mono instead of stereo to shave a few dozen bytes.
This didn't sound good, and I figured that Seven was already squeezing the hell out of his code. So I started brainstorming some ideas on how I could possibly cut more. I wasn't hopeful.
Then it struck me -- entropy! Both composers, and especially Purple Motion had used all kinds of effects to give his sound space (see Part 9 of this series). Furthermore, he had several different drum rhythms and fills throughout his sections, but the whole production was at the same tempo. I had spent so much time cutting into the synths, with just a couple exceptions, I had simply ignored the percussion.
So, in almost a fevered dream, I started "flattening" the sound, cutting out echos where I judged they were minimally needed and building up a very simple (and predictable and therefore low entropy), but general purpose drum rhythm I could use for most of the parts that called for drums. I also tried to engineer in a few layers I could simply mix and match.
I discovered the following basic drum routines in Purple Motions music (after converting them over to Renoise and Clinkster):
Somewhat simplified here:
- read left to right
- || means note-off
- lower-case notes mean lower-velocity/volume
- assume missing instrument sections are blank
#1
HiHat .. .. .. .. .. .. .. .. E5 .. || .. .. .. .. .. .. .. .. .. .. .. ..
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#2
BD C3 .. || .. .. .. .. .. C3 .. || .. .. .. .. .. C3 .. || .. .. .. ..
Snare C5 || .. .. .. .. .. .. C5 || .. .. .. .. C5 || .. .. .. .. .. .. ..
HiHat E5 || e5 || e5 || e5 || E5 || e5 || e5 || E5 || e5 || e5 || e5 || e5
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#3
BD C3 .. .. .. .. .. C3 .. || .. .. .. .. .. .. .. C3 .. || .. .. .. ..
Snare C5 || .. .. .. .. .. .. C5 || .. .. c5 .. C5 || .. .. C5 .. .. .. c5
HiHat E5 || e5 || e5 || e5 || E5 || e5 || e5 || E5 || e5 || e5 || e5 || e5
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#4
BD C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. ..
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#5
BD C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. ..
Snare .. .. .. .. .. .. .. .. C5 .. || .. .. .. .. .. .. .. .. .. .. .. ..
HiHat || .. .. .. E5 .. .. .. || .. .. .. E5 .. .. .. || .. .. .. E5 .. ..
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#6
BD C3 .. .. .. C3 .. .. .. .. .. .. .. C3 .. .. .. C3 .. .. .. .. .. ..
Snare .. .. .. .. .. .. .. .. C6 .. || .. .. .. C6 .. || .. C6 .. || .. ..
HiHat E5 || .. .. E5 || .. .. E5 .. .. .. E5 || E5 || E5 || .. .. E5 .. ..
Blipp .. .. .. .. .. .. .. .. .. .. .. .. a5 .. || .. .. .. .. .. .. .. ..
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#7
BD C3 .. .. .. C3 .. .. .. .. .. .. .. C3 .. .. .. C3 .. .. .. .. .. ..
Snare .. .. .. .. .. .. .. .. C6 .. || .. .. .. .. .. .. .. .. .. .. .. ..
HiHat E5 || .. .. E5 || .. .. E5 .. .. .. E5 || E5 || E5 || .. .. E5 .. ..
Blipp .. .. .. .. .. .. .. .. .. .. .. .. a5 .. || .. .. .. .. .. .. .. ..
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#8
BD C3 .. .. .. c3 .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
HiHat .. .. .. .. .. .. .. .. E5 || e5 || e5 || e5 || E5 || e5 || e5 || e5
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
#9
BD C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. ..
HiHat E5 || e5 || e5 || e5 || E5 || e5 || e5 || e5 || E5 || e5 || e5 || e5
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
And a half-dozen more. Plus an incomprehensible number of drum fills and minor variations. I realized that I could greatly simplify things if got rid of most of these.
Since I was doing this to cut space, I figured I should go all the way. The general rhythm I needed to replace these with had to be low-entropy, but also mildly interesting to listen to.
I decided to use a very basic house rhythm.
BD C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. .. .. C3 .. .. .. .. .. ..
Snare .. .. .. .. .. .. .. .. C5 || .. .. .. .. C5 || .. .. .. .. .. .. ..
HiHat E5 || .. .. E5 || .. .. E5 || .. .. E5 || .. .. E5 || .. .. E5 || ..
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22...
I didn't replace all of the rhythms above with this basic rhythm. But I did replace most of them. For the ones with the "Blipp" instrument, I kept that one in, simply layering it over the above.
I figured that one of the reasons Purple Motion had so many different rhythms was simply to keep the music interesting. So I also wrote a version that had a slightly more complex hi-hat part.
I also combined #9 above with a variation on a more complex bass drum part that I used in a couple places.
The effect of all this was cut iteration #5, or an 887 byte drop! All told, I had cut 3,400 bytes from my initial version or more than 3k!