«El Cubito de Chuito by Roy Fernando Guzmán, 3d Sound using Liminal Spatialization System.» by Roy F Guzmán
on 06 Feb'16 09:45 inThis code is using Duty UGens in order to produce a SynthDefs to spatialize sound in 3d with out creating Classes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
// El Cubito de Chuito/ Chuito's Cube for 3D Sound. Roy F Guzmán // Instantiate as many SynthDefs as there are sound sources. The more SyntheDefs the more sources, the more sounds to produce a illusion of trajectories that when aching a liminal point of 60HZ± of velocity can achieve an illusion or an intent to create sound forms. Server.local.options.device = "Built-In-Audio"; Server.internal.options.device = "Built-In-Audio"; ServerOptions.outDevices; Server.default.options.outDevice_("Built-In-Audio"); s.options.numOutputBusChannels; s.options.numOutputBusChannels = 16; s.meter; s = Server.local; s.makeGui ( ~jesus = Bus.audio(s, 1); ~source1 = Bus.audio(s, 1); ~source2 = Bus.audio(s, 1); ~mult0 = Bus.audio(s, 1); ~mult1 = Bus.audio(s, 1); ~mult2 = Bus.audio(s, 1); ~mult3 = Bus.audio(s, 1); ~mult4 = Bus.audio(s, 1); ~mult5 = Bus.audio(s, 1); ~mult6 = Bus.audio(s, 1); ~mult7 = Bus.audio(s, 1); //~mult8 = Bus.audio(s, 1); //~mult9 = Bus.audio(s, 1); //~mult10 = Bus.audio(s, 1); //~mult11 = Bus.audio(s, 1); //~mult12 = Bus.audio(s, 1); //~mult13 = Bus.audio(s, 1); //~mult14 = Bus.audio(s, 1); ) ( SynthDef(\ChuitoSpat14, { arg mult0 = 16, mult1 = 17, mult2 = 18, mult3 = 19, mult4 = 20, mult5 = 21, mult6 = 22, mult7 = 23, mult8 = 24, mult9 = 25, mult10 = 26, mult11 = 27, mult12 = 28, mult13 = 29, source = 34; var out0 = 0, out1 = 1, out2 = 2, out3 = 3, out4 = 4, out5 = 5, out6 = 6, out7 = 7; var out8 = 8, out9 = 9, out10 = 10, out11 = 11, out12 = 12, out13 = 13, out14 = 14; var sig0, sig1, sig2, sig3, sig4, sig5, sig6, sig7, sig8, sig9, sig10, sig11, sig12, sig13, sig14; sig0 = (In.ar(mult0, 1) * In.ar(source, 1)); sig1 = (In.ar(mult1, 1) * In.ar(source, 1)); sig2 = (In.ar(mult2, 1) * In.ar(source, 1)); sig3 = (In.ar(mult3, 1) * In.ar(source, 1)); sig4 = (In.ar(mult4, 1) * In.ar(source, 1)); sig5 = (In.ar(mult5, 1) * In.ar(source, 1)); sig6 = (In.ar(mult6, 1) * In.ar(source, 1)); sig7 = (In.ar(mult7, 1) * In.ar(source, 1)); sig8 = (In.ar(mult8, 1) * In.ar(source, 1)); sig9 = (In.ar(mult9, 1) * In.ar(source, 1)); sig10 = (In.ar(mult10, 1) * In.ar(source, 1)); sig11 = (In.ar(mult11, 1) * In.ar(source, 1)); sig12 = (In.ar(mult12, 1) * In.ar(source, 1)); sig13 = (In.ar(mult13, 1) * In.ar(source, 1)); Out.ar(0, sig0); Out.ar(1, sig1); Out.ar(2, sig2); Out.ar(3, sig3); Out.ar(4, sig4); Out.ar(5, sig5); Out.ar(6, sig6); Out.ar(7, sig7); Out.ar(8, sig8); Out.ar(9, sig9); Out.ar(10, sig10); Out.ar(11, sig11); Out.ar(12, sig12); Out.ar(13, sig13); }).send(s); ) ( ~g1 = 0.0; ~g2 = 0.0; ~g3 = 0.0; ~g4 = 0.0; ~g5 = 0.0; ~g6 = 0.0; ~g7 = 0.0; ~g8 = 0.0; ~g9 = 0.0; ~g10 = 0.0; ~g11 = 0.0; ~g12 = 0.0; ~g13 = 0.0; ~g14 = 0.0; SynthDef(\ElCubitodeChuito, { var samplerate = 44100, sampx, sampy, sampz; var x0 = 0.1, x1, y0, x2, logx, ampx; var x00 = 0.1, x11, y00, x22, logy, ampy; var x000 = 0.1, x111, y000, x222, logz, ampz; var cvar0 = 3.8, cvar00/* = 3.99*/, cvar000; var b0, b1, b2; var brampx, brampy, brampz; var buntx, bunty, buntz; var maxsamp; var int1, int2, int3, int4, int5, int6, int7, int8, int9, int10, int11, int12, int13, int14; var x0x, y0x, y1x, ax; var x0y, y0y, y1y, ay; var x0z, y0z, y1z, az; var speaker1x = 0.0, speaker1y = 1.0, speaker1z = 0.0, spik1, speaker1;//Left Back Up var speaker2x = 1.0, speaker2y = 1.0, speaker2z = 0.0, spik2, speaker2;// Right Back Up var speaker3x = 0.0, speaker3y = 1.0, speaker3z = 1.0, spik3, speaker3;// Left Front Up var speaker4x = 1.0, speaker4y = 1.0, speaker4z = 1.0, spik4, speaker4;// Right Front UP var speaker5x = 0.0, speaker5y = 0.0, speaker5z = 0.0, spik5, speaker5;// Left Back Down var speaker6x = 1.0, speaker6y = 0.0, speaker6z = 0.0, spik6, speaker6;// Right Back Down var speaker7x = 0.0, speaker7y = 0.0, speaker7z = 1.0, spik7, speaker7;// Left Front Down var speaker8x = 1.0, speaker8y = 0.0, speaker8z = 1.0, spik8, speaker8;// Right Front Down var speaker9x = 0.0, speaker9y = 0.5, speaker9z = 0.5, spik9, speaker9;// Center Left var speaker10x = 1.0, speaker10y = 0.5, speaker10z = 0.5, spik10, speaker10;// Center Right var speaker11x = 0.5, speaker11y = 0.5, speaker11z = 0.0, spik11, speaker11;// Center Back var speaker12x = 0.5, speaker12y = 0.5, speaker12z = 1.0, spik12, speaker12;// Center Front var speaker13x = 0.5, speaker13y = 1.0, speaker13z = 0.5, spik13, speaker13;// Center UP var speaker14x = 0.5, speaker14y = 0.0, speaker14z = 0.5, spik14, speaker14;// Center Down var nspeakers = 14; var listeningthreshold, range = 0.5 /* 0.25 - 2/3 */; var offsetx, offsety, offsetz; var e = 2.7182818284590452353602874713527, width = 0.01; /*0.001 - > 0.09 */ var d1, d2, d3, d4, d5, d6, d7, d8, d9, d10, d11, d12, d13, d14; var g1, g2, g3, g4; var out1, out2, out3, out4; b0 = LocalBuf(1); b1 = LocalBuf(1); b2 = LocalBuf(1); listeningthreshold = 60; // // // Use any In.ar(....) here or any Bus from outside to produce the x coordinate from 0 to 1. // // For now is just a logistic function in order to produce an x coordinate path with the Logistic Map sampx = 0.5; cvar0 = 3.3; b0 = LocalBuf(1); x0 = Dbufrd(b0); // read from buffe x1 = (cvar0*(x0+0.00001)) * (1 - (x0+0.00001)); x0 = x1; y0 = Dbufwr(x1, b0); // write to buffer logx = Duty.ar(1/sampx, 0, (y0 * 0.5)); // // Use any In.ar(....) here or any Bus from outside to produce the y coordinate from 0 to 1. // // For now is just a logistic function in order to produce an x coordinate path with the Logistic Map sampy = sampx; cvar00 = 3.3; b1 = LocalBuf(1); x00 = Dbufrd(b1); // read from buffe x11 = (cvar00*(x00+0.00001)) * (1 - (x00+0.00001)); x00 = x11; y00 = Dbufwr(x11, b1); // write to buffer logy = Duty.ar(1/sampy, 0, y00); // // Use any In.ar(....) here or any Bus from outside to produce the z coordinate from 0 to 1. // // For now is just a logistic function in order to produce an z coordinate path with the Logistic Map sampz = sampx; cvar000 = 3.3; b2 = LocalBuf(1); x000 = Dbufrd(b2); // read from buffe x111 = (cvar000*(x000+0.00001)) * (1 - (x000+0.00001)); x000 = x111; y000 = Dbufwr(x111, b2); // write to buffer logz = Duty.ar(1/sampz, 0, y000); // Distance Formula int1 = Ramp.ar(((((logx-speaker1x)**2)+((logy - speaker1y)**2)+((logz - speaker1z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int2 = Ramp.ar(((((logx-speaker2x)**2)+((logy - speaker2y)**2)+((logz - speaker2z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int3 = Ramp.ar(((((logx-speaker3x)**2)+((logy - speaker3y)**2)+((logz - speaker3z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int4 = Ramp.ar(((((logx-speaker4x)**2)+((logy - speaker4y)**2)+((logz - speaker4z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int5 = Ramp.ar(((((logx-speaker5x)**2)+((logy - speaker5y)**2)+((logz - speaker5z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int6 = Ramp.ar(((((logx-speaker6x)**2)+((logy - speaker6y)**2)+((logz - speaker6z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int7 = Ramp.ar(((((logx-speaker7x)**2)+((logy - speaker7y)**2)+((logz - speaker7z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int8 = Ramp.ar(((((logx-speaker8x)**2)+((logy - speaker8y)**2)+((logz - speaker8z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int9 = Ramp.ar(((((logx-speaker9x)**2)+((logy - speaker9y)**2)+((logz - speaker9z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int10 = Ramp.ar(((((logx-speaker10x)**2)+((logy - speaker10y)**2)+((logz - speaker10z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int11 = Ramp.ar(((((logx-speaker11x)**2)+((logy - speaker11y)**2)+((logz - speaker11z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int12 = Ramp.ar(((((logx-speaker12x)**2)+((logy - speaker12y)**2)+((logz - speaker12z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int13 = Ramp.ar(((((logx-speaker13x)**2)+((logy - speaker13y)**2)+((logz - speaker13z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); int14 = Ramp.ar(((((logx-speaker14x)**2)+((logy - speaker14y)**2)+((logz - speaker14z)**2)).sqrt).linlin(0.0,1.7320508075689,0.0,1.0),1/sampx); //The one liner for amplitude distribution in space concerning distance. d1 = (((if(int1 > range, 0, if(int1>(range*0.5),(1-int1.linlin(0.0,range,0.0,1.0))**(1/2), (int1.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d2 = (((if(int2 > range, 0, if(int2>(range*0.5),(1-int2.linlin(0.0,range,0.0,1.0))**(1/2), (int2.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d3 = (((if(int3 > range, 0, if(int3>(range*0.5),(1-int3.linlin(0.0,range,0.0,1.0))**(1/2), (int3.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d4 = (((if(int4 > range, 0, if(int4>(range*0.5),(1-int4.linlin(0.0,range,0.0,1.0))**(1/2), (int4.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d5 = (((if(int5 > range, 0, if(int5>(range*0.5),(1-int5.linlin(0.0,range,0.0,1.0))**(1/2), (int5.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d6 = (((if(int6 > range, 0, if(int6>(range*0.5),(1-int6.linlin(0.0,range,0.0,1.0))**(1/2), (int6.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d7 = (((if(int7 > range, 0, if(int7>(range*0.5),(1-int7.linlin(0.0,range,0.0,1.0))**(1/2), (int7.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d8 = (((if(int8 > range, 0, if(int8>(range*0.5),(1-int8.linlin(0.0,range,0.0,1.0))**(1/2), (int8.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d9 = (((if(int9 > range, 0, if(int9>(range*0.5),(1-int9.linlin(0.0,range,0.0,1.0))**(1/2), (int9.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d10 = (((if(int10 > range, 0, if(int10>(range*0.5),(1-int10.linlin(0.0,range,0.0,1.0))**(1/2), (int10.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d11 = (((if(int11 > range, 0, if(int11>(range*0.5),(1-int11.linlin(0.0,range,0.0,1.0))**(1/2), (int11.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d12 = (((if(int12 > range, 0, if(int12>(range*0.5),(1-int12.linlin(0.0,range,0.0,1.0))**(1/2), (int12.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d13 = (((if(int13 > range, 0, if(int13>(range*0.5),(1-int13.linlin(0.0,range,0.0,1.0))**(1/2), (int13.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); d14 = (((if(int14 > range, 0, if(int14>(range*0.5),(1-int14.linlin(0.0,range,0.0,1.0))**(1/2), (int14.linlin(0.0,range,0.0,1.0))))).linlin(0.0,0.5, 0.0,1))); //// Just the Line ~g1 = Out.ar(16,d1); ~g2 = Out.ar(17,d2); ~g3 = Out.ar(18,d3); ~g4 = Out.ar(19,d4); ~g5 = Out.ar(20,d5); ~g6 = Out.ar(21,d6); ~g7 = Out.ar(22,d7); ~g8 = Out.ar(23,d8); ~g9 = Out.ar(24,d9); ~g10 = Out.ar(25,d10); ~g11 = Out.ar(26,d11); ~g12 = Out.ar(27,d12); ~g13 = Out.ar(28,d13); ~g14 = Out.ar(29,d14); /// Gaussian Curve // Optional Gaussian Curve if the perception of the distance is to linear or non natural. Open for musical expression // depending on the behaviour one wants. You can use other envelopes to distribute the amplitude in space regarding // your musical, perceptive, or research reason. // //Use the variables to produce the window depnding on the width of the funtion and its amplitude // // ~g1 = Out.ar(16,((2.5/(1*(2pi).sqrt))*(e**((((d1-0.5)**2)/((2*width)**2))* (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g2 = Out.ar(17,((2.5/(1*(2pi).sqrt))*(e**((((d2-0.5)**2)/((2*width)**2))* (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g3 = Out.ar(18,((2.5/(1*(2pi).sqrt))*(e**((((d3-0.5)**2)/((2*width)**2))* (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g4 = Out.ar(19,((2.5/(1*(2pi).sqrt))*(e**((((d4-0.5)**2)/((2*width)**2))* (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g5 = Out.ar(20,((2.5/(1*(2pi).sqrt))*(e**((((d5-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g6 = Out.ar(21,((2.5/(1*(2pi).sqrt))*(e**((((d6-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g7 = Out.ar(22,((2.5/(1*(2pi).sqrt))*(e**((((d7-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g8 = Out.ar(23,((2.5/(1*(2pi).sqrt))*(e**((((d8-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g9 = Out.ar(24,((2.5/(1*(2pi).sqrt))*(e**((((d9-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g10 = Out.ar(25,((2.5/(1*(2pi).sqrt))*(e**((((d10-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g11 = Out.ar(26,((2.5/(1*(2pi).sqrt))*(e**((((d11-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g12 = Out.ar(27,((2.5/(1*(2pi).sqrt))*(e**((((d12-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g13 = Out.ar(28,((2.5/(1*(2pi).sqrt))*(e**((((d13-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); // ~g14 = Out.ar(29,((2.5/(1*(2pi).sqrt))*(e**((((d14-0.5)**2)/((2*width)**2))* // (-1)))).linlin(0.0,1.0,0.0,0.9)); /// Sine curve y otros }; ).add; ) ~noise = {Out.ar(34,WhiteNoise.ar(0.5))}.play ~spat = Synth(\ChuitoSpat14); ~xyz = Synth(\ElCubitodeChuito)
reception
comments