» codelab : http://codelab.fr/accueil » Forum : SuperCollider : http://codelab.fr/supercollider » Cherche collaboration... : http://codelab.fr/1585 Ceci est la version imprimable d'un sujet du forum, pour retourner à la version complète : Cherche collaboration... |
artflx — 2010-03-17 04:22:29 |
Bonjours, |
oyster_twiter — 2010-04-06 22:24:18 |
Bonjour Artfx, //generative stacked thirds, try a few times... //sound, all parameters have lag for gradual changes ( SynthDef(\stackedthirdvoice,{|freq=440, amp=0.1, numharmonics=1, pan=0.0, lagrate= 1.0, modrate= 1.0, modphase= 0.0, modamp= 0.0| var blip; blip= Blip.ar(freq.lag(lagrate), numharmonics.lag(lagrate), amp.lag(lagrate))*((1.0-modamp.lag(lagrate))+(modamp.lag(lagrate)*SinOsc.ar(modrate.lag(lagrate), modphase.lag(lagrate), 0.5, 0.5))); Out.ar(0,PanAz.ar(2,blip,pan.lag(3.0))) }).send(s); ) //run more than one of me at once if you like ( var root, numthirds; var thirdsarray, ratios, freqs; var voices, amp; var runningproduct; var ampchangechance, numharmonicschangechance, panchangechance; var minthird, maxthird; var changespeed; var arpeggiochance, resetchance, modchance; var modratenow,modphasenow,modampnow; var mode= 3.rand; numthirds = rrand(4,rrand(10,20)); ampchangechance = [rrand(0.01,rrand(0.01,1.0)),exprand(0.001,numthirds.reciprocal),numthirds.reciprocal].choose; numharmonicschangechance = [rrand(0.01,rrand(0.01,1.0)),exprand(0.001,numthirds.reciprocal),numthirds.reciprocal].choose; panchangechance = [rrand(0.01,rrand(0.01,1.0)),exprand(0.001,numthirds.reciprocal),numthirds.reciprocal].choose; arpeggiochance = rrand(0.0,rrand(0.05,rrand(0.05,1.0))); resetchance = rrand(0.0,0.1); modchance = rrand(0.0,0.3); if(0.6.coin,{modampnow=0.0; modchance=0.0; }); changespeed = rrand(0.5,3.5); modratenow = rrand(1.0,10.0)*(changespeed.reciprocal); modphasenow = pi.rand; modampnow = 1.0.rand; root = rrand(24,60).midicps; amp = 0.5/numthirds; //between just over 2.5 semitones and just under 4.5, where 3 is minor third and 4 is major minthird = rrand(2.51,2.75); maxthird = rrand(4.25,4.49); if(0.02.coin,{minthird=maxthird;}); thirdsarray= Array.rand(numthirds,minthird,maxthird).midiratio; runningproduct = 1.0; ratios = [1]++(Array.fill(numthirds,{|i| runningproduct = runningproduct * thirdsarray[i]; runningproduct;})); freqs = root*ratios; voices = Array.fill(numthirds+1,{|i| Synth(\stackedthirdvoice,[\freq, freqs[i], \amp, amp, \pan, 1.0.rand.rand2, \lagrate, changespeed, \modrate, modratenow,\modphase, modphasenow+(0.1.rand), \modamp, modampnow])}); { inf.do{ var which; which = numthirds.rand; thirdsarray[which] = rrand(minthird,maxthird).midiratio; runningproduct = 1.0; ratios = [1]++(Array.fill(numthirds,{|i| runningproduct = runningproduct * thirdsarray[i]; runningproduct;})); freqs = root*ratios; switch(mode, 0,{for(which+1,which+1,{|i| voices[i].set(\freq, freqs[i])});}, 1,{for(which+1,rrand(which+1,numthirds),{|i| voices[i].set(\freq, freqs[i])});}, 2,{for(which+1,numthirds,{|i| voices[i].set(\freq, freqs[i])});} ); if(resetchance.coin,{voices.do{|voice| voice.set(\numharmonics, 1, \amp, [amp,0.0].choose); } }); if(arpeggiochance.coin,{ //zero everything voices.do{|voice| voice.set(\amp,0.0); }; //arpeggiate { var startpoint= ((numthirds+1).rand); var direction = (-1)**(2.rand); var speed; speed= (rrand(changespeed-0.4,changespeed+0.6))/numthirds; (numthirds+1).do{|i| var indexnow= (startpoint+(i*direction)); voices.wrapAt(indexnow).set(\amp, amp); speed.wait; }; (numthirds+1).do{|i| var indexnow= (startpoint+((numthirds-i)*direction)); voices.wrapAt(indexnow).set(\amp, amp); speed.wait; }; }.fork; }); if(modchance.coin,{ if(0.4.coin,{ modratenow = rrand(1.0,10.0)*(changespeed.reciprocal); modphasenow = pi.rand; modampnow = 1.0.rand; voices.do{|v| v.set(\modrate, modratenow,\modphase, modphasenow, \modamp, modampnow); } },{ voices.do{|v| v.set(\modrate, rrand(1.0,10.0)*(changespeed.reciprocal),\modphase, pi.rand, \modamp, 1.0.rand); } }); }); rrand(changespeed-0.5,changespeed+0.5).wait; } }.fork; //independent voices.do{|voice, i| { inf.do{ if(ampchangechance.coin,{voice.set(\amp,[amp.rand,amp,exprand(0.001,0.1),0.0].choose)}); rrand(changespeed-0.1,changespeed+0.9).wait; } }.fork; { inf.do{ if(numharmonicschangechance.coin,{voice.set(\numharmonics,[1,rrand(2,6),rrand(3,10),rrand(7,20),rrand(11,31)].wchoose([0.35,0.35,0.2,0.08,0.02]))}); rrand(changespeed-0.3,changespeed+0.7).wait; } }.fork; { inf.do{ if(panchangechance.coin,{voice.set(\pan,1.0.rand.rand2)}); rrand(changespeed-0.2,changespeed+0.8).wait; } }.fork; } ) __________________ |
artflx — 2010-04-09 00:57:09 |
Bonjour, |