Created
February 22, 2022 15:20
-
-
Save lgvr123/80b6b73d1fb7c0cb396eec8e033532e9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
( | |
// Redéfinir freqToScale pour (1) corriger les bugs, (2) retourner une valeur non entière si le degré ne correspond pas. | |
~freqToScale={ arg self, freq; | |
// conversion from frequency to scale value. | |
self.use { | |
var steps = ~scale.respondsTo(\stepsPerOctave).if( | |
{ ~scale.stepsPerOctave }, ~stepsPerOctave | |
); | |
self.freqToNote(freq).round(0.01).keyToDegree(~scale, steps)- ~mtranspose; | |
} | |
}; | |
~bb7=(gt:-2, scale:Scale.mixolydian); | |
~eb7=(gt:3, scale:Scale.mixolydian); | |
~cm7=(gt:0, scale:Scale.minor); | |
~f7=(gt:5, scale:Scale.mixolydian); | |
~bbpmaj=(gt:-2, scale:Scale.majorPentatonic); | |
~bbpmin=(gt:-2, scale:Scale.minorPentatonic); | |
~sg=[~bb7,~eb7,~bb7,~bb7,~eb7,~eb7,~bb7,~bb7,~cm7,~f7,~bb7,~f7]; | |
~pg=[~bbpmaj,~bbpmin,~bbpmaj,~bbpmaj,~bbpmin,~bbpmin,~bbpmaj,~bbpmaj,~bbpmaj,~bbpmaj,~bbpmaj,~bbpmaj]; | |
~g=~sg; | |
) | |
( | |
~chords=Pbind( | |
\dur,Pn(4,~sg.size), | |
#[\gtranspose, \scale], Prout({~sg.do({|s| [s.gt,s.scale].yield})}), | |
\degree,[0,2,4,6], | |
\amp,0.1, | |
); | |
~pE=nil; | |
~solo=Pbind( | |
\dur, Pn(Pconst(4,Pn(Pwhite(0.0,1).lincurve(0,1,0.125,2,4),inf), tolerance: 0.5),~sg.size,\bar), | |
\measure, Pgate(Prout({inf.do({|s| s.yield})}),1,\bar), | |
\gtranspose, Pfunc({|evt| ~sg[evt['measure']]['gt']}), | |
\scale, Pfunc({|evt| ~sg[evt['measure']]['scale']}), | |
\detuneProb, 0.4, | |
\amp, 0.4, | |
\degree, Pfunc({|current| | |
var pd, d; | |
#pd,d=((~pE?(\degree: Rest()))[\degree].isRest).if({ | |
// # d,n=~pE.isNil.if({ | |
// 1er évènement, où l'évèbement précédent était un Silence | |
// ==> On force la gamme pentatonique et on choisit un degré dedans | |
var scale, gt, d, n; | |
scale=~pg[current['measure']]['scale']; | |
gt=~pg[current['measure']]['gt']; | |
current['scale']=scale; | |
current['gtranspose']=gt; | |
d=scale.degrees.choose ; //+ [-1,0,1].choose*scale.degrees.size; | |
pd="Rest"; | |
["rest",d]; | |
},{ | |
var d,pd; | |
var step; | |
var out; | |
var pF=~pE[\freq].value; | |
// n=current[\freqToNote].value(current,pF); | |
pd=~freqToScale.value(current,pF); | |
step=0.gauss(1); | |
// step=[0,-1,1,0.gauss(2)].choose; | |
if(((pd+step)<(-5)).and({step<0}),{ | |
d=pd-step; | |
},{ | |
if(((pd+step)>10).and({step>0}),{ | |
d=pd-step; | |
},{ | |
d=pd+step; | |
}) | |
}); | |
// [pd,step.round(0.01),d.round(0.01)].postln; | |
d=d.round; | |
// d.postln; | |
[pd,d]; | |
}); | |
current['dur'].lincurve(0,2,current.detuneProb,current.detuneProb/2,1).coin.if({d=d+[-1,1].choose*0.5}); | |
postf("was %, is now %\n",pd,d); | |
// Plus la durée est longue, plus je veux que la probalité d'un silence soit grande | |
current['dur'].lincurve(0,2,1,0.1,1).coin.if({d},{Rest()}); | |
}), | |
\callback, {|evt| ~pE=evt; | |
~pE[\note]=~pE.use(~pE[\note]); ~pE[\midinote]=~pE.use(~pE[\midinote]); | |
}.inEnvir, | |
); | |
Ppar([~chords,~solo]).play; | |
) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment