<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform ; Audio out -odac ;;;RT audio ; For Non-realtime ouput leave only the line below: ; -o partikkel_softsync.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 20 nchnls = 2 ; Example by Oeyvind Brandtsegg 2007, revised 2008 giSine ftgen 0, 0, 65537, 10, 1 giCosine ftgen 0, 0, 8193, 9, 1, 1, 90 giSigmoRise ftgen 0, 0, 8193, 19, 0.5, 1, 270, 1 ; rising sigmoid giSigmoFall ftgen 0, 0, 8193, 19, 0.5, 1, 90, 1 ; falling sigmoid ; ************************************************* ; example of soft synchronization of two partikkel instances ; ************************************************* instr 1 /*score parameters*/ igrainrate = p4 ; grain rate igrainsize = p5 ; grain size in ms igrainFreq = p6 ; fundamental frequency of source waveform iosc2Dev = p7 ; partikkel instance 2 grain rate deviation factor iMaxSync = p8 ; max soft sync amount (increasing to this value during length of note) /*overall envelope*/ iattack = 0.001 idecay = 0.2 isustain = 0.7 irelease = 0.2 amp linsegr 0, iattack, 1, idecay, isustain, 1, isustain, irelease, 0 kgrainfreq = igrainrate ; grains per second kdistribution = 0 ; periodic grain distribution idisttab = -1 ; (default) flat distribution used ; for grain distribution async = 0 ; no sync input kenv2amt = 0 ; no secondary enveloping ienv2tab = -1 ; default secondary envelope (flat) ienv_attack = giSigmoRise ; default attack envelope (flat) ienv_decay = giSigmoFall ; default decay envelope (flat) ksustain_amount = 0.3 ; time (in fraction of grain dur) at ; sustain level for each grain ka_d_ratio = 0.2 ; balance between attack and decay time kduration = igrainsize ; set grain duration in ms kamp = 0.2*0dbfs ; amp igainmasks = -1 ; (default) no gain masking kwavfreq = igrainFreq ; fundamental frequency of source waveform ksweepshape = 0 ; shape of frequency sweep (0=no sweep) iwavfreqstarttab = -1 ; default frequency sweep start ; (value in table = 1, which give ; no frequency modification) iwavfreqendtab = -1 ; default frequency sweep end ; (value in table = 1, which give ; no frequency modification) awavfm = 0 ; no FM input ifmamptab = -1 ; default FM scaling (=1) kfmenv = -1 ; default FM envelope (flat) icosine = giCosine ; cosine ftable kTrainCps = kgrainfreq ; set trainlet cps equal to grain ; rate for single-cycle trainlet in ; each grain knumpartials = 3 ; number of partials in trainlet kchroma = 1 ; balance of partials in trainlet ichannelmasks = -1 ; (default) no channel masking, ; all grains to output 1 krandommask = 0 ; no random grain masking kwaveform1 = giSine ; source waveforms kwaveform2 = giSine ; kwaveform3 = giSine ; kwaveform4 = giSine ; iwaveamptab = -1 ; mix of 4 source waveforms and ; trainlets (set to default) asamplepos1 = 0 ; phase offset for reading source waveform asamplepos2 = 0 ; asamplepos3 = 0 ; asamplepos4 = 0 ; kwavekey1 = 1 ; original key for source waveform kwavekey2 = 1 ; kwavekey3 = 1 ; kwavekey4 = 1 ; imax_grains = 100 ; max grains per k period iopcode_id = 1 ; id of opcode, linking partikkel ; to partikkelsync a1 partikkel kgrainfreq, kdistribution, idisttab, async, kenv2amt, \ ienv2tab,ienv_attack, ienv_decay, ksustain_amount, ka_d_ratio, \ kduration, kamp, igainmasks, kwavfreq, ksweepshape, \ iwavfreqstarttab, iwavfreqendtab, awavfm, ifmamptab, kfmenv, \ icosine, kTrainCps, knumpartials, kchroma, ichannelmasks, \ krandommask, kwaveform1, kwaveform2, kwaveform3, kwaveform4, \ iwaveamptab, asamplepos1, asamplepos2, asamplepos3, asamplepos4, \ kwavekey1, kwavekey2, kwavekey3, kwavekey4, imax_grains, iopcode_id async1 partikkelsync iopcode_id ; clock pulse output of the ; partikkel instance above ksyncGravity line 0, p3, iMaxSync ; strength of synchronization aphase2 init 0 asyncPolarity limit (int(aphase2*2)*2)-1, -1, 1 ; use the phase of partikkelsync instance 2 to find sync ; polarity for partikkel instance 2. ; If the phase of instance 2 is less than 0.5, we want to ; nudge it down when synchronizing, ; and if the phase is > 0.5 we want to nudge it upwards. async1 = async1*ksyncGravity*asyncPolarity ; prepare sync signal ; with polarity and strength kgrainfreq2 = igrainrate * iosc2Dev ; grains per second for second partikkel instance iopcode_id2 = 2 a2 partikkel kgrainfreq2, kdistribution, idisttab, async1, kenv2amt, \ ienv2tab, ienv_attack, ienv_decay, ksustain_amount, ka_d_ratio, \ kduration, kamp, igainmasks, kwavfreq, ksweepshape, \ iwavfreqstarttab, iwavfreqendtab, awavfm, ifmamptab, kfmenv, \ icosine, kTrainCps, knumpartials, kchroma, ichannelmasks, \ krandommask, kwaveform1, kwaveform2, kwaveform3, kwaveform4, \ iwaveamptab, asamplepos1, asamplepos2, asamplepos3, \ asamplepos4, kwavekey1, kwavekey2, kwavekey3, kwavekey4, \ imax_grains, iopcode_id2 async2, aphase2 partikkelsync iopcode_id2 ; clock pulse and phase ; output of the partikkel instance above, ; we will only use the phase outs a1*amp, a2*amp endin </CsInstruments> <CsScore> /*score parameters igrainrate = p4 ; grain rate igrainsize = p5 ; grain size in ms igrainFreq = p6 ; frequency of source wave within grain iosc2Dev = p7 ; partikkel instance 2 grain rate deviation factor iMaxSync = p8 ; max soft sync amount (increasing to this value during length of note) */ ; GrRate GrSize GrFund Osc2Dev MaxSync i1 0 10 2 20 880 1.3 0.3 s i1 0 10 5 20 440 0.8 0.3 s i1 0 6 55 15 660 1.8 0.45 s i1 0 6 110 10 440 0.6 0.6 s i1 0 6 220 3 660 2.6 0.45 s i1 0 6 220 3 660 2.1 0.45 s i1 0 6 440 3 660 0.8 0.22 s e e </CsScore> </CsoundSynthesizer>