«Chord progressions in just intonation» by bramtayl

on 02 Aug'18 10:44 in chordsjust intonationchord progressionsharmonymusic theorytuning

Seems 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                 )
raw 6269 chars (focus & ctrl+a+c to copy)
reception
comments