«Chord progressions in just intonation» by bramtayl
on 02 Aug'18 16:44 inSeems simple but actually solves a big problem. I've written out an example based on the Christ lag. Total newbie here. There's probably a much more convenient way to do this; I'd love some advice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
~unity = 1/1;
~minor_3rd = 6/5;
~major_3rd = 5/4;
~major_5th = 3/2;
~major_6th = 12/7;
~minor_7th = 7/4;
~minor = [~unity, ~minor_3rd, ~major_5th];
~minor_6 = ~minor ++ ~major_6th;
~major = [~unity, ~major_3rd, ~major_5th];
~major_7 = ~major ++ ~minor_7th;
~note = {
arg half_steps_above_A;
440 * (2 ** (half_steps_above_A / 12))
};
~noise = {
arg bass, chord; var full_chord, amplitude, side;
while({bass < 150}, {bass = bass * 2});
while({bass > 300}, {bass = bass / 2});
full_chord = {arg octave;
chord * octave
}.flop.value(2 ** Array.series(3)).flat;
amplitude = 4 / 5 / full_chord.size;
side = Mix.new(
{arg ratio; var frequency;
frequency = bass * ratio;
SinOsc.ar(frequency, 0, amplitude) * AmpCompA.kr(frequency)
}.flop.value(full_chord)
);
[side, side];
};
~sound = 0;
~play = {
arg clock, time, bass, chord;
clock.sched(time, {~sound.free; ~sound = {~noise.value(bass, chord)}.play});
};
~kill = {
arg clock, time;
clock.sched(time, {~sound.free});
};
~bass = ~note.value(7);
~time = 0;
~clock = TempoClock.new(60/60);
~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 2 ; // christ
~bass = ~bass / ~minor_7th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // je-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 2 ; // sus lay
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // in
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // death's
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // strong
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // bands
~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // for
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // our
~bass = ~bass * ~major_5th * ~minor_3rd; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // of-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + (1/2); // fe-
~bass = ~bass * ~major_3rd; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + (1/2); // en-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // ces-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor_6); ~time = ~time + 1 ; // gi-
~bass = ~bass / ~major_5th * ~major_6th; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // i-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 4 ; // ven. therefore
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // let
~play.value(~clock, ~time, ~bass, ~minor_6); ~time = ~time + 1 ; // us
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // keep
~bass = ~bass * ~major_5th * ~minor_3rd; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // the
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 2 ; // feast and
~bass = ~bass / ~minor_3rd; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // sing
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // to
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // god
~bass = ~bass * (~major_5th**2) ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // right
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // thank-
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // ful-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // ly
~bass = ~bass * ~major_5th * ~minor_3rd; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // loud
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // songs
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 2 ; // of hal
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // leh
~bass = ~bass / ~major_5th / ~minor_3rd; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // lu
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // u-
~bass = ~bass / ~major_5th / ~major_3rd; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 2 ; // jah
~bass = ~bass * ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // hal-
~bass = ~bass * ~major_3rd; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // al-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~minor ); ~time = ~time + 1 ; // le
~bass = ~bass / ~major_3rd; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 1 ; // eh-
~bass = ~bass / ~minor_3rd; ~play.value(~clock, ~time, ~bass, ~minor_6); ~time = ~time + 1 ; // lu-
~bass = ~bass / ~major_5th * ~major_6th; ~play.value(~clock, ~time, ~bass, ~major_7); ~time = ~time + 1 ; // u-
~bass = ~bass / ~major_5th ; ~play.value(~clock, ~time, ~bass, ~major ); ~time = ~time + 2 ; // jah
~kill.value(~clock, ~time )
reception
comments