# ex1D09.py # Random Walk from moduleCsound import * tags(1) header(ksmps=32) # --- globals add(r""" seed 1 ;change to zero for always changing results ;****SETTINGS FOR PITCHES**** ;define the pitch street in octave notation giLowestPitch = 7 giHighestPitch = 9 ;set pitch startpoint, deviation range and the first direction giStartPitch = 8 gkPitchDev init 0.2 ;random range for next pitch gkPitchDir init 0.1 ;positive = upwards ;****SETTINGS FOR DENSITY**** ;define the maximum and minimum density (notes per second) giLowestDens = 1 giHighestDens = 8 ;set first density giStartDens = 3 ;set possible deviation in range 0..1 ;0 = no deviation at all ;1 = possible deviation is between half and twice the current density gkDensDev init 0.5 ;set direction in the same range 0..1 ;(positive = more dense, shorter notes) gkDensDir init 0.1 """) # --- instruments add(r""" ;****INSTRUMENT FOR RANDOM WALK**** instr walk ;set initial values kPitch init giStartPitch kDens init giStartDens ;trigger impulses according to density kTrig metro kDens ;if the metro ticks if kTrig == 1 then ;1) play current note event "i", "play", 0, 1.5/kDens, kPitch ;2) calculate next pitch ;define boundaries according to direction kLowPchBound = gkPitchDir < 0 ? -gkPitchDev+gkPitchDir : -gkPitchDev kHighPchBound = gkPitchDir > 0 ? gkPitchDev+gkPitchDir : gkPitchDev ;get random value in these boundaries kPchRnd random kLowPchBound, kHighPchBound ;add to current pitch kPitch += kPchRnd ;change direction if maxima are crossed, and report if kPitch > giHighestPitch && gkPitchDir > 0 then gkPitchDir = -gkPitchDir printks " Pitch touched maximum - now moving down.\n", 0 elseif kPitch < giLowestPitch && gkPitchDir < 0 then gkPitchDir = -gkPitchDir printks "Pitch touched minimum - now moving up.\n", 0 endif ;3) calculate next density (= metro frequency) ;define boundaries according to direction kLowDensBound = gkDensDir < 0 ? -gkDensDev+gkDensDir : -gkDensDev kHighDensBound = gkDensDir > 0 ? gkDensDev+gkDensDir : gkDensDev ;get random value in these boundaries kDensRnd random kLowDensBound, kHighDensBound ;get multiplier (so that kDensRnd=1 yields to 2, and kDens=-1 to 1/2) kDensMult = 2 ^ kDensRnd ;multiply with current duration kDens *= kDensMult ;avoid too high values and too low values kDens = kDens > giHighestDens*1.5 ? giHighestDens*1.5 : kDens kDens = kDens < giLowestDens/1.5 ? giLowestDens/1.5 : kDens ;change direction if maxima are crossed if (kDens > giHighestDens && gkDensDir > 0) || (kDens < giLowestDens && gkDensDir < 0) then gkDensDir = -gkDensDir if kDens > giHighestDens then printks " Density touched upper border - now becoming less dense.\n", 0 else printks " Density touched lower border - now becoming more dense.\n", 0 endif endif endif endin ;****INSTRUMENT TO PLAY ONE NOTE**** instr play ;get note as octave and calculate frequency and panning iOct = p4 iFreq = cpsoct(iOct) iPan ntrpol 0, 1, iOct, giLowestPitch, giHighestPitch ;calculate mode filter quality according to duration iQ ntrpol 10, 400, p3, .15, 1.5 ;generate tone and throw out aImp mpulse 1, p3 aMode mode aImp, iFreq, iQ aOut linen aMode, 0, p3, p3/4 aL, aR pan2 aOut, iPan outs aL, aR endin """) tags(2) # --- score add('i "walk" 0 999') tags(3) writeRun(__file__)
Tuesday, July 11, 2017
ex1D09. Random Walk
Subscribe to:
Post Comments (Atom)
-
Amplitudes should follow the dB scale and change via the log function. # ex1C01.py # dB vs linear from moduleCsound import * tag...
-
# ex1D09.py # Random Walk from moduleCsound import * tags( 1 ) header(ksmps =32 ) # --- globals add( r""" seed 1...
-
# ex2C03.py # Midi All In from moduleCsound import * add(startSyn) add(startOpt) add( "-+rtmidi=virtual -Ma -odac" ) add(...
No comments:
Post a Comment