Once in a while, I get the idea of doing algorithmic pop music and labor intensely on it and then come up with something and then walk away horrified. So, um, if anybody's interested, here's the latest incarnation of this cycle: S'onewall.
The samples are recordings of the largest-ever transgender rights protest in the UK, which took place last month. And then there are drum beats. The bassline uses a subset of the Bohlen-Pierce scale, in just intonation, with notes chosen according to a variation of Clarence Barlow's "digestibility" formula. To determine the relative consonance of two ratios, divide one by the other and then take the result and add the numerator to the denominator. A lower number indicates greater simplicity of the result and thus a higher degree of consonance. There is ugly code, available for your perusal. Quick examples are at the bottom of this post.
This is not on my podcast because I'm not so into it. I have ideas of what might fix it, but I suspect those ideas are wrong and it's taken up so much time already. However, as un-enthused as I am, I think somebody, someplace might want to remix this. Or maybe I'm flattering myself.
I wish I could offer the pieces sent to different tracks, but, ha ha, the only way I could get this to record was with Audio Hijack, because there's a logic problem somewhere in the code which causes it to hang right at the end and chasing that bug is just more trouble than it's worth.
Ok, using the ScaleLattice: First declare a scale with some ratios in it:
~scale = ScaleLattice([[1, 1], [11, 9], [9,7], [7,5], [5, 3], [9, 5], [11,5], [7,3], [27, 11], [27, 25], [25, 9]], 3);That's not the scale from the piece, but it's also a nice one. We can then try to construct a melody, by getting some step-wise motion:
~melody = ~scale.getNsteps(4);And them maybe jump to the most consonant note from the tonic, followed by one step down:
~melody = ~melody ++ ~scale.getIstepsBelowJconsonance(2, 0);Um, and then let's get the most consonant pitch from the last one in the melody:
~melody = ~melody ++ ~scale.consonanceAtFloat(0, ~melody.last);Yeah, this probably sound bad, but we could play it:
Pbind(\dur, 0.3, \freq, Pseq(~melody * 440, 1)).play;
I have a hypothesis that with the combination of relative consonances and stepwise motion, you could abstract music theory to the point where you could construct a meaningful melody from an arbitrary scale. Such that the program doesn't know the scale ahead of time. The missing piece is notes that are too close to each other, which I suspect will have very high relative dissonance. I may think on this further, or I might go back to doing whatever else it is that I do.