Bonjours,
Je travail depuis environs 6 mois avec SuperCollider (j'ai travaillé beaucoup avec Pure Data jusqu'à ce moment) et je développe actuellement un projet qui se veut assez vaste (du moins je l'espère ).
Et voilà, le projet me semble bien entamé et je cherche donc des gents qui seraient intéressés à collaborer à la suite de son développement. En gros, le projet, dont le nom est " GEN, créez de la musique générative dans votre salon! ", consiste à développer un logiciel relativement complet et intuitif de création de musique générative (avec ma connaissance imparfaite de ce qu'est la musique générative ). Bon, à l'heure actuelle, la base du projet est bien établie, c'est-à-dire que le développement des éléments de base est terminé et tout semble fonctionnel (système de syncro, d'enregistrement, de sauvegarde de presets, ect.) et il reste donc le plus intéressant à faire, soit mettre la chaire autour de l'os (ajouter des effets, améliorer les fonctions des séquenceurs, etc.).
Aussi, un de mes soucis dans ce projet est de convertir certains morceaux de code en classe (les samplers, en autre...) afin d'optimiser le programme. En effet, mon code tel qu'il est écrit actuellement comporte un grand nombre de variables globales et je cherche donc à réduire leur utilisation. Enfin, si vous avez des avis à ce sujet, je serais plutôt content de les connaître.
Alors, si vous êtes intéresser à participer au développement de ce projet, je vous invite à communiquer avec moi par courriel ( flx.artiste@gmail.com ) ou à vous rendre sur mon site web afin de télécharger le dernier développement du projet ( www.artflx.com/Espace_code.php#gen ). Et n'hésitez pas à me poser des questions sur son utilisation car il n'y a que très peu d'indication pour l'instant... Mais ça viendras en temps et lieu
Bien entendu, je serai ravi de connaître vos commentaires ou suggestion sur ce projet
PS: Vous trouverai aussi quelques abstractions Pd sur la même page (sampler, séquenceur, système de preset, etc.), pour ceux que ça intéresse.
Hors ligne
Bonjour Artfx,
Je regarderais ton code source plus en profondeur quand j'aurais un peu de temps.
Merci en tout cas de le fournir !
Voici un petit bout de musique générative de notre ami Click Nilson, ça peut te donner des idées :
//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; } )
__________________
Bonne suite !
+++
Hors ligne
Bonjour,
J'ai ajouté un démo de ce qui est possible de faire à l'heure actuelle avec le projet "Gen, créez de la musique générative dans votre salon!". Vous pouvez l'écouter sur mon site web, à l'adresse suivante : http://artflx.olympe-network.com/Espace … couter#gen
Notez que cette démo à été réalisé très rapidement et que je la changerai sous peu pour une démo plus pertinente. Bref, au fur et à mesure que ce projet évoluera, je changerai de démo afin de donner une idée plus juste de ce qu'il peut faire.
Hors ligne