-odac -m0 /* Debugger - Unfixed Bugs : BUG #7 http://git.1bpm.net/csd-unfixedbugs1/about/ By Richard Knight 2021 http://1bpm.net q@1bpm.net */ sr = 44100 ksmps = 10 nchnls = 2 0dbfs = 1 seed 0 #define NOFILEIO ## ; file IO with readfi not supported on all platforms: disables bid_loadfile gkmastergain init 1 ; master gain gkpump = 0 ; kick ducking control gksection init -1 #include "wavetables.udo" ; general waveforms #include "bussing.udo" ; global audio bussing #include "bid.udo" ; Bug Infested Directive tools and parsing #include "instruments.udo" ; sound generators #include "txt_tools.udo" ; text tools #include "src_vox.udo" #include "oprepare.udo" ; offline preparation system instr global_delay1 itm = gibid_beattime aL, aR bus_read "delay1" aL multitap aL, itm/2, random(0.1, 0.5), itm/4, random(0.1, 0.5), itm*2, random(0.1, 0.5) aR multitap aL, itm, random(0.1, 0.5), itm*3, random(0.1, 0.5), itm/8, random(0.1, 0.5) bus_mix("master", aL*0.8, aR*0.8) endin instr global_delay2 aL, aR bus_read "delay2" ifreq1 = (gibid_tempo / 60) / 8 kfdbkL = abs(oscil(0.8, 1.63)) kfdbkR = abs(oscil(0.8, 1.67)) atimeL = abs(oscil(0.2, ifreq1)) + 0.01 atimeR = abs(oscil(0.2, ifreq1)) + 0.01 aLdlr delayr 1 aLdel deltapi atimeL aLdel butterhp aLdel, 130 delayw aL + (aLdel * kfdbkL) aRdlr delayr 1 aRdel deltapi atimeR aRdel butterhp aRdel, 130 delayw aR + (aRdel * kfdbkR) aLdel *= 1-gkpump aRdel *= 1-gkpump bus_mix("master", aLdel, aRdel) endin /* Master audio output */ instr global_master igain = 1 aL, aR bus_read "master" itime1 = tab_i(1, gibid_sectionlengths)*gibid_beattime aclapL, aclapR bus_read "clap" acofferL, acofferR bus_read "coffer" akickL, akickR bus_read "kick" ahat1L, ahat1R bus_read "hat1" arimL, arimR bus_read "rim" kclapamp init 0 kcofferamp init 0 if (gksection == 1) then kclapamp linseg 0, itime1*0.3, 0, itime1*0.3, 1, itime1*0.4, 1 kcofferamp line 0, itime1, 1 krevamp linseg 1, itime1*0.2, 0, itime1*0.8, 0 adeltime linseg 0.05, itime1*0.1, 0 adumpL delayr 1 arL deltapi adeltime*abs(oscil(1, 3)) delayw aL adumpR delayr 1 arR deltapi adeltime*abs(oscil(1, 2)) delayw aR klpf linseg 100, itime1*0.05, 6000, itime1*0.05, 8000, itime1*0.1, 22050, itime1*0.8, 22050 arL butterlp arL, klpf arR butterlp arR, klpf aL = (krevamp*arL) + ((1-krevamp)*aL) aR = (krevamp*arR) + ((1-krevamp)*aR) elseif (gksection == 3) then kclapamp = 1 kcofferamp = 1 endif aL += (aclapL * kclapamp) + (acofferL * kcofferamp) + (akickL * kclapamp) + (ahat1L * kcofferamp) + (arimL * kcofferamp) aR += (aclapR * kclapamp) + (acofferR * kcofferamp) + (akickR * kclapamp) + (ahat1R * kcofferamp) + (arimR * kcofferamp) aL limit aL*0.5, -1, 1 aR limit aR*0.5, -1, 1 outs aL*gkmastergain*igain, aR*gkmastergain*igain endin /* Print notification of performance time since last notification or if isection is -1, print completion notification */ gitimetrack times instr notify_change isection = p4 itime times if (isection == -1) then tt_notify(sprintf"Complete, runtime: %s", tt_parsetime(itime))) exitnow else isectiontime = itime - gitimetrack tt_notify(sprintf("%s : section %d complete in %s", tt_parsetime(itime), isection, tt_parsetime(isectiontime))) gitimetrack = itime endif turnoff endin /* Initialise the performance: run offline preparation and then call parseandrun */ instr bootstrap Sprepare[] fillarray "vox" oprepare(Sprepare, "parseandrun") turnoff endin /* Parse BID file and run the sequencer */ instr parseandrun tt_notify("Parsing events") #include "bid_source.udo" bid_loadtext(SBID) tt_notify("Running sequencer") event_i "i", "sequencer", 0, 3600 turnoff endin instr endfade exitnow endin instr sequencer isection = 1 event_i "i", "bid_setcurrentchord", 0, 1, isection, 0 event_i "i", "global_master", 0, p3 event_i "i", "global_delay1", 0, p3 event_i "i", "global_delay2", 0, p3 if (isection == 1) then event_i "i", "play_stringchord", 0, tab_i(1, gibid_sectionlengths)*gibid_beattime, 1, 1 endif kmetro metro (gibid_tempo / 60) * 4 kpos init 0 kposabs init 0 ksection init isection kposchord init 0 gksection = ksection if (kmetro == 1) then if (ksection > gibid_maxsection) then ;event "i", "endfade", 0, gibid_beattime*8 event "i", "notify_change", p3, 1, -1 turnoff endif bid_seq "kick", kpos, ksection bid_seq "kick2", kpos, ksection bid_seq "koffer", kpos, ksection bid_seq "clap", kpos, ksection bid_seq "hat1", kpos, ksection bid_seq "3031", kpos, ksection bid_seq "3032", kpos, ksection bid_seq "vox", kpos, ksection bid_seq "vox2", kpos, ksection bid_seq "hat2", kpos, ksection bid_seq "rim", kpos, ksection kpos = (kpos < 31) ? kpos + 1 : 0 ksection16ths = bid_getsectionlength(ksection) * 4 if (kposabs+1 < ksection16ths) then kposabs += 1 else event "i","notify_change", 0, 1, ksection ;event "i", "play_crash", 0, gibid_beattime*4 ksection += 1 kposchord = 0 kpos = 0 kposabs = 0 event "i", "bid_setcurrentchord", 0, 1, ksection, 1 endif if (kposchord+1 < gkbid_chordlength*4) then kposchord += 1 else kposchord = 0 event "i", "bid_setcurrentchord", 0, 1, ksection, 1 endif endif endin i"bootstrap" 0 1