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 = 80 // 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 ) envFade = maketable("line", 1000, 0,0, 5,1, 100,0 ) envLongFade = maketable("curve", 1000, 0,0,0, 5,1,-5, 100,0 ) envUp = maketable("line", 1000, 0,0, 1,1 ) envHalfUp = maketable("line", 1000, 0,0, 1,0, 2,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 ) envSwoop = maketable("curve", 1000, 0,0,0, 500,0,1, 999,1 ) // 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 ) waveBachC1 = maketable("wave3", 1000, 1,0.716272,0, 2,1.000000,0, 3,0.057700,0, 4,0.821584,0, 5,0.133527,0, 6,0.339026,0, 7,0.043224,0, 8,0.378311,0, 9,0.015617,0, 11,0.208122,0, 12,0.031667,0, 13,0.127467,0, 14,0.073500,0, 15,0.127323,0, 16,0.034009,0, 17,0.316307,0, 18,0.044623,0, 19,0.127604,0, 20,0.068687,0, 21,0.069790,0, 22,0.049390,0, 23,0.040715,0, 24,0.026383,0, 25,0.015959,0, 26,0.031796,0, 27,0.066064,0, 28,0.029303,0, 29,0.034990,0, 30,0.057442,0, 31,0.010325,0, 32,0.019289,0, 33,0.013929,0) waveBachC2 = maketable("wave3", 1000, 1,0.956580,0, 2,1.000000,0, 3,0.164718,0, 4,0.174879,0, 5,0.084874,0, 6,0.097082,0, 7,0.180957,0, 8,0.192282,0, 9,0.032071,0, 10,0.106455,0, 11,0.032082,0, 12,0.089975,0, 13,0.024051,0, 14,0.109549,0, 15,0.040360,0, 16,0.190723,0, 17,0.006742,0, 18,0.027582,0, 19,0.021680,0, 20,0.059440,0, 21,0.027158,0, 22,0.022204,0, 23,0.006295,0, 24,0.006695,0, 25,0.010449,0, 26,0.027570,0, 27,0.002906,0, 28,0.031153,0, 29,0.008460,0, 30,0.028440,0, 31,0.005689,0, 32,0.004507,0) waveBachCG2 = maketable("wave3", 1000, 1,0.771031,0, 2,0.820874,0, 3,1.000000,0, 4,0.450498,0, 5,0.086630,0, 6,0.659385,0, 7,0.124122,0, 8,0.351184,0, 9,0.249694,0, 10,0.110070,0, 11,0.264098,0, 12,0.262544,0, 13,0.124308,0, 14,0.101034,0, 15,0.121075,0, 16,0.429773,0, 17,0.072931,0, 18,0.018549,0, 19,0.174421,0, 20,0.084496,0, 21,0.078071,0, 22,0.251995,0, 23,0.073221,0, 25,0.294564,0, 26,0.026756,0, 27,0.018798,0, 28,0.066797,0, 29,0.067563,0, 31,0.083273,0, 32,0.024455,0, 33,0.012041,0, 34,0.013906,0, 35,0.024683,0, 36,0.014798,0, 37,0.092040,0, 38,0.007875,0, 39,0.019709,0, 40,0.018777,0, 41,0.008497,0, 42,0.005865,0, 43,0.011295,0, 44,0.006839,0, 45,0.007772,0, 46,0.039046,0, 47,0.004062,0, 48,0.004062,0, 49,0.017803,0, 50,0.003192,0, 52,0.002819,0, 54,0.003523,0, 55,0.003005,0, 56,0.004601,0, 57,0.007627,0, 58,0.002508,0, 59,0.001658,0, 60,0.003751,0, 61,0.006508,0, 62,0.016269,0, 63,0.003606,0, 64,0.003834,0, 65,0.006342,0, 66,0.001865,0, 67,0.001658,0, 68,0.003482,0) waveBachCmaj = maketable("wave3", 1000, 1,0.618192,0, 2,0.827942,0, 3,0.445414,0, 4,1.000000,0, 5,0.216809,0, 6,0.601771,0, 7,0.105825,0, 8,0.456770,0, 9,0.174338,0, 10,0.123179,0, 12,0.620901,0, 13,0.138493,0, 14,0.252426,0, 15,0.325495,0, 16,0.847683,0, 17,0.092346,0, 18,0.620133,0, 19,0.054249,0, 20,0.237857,0, 21,0.108674,0, 22,0.075004,0, 23,0.029543,0, 24,0.866063,0, 25,0.141260,0, 26,0.095225,0, 27,0.037739,0, 28,0.243491,0, 29,0.017460,0, 30,0.294509,0, 32,0.172931,0, 33,0.032744,0, 34,0.043626,0, 35,0.089743,0, 36,0.299006,0, 37,0.016979,0, 38,0.042734,0, 39,0.044265,0, 40,0.329393,0, 42,0.020174,0, 43,0.008038,0, 44,0.019465,0, 45,0.066561,0, 46,0.015027,0, 48,0.461144,0, 50,0.055985,0, 51,0.024032,0, 52,0.020321,0, 54,0.029561,0, 56,0.115657,0, 57,0.005669,0, 59,0.007581,0, 60,0.207839,0, 61,0.007821,0, 62,0.009246,0, 63,0.012629,0, 64,0.297159,0, 65,0.035300,0, 67,0.007780,0, 68,0.014540,0, 69,0.018128,0, 70,0.068801,0, 72,0.062586,0, 73,0.007200,0, 75,0.006267,0, 76,0.021616,0, 78,0.021294,0, 80,0.124627,0, 83,0.009656,0, 84,0.022502,0, 86,0.019893,0, 87,0.001812,0, 88,0.022977,0, 89,0.005318,0, 90,0.055697,0, 92,0.010723,0, 94,0.006150,0, 96,0.084578,0, 97,0.004708,0, 99,0.005411,0, 100,0.012353,0, 102,0.007024,0, 103,0.004931,0, 104,0.025046,0, 105,0.003025,0, 107,0.007534,0, 109,0.002146,0, 111,0.005406,0, 112,0.010747,0, 113,0.001436,0, 115,0.002380,0, 116,0.004743,0, 117,0.001817,0, 119,0.001747,0, 120,0.036397,0, 121,0.004919,0, 123,0.005071,0, 125,0.003465,0, 127,0.177059,0, 129,0.005816,0, 130,0.003125,0) waveBachCmin = maketable("wave3", 1000, 1,0.113596,0, 2,0.096073,0, 3,0.174775,0, 6,0.080855,0, 8,0.112290,0, 12,0.068788,0, 16,0.262317,0, 20,0.299285,0, 21,0.031666,0, 25,0.198678,0, 29,0.012835,0, 33,0.561679,0, 36,0.026516,0, 39,0.933210,0, 42,0.045807,0, 49,0.818538,0, 52,0.043117,0, 54,0.009761,0, 59,0.019522,0, 61,0.025594,0, 63,0.049189,0, 65,0.236492,0, 67,0.189993,0, 71,0.012144,0, 74,0.048190,0, 78,0.364077,0, 81,0.023672,0, 87,0.009761,0, 89,0.003459,0, 91,0.017754,0, 95,0.028284,0) waveBachG1 = maketable("wave3", 1000, 1,0.942364,0, 2,0.515670,0, 3,0.369457,0, 4,1.000000,0, 5,0.114058,0, 6,0.669328,0, 7,0.503165,0, 8,0.256059,0, 9,0.129968,0, 10,0.109561,0, 11,0.176387,0, 12,0.300987,0, 13,0.095574,0, 14,0.111680,0, 15,0.127435,0, 16,0.071159,0, 18,0.036089,0, 19,0.075778,0, 20,0.029474,0, 21,0.074263,0, 22,0.016309,0, 23,0.061090,0, 24,0.011633,0, 25,0.097106,0, 26,0.014321,0, 27,0.025914,0, 29,0.018468,0, 30,0.007250,0, 31,0.081619,0, 32,0.006012,0, 33,0.041881,0, 35,0.063803,0) waveBachG2 = maketable("wave3", 1000, 1,1.000000,0, 2,0.732535,0, 3,0.154319,0, 4,0.777765,0, 5,0.303915,0, 6,0.137581,0, 7,0.177671,0, 8,0.418014,0, 9,0.122435,0, 10,0.144848,0, 11,0.225953,0, 12,0.070317,0, 13,0.044551,0, 14,0.260942,0, 15,0.033541,0, 16,0.445788,0, 17,0.003131,0, 18,0.022634,0, 19,0.016842,0, 20,0.076187,0, 21,0.009341,0, 22,0.045256,0, 23,0.033045,0, 24,0.038368,0, 25,0.012850,0, 26,0.036672,0, 27,0.009941,0, 28,0.014089,0, 29,0.004827,0, 30,0.039268,0, 31,0.003666,0, 32,0.016594,0) waveOrganInharm = maketable("wave3", 1000, 1.000,0.131367,0, 1.530,0.013376,0, 2.215,1.000000,0, 3.716,0.109732,0, 4.432,0.086594,0, 5.094,0.007702,0, 6.095,0.002679,0, 6.698,0.037853,0, 7.480,0.130564,0, 8.698,0.002614,0, 9.976,0.181136,0, 11.255,0.010404,0, 12.167,0.002735,0, 13.330,0.052966,0, 14.290,0.000779,0, 15.588,0.005962,0, 16.802,0.000287,0, 18.671,0.003159,0, 19.881,0.003280,0, 21.179,0.000436,0, 22.413,0.001108,0, 23.498,0.000287,0, 24.277,0.000344,0, 26.246,0.002140,0, 28.097,0.000246,0, 28.991,0.000462,0, 29.858,0.004045,0, 30.597,0.000326,0, 32.452,0.000362,0, 33.648,0.001387,0, 34.665,0.000338,0, 35.749,0.000886,0, 36.451,0.000557,0, 38.643,0.000391,0, 39.927,0.000273,0, 42.238,0.000827,0, 44.071,0.000308,0, 45.109,0.000249,0, 47.276,0.001046,0, 48.521,0.001031,0, 49.767,0.001609,0, 51.000,0.000255,0, 52.486,0.000255,0, 54.498,0.000264,0, 55.405,0.000243,0, 57.995,0.000258,0, 59.745,0.000584,0, 61.613,0.000190,0, 63.201,0.000658,0, 66.021,0.000255,0, 67.627,0.000219,0, 69.927,0.000655,0, 71.171,0.000370,0, 73.128,0.000157,0, 79.118,0.000110,0, 80.337,0.000116,0, 88.535,0.000133,0, 90.655,0.000107,0, 97.807,0.000130,0, 146.661,0.000228,0) waveOrganHarm = maketable("wave3", 1000, 1,0.131367,0, 2,1.000000,0, 4,0.109732,0, 5,0.007702,0, 6,0.002679,0, 7,0.130564,0, 9,0.002614,0, 10,0.181136,0, 11,0.010404,0, 12,0.002735,0, 13,0.052966,0, 14,0.000779,0, 16,0.005962,0, 17,0.000287,0, 19,0.003159,0, 20,0.003280,0, 21,0.000436,0, 22,0.001108,0, 23,0.000287,0, 24,0.000344,0, 26,0.002140,0, 28,0.000246,0, 29,0.000462,0, 30,0.004045,0, 31,0.000326,0, 32,0.000362,0, 34,0.001387,0, 35,0.000338,0, 36,0.000886,0, 39,0.000391,0, 40,0.000273,0, 42,0.000827,0, 44,0.000308,0, 45,0.000249,0, 47,0.001046,0, 49,0.001031,0, 50,0.001609,0, 51,0.000255,0, 52,0.000255,0, 54,0.000264,0, 55,0.000243,0, 58,0.000258,0, 60,0.000584,0, 62,0.000190,0, 63,0.000658,0, 66,0.000255,0, 68,0.000219,0, 70,0.000655,0, 71,0.000370,0, 73,0.000157,0, 79,0.000110,0, 80,0.000116,0, 89,0.000133,0, 91,0.000107,0, 98,0.000130,0, 147,0.000228,0) waveOrganGrinder = maketable("wave3", 1000, 1,0.207474,0, 2,1.000000,0, 3,0.686530,0, 4,0.016429,0, 5,0.007605,0, 6,0.019165,0, 7,0.003728,0, 8,0.023688,0, 9,0.001344,0, 10,0.001007,0, 11,0.001661,0, 12,0.001261,0, 13,0.001841,0, 14,0.001454,0, 15,0.000772,0, 16,0.000261,0, 17,0.000429,0, 18,0.000624,0, 19,0.000523,0, 20,0.000546,0, 21,0.000552,0, 22,0.000650,0, 23,0.000505,0, 24,0.000682,0, 25,0.000353,0, 26,0.000397,0, 27,0.000443,0, 28,0.000337,0, 29,0.000327,0, 30,0.000361,0, 31,0.000160,0, 32,0.000166,0, 33,0.000255,0, 34,0.000205,0, 35,0.000120,0, 36,0.000223,0, 37,0.000187,0, 38,0.000275,0, 39,0.000130,0, 40,0.000090,0, 41,0.000148,0, 42,0.000191,0, 43,0.000168,0, 44,0.000096,0, 45,0.000154,0, 46,0.000205,0, 47,0.000142,0, 48,0.000140,0, 49,0.000180,0, 50,0.000174,0, 51,0.000213,0, 52,0.000265,0, 53,0.000106,0, 54,0.000072,0, 55,0.000195,0, 56,0.000158,0, 57,0.000279,0, 58,0.000112,0, 59,0.000215,0, 60,0.000253,0, 61,0.000245,0, 62,0.000209,0, 63,0.000333,0, 64,0.000261,0, 65,0.000263,0, 66,0.000305,0, 67,0.000265,0, 68,0.000114,0, 69,0.000156,0, 70,0.000197,0, 71,0.000140,0, 72,0.000233,0, 73,0.000255,0, 74,0.000205,0, 75,0.000128,0, 76,0.000209,0, 77,0.000187,0, 78,0.000309,0, 79,0.000164,0, 80,0.000090,0, 81,0.000754,0, 82,0.000150,0, 83,0.000152,0, 84,0.000154,0, 85,0.000168,0, 86,0.000219,0, 88,0.000080,0, 89,0.000108,0, 91,0.000221,0, 92,0.000116,0) 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) 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) // 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 // SCORE: tempo = 80 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo // INTRO dArr1 = { 9, 0, 9, 0 } // set by [m] pArr1 = { 08.02, 00.00, 08.00, 00.00 } // set by [m] vArr1a = { envUp, envDown, envTri, envRev }; len_vArr1a = len(vArr1a) // randomly selects vEnv1a vArr1b = { envUp, envDown, envTri, envRev }; len_vArr1b = len(vArr1b) // randomly selects vEnv1b dArr2 = { 5, 9, 0, 5 } pArr2 = { 08.07, 08.05, 00.00, 08.04 } vArr2 = { envUp, envDown, envTri, envRev }; len_vArr2 = len(vArr2) // randomly selects vEnv2 dArr3 = { 9, 0, 5, 5 } pArr3 = { 09.10, 00.00, 09.09, 09.07 } dArr4 = { 2, 0, 2, 0, 0, 3, 0, 0, 2, 0, 0, 0, 0, 0, 2, 0 } // set by [r16s] pArr4 = { 05.07, 05.10, 05.05, 06.00 } // set by [m] wArr4 = { waveSine, waveBachC1, waveBachG1, waveBachG2 }; len_wArr4 = len(wArr4) // randomly selects wave4 - NOTE THAT INST 4 WAS DELETED AND wave4 APPLIES TO INST 7/8/9 dArr5 = { 3, 0, 0, 3, 0, 0, 3, 0, 0, 3, 0, 0, 2, 0, 0, 1 } // set by [r16s] vArr5 = { envUp, envDown, envTri, envRev }; len_vArr5 = len(vArr5) // randomly selects vEnv5 dArr6 = { 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 2, 0 } // set by [r16s] pArr6a = { 08.07, 08.05, 08.05, 08.04 } // set by [m] vArr6 = { envUp, envDown }; len_vArr6 = len(vArr6) pArr6b = { 08.02, 08.02, 08.00, 08.00 } pArr6c = { 07.10, 07.10, 07.09, 07.07 } MAXMESSAGE(st, 20, 30) // sets parameters for teeth~ for ( p = 0; p < 8; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase vEnv1a = vArr1a[trand(len_vArr1a)] vEnv1b = vArr1b[trand(len_vArr1b)] vEnv2 = vArr2[trand(len_vArr2)] if ( p == 7 ) { dArr1 = { 9, 0, 8, 0 } // set by [m] dArr2 = { 5, 9, 0, 4 } dArr3 = { 9, 0, 5, 4 } } bus_config("VWAVE", "out2-3") VWAVE(st, dur4*dArr1[m], pArr1[m], dynPPP*envHann*(1-pullL)*(1-forwardR), vEnv1a, 0, waveBachC2, waveBachCG2) // INST 1a <-- opening long tones ( D and C ) VWAVE(st, dur4*dArr1[m], pArr1[m], dynPPP*envHann*(1-pullR)*(1-forwardR), vEnv1b, 1, waveBachC2, waveBachCG2) // INST 1b <-- VWAVE(st, dur4*dArr1[m], pArr1[m]+01.00, dynPPPP*envHann*(1-pullL)*forwardR, vEnv1a, 0, waveBachC2, waveBachCG2) // INST 1c <-- VWAVE(st, dur4*dArr1[m], pArr1[m]+01.00, dynPPPP*envHann*(1-pullR)*forwardR, vEnv1b, 1, waveBachC2, waveBachCG2) // INST 1d <-- VWAVE(st, dur4*dArr2[m], pArr2[m], dynPPP*envHann*pullL, vEnv2, sideL, waveTri17, waveBachC2) // INST 2 <-- VWAVE(st, dur4*dArr3[m], pArr3[m], dynPPP*envHann*pullR, vEnv2, sideR, waveTri17, waveBachC2) // INST 3 <-- NB: THERE IS NO INST 4 - IT WAS DELETED 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 wave4 = wArr4[trand(len_wArr4)] if ( p == 0 && m < 2 ) { mute5 = 0 // always muted mute6 = 0 mute7 = 0 } else if ( p == 0 ) { mute5 = pickrand(0,0,0,0,0,0,0,1) // weighted probability that INST 5 will sound mute6 = pickrand(0,0,0,0,0,0,0,1) mute7 = pickrand(0,0,0,0,0,0,0,1) } else if ( p == 1 ) { mute5 = pickrand(0,0,0,0,0,0,1) mute6 = pickrand(0,0,0,0,0,0,1) mute7 = pickrand(0,0,0,0,0,0,1) } else if ( p == 2 ) { mute5 = pickrand(0,0,0,0,0,1) mute6 = pickrand(0,0,0,0,0,1) mute7 = pickrand(0,0,0,0,0,1) } else if ( p == 3 ) { mute5 = pickrand(0,0,0,0,1) mute6 = pickrand(0,0,0,0,1) mute7 = pickrand(0,0,0,0,1) } else if ( p == 4 ) { mute5 = pickrand(0,0,0,1) mute6 = pickrand(0,0,0,1) mute7 = pickrand(0,0,0,1) } else if ( p == 7 && m == 3 ) { mute5 = mute6 = mute7 = 0 } else { mute5 = pickrand(0,0,1) mute6 = pickrand(0,0,1) mute7 = pickrand(0,0,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 tempo = 80 + counter*80 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo vEnv5 = vArr5[trand(len_vArr5)] bus_config("VWAVE", "out0-1") VWAVE(st, dur16*dArr5[r16s]*0.9*mute5, pArr4[m]+3, dynP*envSharpRev, vEnv5, 0, waveBachC1, waveOrganGrinder, waveBachCG2) // INST 5a <-- VWAVE(st, dur16*dArr5[r16s]*0.9*mute5, pArr4[m]+3.002, dynP*envSharpRev, vEnv5, 1, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 5b <-- vEnv6 = vArr6[trand(len_vArr6)] VWAVE(st, dur16*dArr6[r16s]*mute6, pArr6a[m], dynP*envSharpRev, vEnv6, 0.5, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 6a <-- VWAVE(st, dur16*dArr6[r16s]*mute6, pArr6b[m], dynP*envSharpRev, vEnv6, 0.5, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 6b <-- VWAVE(st, dur16*dArr6[r16s]*mute6, pArr6c[m], dynP*envSharpRev, vEnv6, 0.5, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 6c <-- oct7 = pickrand(0,1,2) mod7 = random()*0.003 FMINST(st, dur16*0.8*mute7, dynPP*envPerc*counter, pArr6a[m]+oct7, pArr6a[m]+oct7, 0, 1, random(), wave4, envUp) // INST 7 <-- sparkles oct8 = pickrand(0,1,2) mod8 = random()*0.003 FMINST(st, dur16*0.8*mute7, dynPP*envPerc*counter, pArr6b[m]+oct8, pArr6b[m]+oct8, 0, 1, random(), wave4, envUp) // INST 8 oct9 = pickrand(0,1,2) mod9 = random()*0.003 FMINST(st, dur16*0.8*mute7, dynPP*envPerc*counter, pArr6c[m]+oct9, pArr6c[m]+oct9, 0, 1, random(), wave4, envUp) // INST 9 if ( p == 7 && m == 3 ) dArrH = { 9, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0, 9, 0, 0, 0 } // set by [r16s] else dArrH = { 3, 2, 1, 2, 6, 1, 2, 5, 1, 4, 1, 2, 6, 1, 2, 1 } // set by [r16s] bus_config("STEREO", "in0-1", "out6-7") rtinput("MMBUF", "shortHiHat"); STEREO(st, 0, 0.01*dArrH[r16s], 0.05*counter*counter, 0, 1) // INST H <-- hi hat 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 // SOFT DROP tempo = 160 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo MAXMESSAGE(st, 43, 53) // sets compressor to drum preset dArrS = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } // set by [r16s] dArrK = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r32s] dArr1 = {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r32s] pArr1 = { 05.07, 05.10, 05.05, 06.00 } // set by [m] pArr3 = { 05.02, 05.02, 05.00, 05.04 } dArr10 = { 6, 0, 6, 0 } // set by [r4s] pArr10 = { 07.07, 00.00, 07.10, 00.00, 07.07, 00.00, 07.10, 00.00, 07.07, 00.00, 07.10, 00.00, 07.07, 00.00, 07.10, 00.00, 07.05, 00.00, 07.10, 00.00, 07.05, 00.00, 07.10, 00.00, 07.05, 00.00, 07.10, 00.00, 07.05, 00.00, 07.10, 00.00, 07.05, 00.00, 08.00, 00.00, 07.05, 00.00, 08.00, 00.00, 07.05, 00.00, 08.00, 00.00, 07.05, 00.00, 08.00, 00.00, 07.04, 00.00, 08.00, 00.00, 07.04, 00.00, 08.00, 00.00, 07.04, 00.00, 08.00, 00.00, 07.04, 00.00, 08.00, 00.00 } // set by [r64s] for ( p = 0; p < 8; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase stretchSwitch2 = pickrand(0,1) if ( stretchSwitch2 == 1 ) dArr2 = { 8, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } // set by [r16s] else dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } 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 wave4 = wArr4[trand(len_wArr4)] if ( p == 0 && m < 2 ) { mute5 = 0 // always muted mute6 = 0 mute7 = 0 } else if ( p == 0 ) { mute5 = pickrand(0,0,0,0,0,0,0,1) // weighted probability that INST 5 will sound mute6 = pickrand(0,0,0,0,0,0,0,1) mute7 = pickrand(0,0,0,0,0,0,0,1) } else if ( p == 1 ) { mute5 = pickrand(0,0,0,0,0,0,1) mute6 = pickrand(0,0,0,0,0,0,1) mute7 = pickrand(0,0,0,0,0,0,1) } else if ( p == 2 ) { mute5 = pickrand(0,0,0,0,0,1) mute6 = pickrand(0,0,0,0,0,1) mute7 = pickrand(0,0,0,0,0,1) } else if ( p == 3 ) { mute5 = pickrand(0,0,0,0,1) mute6 = pickrand(0,0,0,0,1) mute7 = pickrand(0,0,0,0,1) } else if ( p == 4 ) { mute5 = pickrand(0,0,0,1) mute6 = pickrand(0,0,0,1) mute7 = pickrand(0,0,0,1) } else { mute5 = pickrand(0,0,1) mute6 = pickrand(0,0,1) mute7 = pickrand(0,0,1) } durSwitchH = pickrand(0,1) if (durSwitchH == 1 ) dArrH = { 1, 1, 1, 1 } // set by [r4s] else dArrH = { 0, 0, 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 if ( p == 7 && m == 3 ) dArrS = { 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 } // set by [r16s] bus_config("STEREO", "in0-1", "out0-1") rtinput("MMBUF", "highSnare"); STEREO(st, 0, dArrS[r16s], 0.4, 0, 1) // INST S <-- snare rtinput("MMBUF", "dirtyKick"); STEREO(st, 0, dArrK[r32s], 0.4, 0, 1) // INST K <-- kick if ( p == 7 && m > 1 ) dArrH = { 0.1, 0.1, 0.1, 0.1 } // set by [r4s] bus_config("STEREO", "in0-1", "out6-7") rtinput("MMBUF", "shortHiHat"); STEREO(st, 0, dArrH[r4s]*(0.01+random()*0.04), 0.05, 0, 1) // INST H <-- hi hat VWAVE(st, dur16*dArr1[r32s], pArr1[m], dynFF*envTri, envTri, 0.5, waveSquare5, waveCello) // INST 1a <-- bass VWAVE(st, dur16*dArr1[r32s], pArr1[m]+01.00, dynP*envTri*(1-forwardR), envTri, sideR, waveSquare5, waveCello) // INST 1b <-- bass VWAVE(st, dur16*dArr1[r32s], pArr1[m]+01.072, dynMP*envTri*forwardR, envTri, sideR, waveSquare5, waveCello) // INST 1c <-- bass VWAVE(st, dur16*dArr1[r32s], pArr1[m]+04.00, dynPPP*envTri, envRev, 0, waveSquare5, waveCello, waveOrganInharm) // INST 1d <-- bass VWAVE(st, dur16*dArr1[r32s], pArr1[m]+04.003, dynPPP*envTri, envRev, 1, waveSquare5, waveCello, waveOrganInharm) // INST 1e <-- bass oct2 = pickrand(2,3,4) mod2 = pickrand( 00.00, 00.04, 00.073, 01.001, 01.003 ) envSwitch2 = pickrand(0,0,1) if ( envSwitch2 == 1 ) env2 = envRev else env2 = envPerc waveSwitch2 = pickrand(0,1) if ( waveSwitch2 == 1 ) wave2 = waveSaw8 else wave2 = waveOrganGrinder if ( dArr2[r16s] != 1 ) { // 1 signals a 16th note here dMod2 = 1 // note is long and shouldn't be shortened dynMod2 = 1.5 // make rev chords louder env2 = envSharpRev } else { dMod2 = 0.5 + random()*0.3 dynMod2 = 1 // normal volume } if ( p == 7 && m > 1) dMod2 = 0.2 // short for last two beats FMINST(st, dur16*dArr2[r16s]*dMod2, dynMP*env2*(1-forwardL)*dynMod2, pArr1[m]+oct2, pArr1[m]+oct2+mod2, 0, 1, sideL, wave2, envUp) // INST 2a <-- straight 16ths FMINST(st, dur16*dArr2[r16s]*dMod2*2.5, dynPPP*envTri*forwardL*dynMod2, pArr1[m]+01.00+oct2, pArr1[m]+01.00+oct2+mod2, 0, 2, sideL, waveSine, envUp) // INST 2b <-- FMINST(st, dur16*dArr2[r16s]*dMod2, dynMP*env2*(1-forwardR)*dynMod2, pArr3[m]+oct2, pArr1[m]+oct2+mod2, 0, 1, sideR, wave2, envUp) // INST 3a <-- straight 16ths FMINST(st, dur16*dArr2[r16s]*dMod2*2.5, dynPPP*envTri*forwardR*dynMod2, pArr3[m]+01.00+oct2, pArr1[m]+01.00+oct2+mod2, 0, 2, sideR, waveSine, envUp) // INST 3b <-- NB; THERE IS NO INST 4 - DELETED vEnv5 = vArr5[trand(len_vArr5)] bus_config("VWAVE", "out0-1") VWAVE(st, dur16*dArr5[r16s]*0.9*mute5, pArr4[m]+3, dynPP*envSharpRev, vEnv5, 0, waveBachC1, waveOrganGrinder, waveBachCG2) // INST 5a <-- VWAVE(st, dur16*dArr5[r16s]*0.9*mute5, pArr4[m]+3.002, dynPP*envSharpRev, vEnv5, 1, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 5b <-- vEnv6 = vArr6[trand(len_vArr6)] VWAVE(st, dur16*dArr6[r16s]*mute6, pArr6a[m], dynPPP*envSharpRev, vEnv6, 0.5, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 6a <-- VWAVE(st, dur16*dArr6[r16s]*mute6, pArr6b[m], dynPPP*envSharpRev, vEnv6, 0.5, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 6b <-- VWAVE(st, dur16*dArr6[r16s]*mute6, pArr6c[m], dynPPP*envSharpRev, vEnv6, 0.5, waveOrganGrinder, waveBachC1, waveBachCG2) // INST 6c <-- oct7 = pickrand(0,1,2) mod7 = random()*0.003 FMINST(st, dur16*0.8*mute7, dynPP*envPerc*counter, pArr6a[m]+oct7, pArr6a[m]+oct7, 0, 1, random(), wave4, envUp) // INST 7 <-- sparkles oct8 = pickrand(0,1,2) mod8 = random()*0.003 FMINST(st, dur16*0.8*mute7, dynPP*envPerc*counter, pArr6b[m]+oct8, pArr6b[m]+oct8, 0, 1, random(), wave4, envUp) // INST 8 oct9 = pickrand(0,1,2) mod9 = random()*0.003 FMINST(st, dur16*0.8*mute7, dynPP*envPerc*counter, pArr6c[m]+oct9, pArr6c[m]+oct9, 0, 1, random(), wave4, envUp) // INST 9 if ( p > 3 ) { oct10 = pickrand(0,1,2,3) bus_config("MMODALBAR", "in0-1", "out0-1") MMODALBAR(st, dur16*dArr10[r4s], 40000*envFade, cpspch(pArr10[r64s]+oct10), 0.5, 0.8, 1, sideL, envPerc) // INST 10a <-- bells MMODALBAR(st, dur16*dArr10[r4s], 40000*envFade, cpspch(pArr10[r64s]+00.003+oct10), 0.5, 0.8, 1, sideL, envPerc) // INST 10b <-- bells MMODALBAR(st, dur16*dArr10[r4s], 40000*envFade, cpspch(pArr10[r64s]+oct10+01.00), 0.5, 0.8, 1, sideL, envPerc) // INST 10c <-- bells MMODALBAR(st, dur16*dArr10[r4s], 40000*envFade, cpspch(pArr10[r64s]+01.002+oct10), 0.5, 0.8, 1, sideL, envPerc) // INST 10d <-- bells } 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 // REPRISE TRACK 1 DROP tempo = 160 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo dArrS = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 } // set by [r16s] dArrK = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r32s] dArr1 = {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r64s] pArr1 = { 05.07, 05.10, 05.05, 06.00, 05.07, 05.10, 05.05, 05.08 } // set by [r8m] pArr3 = { 05.02, 05.02, 05.00, 05.04 } pArr4 = { 5.07, 5.07, 5.09, 5.10 } // set by [r4m] dArr4 = { 0,0,0,0, 2,0,0,1, 0,0.5,0,0, 4,0,0,0 } // set by [r16s] MAXMESSAGE(st, 1) // enable groove~ sound file play rtinput("MMBUF", "revCym"); STEREO(st+dur16*252-4.4, 0, 5, 0.8, 0, 1) // reversed cymbal sound // revCym <-- for ( p = 0; p < 4; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase r4m=m;r8m=m+(p%2)*4 if ( p == 3 ) { dArr1 = {16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r64s] } if ( p == 3 && m == 3 ) { glissSwitch1 = 1 // gliss up on last note and change drum fill dArrS = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } // set by [r16s] dArrK = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0 } // set by [r32s] } else glissSwitch1 = 0 // off by default stretchSwitch2 = pickrand(0,1) if ( stretchSwitch2 == 1 ) dArr2 = { 8, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } // set by [r16s] else dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } 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 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 ) / 255 bus_config("STEREO", "in0-1", "out0-1") rtinput("MMBUF", "highSnare"); STEREO(st, 0, dArrS[r16s], 0.4, 0, 1) // INST S <-- snare rtinput("MMBUF", "kick1"); STEREO(st, 0, dArrK[r32s], 0.4, 0, 1) // INST K <-- kick FMINST(st, dur16*dArr1[r64s], 28000*envRev*(1-counter), pArr1[r8m], pArr1[r8m]+1.00+glissSwitch1*envHalfUp*00.24, 1, 4, 0.3, waveBassoon, envRev) // INST 1a <-- bass FMINST(st, dur16*dArr1[r64s], 28000*envRev*(1-counter), pArr1[r8m]+0.0002, pArr1[r8m]+1.0002+glissSwitch1*envHalfUp*00.24, 1, 4, 0.7, waveCello, envRev) // INST 1b <-- FMINST(st, dur16*dArr1[r64s], dynF*envRev*counter, pArr1[r8m]+1, pArr1[r8m]+2.00+glissSwitch1*envHalfUp*00.24, 1, 2, 0.3, waveSquare9, envUp) // INST 1c <-- FMINST(st, dur16*dArr1[r64s], dynF*envRev*counter, pArr1[r8m]+1+0.0002, pArr1[r8m]+2.0002+glissSwitch1*envHalfUp*00.24, 1, 2, 0.7, waveSquare9, envUp) // INST 1d <-- oct2 = pickrand(2,3,4) mod2 = pickrand( 00.00, 00.04, 00.073, 01.001, 01.003 ) envSwitch2 = pickrand(0,0,1) if ( envSwitch2 == 1 ) env2 = envRev else env2 = envPerc waveSwitch2 = pickrand(0,1) if ( waveSwitch2 == 1 ) wave2 = waveSaw8 else wave2 = waveOrganGrinder if ( dArr2[r16s] != 1 ) { // 1 signals a 16th note here dMod2 = 1 // note is long and shouldn't be shortened dynMod2 = 1.5 // make rev chords louder env2 = envSharpRev } else { dMod2 = 0.5 + random()*0.3 dynMod2 = 1 // normal volume } if ( p == 3 && m == 3 ) { dArr2 = { 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.2, 0.1, 0.1, 0, 0, 0, 0 } dMod2 = 1 // duration set by array } FMINST(st, dur16*dArr2[r16s]*dMod2, dynMP*env2*(1-forwardL)*dynMod2, pArr1[m]+oct2, pArr1[m]+oct2+mod2, 0, 1, sideL, wave2, envUp) // INST 2a <-- straight 16ths FMINST(st, dur16*dArr2[r16s]*dMod2*2.5, dynPPP*envTri*forwardL*dynMod2, pArr1[m]+01.00+oct2, pArr1[m]+01.00+oct2+mod2, 0, 2, sideL, waveSine, envUp) // INST 2b <-- FMINST(st, dur16*dArr2[r16s]*dMod2, dynMP*env2*(1-forwardR)*dynMod2, pArr3[m]+oct2, pArr1[m]+oct2+mod2, 0, 1, sideR, wave2, envUp) // INST 3a <-- straight 16ths FMINST(st, dur16*dArr2[r16s]*dMod2*2.5, dynPPP*envTri*forwardR*dynMod2, pArr3[m]+01.00+oct2, pArr1[m]+01.00+oct2+mod2, 0, 2, sideR, waveSine, envUp) // INST 3b <-- wave4Switch = pickrand(0,1,2,3) if ( wave4Switch == 0 ) wave4 = waveSine else if ( wave4Switch == 1 ) wave4 = waveSquare9 else if ( wave4Switch == 2 ) wave4 = waveTri17 else wave4 = waveCello mute4 = pickrand(1,1,0) // (muted when mute4 = 0) carOct4 = pickrand(2,3,4) modOct4 = pickrand(3.07, 3.071, 4.003, 4.072, 5.004, 5.075) gliss4 = pickrand(0,1) if ( p == 3 && m == 3) dArr4 = { 0,0,0,0, 2,0,0,1, 0,0.5,0,0, 0,0,0,0 } // set by [r16s] FMINST(st, dur16*dArr4[r16s]*mute4, dynMP*envRev, pArr4[r4m]+carOct4+gliss4*0.12*envDown, pArr4[r4m]+modOct4+gliss4*0.24*envDown, 1, 4, 0.3, wave4, envRev) // INST 4a <-- random off-beat bleeps FMINST(st, dur16*dArr4[r16s]*mute4, dynMP*envRev, pArr4[r4m]+carOct4+0.0005+gliss4*0.12*envUp, pArr4[r4m]+modOct4+gliss4*0.24*envDown, 1, 4, 0.7, wave4, envRev) // INST 4b <-- 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 MAXMESSAGE(st - dur4*2, 0) // disable groove~ sound file play (half measure ago) MAXMESSAGE(st, 2) // next script // THE FOLLOWING MUST BE AT THE TOP OF EVERY SCORE, NOT JUST IN "HEADER" (script 0) print_off() srand() tempo = 160 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo st = 0 // REPRISE TRACK 1 SWOOP bus_config("STEREO", "in0-1", "out0-1") rtinput("MMBUF", "cym"); STEREO(st, 0, 5, 0.9, 0, 1) AMINST(st, dur16*252, dynMP*envCurveUpAmp, cpspch(5.07)*(7*envCurveUp), 12*forwardL, 0, envFlat, waveCello, waveSine) // T1a <-- AMINST(st, dur16*252, dynMP*envCurveUpAmp, cpspch(5.07)*(7*envCurveUp)+(0.5-sideL)*5, 12*forwardL, 0, envFlat, waveCello, waveSine) // T1b <-- AMINST(st, dur16*252, dynMP*envCurveUpAmp, cpspch(4.07)*(7*envCurveUp), 12*forwardR, 1, envFlat, waveCello, waveSine) // T1c <-- AMINST(st, dur16*252, dynMP*envCurveUpAmp, cpspch(4.07)*(7*envCurveUp)+(0.5-sideL)*5, 12*forwardR, 1, envFlat, waveCello, waveSine) // T1d <-- AMINST(st, dur16*252, dynF*envDown, cpspch(6.07)*(7*envCurveUp), 12*forwardL, 0, envFlat, waveCello, waveSine) // T1e <-- AMINST(st, dur16*252, dynF*envDown, cpspch(6.07)*(7*envCurveUp)+(0.5-sideL)*5, 12*forwardL, 0, envFlat, waveCello, waveSine) // T1f <-- AMINST(st, dur16*252, dynF*envDown, cpspch(5.07)*(7*envCurveUp), 12*forwardR, 1, envFlat, waveCello, waveSine) // T1g <-- AMINST(st, dur16*252, dynF*envDown, cpspch(5.07)*(7*envCurveUp)+(0.5-sideL)*5, 12*forwardR, 1, envFlat, waveCello, waveSine) // T1h <-- FMINST(st, dur16*128, dynMF*envLongFade, 06.07+00.48*envHalfUp, 07.07+00.48*envCurveUp, 1, 2, 0.3, waveSquare9, envUp) // INST 1c <-- bass FMINST(st, dur16*128, dynMF*envLongFade, 06.0702+00.48*envHalfUp, 07.0702+00.48*envCurveUp, 1, 2, 0.7, waveSquare9, envUp) // INST 1d <-- pArr1 = { 05.07, 05.10, 05.05, 06.00, 05.07, 05.10, 05.05, 05.08 } // set by [r8m] pArr3 = { 05.02, 05.02, 05.00, 05.04 } rtinput("MMBUF", "revCym"); STEREO(st+dur16*252-4.4, 0, 5, 1, 0, 1) // reversed cymbal sound // revCym <-- for ( p = 0; p < 4; p += 1 ) { // phrases in a section for ( m = 0; m < 4; m += 1 ) { // measures in a phrase r4m=m;r8m=m+(p%2)*4 stretchSwitch2 = pickrand(0,1) if ( stretchSwitch2 == 1 ) dArr2 = { 8, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1 } // set by [r16s] else dArr2 = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } if ( ( p == 0 || p == 1 ) && m == 0 ) dArrK = { 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 } // determines when kicks happen (set by [r16s] else if ( p == 2 && ( m == 0 || m == 2 ) ) dArrK = { 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 } else if ( p == 3 && ( m == 0 || m == 1 ) ) dArrK = { 1,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 } else if ( p == 3 && m == 2 ) dArrK = { 1,1,1,1, 1,1,1,1, 1,1,1,1, 1,1,1,1 } else if ( p == 3 && m == 3 ) dArrK = { 1,0,0,0, 1,0,0,0, 1,0,0,0, 0,0,0,0 } else dArrK = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 } 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 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 ) / 255 oct2 = pickrand(2,3,4) mod2 = pickrand( 00.00, 00.04, 00.073, 01.001, 01.003 ) envSwitch2 = pickrand(0,0,1) if ( envSwitch2 == 1 ) env2 = envRev else env2 = envPerc waveSwitch2 = pickrand(0,1) if ( waveSwitch2 == 1 ) wave2 = waveSaw8 else wave2 = waveOrganGrinder if ( dArr2[r16s] != 1 ) { // 1 signals a 16th note here dMod2 = 1 // note is long and shouldn't be shortened dynMod2 = 1.5 // make rev chords louder env2 = envSharpRev } else { dMod2 = 0.5 + random()*0.3 dynMod2 = 1 // normal volume } if ( p == 3 && m == 3 ) { dArr2 = { 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.2, 0.2, 0.1, 0.1, 0, 0, 0, 0 } dMod2 = 1 // duration set by array } FMINST(st, dur16*dArr2[r16s]*dMod2, dynP*env2*(1-forwardL)*dynMod2*counter, pArr1[m]+oct2, pArr1[m]+oct2+mod2, 0, 1, sideL, wave2, envUp) // INST 2a <-- straight 16ths FMINST(st, dur16*dArr2[r16s]*dMod2*2.5, dynPPPP*envTri*forwardL*dynMod2*counter, pArr1[m]+01.00+oct2, pArr1[m]+01.00+oct2+mod2, 0, 2, sideL, waveSine, envUp) // INST 2b <-- FMINST(st, dur16*dArr2[r16s]*dMod2, dynP*env2*(1-forwardR)*dynMod2*counter, pArr3[m]+oct2, pArr1[m]+oct2+mod2, 0, 1, sideR, wave2, envUp) // INST 3a <-- straight 16ths FMINST(st, dur16*dArr2[r16s]*dMod2*2.5, dynPPPP*envTri*forwardR*dynMod2*counter, pArr3[m]+01.00+oct2, pArr1[m]+01.00+oct2+mod2, 0, 2, sideR, waveSine, envUp) // INST 3b <-- rtinput("MMBUF", "dirtyKick"); STEREO(st, 0, 0.5*dArrK[r16s], 0.7, 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 // BREAKDOWN (because this is what's happening to my brain) tempo = 180 // suddenly 20 clicks faster? is this a good idea? dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo bus_config("VWAVE", "in0-1", "out0-1") rtinput("MMBUF", "cym"); STEREO(st, 0, 5, 0.9, 0, 1) pitch = { 5.07, 5.07, 5.08, 5.08 } // GLOBAL pitch for all other pitches to be based on. set by [r4m] aEnv4 = envPerc // by default dArrH1 = { 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r8s] dArrS2 = { 0, 0, 0, 0, 1, 0, 0, 0 } // set by [r8s] dArrK2 = { 0, 0, 1, 0, 0, 0, 0, 0 } // set by [r8s] mute2 = 0; dArr2 = { 0, 0, 0, 0, 0, 0, 0, 0 }; pModArr2 = { 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00 } mute3 = 0; dArr3 = { 0, 0, 0, 0, 0, 0, 0, 0 }; dMod3 = 0; oct3a = oct3c = oct3e = 0; env3 = envUp; vector3 = 0 pArr3a = { 07.02, 07.02, 07.00, 07.00, 07.02, 07.02, 07.00, 07.00 } // set by [r8m] pArr3c = { 06.10, 06.10, 06.08, 06.07, 06.10, 06.10, 06.08, 06.08 } pArr3e = { 07.07, 07.05, 07.05, 07.03, 07.07, 07.05, 07.05, 07.08 } pArr4a = { 06.03, 06.02, 06.00, 06.00 } // set by [r4m] pArr4b = { 10.07, 10.07, 10.08, 10.08 } pArr4c = { 08.10, 08.10, 09.00, 09.03 } modArr4 = { 2, 8, 3, 4, 10, 6, 4, 2 } // set by [r8s] for ( p = 0; p < 4; 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 // definitions for rhythmic loops (e.g., r16q is a loop of 16 quarter notes) must be put here 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 // randomize two-beat chunks on beats 1 and 3 if ( (q%2) == 0 ) { if ( p == 3 && m == 3 ) // fill switch = 4 else switch = pickrand(1,1,1,1,2,3,3,3,4,4) // weighted probability of events if ( switch == 1 ) { // unmutes INST 1 muteS1 = muteK1 = mute1 = 1 muteH1 = muteS2 = muteK2 = mute2 = mute3 = mute4 = 0 vEnvSwitch1 = pickrand(0,1,2) if ( vEnvSwitch1 == 0 ) vEnv1 = envUp else if ( vEnvSwitch1 == 1 ) vEnv1 = envDown else vEnv1 = envTri durSwitch1 = pickrand(0,0,1) if ( durSwitch1 == 0 ) { dArrS1 = { 0, 0, 0, 0, 0, 0, 1, 0 } // set by [r8s] dArrK1 = { 1, 1, 1, 1, 1, 0, 0, 0 } // set by [r8s] dArr1 = { 6, 0, 0, 0, 0, 0 } // set by [r6t] } else { dArrS1 = { 0, 0, 0, 0, 0, 0, 0, 1 } // set by [r8s] dArrK1 = { 1, 0, 0, 0, 0, 0, 0, 0 } // set by [r8s] dArr1 = { 2, 0, 2, 0, 2, 0 } } pMod1 = pickrand( 00.00, 00.00, 00.00, 00.00, 01.00, 01.00, 02.00, 02.04 ) if ( pMod1 > 01.00 ) { // change envelopes for high notes. envPerc here not good aEnv1 = envRev vEnv1 = envRev } else aEnv1 = envPerc } else if ( switch == 2 ) { // unmutes INST 2 muteH1 = muteS1 = muteK1 = muteS2 = muteK2 = mute1 = mute3 = mute4 = mute5 = 0 mute2 = 1 dArr2 = { 2, 0, 0, 0, 2, 0, 0, 0 } // set by [r8s] pModArr2 = { 03.04, 0, 0, 0, 02.07, 0, 0, 0 } // set by [r8s] } else if ( switch == 3 ) { // unmutes INST 3 muteH1 = mute3 = 1 muteS1 = muteK1 = muteS2 = muteK2 = mute1 = mute2 = mute4 = 0 dArrH1 = { 1, 0, 1, 1, 0, 1, 1, 0 } // set by [r8s] oct3a = pickrand(0,1,2) oct3c = pickrand(0,1,2) oct3e = pickrand(0,1,2) env3Switch = pickrand(0,1,2) if ( env3Switch == 0 ) { dMod3 = 0.5 env3 = envPerc } else if ( env3Switch == 1 ) { dMod3 = 1.1 env3 = envTri } else { dMod3 = 0.8 env3 = envRev } variation3 = pickrand(0,1) if ( variation3 == 1 ) { // extend first note dArr3 = { 4, 0, 0, 0, 1, 1, 1, 1 } // set by [r8s] dMod3 = 1 env3 = envSharpRev } else { dArr3 = { 1, 1, 1, 1, 1, 1, 1, 1 } } } else if ( switch == 4 ) { // unmutes INST 4 muteS2 = muteK2 = mute4 = 1 muteH1 = muteS1 = muteK1 = mute1 = mute2 = mute3 = 0 } else { // values already set } } if ( p == 0 && m == 0 && q == 0 ) { // do not randomize first note of section muteS1 = muteK1 = mute1 = 1 muteS2 = muteK2 = muteH1 = mute2 = mute3 = mute4 = 0 dArrS1 = { 0, 0, 0, 0, 0, 0, 1, 0 } // set by [r8s] dArrK1 = { 1, 1, 1, 1, 1, 0, 0, 0 } // set by [r8s] dArr1 = { 6, 0, 0, 0, 0, 0 } // set by [r6t] pMod1 = 00.00 // no pitch shift on first note vEnv1 = envUp } 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 ) / 255 // counts from 0.0 to 1.0 over entire section bus_config("STEREO", "in0-1", "out6-7") rtinput("MMBUF", "shortHiHat"); STEREO(st, 0, muteH1*dArrH1[r8s]*0.03, 0.2, 0, 1) // INST H1 <-- hi hat bus_config("STEREO", "in0-1", "out0-1") rtinput("MMBUF", "highSnare"); STEREO(st, 0, muteS1*dArrS1[r8s], 0.6, 0, 1) // INST S1 <-- snare 1 rtinput("MMBUF", "dirtyKick"); STEREO(st, 0, muteK1*dArrK1[r8s], 0.6, 0, 1) // INST K1 <-- kick 1 if ( p == 3 && m ==3 ) // no drums in fill muteS2 = muteK2 = 0 rtinput("MMBUF", "normalSnare"); STEREO(st, 0, muteS2*dArrS2[r8s], 0.6, 0, 1) // INST S2 <-- snare 2 rtinput("MMBUF", "kick1"); STEREO(st, 0, muteK2*dArrK2[r8s], 0.6, 0, 1) // INST K2 <-- kick 2 MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[m]+pModArr2[r8s]+02.00), 0.5, 0.8, 1, 0, envPerc) // INST 2a <-- bing bong bells MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[m]+pModArr2[r8s]+02.003), 0.5, 0.8, 1, 1, envPerc) // INST 2b MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[m]+pModArr2[r8s]), 0.5, 0.8, 1, 0, envPerc) // INST 2c MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[m]+pModArr2[r8s]+00.003), 0.5, 0.8, 1, 1, envPerc) // INST 2d VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3a[r8m]+oct3a, dynMP*env3, sideL, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3a <-- (chords) VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3a[r8m]+oct3a+random()*0.005, dynMP*env3, sideL, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3b <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3c[r8m]+oct3c, dynMF*env3*counter, sideL, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3c <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3c[r8m]+oct3c+random()*0.005, dynMF*env3*counter, sideL, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3d <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3e[r8m]+oct3e, dynMP*env3, sideL, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3e <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3e[r8m]+oct3e+random()*0.005, dynMP*env3, sideL, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3f <-- pShift4B = pickrand( 0.00, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006 ) pShift4D = pickrand( 0.00, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006 ) envSwitch4 = pickrand( 0, 1, 2 ) if ( envSwitch4 == 0 ) { dMod4 = 0.5 env4 = envDown } else if ( envSwitch4 == 1 ) { dMod4 = 0.7 env4 = envPerc } else { dMod4 = 0.9 env4 = envRev } if ( p == 3 && m == 3 ) { gliss2 = 1 // gliss up on last measure mCounter = r16s / 15 // counts from 0.0 to 1.0 } else { gliss2 = 0 // no gliss by default mCounter = 0 } FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r4m]+gliss2*mCounter*00.12, pArr4a[r4m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) // INST 4a <-- FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r4m]+pShift4B+gliss2*mCounter*00.12, pArr4a[r4m]+00.07+pShift4B+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r4m]+gliss2*mCounter*00.12, pArr4a[r4m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) // INST 4a <-- FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r4m]+pShift4D+gliss2*mCounter*00.12, pArr4a[r4m]+00.07+pShift4D+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r4m]+gliss2*mCounter*00.12, pArr4b[r4m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) // INST 4b <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r4m]+pShift4B+gliss2*mCounter*00.12, pArr4b[r4m]+01.07+pShift4B+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r4m]+gliss2*mCounter*00.12, pArr4b[r4m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) // INST 4b <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r4m]+pShift4D+gliss2*mCounter*00.12, pArr4b[r4m]+00.07+pShift4D+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r4m]+gliss2*mCounter*00.12, pArr4c[r4m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) // INST 4c <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r4m]+pShift4B+gliss2*mCounter*00.12, pArr4c[r4m]+00.07+pShift4B+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r4m]+gliss2*mCounter*00.12, pArr4c[r4m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) // INST 4c <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r4m]+pShift4D+gliss2*mCounter*00.12, pArr4c[r4m]+00.07+pShift4D+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) 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 VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1, dynF*aEnv4, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass) VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+0.002, dynF*aEnv4, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+1.001+envTri*0.01*forwardL, dynP*envRev, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+1.003+envTri*0.01*forwardL, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+2.003+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+2.004+lfoSideRSmooth*0.015*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r4m]+pMod1+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- st12 += dur12 } // close t loop } // close q loop } // close m loop } // close p loop MAXMESSAGE(st-0.1, 43, 53) // set compressor for drums in next script MAXMESSAGE(st, 3) // next script // THE FOLLOWING MUST BE AT THE TOP OF EVERY SCORE, NOT JUST IN "HEADER" (script 0) print_off() srand() st = 0 MAXMESSAGE(st, 1) // enable groove~ MAXMESSAGE(st+0.1, 25, 35) // set teeth~ parameters // WIND DOWN tempo = 180 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo rtinput("MMBUF", "cym"); STEREO(st, 0, 5, 0.9, 0, 1) pitch = { 05.07, 05.07, 05.08, 05.08, 05.10, 05.10, 05.11, 05.11, 05.07, 05.07, 05.08, 05.08, 05.10, 05.10, 06.00, 06.00, 05.07, 05.07, 05.08, 05.08, 05.10, 05.10, 06.01, 06.01, 05.07, 05.07, 05.08, 05.08, 05.10, 05.10, 05.05, 05.05 } // GLOBAL pitch for all other pitches to be based on. set by [r32m] pArr3e = { 07.02, 07.02, 07.03, 07.03, 07.02, 07.02, 07.02, 07.02, 07.02, 07.02, 07.03, 07.03, 07.02, 07.02, 07.03, 07.03, 07.02, 07.02, 07.03, 07.03, 07.02, 07.02, 07.05, 07.05, 07.02, 07.02, 07.03, 07.03, 07.02, 07.02, 07.00, 07.00 } // set by [r32m] pArr3a = { 06.11, 06.11, 07.00, 07.00, 06.10, 06.10, 06.07, 06.07, 06.11, 06.11, 07.00, 07.00, 06.10, 06.10, 06.10, 06.10, 06.11, 06.11, 07.00, 07.00, 06.10, 06.10, 06.08, 06.08, 06.11, 06.11, 07.00, 07.00, 06.10, 06.10, 06.08, 06.08 } pArr3c = { 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.05, 06.05, 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.07, 06.07, 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.05, 06.05, 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.05, 06.05 } pArr4b = { 10.02, 10.02, 10.03, 10.03, 10.02, 10.02, 10.02, 10.02, 10.02, 10.02, 10.03, 10.03, 10.02, 10.02, 10.03, 10.03, 10.02, 10.02, 10.03, 10.03, 10.02, 10.02, 10.05, 10.05, 10.02, 10.02, 10.03, 10.03, 10.02, 10.02, 10.00, 10.00 } // set by [r32m] pArr4c = { 08.11, 08.11, 09.00, 09.00, 08.10, 08.10, 08.07, 08.07, 08.11, 08.11, 09.00, 09.00, 08.10, 08.10, 08.10, 08.10, 08.11, 08.11, 09.00, 09.00, 08.10, 08.10, 08.08, 08.08, 08.11, 08.11, 09.00, 09.00, 08.10, 08.10, 08.08, 08.08 } pArr4a = { 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.11, 06.11, 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 07.00, 07.00, 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.01, 06.01, 06.07, 06.07, 06.08, 06.08, 06.05, 06.05, 06.05, 06.05 } aEnv4 = envPerc // by default dArrH1 = { 0, 0, 0, 0, 0, 0, 0, 0 } // set by [r8s] dArrS2 = { 0, 0, 0, 0, 1, 0, 0, 0 } // set by [r8s] dArrK2 = { 0, 0, 1, 0, 0, 0, 0, 0 } // set by [r8s] mute2 = 0; dArr2 = { 0, 0, 0, 0, 0, 0, 0, 0 }; pModArr2 = { 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00, 00.00 } mute3 = 0; dArr3 = { 0, 0, 0, 0, 0, 0, 0, 0 }; dMod3 = 0; oct3a = oct3c = oct3e = 0; env3 = envUp; vector3 = 0 modArr4 = { 2, 8, 3, 4, 10, 6, 4, 2 } // set by [r8s] for ( p = 0; p < 8; 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;r32m=m+p*4 // definitions for rhythmic loops (e.g., r16q is a loop of 16 quarter notes) must be put here mCounter = ( m + p*4 ) / 31 bus_config("VWAVE", "in0-1", "out2-3") bus_config("WAVETABLE", "in0-1", "out2-3") VWAVE(st, dur4*4, pitch[r32m]+2.003, dynMF*envTri*mCounter, envUp, 0.4+envTri*0.2, waveSquare5, waveCello) // INST 5a <-- constant bassline VWAVE(st, dur4*4, pitch[r32m]+01.00, dynFF*envTri*mCounter, 0.5+envUp*0.5, 0.4+(1-envTri)*0.2, waveSquare5, waveBassoon) // INST 5b <-- WAVETABLE(st, dur4*4, dynFF*envTri*mCounter, pitch[r32m], 0.4, waveCello) // INST 5c <-- VWAVE(st, dur4*4, pitch[r32m]-01.00, dynF*envTri*mCounter, 0.3+envUp*0.3, 0.5, waveBassoon, waveTransUp, waveBrass) // INST 5d <-- 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 qCounter = ( q + m*4 + p*16 ) / 127 if ( p > 3 ) { // rit. in second half of section tempo = 180 - (qCounter^2*60) dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo } // randomize two-beat chunks on beats 1 and 3 if ( (q%2) == 0 ) { if ( (p%4) == 3 && m == 3 ) // fill (happens twice) switch = 4 else switch = pickrand(1,1,1,1,2,3,3,3,4,4) // weighted probability of events // override pickrand below to test specific cases // switch = 99999999 if ( switch == 1 ) { // unmutes INST 1 muteS1 = muteK1 = mute1 = 1 muteH1 = muteS2 = muteK2 = mute2 = mute3 = mute4 = 0 vEnvSwitch1 = pickrand(0,1,2) if ( vEnvSwitch1 == 0 ) vEnv1 = envUp else if ( vEnvSwitch1 == 1 ) vEnv1 = envDown else vEnv1 = envTri durSwitch1 = pickrand(0,0,1) if ( durSwitch1 == 0 ) { dArrS1 = { 0, 0, 0, 0, 0, 0, 1, 0 } // set by [r8s] dArrK1 = { 1, 1, 1, 1, 1, 0, 0, 0 } // set by [r8s] dArr1 = { 6, 0, 0, 0, 0, 0 } // set by [r6t] } else { dArrS1 = { 0, 0, 0, 0, 0, 0, 0, 1 } // set by [r8s] dArrK1 = { 1, 0, 0, 0, 0, 0, 0, 0 } // set by [r8s] dArr1 = { 2, 0, 2, 0, 2, 0 } } pMod1 = pickrand( 00.00, 00.00, 00.00, 00.00, 01.00, 01.00, 02.00, 02.00 ) if ( pMod1 > 01.00 ) { // change envelopes for high notes. envPerc here not good aEnv1 = envRev vEnv1 = envRev } else aEnv1 = envPerc } else if ( switch == 2 ) { // unmutes INST 2 muteH1 = muteS1 = muteK1 = muteS2 = muteK2 = mute1 = mute3 = mute4 = mute5 = 0 mute2 = 1 dArr2 = { 2, 0, 0, 0, 2, 0, 0, 0 } // set by [r8s] pModArr2 = { 03.04, 0, 0, 0, 02.07, 0, 0, 0 } // set by [r8s] } else if ( switch == 3 ) { // unmutes INST 3 muteH1 = mute3 = 1 muteS1 = muteK1 = muteS2 = muteK2 = mute1 = mute2 = mute4 = 0 dArrH1 = { 1, 0, 1, 1, 0, 1, 1, 0 } // set by [r8s] oct3a = pickrand(0,1,2) oct3c = pickrand(0,1,2) oct3e = pickrand(0,1,2) env3Switch = pickrand(0,1,2) if ( env3Switch == 0 ) { dMod3 = 0.5 env3 = envPerc } else if ( env3Switch == 1 ) { dMod3 = 1.1 env3 = envTri } else { dMod3 = 0.8 env3 = envRev } variation3 = pickrand(0,1) if ( variation3 == 1 ) { // extend first note dArr3 = { 4, 0, 0, 0, 1, 1, 1, 1 } // set by [r8s] dMod3 = 1 env3 = envSharpRev } else { dArr3 = { 1, 1, 1, 1, 1, 1, 1, 1 } } } else if ( switch == 4 ) { // unmutes INST 4 muteS2 = muteK2 = mute4 = 1 muteH1 = muteS1 = muteK1 = mute1 = mute2 = mute3 = 0 } else { muteS2 = muteK2 = mute4 = muteH1 = muteS1 = muteK1 = mute1 = mute2 = mute3 = 0 // mute everything to test other layers } } if ( p == 0 && m == 0 && q == 0 ) { // do not randomize first note of section muteS1 = muteK1 = mute1 = 1 muteS2 = muteK2 = muteH1 = mute2 = mute3 = mute4 = 0 dArrS1 = { 0, 0, 0, 0, 0, 0, 1, 0 } // set by [r8s] dArrK1 = { 1, 1, 1, 1, 1, 0, 0, 0 } // set by [r8s] dArr1 = { 6, 0, 0, 0, 0, 0 } // set by [r6t] pMod1 = 00.00 // no pitch shift on first note vEnv1 = envUp } 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 // counts from 0.0 to 1.0 over entire section bus_config("STEREO", "in0-1", "out6-7") rtinput("MMBUF", "shortHiHat"); STEREO(st, 0, muteH1*dArrH1[r8s]*0.03, 0.2, 0, 1) // INST H1 <-- hi hat if ( p == 0 && m == 0 ) drumVol = 0.6 // loud on first attack else drumVol = 0.3 // then back off for other drum bus_config("STEREO", "in0-1", "out0-1") rtinput("MMBUF", "highSnare"); STEREO(st, 0, muteS1*dArrS1[r8s], drumVol, 0, 1) // INST S1 <-- snare 1 rtinput("MMBUF", "dirtyKick"); STEREO(st, 0, muteK1*dArrK1[r8s], drumVol, 0, 1) // INST K1 <-- kick 1 if ( (p%4) == 3 && m ==3 ) // no drums in fill muteS2 = muteK2 = 0 rtinput("MMBUF", "normalSnare"); STEREO(st, 0, muteS2*dArrS2[r8s], 0.3, 0, 1) // INST S2 <-- snare 2 rtinput("MMBUF", "kick1"); STEREO(st, 0, muteK2*dArrK2[r8s], 0.3, 0, 1) // INST K2 <-- kick 2 if ( (p == 0 && m == 0 && q < 2) || (p == 7 && m == 3) ) muteR = muteK3 = 0 // mute first two beats and last measure of these drums else muteR = muteK3 = 1 dArrR = { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 } // set by [r16s] dArrK3 = { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 } bus_config("STEREO", "in0-1", "out4-5") rtinput("MMBUF", "crispRide"); STEREO(st, 0, muteR*dArrR[r16s], 0.5, 0, 1) // INST R <-- ride (to be spectdelayed) rtinput("MMBUF", "wetKick"); STEREO(st, 0, muteK3*dArrK3[r16s], 1, 0, 1) // INST K3 <-- kick 3 MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[r32m]+pModArr2[r8s]+02.00), 0.5, 0.8, 1, 0, envPerc) // INST 2a <-- bing bong bells MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[r32m]+pModArr2[r8s]+02.003), 0.5, 0.8, 1, 1, envPerc) // INST 2b MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[r32m]+pModArr2[r8s]), 0.5, 0.8, 1, 0, envPerc) // INST 2c MMODALBAR(st, mute2*dur4*dArr2[r8s], 40000, cpspch(pitch[r32m]+pModArr2[r8s]+00.003), 0.5, 0.8, 1, 1, envPerc) // INST 2d bus_config("VWAVE", "in0-1", "out0-1") VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3a[r32m]+oct3a, dynMP*env3, sideL, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3a <-- (16th-note chords) VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3a[r32m]+oct3a+random()*0.005, dynMP*env3, sideL, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3b <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3c[r32m]+oct3c, dynMF*env3*counter, sideL, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3c <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3c[r32m]+oct3c+random()*0.005, dynMF*env3*counter, sideL, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3d <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3e[r32m]+oct3e, dynMP*env3, sideL, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3e <-- VWAVE(st, mute3*dur16*dArr3[r8s]*dMod3, pArr3e[r32m]+oct3e+random()*0.005, dynMP*env3, sideL, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST 3f <-- pShift4B = pickrand( 0.00, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006 ) pShift4D = pickrand( 0.00, 0.001, 0.002, 0.003, 0.004, 0.005, 0.006 ) envSwitch4 = pickrand( 0, 1, 2 ) if ( envSwitch4 == 0 ) { dMod4 = 0.5 env4 = envDown } else if ( envSwitch4 == 1 ) { dMod4 = 0.7 env4 = envPerc } else { dMod4 = 0.9 env4 = envRev } if ( (p%4) == 3 && m == 3 ) { gliss2 = 1 // gliss up on last measure of each half of section mCounter = r16s / 15 // counts from 0.0 to 1.0 } else { gliss2 = 0 // no gliss by default mCounter = 0 } FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r32m]+gliss2*mCounter*00.12, pArr4a[r32m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat)//INST 4a from track 1 FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r32m]+pShift4B+gliss2*mCounter*00.12, pArr4a[r32m]+00.07+pShift4B+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r32m]+gliss2*mCounter*00.12, pArr4a[r32m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) // INST 4a <-- FMINST(st, mute4*dur16*dMod4, dynP*env4*forwardL, pArr4a[r32m]+pShift4D+gliss2*mCounter*00.12, pArr4a[r32m]+00.07+pShift4D+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r32m]+gliss2*mCounter*00.12, pArr4b[r32m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) // INST 4b <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r32m]+pShift4B+gliss2*mCounter*00.12, pArr4b[r32m]+01.07+pShift4B+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r32m]+gliss2*mCounter*00.12, pArr4b[r32m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) // INST 4b <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4, pArr4b[r32m]+pShift4D+gliss2*mCounter*00.12, pArr4b[r32m]+00.07+pShift4D+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r32m]+gliss2*mCounter*00.12, pArr4c[r32m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) // INST 4c <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r32m]+pShift4B+gliss2*mCounter*00.12, pArr4c[r32m]+00.07+pShift4B+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 0, waveSine, envFlat) FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r32m]+gliss2*mCounter*00.12, pArr4c[r32m]+00.07+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) // INST 4c <-- FMINST(st, mute4*dur16*dMod4, dynPPP*env4*forwardR, pArr4c[r32m]+pShift4D+gliss2*mCounter*00.12, pArr4c[r32m]+00.07+pShift4D+gliss2*mCounter*00.12, modArr4[r8s], modArr4[r8s], 1, waveSine, envFlat) 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 bus_config("VWAVE", "in0-1", "out0-1") VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1, dynFF*aEnv4, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1a <-- (bass with possible pitch shifts up and triplets) VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+0.002, dynFF*aEnv4, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1b <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+1.001+envTri*0.01*forwardL, dynMP*envRev, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1c <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+1.003+envTri*0.01*forwardL, dynMP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1d <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+2.003+lfoSideRSmooth*0.03*forwardR, dynP*envRev, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1e <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+2.004+lfoSideRSmooth*0.03*forwardR, dynP*envRev, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1f <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+3, dynP*envRev*lfoSideLSmooth, vEnv1, 0, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1g <-- VWAVE(st12, mute1*dur12*dArr1[r6t], pitch[r32m]+pMod1+3, dynP*envRev*lfoSideLSmooth, vEnv1, 1, waveGneh, waveGna, waveA, waveI, waveO ) // INST 1h <-- st12 += dur12 } // close t loop } // close q loop } // close m loop } // close p loop // CODA tempo = 120 dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo pArrS = { 08.10, 08.09, 08.09, 08.07 } // soprano (set by [r4m] pArrA = { 08.05, 08.05, 08.05, 08.03 } pArrT = { 08.02, 08.02, 08.00, 07.10 } pArrB = { 07.07, 07.10, 07.05, 07.00 } for ( p = 0; p < 4; 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 // definitions for rhythmic loops (e.g., r16q is a loop of 16 quarter notes) must be put here mCounter = ( m + p*4 ) / 15 tempo = 120 - (mCounter*40) // rit another 40 clicks to end dur4 = 60/tempo; dur8 = 30/tempo; dur12 = 20/tempo; dur16 = 15/tempo if ( p == 3 && m == 3 ) dMod2 = 8 else dMod2 = 5 VWAVE(st, dur4*dMod2, pArrS[r4m], dynPPPP*envHann*forwardR, envTri, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST S1L <-- 8va chords (amp on forwardR) VWAVE(st, dur4*dMod2, pArrS[r4m]+00.002, dynPPPP*envHann*forwardR, envTri, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST S1R <-- VWAVE(st, dur4*dMod2, pArrA[r4m], dynPPPP*envHann*forwardR, envTri, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST A1L <-- VWAVE(st, dur4*dMod2, pArrA[r4m]+00.002, dynPPPP*envHann*forwardR, envTri, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST A1R <-- VWAVE(st, dur4*dMod2, pArrT[r4m], dynPPPP*envHann*forwardR, envTri, 0, waveA, waveE, waveI, waveGna, waveGneh ) // INST T1L <-- VWAVE(st, dur4*dMod2, pArrT[r4m]+00.002, dynPPPP*envHann*forwardR, envTri, 1, waveA, waveE, waveI, waveGna, waveGneh ) // INST T1R <-- VWAVE(st, dur4*dMod2, pArrS[r4m], dynPP*envHann, envTri, 0, waveTri17, waveBachC2, waveBachCG2 ) // INST S2L <-- midrange with constant amp VWAVE(st, dur4*dMod2, pArrS[r4m]+00.002, dynPP*envHann, envTri, 1, waveBachC2, waveTri17, waveBachCG2 ) // INST S2R <-- VWAVE(st, dur4*dMod2, pArrA[r4m], dynPP*envHann, envTri, 0, waveTri17, waveBachC2, waveBachCG2 ) // INST A2L <-- VWAVE(st, dur4*dMod2, pArrA[r4m]+00.002, dynPP*envHann, envTri, 1, waveBachC2, waveTri17, waveBachCG2 ) // INST A2R <-- VWAVE(st, dur4*dMod2, pArrT[r4m], dynPP*envHann, envTri, 0, waveTri17, waveBachC2, waveBachCG2 ) // INST T2L <-- VWAVE(st, dur4*dMod2, pArrT[r4m]+00.002, dynPP*envHann, envTri, 1, waveBachC2, waveTri17, waveBachCG2 ) // INST T2R <-- VWAVE(st, dur4*dMod2, pArrB[r4m], dynPP*envHann, envTri, 0, waveTri17, waveBachC2, waveBachCG2 ) // INST B2L <-- VWAVE(st, dur4*dMod2, pArrB[r4m]+00.002, dynPP*envHann, envTri, 1, waveBachC2, waveTri17, waveBachCG2 ) // INST B2R <-- VWAVE(st, dur4*dMod2, pArrB[r4m]-01.00, dynMP*envHann*forwardL, envTri, 0, waveTri17, waveGneh, waveGna, waveA, waveI, waveO) // INST B3L <-- bass (amp on forwardL) VWAVE(st, dur4*dMod2, pArrB[r4m]-01.00+00.002, dynMP*envHann*forwardL, envTri, 1, waveGneh, waveGna, waveA, waveI, waveO) // INST B3R <-- VWAVE(st, dur4*dMod2, pArrB[r4m]-02.00, dynMF*envHann*forwardL, envTri, 0, waveTri17, waveGneh, waveGna, waveA, waveI, waveO) // INST B4L <-- VWAVE(st, dur4*dMod2, pArrB[r4m]-02.00+00.002, dynMF*envHann*forwardL, envTri, 1, waveGneh, waveGna, waveA, waveI, waveO) // INST B4R <-- 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 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 ) / 255 // counts from 0.0 to 1.0 over entire section st += dur16 } // close s loop } // close q loop } // close m loop } // close p loop