-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