print_off() // no printing needed here reset(44100) // RESETS CONTROL RATE TO AUDIO RATE. THIS OVERRIDES DEFAULT OF 1000. LOWER IF NEEDED FOR PERFORMANCE ISSUES. tempo = 140 // SET TEMPO <-- dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo; st = 0; //definitions of rhythmic values maxVol = 20000 // SET MAXIMUM VOLUME <-- dynFF = maxVol*6/7; dynF = maxVol*5/7; dynMF = maxVol*4/7; dynMP = maxVol*3/7; dynP = maxVol*2/7; dynPP = maxVol/7; dynPPP = maxVol/10; dynPPPP = maxVol/20; // definitions of dynamic levels // DATA FROM TETHER CONTROLLER pullLRough = makeconnection("inlet", 1, 0) // all GameTrak values are clamped to 0.0 - 1.0 before inlet sideLRough = makeconnection("inlet", 2, 0) // input values have zipper noise ... forwardLRough = makeconnection("inlet", 3, 0) pullL = makefilter(pullLRough, "smooth", 80) // ... so input values should be smoothed sideL = makefilter(sideLRough, "smooth", 80) forwardL = makefilter(forwardLRough, "smooth", 80) pullRRough = makeconnection("inlet", 4, 0) // and the same for the right side (with cord facing outward) of the controller sideRRough = makeconnection("inlet", 5, 0) forwardRRough = makeconnection("inlet", 6, 0) pullR = makefilter(pullRRough, "smooth", 80) // "pull" refers to amount of string pulled out sideR = makefilter(sideRRough, "smooth", 80) // "side" refers to lateral angle (with cord facing outward) forwardR = makefilter(forwardRRough, "smooth", 80) // "forward" refers to back-and-forth angle sideLbool = makeconnection("inlet", 7, 0) // if sideL exceeds 0.5, toggle is on (1), otherwise toggle off (0) forwardLbool = makeconnection("inlet", 8, 0) // use these Boolean values for discontinuous transformations] sideRbool = makeconnection("inlet", 9, 0) forwardRbool = makeconnection("inlet", 10, 0) // Must initialize outputs (can override later as needed): bus_config("AMINST", "out0-1") bus_config("FMINST", "out0-1") bus_config("WAVETABLE", "out0-1") bus_config("VWAVE", "out0-1") bus_config("STEREO", "in0-1", "out0-1") bus_config("TRANS", "in0-1", "out0-1") bus_config("MMODALBAR", "in0-1", "out0-1") bus_config("MSITAR", "in0-1", "out0-1") // TABLES: // ENVELOPES for amplitude and other control parameters: envSoftPerc = maketable("curve", 1000, 0,0,-2, 1,1,0, 9,1,0, 10,0) envPerc = maketable("curve", 1000, 0,0,0, 5,1,0, 95,1,0, 100,0) envSuperPerc = maketable("line", 1000, 0,1, 10,1, 99,0 ) envCurveUp = maketable("curve", 1000, 0,0,3, 1,1) envCurveDown = maketable("curve", 1000, 0,1,-3, 1,0) envCurveUpAmp = maketable("curve", 1000, 0,0,1, 508,1,20, 511,0) envRev = maketable("line", 1000, 0,0, 95,1, 100,0 ) envSoftRev = maketable("curve", 1000, 0,0,0, 95,1,-2, 100,0 ) envSharpRev = maketable("curve", 1000, 0,0,3, 95,1,0, 100, 0 ) envDown = maketable("line", 1000, 0,1, 1,0 ) envUp = maketable("line", 1000, 0,0, 1,1 ) envFlat = maketable("line", 1000, 0,1, 1,1 ) envSharp = maketable("curve", 1000, 0,0,0, 500,0,1, 999,1 ) envTri = maketable("line", 1000, 0,0, 1,1, 2,0 ) env2Tri = maketable("line", 1000, 0,0, 1,1, 2,0, 3,1, 4,0 ) envHann = maketable("window", 1000, "hanning") envZero = maketable("line", 1000, 0,0, 1,0 ) envOctMod = maketable("line", 1000, 0,0, 3,0, 4,1, 5,0, 6,0 ) // WAVETABLES: waveSaw8 = maketable("wave", 1000, "saw8") waveSaw32 = maketable("wave", 1000, "saw32") waveSaw = maketable("wave", 1000, "saw") waveTri17 = maketable("wave", 1000, "tri17") waveSine = maketable("wave", 1000, "sine") waveSquare = maketable("wave", 1000, "square") waveSquare5 = maketable("wave", 1000, "square5") waveSquare9 = maketable("wave", 1000, "square9") waveTransUp = maketable("wave", 1000, 0, 1, 0, 0.4, 0, 0.2, 0, 0.1, 0, 0.05, 0, 0.025, 0, 0.0125) // simulates 8va transposition waveCello = maketable("wave3", 1000, 1,0.003689,0, 2.0167,0.206561,0, 3.0234,0.038787,0, 4.03,0.094815,0, 5.039,0.247546,0, 6.0454,0.049762,0, 7.054,0.046767,0, 8.0624,0.036586,0, 9.067,0.038633,0, 10.077,0.058350,0, 11.0926,0.025122,0, 12.0972,0.009955,0, 13.1005,0.042133,0, 14.1079,0.041724,0, 15.1214,0.008821,0, 16.1241,0.017887,0, 19.1457,0.014579,0) waveBassoon = maketable("wave3", 1000, 1,0.926994,0, 3,0.645786,0, 6,0.412348,0, 7,0.436233,0, 8,0.547544,0, 12,0.690852,0, 16,0.485354,0, 18,0.191528,0, 19,0.410545,0, 21,0.735466,0, 24,0.229833,0, 25,0.305543,0) waveBrass = maketable("wave3", 1000, 1,0.021460,0, 3,0.009213,0, 6,0.001567,0, 7,0.392916,0, 8,0.001070,0, 10,0.022249,0, 12,0.002323,0, 14,1.000000,0, 15,0.003873,0, 16,0.357763,0, 17,0.018961,0, 19,0.003503,0, 20,0.358359,0, 22,0.002245,0, 23,0.039743,0, 24,0.015839,0, 26,0.000723,0, 27,0.022608,0, 30,0.001054,0, 32,0.034359,0, 34,0.032466,0, 38,0.000480,0, 41,0.002036,0, 46,0.007188,0, 49,0.002422,0, 61,0.008005,0, 65,0.005335,0, 68,0.009941,0, 69,0.036334,0, 75,0.002278,0, 81,0.005031,0, 92,0.000706,0, 103,0.168356,0, 106,0.000419,0, 116,0.000348,0, 137,0.042452,0, 138,0.059201,0, 139,0.001026,0, 170,0.001716,0, 171,0.016539,0, 172,0.026519,0, 186,0.000932,0, 204,0.000215,0, 205,0.032372,0, 206,0.115786,0, 208,0.000337,0, 224,0.000756,0, 233,0.000463,0, 240,0.088098,0, 242,0.000596,0, 266,0.000182,0, 274,0.016054,0, 275,0.032858,0, 308,0.001219,0, 342,0.003095,0, 343,0.016319,0, 344,0.008005,0, 376,0.004551,0, 378,0.000392,0, 410,0.003349,0, 412,0.003288,0, 445,0.004292,0, 446,0.007608,0, 479,0.001330,0) waveFlute = maketable("wave3", 1000, 1,1.000000,0, 2,0.030521,0, 3,0.032712,0, 4,0.038703,0, 5,0.008928,0, 6,0.004686,0, 7,0.005373,0) waveOoh = maketable("wave3", 1000, 1,0.042801,0, 2,0.467034,0, 3,0.638080,0, 4,1.000000,0, 5,0.272017,0, 6,0.050774,0, 7,0.101915,0, 8,0.109992,0, 9,0.130291,0, 10,0.097299,0, 11,0.197535,0, 12,0.039706,0, 13,0.013795,0, 14,0.006137,0, 41,0.001783,0, 125,0.002308,0, 126,0.002413,0) waveAah = maketable("wave3", 1000, 1,0.010773,0, 2,0.057991,0, 3,0.041118,0, 4,0.062368,0, 5,0.086318,0, 6,0.077835,0, 7,0.143379,0, 8,0.648062,0, 9,1.000000,0, 10,0.502688,0, 11,0.235956,0, 12,0.395029,0, 13,0.588234,0, 14,0.222031,0, 15,0.075454,0, 16,0.024471,0, 17,0.011476,0, 18,0.001066,0, 19,0.001451,0, 26,0.001860,0, 27,0.005284,0, 28,0.006396,0, 29,0.004989,0, 30,0.002472,0, 31,0.002948,0, 32,0.001633,0, 33,0.002018,0, 34,0.001701,0, 35,0.001860,0, 36,0.002223,0, 37,0.006033,0, 38,0.011657,0, 39,0.018280,0, 40,0.024380,0, 41,0.019368,0, 42,0.013222,0, 43,0.011362,0, 44,0.004989,0, 45,0.006123,0, 46,0.005693,0, 47,0.001089,0, 48,0.000862,0, 49,0.001633,0, 50,0.001814,0, 51,0.002676,0, 52,0.002132,0, 53,0.001678,0, 54,0.000975,0, 121,0.003220,0, 122,0.005375,0, 123,0.006963,0, 124,0.006577,0, 125,0.006668,0, 126,0.002495,0) waveA = maketable("wave3", 1000, 1,0.031915,0, 2,0.147343,0, 3,0.215481,0, 4,0.108111,0, 5,0.222239,0, 6,0.142233,0, 7,0.190143,0, 8,0.380830,0, 9,0.661169,0, 10,1.000000,0, 11,0.295321,0, 12,0.498843,0, 13,0.449890,0, 14,0.279416,0, 15,0.110424,0, 16,0.036979,0, 17,0.017069,0, 18,0.011384,0, 19,0.003024,0, 20,0.003825,0, 21,0.001482,0, 22,0.002207,0, 24,0.000741,0, 38,0.001149,0, 39,0.000695,0, 40,0.000711,0, 41,0.003024,0, 42,0.002343,0, 43,0.004793,0, 44,0.002389,0, 45,0.003674,0, 46,0.001361,0) waveO = maketable("wave3", 1000, 1,0.031676,0, 2,0.187254,0, 3,0.249382,0, 4,0.374980,0, 5,1.000000,0, 6,0.438673,0, 7,0.266758,0, 8,0.223726,0, 9,0.517757,0, 10,0.303980,0, 11,0.024263,0, 12,0.048078,0, 13,0.017967,0, 14,0.015036,0, 15,0.001682,0, 16,0.001459,0, 36,0.001669,0, 37,0.001183,0) waveU = maketable("wave3", 1000, 1,0.047903,0, 2,0.308088,0, 3,0.587261,0, 4,1.000000,0, 5,0.503784,0, 6,0.212012,0, 7,0.171947,0, 8,0.188534,0, 9,0.446146,0, 10,0.076238,0, 11,0.030987,0, 12,0.021600,0, 13,0.007800,0, 14,0.007897,0) waveE = maketable("wave3", 1000, 1,0.028477,0, 2,0.160635,0, 3,0.166984,0, 4,0.231120,0, 5,0.223117,0, 6,0.347286,0, 7,1.000000,0, 8,0.577105,0, 9,0.362470,0, 10,0.096260,0, 11,0.137006,0, 12,0.084698,0, 13,0.119953,0, 14,0.070712,0, 15,0.062053,0, 16,0.039887,0, 17,0.058910,0, 18,0.060260,0, 19,0.082564,0, 20,0.105386,0, 21,0.043876,0, 22,0.032869,0, 23,0.010704,0, 24,0.013746,0, 25,0.003080,0, 26,0.010578,0, 27,0.001401,0, 28,0.019628,0, 29,0.006703,0, 30,0.003358,0, 31,0.002853,0, 33,0.000707,0) waveI = maketable("wave3", 1000, 1,0.039745,0, 2,0.347017,0, 3,0.574496,0, 4,1.000000,0, 5,0.152662,0, 6,0.127256,0, 7,0.072661,0, 8,0.057565,0, 9,0.026106,0, 10,0.017044,0, 11,0.007548,0, 12,0.006810,0, 13,0.003954,0, 15,0.002365,0, 16,0.005278,0, 18,0.002970,0, 19,0.004143,0, 20,0.002686,0, 21,0.005240,0, 22,0.004521,0, 23,0.008210,0, 24,0.013866,0, 25,0.017877,0, 26,0.007813,0, 27,0.002440,0, 28,0.001721,0, 31,0.001135,0, 33,0.001116,0, 34,0.003462,0, 35,0.004275,0, 36,0.006829,0, 37,0.020431,0) waveGna = maketable("wave3", 1000, 1,1,0, 2,1/2,0, 3,1/3,0, 4,0.1/4,0, 5,1/5,0, 6,1/6,0, 7,0.426667,0, 8,0.226667,0, 9,0.086667,0, 11,0.333333,0, 12,0.280000,0, 14,0.266667,0, 16,0.233333,0, 18,0.226667,0, 19,0.293333,0, 20,0.466667,0, 21,0.433333,0, 22,0.420000,0, 23,0.486667,0, 24,0.540000,0, 25,0.106667,0, 26,0.260000,0, 29,0.100000,0, 30,0.246667,0, 31,0.086667,0, 33,0.093333,0, 48,0.113333,0, 49,0.120000,0, 50,0.306667,0, 51,0.320000,0, 52,0.366667,0, 53,0.280000,0, 98,0.220000,0, 99,0.266667,0, 101,0.226667,0, 110,0.313333,0, 111,0.386667,0, 112,0.413333,0, 113,0.106667,0, 114,0.893333,0, 115,0.980000,0, 116,0.720000,0, 117,0.360000,0, 119,0.326667,0, 120,0.393333,0, 121,0.306667,0) waveGneh = maketable("wave3", 1000, 1,1,0, 2,1/2,0, 3,1/3,0, 4,0.1/4,0, 5,1/5,0, 6,1/6,0, 7,0.035824,0, 8,0.012606,0, 9,0.007596,0, 10,0.016808,0, 11,0.005656,0, 12,0.004471,0, 13,0.026289,0, 14,0.090449,0, 15,0.066961,0, 16,0.064106,0, 17,0.008081,0, 18,0.016592,0, 19,0.027905,0, 20,0.019286,0, 21,0.013899,0, 22,0.012444,0, 23,0.007650,0, 24,0.003609,0, 25,0.004148,0, 26,0.007326,0, 27,0.002424,0, 29,0.002532,0, 30,0.003717,0, 31,0.002155,0, 32,0.002316,0, 79,0.002370,0, 80,0.002424,0, 81,0.001939,0, 82,0.002640,0, 101,0.003286,0, 102,0.003825,0, 103,0.004794,0, 104,0.005010,0, 105,0.001939,0, 113,0.001832,0, 114,0.002101,0, 115,0.002855,0, 116,0.003286,0, 117,0.003986,0, 118,0.004202,0, 119,0.003771,0, 120,0.003340,0, 121,0.004256,0, 122,0.004902,0, 123,0.004687,0, 124,0.003933,0, 125,0.003178,0, 126,0.002747,0) wavePrime = maketable("wave3", 1000, 1,1,0, 2,1/2,0, 3,1/3,0, 5,1/5,0, 7,1/7,0, 11,1/11,0, 13,1/13,0, 17,1/17,0, 19,1/19,0, 23,1/23,0, 29,1/29,0, 31,1/31,0, 37,1/37,0, 41,1/41,0, 43,1/43,0, 47,1/47,0, 53,1/53,0, 59,1/59,0, 61,1/61,0, 67,1/67,0, 71,1/71,0, 73,1/73,0, 83,1/83,0, 97,1/97,0, 101,1/101,0 ) // LFOs lfoEnvSquare = maketable("line", 1000, 0,-1, 9,1, 40,1, 49,-1, 99,-1 ) // used as "waveform" in synchronized LFOs lfoForwardL = makeLFO(lfoEnvSquare, tempo/60 + forwardL * (tempo/15 - tempo/60), 0, 1 ) // frequency of LFO on forwardL, with lowest freq = quarter note and highest freq = 16th lfoForwardR = makeLFO(lfoEnvSquare, tempo/60 + forwardR * (tempo/15 - tempo/60), 0, 1 ) lfoSideL = makeLFO(lfoEnvSquare, tempo/60 + sideL * (tempo/15 - tempo/60), 0, 1 ) lfoSideR = makeLFO(lfoEnvSquare, tempo/60 + sideR * (tempo/15 - tempo/60), 0, 1 ) lfoForwardLSmooth = makeLFO("sine", tempo/60 + forwardL * (tempo/15 - tempo/60), 0, 1 ) // use sine waveform if concerned about noise lfoForwardRSmooth = makeLFO("sine", tempo/60 + forwardR * (tempo/15 - tempo/60), 0, 1 ) lfoSideLSmooth = makeLFO("sine", tempo/60 + sideL * (tempo/15 - tempo/60), 0, 1 ) lfoSideRSmooth = makeLFO("sine", tempo/60 + sideR * (tempo/15 - tempo/60), 0, 1 ) lfoFreqAmpL = makeLFO("sine", tempo/60 + sideL * (tempo/15 - tempo/60), forwardL, 1 ) // control frequency of LFO on sideL and depth on forwardL lfoFreqAmpR = makeLFO("sine", tempo/60 + sideR * (tempo/15 - tempo/60), forwardR, 1 ) lfoDur4 = makeLFO(lfoEnvSquare, tempo/60, 0, 1 ) // fixed LFO synchronized to quarter note lfoDur8 = makeLFO(lfoEnvSquare, tempo/30, 0, 1 ) // fixed LFO synchronized to 8th note lfoDur12 = makeLFO(lfoEnvSquare, tempo/20, 0, 1 ) // fixed LFO synchronized to triplet lfoDur16 = makeLFO(lfoEnvSquare, tempo/15, 0, 1 ) // fixed LFO synchronized to 16th note // THE FOLLOWING MUST BE AT THE TOP OF EVERY SCORE, NOT JUST IN "HEADER" (script 0) print_off() srand() st = 0 // pfield = makeLFO("waveform", [interp_type,] frequency, amp/min[, max]) // just for intro swoop LFOs lfoL1 = makeLFO("sine", 0.5+sideL*3.5, forwardL, 1 ) lfoR1 = makeLFO("sine", 0.5+sideR*3.5, forwardR, 1 ) waitForRevRide = 50.14 // wait time (in seconds) for reversed ride cymbal. adjust if tempo changes // SCORE: // INTRO pArr1 = { 7.08, 7.07, 7.05, 7.05 } // set by [q] pArr2 = { 7.00, 7.00, 7.01, 7.01 } dArr1 = { 1,0,1,0 } // set by [s] MAXMESSAGE(st, 1) //enable groove~ rtinput("MMBUF", "revRide"); STEREO(waitForRevRide, 0, 3, 1.2, 0, 1) // INST R <-- VWAVE(0, dur16*495, 4.05+envCurveUp*0.48, dynP*envCurveUpAmp*lfoL1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0a <-- VWAVE(0, dur16*495, 4.05+envCurveUp*0.48+sideL*0.002, dynP*envCurveUpAmp*lfoL1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0b <-- VWAVE(0, dur16*495, 5.05+envCurveUp*0.36, dynP*envCurveUpAmp*lfoL1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0c <-- VWAVE(0, dur16*495, 5.05+envCurveUp*0.36+sideL*0.002, dynP*envCurveUpAmp*lfoL1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0d <-- VWAVE(0, dur16*495, 8.05+envCurveDown*0.48, dynPPP*envCurveUpAmp*lfoR1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0e <-- VWAVE(0, dur16*495, 8.05+envCurveDown*0.48+sideR*0.003, dynPP*envCurveUpAmp*lfoR1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0f <-- VWAVE(0, dur16*495, 8.05+envCurveDown*0.36, dynPPPP*envCurveUpAmp*lfoR1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0g <-- VWAVE(0, dur16*495, 8.05+envCurveDown*0.36+sideR*0.005, dynPPPP*envCurveUpAmp*lfoR1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0h <-- for ( p = 0; p < 8; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase for ( q = 0; q < 4; q += 1 ) { // beats in a measure r4q=q;r8q=q+(m%2)*4;r16q=q+m*4;r32q=q+m*4+(p%2)*16;r64q=q+m*4+(p%4)*16 // definitions for rhythmic loops (e.g., r16q is a loop of 16 quarter notes) must be put here dArr1 = { 1,0,1,0 } // set by [h] if ( q == 3 ) { // randomly add 16ths on some beat four dSwitch1 = pickrand(0,0,0,1) if ( dSwitch1 == 1 ) dArr1 = { 1,1,1,1 } } st12 = st // synchronize triplet subdivision (below) to global beat for ( s = 0; s < 4; s += 1 ) { // 16th-note subdivision of beats r4s=s;r8s=s+(q%2)*4;r16s=s+q*4;r32s=s+q*4+(m%2)*16;r64s=s+q*4+m*16 counter = ( s + q*4 + m*16 + p*64 ) / 511 envSwitch1 = 0 // by default if ( s == 2 && ( q == 1 || q == 2 ) ) // only allow hiccuping sound on offbeats of 2 and 3 envSwitch1 = pickrand(0,0,1) if ( envSwitch1 == 0 ) { // controls amplitude envelope env1 = envPerc dMod1 = 1.8 } else { env1 = envRev dMod1 = 1.2 } if ( dSwitch1 == 1 && q == 3 ) { // controls upper octave vector envelope dMod1 = 0.5 vEnv = counter } else { vEnvSwitch1 = pickrand(0,1) if ( vEnvSwitch1 == 0) vEnv = envDown else vEnv = envUp } if ( p == 7 && m == 2 ) { // straight 16ths on second-to-last measure of section dArr1 = { 1,1,1,1 } dMod1 = 0.5 vEnv = counter } if ( p == 7 && m == 3 ) // mute last measure of section dArr1 = { 0,0,0,0 } VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m], dynPPP*env1+dynPP*env1*counter*counter, counter, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 1a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m]+0.002, dynPPP*env1+dynPP*env1*counter*counter, counter, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 1b <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m]+1.001, dynPPPP*env1+dynPPP*env1*counter, vEnv, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 1c <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m]+1.003, dynPPPP*env1+dynPPP*env1*counter, vEnv, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 1d <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m], dynPPP*env1+dynPP*env1*counter*counter, counter, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 2a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m]+0.002, dynPPP*env1+dynPP*env1*counter*counter, counter, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 2a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m]+1.001, dynPPPP*env1+dynPPP*env1*counter, vEnv, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 2a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m]+1.003, dynPPPP*env1+dynPPP*env1*counter, vEnv, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 2a <-- st += dur16 } // close s loop for ( t = 0; t < 3; t += 1 ) { // triplet subdivision of beat r3t=t;r6t=t+(q%2)*3;r12t=t+q*3;r24t=t+q*3+(m%2)*12;r48t=t+q*3+m*12 st12 += dur12 } // close t loop } // close q loop } // close m loop } // close p loop // DROP MAXMESSAGE(st-dur4*5, 0) // disable groove~ during fill MAXMESSAGE(st, 1) // enable groove~ bus_config("MMODALBAR", "out0-1") MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(10.06), 0.5, 0.8, 1, 0, envPerc) // INST 0a <-- (bing bong) MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(10.063), 0.3, 0.5, 1, 1, envPerc) // INST 0b <-- MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(8.06), 0.5, 0.8, 1, 0, envPerc) // INST 0c <-- MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(8.063), 0.3, 0.5, 1, 1, envPerc) // INST 0d <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(9.06), 0.5, 0.8, 1, 0, envPerc) // INST 0a <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(9.063), 0.3, 0.5, 1, 1, envPerc) // INST 0b <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(7.06), 0.5, 0.8, 1, 0, envPerc) // INST 0c <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(7.063), 0.3, 0.5, 1, 1, envPerc) // INST 0d <-- rtinput("MMBUF", "revRide"); STEREO(st+waitForRevRide, 0, 3, 0.5, 0, 1) // add reversed cymbal here too, but much softer pArr2 = { 6.05,6.05,6.05,6.05, 6.07,6.07,6.07,6.07, 6.08,6.08,6.08,6.08, 6.10,6.10,6.10,6.10 } // set by [r16q] pArr3 = { 7.00,7.00,7.00,7.00, 7.00,7.00,7.00,7.00, 7.01,7.01,7.01,7.01, 7.01,7.01,7.01,7.01 } pArr4 = { 7.08,7.08,7.08,7.08, 7.07,7.07,7.07,7.07, 7.05,7.05,7.05,7.05, 7.05,7.05,7.05,7.05 } for ( p = 0; p < 8; p += 1 ) { // phrases in a section if ( p == 3 ) { // bassline fill 1 dArr1 = { 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, -0, 0, 0, 0 } // quintuplet interjection at - pArr1 = { 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.01, 00.00, 00.00, 00.00, 05.10, 00.00, 06.01, 00.00, 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.01, 00.00, 00.00, 00.00, -00.00, 00.00, 00.00, 00.00 } // set by [r32q] } else if ( p == 7 ) { // fill 2 dArr1 = { 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0 } // quintuplet interjection at - pArr1 = { 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.01, 00.00, 00.00, 00.00, 05.10, 00.00, 06.01, 00.00, 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, -00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00 } } else { // default dArr1 = { 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 1, 1 } // set by [r32q] pArr1 = { 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.01, 00.00, 00.00, 00.00, 05.10, 00.00, 06.01, 00.00, 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.01, 00.00, 00.00, 00.00, 05.06, 00.00, 06.06, 05.06 } } for ( m = 0; m < 4; m += 1 ) { // measures in a phrase if ( p == 3 && m == 3 ) { // fill 1 MAXMESSAGE(st, 0) // disable groove~ during fill MAXMESSAGE(st+dur4*4, 1) // and enable after fill dArrR = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } // set by [r16s] } else if ( p == 7 && m == 2 ) // fill 2 dArrR = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } else if ( p == 7 && m == 3 ) // fill 2 second measure dArrR = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } else dArrR = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } if ( p == 0 && m == 0 ) { // guaranteed straight 16ths on first phrase dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r32s] } else if ( p == 3 && (m == 2 || m == 3) ) { // fill 1 dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0 } } else if ( p == 7 && (m == 2 || m == 3) ) { // fill 2 dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } else { // default is randomized kickVar = pickrand(0,1,2) if ( kickVar == 0 ) { dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } else if ( kickVar == 1 ) { dArrK = { 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } else { dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } for ( q = 0; q < 4; q += 1 ) { // quarter notes in a measure r4q=q;r8q=q+(m%2)*4;r16q=q+m*4;r32q=q+m*4+(p%2)*16;r64q=q+m*4+(p%4)*16 vEnvSwitch1 = pickrand(0,1,2,3) if ( vEnvSwitch1 == 0 ) vEnv1 = envUp else if ( vEnvSwitch1 == 1 ) vEnv1 = envUp else if ( vEnvSwitch1 == 2 ) vEnv1 = envDown else vEnv1 = env2Tri dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } // by default (and set by [r16s] ) if ( q == 0 ) { // only on beat 1 variation2 = pickrand(0,0,1) if ( variation2 == 1 ) // extend first note of measure to 2 beats dArr2 = { 6, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } } bus_config("VWAVE", "out2-3") VWAVE(st, dur4*dArr1[r32q], pArr1[r32q], dynFF*envPerc, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass) VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+0.002, dynFF*envPerc, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+1.001+envTri*0.01*forwardL, dynMP*envRev, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+1.003+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st, dur4*dArr1[r32q], pArr1[r32q]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- if ( p == 7 && m == 2 && q == 0 ) { // LFO fill 2 VWAVE(st, dur4*4, 8.01, dynMF*envRev*lfoForwardL, vEnv1, 0, waveA, waveE, waveI, waveO, waveU ) // INST 1a <-- (bass) VWAVE(st, dur4*4, 8.012,dynMF*envRev*lfoForwardL, vEnv1, 1, waveA, waveE, waveI, waveO, waveU ) // INST 1b <-- } st12 = st5 = st // synchronize triplet and quintuplet subdivisions (below) to global beat for ( s = 0; s < 4; s += 1 ) { // 16th-note subdivision of beats r4s=s;r8s=s+(q%2)*4;r16s=s+q*4;r32s=s+q*4+(m%2)*16;r64s=s+q*4+m*16 oct2 = pickrand(0,1,2) oct3 = pickrand(0,1,2) oct4 = pickrand(0,1,2) env2Switch = pickrand(0,1,2) if ( env2Switch == 0 ) { dMod2 = 0.5 env2 = envPerc } else if ( env2Switch == 1 ) { dMod2 = 1.1 env2 = envTri } else { env2 = envRev dMod2 = 0.8 } vector2 = random() if ( dArr2[r16s] > 1 ) { // first beat has been extended. adjust envelope dMod2 = 1 env2 = envSharpRev } mute2 = 1 if ( (p == 3 && m == 3) || (p == 7 && (m == 2 || m == 3) ) ) // mute on both fills mute2 = 0 bus_config("VWAVE", "out0-1") VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2, pArr2[r16q]+oct2, dynPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2a <-- (chords) VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2, pArr2[r16q]+oct2+random()*0.005, dynPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2, pArr3[r16q]+oct3, dynPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2, pArr3[r16q]+oct3+random()*0.005, dynPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2, pArr4[r16q]+oct4, dynPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2, pArr4[r16q]+oct4+random()*0.005, dynPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4b <-- bus_config("STEREO", "in0-1", "out4-5") rtinput("MMBUF", "highSnare"); STEREO(st, 0, dArrR[r16s], 0.6, 0, 1) // INST R <-- (called R because it was first a ride cymbal) rtinput("MMBUF", "dirtyKick"); STEREO(st, 0, dArrK[r32s], 0.6, 0, 1) // INST K <-- st += dur16 } // close s loop for ( t = 0; t < 3; t += 1 ) { // triplet subdivision of beat r3t=t;r6t=t+(q%2)*3;r12t=t+q*3;r24t=t+q*3+(m%2)*12;r48t=t+q*3+m*12 st12 += dur12 } // close t loop if ( (p == 3 && m == 3 && q == 0) || (p == 7 && m == 2 && q == 0) ) { // only triggered on two fills for ( f = 0; f < 5; f += 1 ) { // quintuplet subdivision of beat if ( p == 3 ) // first fill pArr1F = { 05.06, 05.06, 06.06, 05.06, 05.06 } // pitch material for quintuplet fill else pArr1F = { 5.01, 5.01, 5.01, 5.01, 5.01 } vEnv1 = envUp bus_config("VWAVE", "out2-3") VWAVE(st5, dur8, pArr1F[f], dynFF*envPerc, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass) VWAVE(st5, dur8, pArr1F[f]+0.002, dynFF*envPerc, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st5, dur8, pArr1F[f]+1.001+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st5, dur8, pArr1F[f]+1.003+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st5, dur8, pArr1F[f]+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st5, dur8, pArr1F[f]+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st5, dur8, pArr1F[f]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st5, dur8, pArr1F[f]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- st5 += dur4*4/5 } // close f loop } } // close q loop } // close m loop } // close p loop // CANON MAXMESSAGE(st-dur4*5, 0) // disable groove~ during fill MAXMESSAGE(st, 1) // enable groove~ MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(10.06), 0.5, 0.8, 1, 0, envPerc) // INST 0a <-- (bing bong) MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(10.063), 0.3, 0.5, 1, 1, envPerc) // INST 0b <-- MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(8.06), 0.5, 0.8, 1, 0, envPerc) // INST 0c <-- MMODALBAR(st-dur4*2, dur4*2, 40000, cpspch(8.063), 0.3, 0.5, 1, 1, envPerc) // INST 0d <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(9.06), 0.5, 0.8, 1, 0, envPerc) // INST 0a <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(9.063), 0.3, 0.5, 1, 1, envPerc) // INST 0b <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(7.06), 0.5, 0.8, 1, 0, envPerc) // INST 0c <-- MMODALBAR(st-dur4, dur4*2, 40000, cpspch(7.063), 0.3, 0.5, 1, 1, envPerc) // INST 0d <-- pArr1 = { 05.05, 05.07, 05.03, 05.02, 05.00, 05.02, 05.03, 05.05, 05.07, 05.10, 05.03, 05.02, 05.01, 05.07, 05.04, 05.00 } // set by [r16m] pArr2 = { 06.05, 06.07, 06.10, 06.10, 07.00, 06.07, 06.07, 06.08, 06.10, 06.10, 06.10, 06.07, 06.07, 06.07, 06.07, 06.07 } // set by [r16m] pArr3 = { 07.00, 07.02, 07.03, 07.02, 07.03, 06.10, 07.00, 07.00, 07.02, 07.02, 07.03, 06.10, 06.10, 06.10, 06.10, 06.10 } pArr4 = { 07.08, 07.07, 07.07, 07.07, 07.07, 07.05, 07.03, 07.05, 07.08, 07.07, 07.07, 07.05, 07.04, 07.01, 07.00, 07.07 } dArr6 = { 2, 0, 2, 0 } // set by [q] pArr6 = { 07.05, 07.07, 07.03, 07.02, 07.00, 07.02, 07.03, 07.05, 07.07, 07.10, 07.05, 07.02, 07.03, 07.02, 07.00, 06.10, 07.00, 07.07, 07.03, 07.02, 07.00, 07.02, 07.03, 07.05, 07.07, 07.10, 07.03, 07.02, 07.01, 07.07, 07.04, 07.00 } // set by [r32h] for ( p = 0; p < 16; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase r4m=m;r8m=m+(p%2)*4;r16m=m+(p%4)*4 if ( p == 3 && m == 3 ) { // drum fill 1 dArrS = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } dArrK = { 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0 } } else if ( p == 7 && m == 2 ) { // drum fill 2 dArrS = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } dArrK = { 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0 } } else if ( p == 7 && m == 3 ) { // drum fill 2 m. 2 dArrS = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1 } dArrK = { 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } } else if ( p > 7 ) { // no drums in second half (had issue with obvious easier solution. come back later) dArrS = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } dArrK = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } else { // default dArrS = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } dArrK = { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } bus_config("VWAVE", "out0-1") VWAVE(st, dur4*4, 10.00+forwardR*0.10, dynF*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 5a <-- ("theremin") VWAVE(st, dur4*4, 11.00+forwardR*0.10, dynMF*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 5b <-- ("theremin") for ( q = 0; q < 4; q += 1 ) { // quarter notes in a measure r4q=q;r8q=q+(m%2)*4;r16q=q+m*4;r32q=q+m*4+(p%2)*16;r64q=q+m*4+(p%4)*16;r32h=trunc(q/2)+m*2+(p%4)*8 dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } // by default (and set by [r16s] ) if ( q == 0 ) { // only on beat 1 rhythmSwitch1 = pickrand(0,1) if ( rhythmSwitch1 == 0 ) dArr1 = { 12,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } else dArr1 = { 6, 0, 0, 0, 0, 0, 2, 0, 2, 0, 2, 0 } variation2 = pickrand(0,0,1) if ( variation2 == 1 ) // extend first note of measure to 2 beats dArr2 = { 6, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } } if ( p > 7 ) { if ( p < 12 ) pan6 = 0.5 else pan6 = 0 // pan hard left when quarter notes come in bus_config("FMINST", "out0-1") // FMINST(outsk, dur, AMP, CARFREQ (Hz/oct.pc), MODFREQ (Hz/oct.pc), LOWINDEX, HIGHINDEX[, PAN, WAVETABLE, INDEXENV]) FMINST(st, dur4*dArr6[q], dynMF*envRev, pArr6[r32h], pArr6[r32h]+1+sideL*0.001, 2, 2+forwardL*5, pan6, waveI, envFlat) // INST 6 <-- (half-note line) } if ( p > 11 ) { if ( p < 14 ) // just first 16 pitches during first three loops rLoop7 = r16q else rLoop7 = r32q FMINST(st, dur4*1.5, dynP*envTri*lfoFreqAmpR, pArr6[rLoop7]+2, pArr6[rLoop7]+3+sideR*0.003, 2, 2+forwardR*8, 1, waveSine, envFlat) // INST 7 <-- (quarter-note line) } st12 = st // synchronize triplet subdivision (below) to global beat for ( s = 0; s < 4; s += 1 ) { // 16th-note subdivision of beats r4s=s;r8s=s+(q%2)*4;r16s=s+q*4;r32s=s+q*4+(m%2)*16;r64s=s+q*4+m*16 oct2 = pickrand(0,1,2) oct3 = pickrand(0,1,2) oct4 = pickrand(0,1,2) env2Switch = pickrand(0,1,2) if ( env2Switch == 0 ) { dMod2 = 0.5 env2 = envPerc } else if ( env2Switch == 1 ) { dMod2 = 1.1 env2 = envTri } else { env2 = envRev dMod2 = 0.8 } vector2 = random() if ( dArr2[r16s] > 1 ) { // first beat has been extended. adjust envelope dMod2 = 1 env2 = envSharpRev } bus_config("VWAVE", "out0-1") VWAVE(st, dur16*dArr2[r16s]*dMod2, pArr2[r16m]+oct2, dynPPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2a <-- (chords) VWAVE(st, dur16*dArr2[r16s]*dMod2, pArr2[r16m]+oct2+random()*0.005, dynPPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArr3[r16m]+oct3, dynPPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArr3[r16m]+oct3+random()*0.005, dynPPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArr4[r16m]+oct4, dynPPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArr4[r16m]+oct4+random()*0.005, dynPPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4b <-- bus_config("STEREO", "in0-1", "out4-5") rtinput("MMBUF", "normalSnare"); STEREO(st, 0, dArrS[r16s], 0.6, 0, 1) // INST S <-- snare rtinput("MMBUF", "splashyKick"); STEREO(st, 0, dArrK[r16s], 0.6, 0, 1) // INST K <-- kick st += dur16 } // close s loop for ( t = 0; t < 3; t += 1 ) { // triplet subdivision of beat r3t=t;r6t=t+(q%2)*3;r12t=t+q*3;r24t=t+q*3+(m%2)*12;r48t=t+q*3+m*12 vEnvSwitch1 = pickrand(0,1) if ( vEnvSwitch1 == 0 ) vEnv1 = envUp else vEnv1 = envDown if ( dArr1[r12t] == 2 ) { aEnv1 = envRev oct1 = 1 // transpose up on triplets } else { aEnv1 = envPerc oct1 = 0 } bus_config("VWAVE", "out2-3") VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1, dynF*aEnv1, vEnv1, 0, waveA, waveGna, waveE, waveGneh ) // INST 1a <-- (bass) VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+0.002, dynF*aEnv1, vEnv1, 1, waveE, waveGneh, waveA, waveGna ) // INST 1b <-- VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+1.001+envTri*0.01*forwardL, dynP*envRev, vEnv1, 0, waveA, waveE, waveI, waveO, waveU ) // INST 1c <-- VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+1.003+envTri*0.01*forwardL, dynP*envRev, vEnv1, 1, waveA, waveE, waveI, waveO, waveU ) // INST 1d <-- VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveA, waveE, waveI, waveO, waveU ) // INST 1e <-- VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveA, waveE, waveI, waveO, waveU ) // INST 1f <-- VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st12, dur12*dArr1[r12t], pArr1[r16m]+oct1+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveA, waveI, waveO ) // INST 1h <-- st12 += dur12 } // close t loop } // close q loop } // close m loop } // close p loop MAXMESSAGE(st, 2) // trigger goscript 2 // THE FOLLOWING MUST BE AT THE TOP OF EVERY SCORE, NOT JUST IN "HEADER" (script 0) print_off() srand() st = 0 lfoL1 = makeLFO("sine", 0.5+sideL*3.5, forwardL, 1 ) lfoR1 = makeLFO("sine", 0.5+sideR*3.5, forwardR, 1 ) waitForRevRide = 50.14 // wait time (in seconds) for reversed ride cymbal. adjust if tempo changes MAXMESSAGE(st, 1) // enable groove~ (and delete this code when concatenating scores) // CADENZA bus_config("STEREO", "in0-1", "out2-3") rtinput("MMBUF", "harpsichord"); STEREO(st, 0, 38, 3, 0, 1) // INST H <-- harpsichord pArrS = { 09.00, 09.00, 09.01, 08.11, 09.00, 09.00, 09.01, 08.11, 09.00, 09.00, 09.00, 09.05, 09.05, 09.05, 09.07, 09.07, 09.07, 09.07, 09.08, 09.09 } // set by [m] pArrA = { 08.07, 08.07, 08.08, 08.05, 08.07, 08.07, 08.08, 08.05, 08.07, 08.07, 08.05, 09.00, 08.11, 09.01, 09.02, 09.04, 09.03, 09.03, 09.03, 09.05 } pArrT = { 08.04, 08.04, 08.05, 08.02, 08.04, 08.04, 08.05, 08.02, 08.04, 08.04, 08.05, 08.05, 08.07, 08.10, 08.11, 09.00, 08.10, 08.10, 08.08, 08.07 } pArrB = { 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 08.00, 07.07, 08.01, 08.02, 08.00, 08.01, 07.10, 08.00, 07.11 } pArrSub={ 07.00, 07.00, 07.00, 07.00, 07.00, 07.00, 07.00, 07.00, 07.00, 06.10, 06.09, 06.08, 06.07, 07.06, 07.05, 07.04, 07.03, 07.01, 07.00, 06.11 } for ( m = 0; m < 20; m += 1 ) { AMINST(st, dur4*4, dynPPPP*envTri, cpspch(pArrS[m]), 0.5+forwardR*6.5, 0.8, envFlat, waveSine, waveSine) // INST 1S <-- AMINST(st, dur4*4, dynPPPP*envTri, cpspch(pArrA[m]), 0.5+forwardR*6.5, 0.6, envFlat, waveSine, waveSine) // INST 1A <-- AMINST(st, dur4*4, dynPPPP*envTri, cpspch(pArrT[m]), 0.5+forwardR*6.5, 0.4, envFlat, waveSine, waveSine) // INST 1T <-- AMINST(st, dur4*4, dynPPPP*envTri, cpspch(pArrB[m]), 0.5+forwardR*6.5, 0.2, envFlat, waveSine, waveSine) // INST 1B <-- bus_config("VWAVE", "out0-1") VWAVE(st, dur4*4, 09.113+forwardR*0.11, dynPP*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6a <-- ("theremin" soprano) VWAVE(st, dur4*4, 08.11+forwardR*0.11, dynMP*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6a <-- ("theremin" soprano) VWAVE(st, dur4*4, pArrSub[m], dynMP*envHann*lfoFreqAmpR, sideL, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6b <-- (fixed pitches sub-bass) VWAVE(st, dur4*4, pArrSub[m]-01.00, dynMP*envHann*lfoFreqAmpR, sideL, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6b <-- (fixed pitches sub-bass) for ( q = 0; q < 4; q += 1 ) { variation2 = pickrand(0,0,1) if ( variation2 == 1 ) // extend first note of measure to 2 beats dArr2 = { 6, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } else dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } // by default (and set by [r16s] ) for ( s = 0; s < 4; s += 1 ) { r4s=s;r8s=s+(q%2)*4;r16s=s+q*4;r32s=s+q*4+(m%2)*16;r64s=s+q*4+m*16 counter = ( s + q*4 + m*16 ) / 351 oct2 = pickrand(0,1,2) oct3 = pickrand(0,1,2) oct4 = pickrand(0,1,2) env2Switch = pickrand(0,1,2) if ( env2Switch == 0 ) { dMod2 = 0.5 env2 = envPerc } else if ( env2Switch == 1 ) { dMod2 = 1.1 env2 = envTri } else { env2 = envRev dMod2 = 0.8 } vector2 = random() if ( dArr2[r16s] > 1 ) { // first beat has been extended. adjust envelope dMod2 = 1 env2 = envSharpRev } bus_config("VWAVE", "out0-1") VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrS[m]+oct2, dynP*env2*counter, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2a <-- (chords) VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrS[m]+oct2+random()*0.005, dynP*env2*counter, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrA[m]+oct3, dynP*env2*counter, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrA[m]+oct3+random()*0.005, dynP*env2*counter, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrT[m]+oct4, dynP*env2*counter, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrT[m]+oct4+random()*0.005, dynP*env2*counter, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrB[m]+oct4, dynP*env2*counter, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 5a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2, pArrB[m]+oct4+random()*0.005, dynP*env2*counter, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 5b <-- st += dur16 } // close s loop } // close q loop } // close m loop // 2-bar overlap with SWOOP AMINST(st, dur4*8, dynPPPP*envTri, cpspch(09.10), 0.5+forwardR*6.5, 0.8, envFlat, waveSine, waveSine) // INST 1S <-- AMINST(st, dur4*8, dynPPPP*envTri, cpspch(09.06), 0.5+forwardR*6.5, 0.6, envFlat, waveSine, waveSine) // INST 1A <-- AMINST(st, dur4*8, dynPPPP*envTri, cpspch(08.06), 0.5+forwardR*6.5, 0.4, envFlat, waveSine, waveSine) // INST 1T <-- AMINST(st, dur4*8, dynPPPP*envTri, cpspch(08.01), 0.5+forwardR*6.5, 0.2, envFlat, waveSine, waveSine) // INST 1B <-- bus_config("VWAVE", "out0-1") VWAVE(st, dur4*8, 09.113+forwardR*0.11, dynPP*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6a <-- ("theremin" soprano) VWAVE(st, dur4*8, 08.11+forwardR*0.11, dynMP*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6a <-- ("theremin" soprano) VWAVE(st, dur4*8, 06.10, dynMP*envHann*lfoFreqAmpR, sideL, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6b <-- (fixed pitches sub-bass) VWAVE(st, dur4*8, 06.10-01.00, dynMP*envHann*lfoFreqAmpR, sideL, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 6b <-- (fixed pitches sub-bass) // SWOOP pArr1 = { 07.06, 07.05, 07.04, 07.04 } // set by [q] pArr2 = { 06.06, 06.06, 06.07, 06.07 } pArr3 = { 06.10, 06.10, 06.10, 06.10 } dArr1 = { 1,0,1,0 } // set by [s] rtinput("MMBUF", "revRide"); STEREO(st+waitForRevRide, 0, 3, 1.2, 0, 1) // INST R <-- VWAVE(st, dur16*495, 4.05+envCurveUp*0.48, dynP*envCurveUpAmp*lfoL1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0a <-- VWAVE(st, dur16*495, 4.05+envCurveUp*0.48+sideL*0.002, dynP*envCurveUpAmp*lfoL1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0b <-- VWAVE(st, dur16*495, 5.05+envCurveUp*0.36, dynP*envCurveUpAmp*lfoL1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0c <-- VWAVE(st, dur16*495, 5.05+envCurveUp*0.36+sideL*0.002, dynP*envCurveUpAmp*lfoL1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0d <-- VWAVE(st, dur16*495, 8.05+envCurveDown*0.48, dynPPP*envCurveUpAmp*lfoR1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0e <-- VWAVE(st, dur16*495, 8.05+envCurveDown*0.48+sideR*0.003, dynPP*envCurveUpAmp*lfoR1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0f <-- VWAVE(st, dur16*495, 8.05+envCurveDown*0.36, dynPPPP*envCurveUpAmp*lfoR1, envCurveUp, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 0g <-- VWAVE(st, dur16*495, 8.05+envCurveDown*0.36+sideR*0.005, dynPPPP*envCurveUpAmp*lfoR1, envCurveUp, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 0h <-- for ( p = 0; p < 8; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase for ( q = 0; q < 4; q += 1 ) { // beats in a measure r4q=q;r8q=q+(m%2)*4;r16q=q+m*4;r32q=q+m*4+(p%2)*16;r64q=q+m*4+(p%4)*16 // definitions for rhythmic loops (e.g., r16q is a loop of 16 quarter notes) must be put here dArr1 = { 1,0,1,0 } // set by [h] if ( q == 3 ) { // randomly add 16ths on some beat four dSwitch1 = pickrand(0,0,1) if ( dSwitch1 == 1 ) dArr1 = { 1,1,1,1 } } st12 = st // synchronize triplet subdivision (below) to global beat for ( s = 0; s < 4; s += 1 ) { // 16th-note subdivision of beats r4s=s;r8s=s+(q%2)*4;r16s=s+q*4;r32s=s+q*4+(m%2)*16;r64s=s+q*4+m*16 counter = ( s + q*4 + m*16 + p*64 ) / 511 envSwitch1 = 0 // by default if ( s == 2 && ( q == 1 || q == 2 ) ) // only allow hiccuping sound on offbeats of 2 and 3 envSwitch1 = pickrand(0,0,1) if ( envSwitch1 == 0 ) { // controls amplitude envelope env1 = envPerc dMod1 = 1.8 } else { env1 = envRev dMod1 = 1.2 } if ( dSwitch1 == 1 && q == 3 ) { // controls upper octave vector envelope dMod1 = 0.5 vEnv = counter } else { vEnvSwitch1 = pickrand(0,1) if ( vEnvSwitch1 == 0) vEnv = envDown else vEnv = envUp } if ( p == 7 && m == 2 ) { // straight 16ths on second-to-last measure of section dArr1 = { 1,1,1,1 } dMod1 = 0.5 vEnv = counter } if ( p == 7 && m == 3 ) // mute last measure of section dArr1 = { 0,0,0,0 } VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m], dynPPP*env1+dynPP*env1*counter*counter, counter, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 1a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m]+0.002, dynPPP*env1+dynPP*env1*counter*counter, counter, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 1b <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m]+1.001, dynPPPP*env1+dynPPP*env1*counter, vEnv, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 1c <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr1[m]+1.003, dynPPPP*env1+dynPPP*env1*counter, vEnv, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 1d <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m], dynPPP*env1+dynPP*env1*counter*counter, counter, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 2a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m]+0.002, dynPPP*env1+dynPP*env1*counter*counter, counter, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 2b <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m]+1.001, dynPPPP*env1+dynPPP*env1*counter, vEnv, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 2c <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr2[m]+1.003, dynPPPP*env1+dynPPP*env1*counter, vEnv, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 2d <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr3[m], dynPPP*env1+dynPP*env1*counter*counter, counter, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 3a <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr3[m]+0.002, dynPPP*env1+dynPP*env1*counter*counter, counter, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 3b <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr3[m]+1.001, dynPPPP*env1+dynPPP*env1*counter, vEnv, 1, waveA, waveE, waveI, waveGna, waveGneh) // INST 3c <-- VWAVE(st, dur16*dArr1[s]*dMod1, pArr3[m]+1.003, dynPPPP*env1+dynPPP*env1*counter, vEnv, 0, waveA, waveE, waveI, waveGna, waveGneh) // INST 3d <-- if ( ( p > 3 && (m%2)==0 && q == 0 && s == 0 ) || ( p == 7 && m == 2 ) ) { // on downbeats of every 2 bars in second half + straight 16ths in penultimate bar bus_config("STEREO", "in0-1", "out4-5") rtinput("MMBUF", "wetKick"); STEREO(st, 0, 1, 0.6, 0, 1) // INST K <-- } st += dur16 } // close s loop for ( t = 0; t < 3; t += 1 ) { // triplet subdivision of beat r3t=t;r6t=t+(q%2)*3;r12t=t+q*3;r24t=t+q*3+(m%2)*12;r48t=t+q*3+m*12 st12 += dur12 } // close t loop } // close q loop } // close m loop } // close p loop st -= dur4*4 // 1-bar overlap // FILL MAXMESSAGE(st, 0) // disable groove~ during fill num_bells = pickrand(1,2,3,4) // bell fill will happen 1, 2, 3, or 4 times, followed by piano cadence bus_config("MMODALBAR", "out0-1") for ( m = 0; m < num_bells+1; m += 1 ) { // + 1 for that piano cadence for ( q = 0; q < 4; q += 1 ) { if ( m < num_bells ) dArr0 = { 0, 0, 2, 0 } // set by [q] else dArr0 = { 0, 0, 0, 0 } // no bells in last measure MMODALBAR(st, dur4*dArr0[q], 40000, cpspch(10.06), 0.5, 0.8, 1, 0, envPerc) // INST 0a <-- (bing bong beat 3) MMODALBAR(st, dur4*dArr0[q], 40000, cpspch(10.063), 0.3, 0.5, 1, 1, envPerc) // INST 0b <-- MMODALBAR(st, dur4*dArr0[q], 40000, cpspch(8.06), 0.5, 0.8, 1, 0, envPerc) // INST 0c <-- MMODALBAR(st, dur4*dArr0[q], 40000, cpspch(8.063), 0.3, 0.5, 1, 1, envPerc) // INST 0d <-- MMODALBAR(st+dur4, dur4*dArr0[q], 40000, cpspch(9.06), 0.5, 0.8, 1, 0, envPerc) // INST 0e <-- (beat 4) MMODALBAR(st+dur4, dur4*dArr0[q], 40000, cpspch(9.063), 0.3, 0.5, 1, 1, envPerc) // INST 0f <-- MMODALBAR(st+dur4, dur4*dArr0[q], 40000, cpspch(7.06), 0.5, 0.8, 1, 0, envPerc) // INST 0g <-- MMODALBAR(st+dur4, dur4*dArr0[q], 40000, cpspch(7.063), 0.3, 0.5, 1, 1, envPerc) // INST 0h <-- if ( m == num_bells && q == 2 ) { bus_config("STEREO", "in0-1", "out0-1") rtinput("MMBUF", "cadence"); STEREO(st, 0, 20, 3, 0, 1) // INST C <-- cadence } st += dur4 } // close q loop } // close m loop MAXMESSAGE(st, 1) // enable groove~ // DROP' pArr2 = { 06.05, 06.08, 06.07, 06.04, 06.05, 06.08, 06.07, 06.06 } // set by [r8m] pArr3 = { 06.01, 06.04, 06.03, 06.00, 06.01, 06.04, 06.03, 06.02 } pArr4 = { 07.05, 07.08, 07.07, 07.04, 07.05, 07.08, 07.07, 07.06 } for ( p = 0; p < 12; p += 1 ) { // phrases in a section if ( p == 3 ) { // bassline fill 1 dArr1 = { 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, -0, 0, 0, 0, 0, 0, 0, 0 } // quintuplet interjection at - pArr1 = { 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.07, 00.00, 00.00, 00.00, 05.04, 00.00, 00.00, 00.00, 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, -00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00 } // set by [r32q] } else if ( p == 7 ) { // bassline fill 1 dArr1 = { 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 2, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, -0, 0, 0, 0 } // triplet interjection at - pArr1 = { 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.07, 00.00, 00.00, 00.00, 05.04, 00.00, 00.00, 00.00, 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.07, 00.00, 00.00, 00.00, -00.00, 00.00, 00.00, 00.00 } // set by [r32q] } else { // default dArr1 = { 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 4, 0, 0, 0, 2, 0, 1, 1 } // set by [r32q] pArr1 = { 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.07, 00.00, 00.00, 00.00, 05.04, 00.00, 00.00, 00.00, 05.05, 00.00, 00.00, 00.00, 05.08, 00.00, 00.00, 00.00, 05.07, 00.00, 00.00, 00.00, 05.06, 00.00, 06.06, 05.06 } } for ( m = 0; m < 4; m += 1 ) { // measures in a phrase r8m=m+(p%2)*4 if ( p == 3 && m == 2 ) { // fill m.1 MAXMESSAGE(st, 0) // disable groove~ during fill MAXMESSAGE(st+dur4*8, 1) // and enable after fill dArrR = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } // set by [r16s] } else if ( p == 3 && m == 3 ) { // fill m.2 dArrR = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } // set by [r16s] } else dArrR = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } if ( p == 0 && m == 0 ) { // guaranteed straight 16ths on first phrase dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r32s] } else if ( p == 3 && (m == 2 || m == 3) ) { // fill dArrK = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1 } } else { // default is randomized kickVar = pickrand(0,1,2) if ( kickVar == 0 ) { dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } else if ( kickVar == 1 ) { dArrK = { 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } else { dArrK = { 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } } if ( p < 8 ) gap1a = gap1c = gap1e = gap1g = gap2 = gapS = gapK = 1 // will allow randomized 1-bar gaps in texture in last section (off by default) else if ( p == 8 && m == 0 ) { // guaranteed to be bass only in 1st bar of last section gap1a = gap1c = gap1e = gap1g = 1 gap2 = gapS = gapK = 0 } else if ( p == 11 && m == 3 ) { // last measure not random texture gap1e = gap1g = gapS = gapK = 1 gap1a = gap1c = gap2 = 0 } else { gap1a = pickrand(0,1,1) // otherwise value (calculated randomly once per bar) of 0 puts 1-bar gap in that instrument gap1c = pickrand(0,1,1) gap1e = pickrand(0,1,1) gap1g = pickrand(0,1,1) gap2 = pickrand(0,1,1) gapS = pickrand(0,1,1) gapK = pickrand(0,1,1) } if ( p > 3 && p < 8 ) { // add theremin bus_config("VWAVE", "out0-1") VWAVE(st, dur4*4, 10.04+forwardR*0.04, dynF*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 5a <-- ("theremin") VWAVE(st, dur4*4, 11.04+forwardR*0.04, dynMF*envTri*lfoFreqAmpL, sideR, 0.5, waveA, waveE, waveI, waveO, waveU ) // INST 5b <-- ("theremin") } else if ( p > 7 ) { // add fading in slow line M3 below main pitches pArr6 = { 08.01, 08.04, 08.03, 08.00, 08.01, 08.04, 08.03, 08.02 } // set by [r8m] bus_config("VWAVE", "out0-1") VWAVE(st, dur4*4, pArr6[r8m], dynF*envTri*lfoFreqAmpL*((m+(p-8)*4)/15), pullL, 0.4, waveA, waveE, waveI, waveO, waveU ) // INST 6a <-- fade-in (down M3, pull on vector) VWAVE(st, dur4*4, pArr6[r8m]+01.001, dynMF*envTri*lfoFreqAmpL*((m+(p-8)*4)/15), pullR, 0.6, waveA, waveE, waveI, waveO, waveU ) // INST 6b <-- } for ( q = 0; q < 4; q += 1 ) { // quarter notes in a measure r4q=q;r8q=q+(m%2)*4;r16q=q+m*4;r32q=q+m*4+(p%2)*16;r64q=q+m*4+(p%4)*16 vEnvSwitch1 = pickrand(0,1,2,3) if ( vEnvSwitch1 == 0 ) vEnv1 = envUp else if ( vEnvSwitch1 == 1 ) vEnv1 = envUp else if ( vEnvSwitch1 == 2 ) vEnv1 = envDown else vEnv1 = env2Tri dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } // by default (and set by [r16s] ) if ( q == 0 ) { // only on beat 1 variation2 = pickrand(0,0,1) if ( variation2 == 1 ) // extend first note of measure to 2 beats dArr2 = { 6, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } } octMod1 = 0 // off by default if ( p > 3 && dArr1[r32q] == 4 ) { octModSwitch = pickrand(0,0,0,1) if ( octModSwitch == 1 ) octMod1 = envOctMod // gliss bass up octave and back } bus_config("VWAVE", "out2-3") VWAVE(st, dur4*dArr1[r32q]*gap1a, pArr1[r32q]+octMod1*0.12, dynFF*envPerc, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass) VWAVE(st, dur4*dArr1[r32q]*gap1a, pArr1[r32q]+octMod1*0.12+0.002, dynFF*envPerc, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st, dur4*dArr1[r32q]*gap1c, pArr1[r32q]+octMod1*0.12+1.001+envTri*0.01*forwardL, dynMP*envRev, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st, dur4*dArr1[r32q]*gap1c, pArr1[r32q]+octMod1*0.12+1.003+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st, dur4*dArr1[r32q]*gap1e, pArr1[r32q]+octMod1*0.12+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st, dur4*dArr1[r32q]*gap1e, pArr1[r32q]+octMod1*0.12+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st, dur4*dArr1[r32q]*gap1g, pArr1[r32q]+octMod1*0.12+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st, dur4*dArr1[r32q]*gap1g, pArr1[r32q]+octMod1*0.12+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- st12 = st5 = st // synchronize triplet and quintuplet subdivisions (below) to global beat for ( s = 0; s < 4; s += 1 ) { // 16th-note subdivision of beats r4s=s;r8s=s+(q%2)*4;r16s=s+q*4;r32s=s+q*4+(m%2)*16;r64s=s+q*4+m*16 counter = ( s + q*4 + m*16 + p*64 ) / 767 oct2 = pickrand(0,1,2) oct3 = pickrand(0,1,2) oct4 = pickrand(0,1,2) env2Switch = pickrand(0,1,2) if ( env2Switch == 0 ) { dMod2 = 0.5 env2 = envPerc } else if ( env2Switch == 1 ) { dMod2 = 1.1 env2 = envTri } else { env2 = envRev dMod2 = 0.8 } vector2 = random() if ( dArr2[r16s] > 1 ) { // first beat has been extended. adjust envelope dMod2 = 1 env2 = envSharpRev } mute2 = 1 if ( (p == 3 && m > 1) || (p == 7 && m == 3) ) // mute on fill mute2 = 0 bus_config("VWAVE", "out0-1") VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2*gap2, pArr2[r8m]+oct2, dynPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2a <-- (chords) VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2*gap2, pArr2[r8m]+oct2+random()*0.005, dynPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 2b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2*gap2, pArr3[r8m]+oct3, dynMP*env2*counter, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2*gap2, pArr3[r8m]+oct3+random()*0.005, dynMP*env2*counter, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3b <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2*gap2, pArr4[r8m]+oct4, dynPP*env2, vector2, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4a <-- VWAVE(st, dur16*dArr2[r16s]*dMod2*mute2*gap2, pArr4[r8m]+oct4+random()*0.005, dynPP*env2, vector2, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 4b <-- if ( p < 8 ) { // switch to drums from canon in last section bus_config("STEREO", "in0-1", "out4-5") rtinput("MMBUF", "highSnare"); STEREO(st, 0, dArrR[r16s], 0.6, 0, 1) // INST R <-- (called R because it was first a ride cymbal) rtinput("MMBUF", "dirtyKick"); STEREO(st, 0, dArrK[r32s], 0.6, 0, 1) // INST K <-- } else { dArrS = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } dArrK = { 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } bus_config("STEREO", "in0-1", "out4-5") rtinput("MMBUF", "normalSnare"); STEREO(st, 0, dArrS[r16s]*gapS, 0.6, 0, 1) // INST S <-- snare rtinput("MMBUF", "splashyKick"); STEREO(st, 0, dArrK[r16s]*gapK, 0.6, 0, 1) // INST K <-- kick } st += dur16 } // close s loop for ( t = 0; t < 3; t += 1 ) { // triplet subdivision of beat r3t=t;r6t=t+(q%2)*3;r12t=t+q*3;r24t=t+q*3+(m%2)*12;r48t=t+q*3+m*12 if ( p == 7 && m == 3 ) { // second fill dArr1T = { 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0 } // set by [r12t] pArr1T = { 05.06, 00.00, 05.06, 00.00, 06.06, 00.00, 05.06, 00.00, 05.06, 00.00, 6.06, 00.00 } // set by [r12t] vEnv1 = envUp bus_config("VWAVE", "out2-3") VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t], dynFF*envPerc, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass) VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+0.002, dynFF*envPerc, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+1.001+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+1.003+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st12, dur12*dArr1T[r12t], pArr1T[r12t]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- } st12 += dur12 } // close t loop if ( p == 3 && m > 1 && q == 0 ) { // only triggered on fill for ( f = 0; f < 5; f += 1 ) { // quintuplet subdivision of beat if ( m == 2 ) // first fill pArr1F = { 05.07, 05.07, 06.07, 05.07, 05.07 } // pitch material for first measure else pArr1F = { 05.06, 05.06, 06.06, 05.06, 05.06 } // m. 2 vEnv1 = envUp bus_config("VWAVE", "out2-3") VWAVE(st5, dur8, pArr1F[f], dynFF*envPerc, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass) VWAVE(st5, dur8, pArr1F[f]+0.002, dynFF*envPerc, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st5, dur8, pArr1F[f]+1.001+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st5, dur8, pArr1F[f]+1.003+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st5, dur8, pArr1F[f]+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st5, dur8, pArr1F[f]+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st5, dur8, pArr1F[f]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st5, dur8, pArr1F[f]+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- st5 += dur4*4/5 } // close f loop } } // close q loop } // close m loop } // close p loop // CODA for ( p = 0; p < 2; p += 1 ) { for ( m = 0; m < 4; m += 1 ) { // measures in a phrase r8m=m+(p%2)*4 if ( p == 1 && m == 3 ) dMod6 = 8 // double rhythmic value of last note else dMod6 = 4 // normally one measure long pArr6 = { 08.01, 08.04, 08.03, 08.00, 08.01, 08.04, 08.03, 08.02 } // set by [r8m] bus_config("VWAVE", "out0-1") VWAVE(st, dur4*dMod6, pArr6[r8m], dynF*envHann*lfoFreqAmpL*pullL, pullL, 0.4, waveA, waveE, waveI, waveO, waveU ) // INST 6a <-- VWAVE(st, dur4*dMod6, pArr6[r8m]+01.001, dynMF*envHann*lfoFreqAmpL*pullR, pullR, 0.6, waveA, waveE, waveI, waveO, waveU ) // INST 6b <-- st += dur4*4 } // close m loop } // close p loop