-g -odac -m0 /* Debugger - Unfixed Bugs : BUG #3 By Richard Knight 2021 http://1bpm.net mailto: _@1bpm.net */ sr = 44100 ksmps = 128 nchnls = 2 0dbfs = 1 seed 0 #define BUG_VERSION #1.0# gitempo init -1 gSprepare[] fillarray "hat909" gSequenced[] fillarray "hat909", "clap909", "kick", "rim", "chord1", "chord2", "hat909c", "mel1", "chord3" gisectionlengths ftgen 0, 0, -64, -7, 0 gisections[][] init 64, 64 gisectiondataindex = 0 gisectiondata[][] init 99, 6 gichordgroups[][] init 16, 12 gisectionchords[] init 16 gipreparedfns[] init lenarray(gSprepare) gipreparedfnindex init 0 gicurrentchordfn init -1 gkcurrentchordlength init -1 gkpump = 0 gkreverse init 0 #include "wavetables.udo" #include "bussing.udo" #include "hat909.src" #include "text_tools.udo" #include "effects.udo" gicurrentchordnum = 0 gilastchordgroup = -1 gilastsection = -1 instr setcurrentchord isection = p4 ichordincrement = p5 ichordgroup = gisectionchords[isection] if (ichordgroup != gilastchordgroup || isection != gilastsection) then gicurrentchordnum = 0 gilastchordgroup = ichordgroup gilastsection = isection elseif (ichordincrement == 1) then if (gicurrentchordnum + 1 < lenarray(gichordgroups, 2) - 1) then if (gichordgroups[ichordgroup][gicurrentchordnum + 1] == 0) then gicurrentchordnum = 0 else gicurrentchordnum += 1 endif else gicurrentchordnum = 0 endif else gicurrentchordnum = 0 endif ifn = gichordgroups[ichordgroup][gicurrentchordnum] gkcurrentchordlength = tab:k(0, ifn) gicurrentchordfn = ifn turnoff endin instr bootstrap iprepareindex = p4 if (iprepareindex >= lenarray(gSprepare)) then notify("Parsing events") parsetext("/home/bargepole/bpcheckout/csTech/TechnoPieces/BUG3/source.txt"); "source.txt") notify("Running sequencer") event_i "i", "sequencer", 0, 3600 turnoff else Sprepareinstr = gSprepare[iprepareindex] notify(sprintf("Preparing audio for %s", Sprepareinstr)) Srcinstr = sprintf("src_%s", Sprepareinstr) ilen = 0.3 p3 = ilen ifn ftgen 0, 0, sr*ilen, 7, 0 gipreparedfns[gipreparedfnindex] = ifn gipreparedfnindex += 1 ktimek timeinstk if (ktimek == 1) then kcycles = ilen * kr kcount init 0 loop: apos phasor (1/(ftlen(ifn)/sr)) aproc subinstr Srcinstr, 1, 0.1 tabw aproc, apos, ifn, 1 loop_lt kcount, 1, kcycles, loop elseif (ktimek == 5) then event "i", "bootstrap", 0, 1, iprepareindex+1 turnoff endif endif endin opcode arrseq, 0, Skk Splayer, kpos, ksection xin idel = 0.3 ; delay for chord update Sinstrument = sprintf("play_%s", Splayer) instrindex = gettextindex(Splayer) kdata = gisections[ksection][instrindex] ;ksection if (kdata != -1) then ; null section kon = tablekt:k(kpos, gisectiondata[kdata][0]) if (kon == 1) then kchance = tablekt:k(kpos, gisectiondata[kdata][3]) if (random:k(0, 1) < kchance) then ktime = (kpos % 2 == 0) ? 0 : 0.04 kdur = tablekt:k(kpos, gisectiondata[kdata][1]) ;kamp = tablekt:k(kpos, gisectiondata[kdata][2]) event "i", Sinstrument, idel+ktime, kdur, kpos, kdata endif endif endif endop ;gintervals1[] fillarray 0, 4, 6, 7, 11 gintervals1[] fillarray 0, 3, 7, 9, 10 instr play_bass iamp = getparameter(p4, p5, 2) iaugment = (random(0, 1) > 0.9) ? 24 : 36 inote = tab_i(random(1, ftlen(gicurrentchordfn) - 3), gicurrentchordfn) - iaugment a1 foscil 0.5, cpsmidinn(inote), 1, 2, random(0, 6), gifnSine a1 pareq a1, 150, 0.24, 0.9 a1 pareq a1, 80, 1.3, 0.9 kenv linseg 1, p3, 0 aout = a1*kenv bus_mix("master", aout, aout) endin instr play_mel1 iamp = getparameter(p4, p5, 2) ihigher = getparameter(p4, p5, 4) iaugment1 = (ihigher == 1 && random(0, 1) > 0.6) ? 12 : 0 ifreq1 = cpsmidinn(tab_i(random(1, ftlen(gicurrentchordfn) - 1), gicurrentchordfn) + iaugment1) ifreq2 = cpsmidinn(tab_i(random(1, ftlen(gicurrentchordfn) - 1), gicurrentchordfn)) kfreq linseg ifreq1, p3*0.4, ifreq1, p3*0.2, ifreq2, p3*04, ifreq2 kfreq += oscil(10, 6) kcar = abs(oscil(4, 0.001)) + 1 a1 foscil 0.5, kfreq, kcar, 1, random(0, 6), gifnSine a1 butterlp a1, 10000 a1 butterhp a1, 600 kenv linseg 0, p3*0.2, random(0.8, iamp), p3*0.6, random(0.8, iamp), p3*0.2, 0 aL, aR pan2 a1*kenv*0.7, random(0.2, 0.8) bus_mix("reverb", aL, aR) bus_mix("master", aL, aR) endin instr play_chorditem1 inote = p4 kfreq1 linseg cpsmidinn(inote-36), p3*0.1, cpsmidinn(inote+12), p3*0.9, cpsmidinn(inote+12) kindex linseg 1, p3, 5 aL1 foscil 0.1, kfreq1 + oscil:k(3, 10), 5, 1, kindex, gifnSquare aR1 foscil 0.1, kfreq1 + oscil:k(4, 6), 5, 1, kindex, gifnSquare aL1 butterlp aL1, abs(oscil(1000, 3)) + 500 aR1 butterlp aR1, abs(oscil(1000, 5)) + 500 kfreq2 linseg cpsmidinn(inote-12), p3*0.1, cpsmidinn(inote), p3*0.7, cpsmidinn(inote), p3*0.2, cpsmidinn(inote-36) aL2 foscil 0.1, kfreq2 + oscil:k(3, 7), 2, 5, 5-kindex, gifnSine aR2 foscil 0.1, kfreq2 + oscil:k(3, 5), 3, 3, 5-kindex, gifnSine kenv1 linseg 1, p3*0.8, 1, p3*0.2, 0 kenv2 linseg 0, p3*0.3, 1, p3*0.69, 1, p3*0.01, 0 aL butterhp (aL1*kenv1)+(aL2*kenv2), 500 aR butterhp (aR1*kenv1)+(aR2*kenv2), 500 bus_mix("reverb", aL*0.4, aR*0.4) aL *= 1-gkpump aR *= 1-gkpump bus_mix("master", aL, aR) endin instr global_reverb aL, aR bus_read "reverb" ;aL nreverb aL, 2.4, 0.3 ;aR nreverb aR, 2.1, 0.2 aL, aR freeverb aL, aR, 0.4, 0.3 ;outs aL, aR bus_mix("master", aL, aR) endin instr play_chorditem2 inote = p4 a1 fmbell 0.2, cpsmidinn(inote+12), 1, 3, 0.05, 10, gifnSine, gifnSquare, gifnSine, gifnSquare, gifnSine a1 butterhp a1, 700 kenv linseg 0, p3*0.5, 1, p3*0.4, 1, p3*0.1, 0 aL, aR ensembleChorus a1*10*kenv, .07, .003, .75, 1, 12, gifnSine bus_mix("reverb", aL*0.2, aR*0.2) aL *= 1-gkpump aR *= 1-gkpump bus_mix("master", aL, aR) endin instr play_chorditem3 inote = p4 - 12 aL fmb3 0.2, cpsmidinn(inote), 1, 2, 0.07, 10, gifnSine, gifnSquare, gifnSine, gifnSquare, gifnSine aR fmb3 0.2, cpsmidinn(inote), 1, 1.4, 0.02, 10, gifnSine, gifnSine, gifnSine, gifnSquare, gifnSine aL butterhp aL, 300 aR butterhp aR, 300 kenv linseg 1, p3*0.5, 1, p3*0.4, 1, p3*0.1, 0 aL *= kenv aR *= kenv bus_mix("reverb", aL*0.8, aR*0.8) bus_mix("master", aL, aR) endin instr play_chord1 iamp = getparameter(p4, p5, 2) index = 1 while (index < ftlen(gicurrentchordfn)) do event_i "i", "play_chorditem1", 0, p3, tab_i(index, gicurrentchordfn) index += 1 od endin instr play_chord2 iamp = getparameter(p4, p5, 2) index = 1 while (index < ftlen(gicurrentchordfn)) do event_i "i", "play_chorditem2", 0, p3, tab_i(index, gicurrentchordfn) index += 1 od endin instr play_chord3 iamp = getparameter(p4, p5, 2) index = 1 while (index < ftlen(gicurrentchordfn)) do event_i "i", "play_chorditem3", 0, p3, tab_i(index, gicurrentchordfn) index += 1 od endin /*instr play_chord1 index = 0 Sinstrument = sprintf("play_chorditem%d", p4) while (index < lenarray(gintervals1)) do event_i "i", Sinstrument, 0, p3, gintervals1[index] + 52 index += 1 od endin */ instr global_out imastergain = 0.7 aL, aR bus_read "master" ;aL butterhp aL, 150 ;aR butterhp aR, 150 ilooptime = (60/gitempo)*4 kreverse delayk gkreverse, 0. if (kreverse == 1) then aL butterhp aL, 150 aR butterhp aR, 150 aL, krecL sndloop aL, -1, kreverse, ilooptime, 0 aR, krecR sndloop aR, -1, kreverse, ilooptime, 0 endif outs aL*imastergain, aR*imastergain endin instr sequencer isection = 1 event_i "i", "setcurrentchord", 0, 1, isection event_i "i", "global_reverb", 0, p3 event_i "i", "global_out", 0, p3 kmetro metro (gitempo/60)*4 kposabs init 0 kposchord init 0 kpos init 0 ksection init isection if (kmetro == 1) then /*if (kpos == 0) then event "i", "play_chord1", 0, 2, 1 endif if (kpos == 10) then event "i", "play_chord1", 0, 2, 2 endif */ ;if (random:k(0, 1) > 0.6) then ; event "i", "play_bass", (kpos % 2 == 0) ? 0 : 0.04, 0.1 ;endif if (random:k(0, 1) > 0.6) then ;event "i", "play_fm2", (kpos % 2 == 0) ? 0 : 0.04, 0.1 endif arrseq "chord1", kpos, ksection arrseq "chord2", kpos, ksection arrseq "chord3", kpos, ksection arrseq "bass", kpos, ksection arrseq "hat909", kpos, ksection arrseq "hat909c", kpos, ksection arrseq "clap909", kpos, ksection arrseq "kick", kpos, ksection arrseq "rim", kpos, ksection arrseq "mel1", kpos, ksection if (kpos < 31) then kpos += 1 else kpos = 0 endif if (kposabs+16 > tab:k(ksection, gisectionlengths)*4) then gkreverse = 1 endif if (kposabs < tab:k(ksection, gisectionlengths)*4) then kposabs += 1 else gkreverse = 0 ksection += 1 kposabs = 0 kposchord = 0 event "i", "play_crash", 0, 1 event "i", "setcurrentchord", 0, 1, ksection, 0 endif if (kposchord < gkcurrentchordlength*4) then kposchord += 1 else kposchord = 0 event "i", "setcurrentchord", 0, 1, ksection, 1 endif endif endin instr play_rim iamp = getparameter(p4, p5, 2) icps = 490*exp(log(2.0)*(57.0-69.0)/12.0) acps expon icps, 0.0025, icps * 0.5 acps = acps + icps iamp = 1 a1a phasor acps, 0.0 a1b phasor acps, 0.5 afmenv expon 1.0, 0.02, 0.5 a1 = (a1a-a1b)*6.0*afmenv acps = acps*(1.0+a1) a0 oscil3 1.0, acps a1 unirand 2.0 a1 tone a1-1.0, 2000 a0 = a0 + a1*0.1 aenv expon 1.0, 0.005, 0.5 a0 limit 4.0*iamp*a0*aenv, -1.0, 1.0 a0 table3 a0*4096.0, gifnSine, 0, 0, 1 kffrq expseg 2000, 0.07, 100, 1, 100 a0x tone a0, 10000 a0y = a0 - a0x a0x delay a0y, 0.0002 a0 = a0 - a0x*4.0 a0 pareq a0, kffrq, 0, 0.7071, 2 a_ linseg 1, p3-0.1, 1, 0.025, 0, 1, 0 a0 = a0*a_ aL, aR pan2 a0*iamp, random(0.3, 0.8) bus_mix("reverb", aL*0.3, aR*0.3) bus_mix("master", aL, aR) endin instr play_hat909 iamp = getparameter(p4, p5, 2) index = 0 ifn = gipreparedfns[index] apos phasor (1/(ftlen(ifn)/sr)) aout1 table3 apos*0.4, ifn, 1 aout2 table3 apos*0.9, ifn, 1 aout3 table3 apos*1.1, ifn, 1 amix1 = delay(aout1*0.6, 0.02) + delay(aout2*0.8, 0.01) amix2 = delay(aout1*0.8, 0.01) + delay(aout2*0.6, 0.02) aL = (aout3 + amix1 + (amix2 * 0.3))*0.5*iamp aR = (aout3 + amix2 + (amix1 * 0.3))*0.5*iamp bus_mix("reverb", aL*0.1, aR*0.1) bus_mix("master", aL, aR) endin instr play_hat909c iamp = getparameter(p4, p5, 2) index = 0 ifn = gipreparedfns[index] apos phasor (1/(ftlen(ifn)/sr)) aL table3 apos*0.65, ifn, 1 aR table3 apos*0.76, ifn, 1 aL *= iamp * 0.6 aR *= iamp * 0.6 aL *= 1-gkpump aR *= 1-gkpump bus_mix("reverb", aL*0.1, aR*0.1) bus_mix("master", aL, aR) endin instr play_crash iamp = 1 index = 0 ifn = gipreparedfns[index] apos phasor (1/(ftlen(ifn)/sr)) aL table3 apos, ifn, 1 aR table3 apos, ifn, 1 aL reverb aL, 8 aR reverb aR, 8 kfreq line 1400, p3, 100 aL *= oscil(0.9, kfreq) * iamp * 0.2 aR *= oscil(0.9, kfreq) * iamp * 0.2 ;aL *= 1-gkpump ;aR *= 1-gkpump bus_mix("reverb", aL*0.9, aR*0.9) bus_mix("master", aL, aR) endin instr play_clap909 iamp = getparameter(p4, p5, 2) ilowpass = getparameter(p4, p5, 4) p3 = 0.065 aL noise 1, 0.9 aR noise 0.5, 0.4 aL butterbp aL, 1200, 1100 aR butterbp aR, 1200, 1100 irevsend = 0.2 if (ilowpass == 1) then aL butterlp aL, 900 aR butterlp aR, 900 irevsend = 0.6 endif kamp1 linseg 1, p3*0.1, 0, p3*0.1, 1, p3*0.2, 0.1, p3*0.3, 0.5, p3*0.2, 0, p3*0.05, 0.4, p3*0.05, 0 kamp2 linseg 1, p3*0.15, 0, p3*0.15, 1, p3*0.1, 0.1, p3*0.2, 0.5, p3*0.3, 0, p3*0.05, 0.4, p3*0.05, 0 aL = aL*kamp1*9*iamp aR = aR*kamp2*9*iamp bus_mix("reverb", aL*irevsend, aR*irevsend) bus_mix("master", aL, aR) endin instr play_kick ; 808 style kick iamp = getparameter(p4, p5, 2) xtratim 0.1 krelease release ktune init 0 kmul transeg 0.2, p3*0.5, -15, 0.01, p3*0.5, 0, 0 kbend transeg 0.5, 1.2, -4, 0, 1, 0, 0 asig gbuzz 0.5, 50*octave(ktune)*semitone(kbend), 20, 1, kmul, gifnCosine aenv transeg 1, p3-0.004, -6, 0 gkpump = k(aenv) aatt linseg 0, 0.004, 1 asig = asig*aenv*aatt aenv linseg 1, 0.07, 0 acps expsega 400, 0.07, 0.001, 1, 0.001 aimp oscili aenv, acps*octave(ktune*0.25) amix = ((asig*0.7)+(aimp*0.35))*2*iamp gkpump = min(rms(amix) * 7, 1) amix distort amix, 0.4, gifnSine ;amix butterhp amix, 150 bus_mix("master", amix, amix) endin i"bootstrap" 0 1 0