aboutsummaryrefslogtreecommitdiff
path: root/BUG10
diff options
context:
space:
mode:
Diffstat (limited to 'BUG10')
-rw-r--r--BUG10/BUG10.csd92
-rw-r--r--BUG10/bid.udo154
-rw-r--r--BUG10/bid_source.udo31
-rw-r--r--BUG10/instruments.udo69
4 files changed, 185 insertions, 161 deletions
diff --git a/BUG10/BUG10.csd b/BUG10/BUG10.csd
index 2d19cf1..45d9314 100644
--- a/BUG10/BUG10.csd
+++ b/BUG10/BUG10.csd
@@ -5,11 +5,11 @@
</CsOptions>
<CsInstruments>
/*
- Debugger - Unfixed Bugs : BUG #6
+ Debugger - Unfixed Bugs : BUG #10
http://git.1bpm.net/csd-unfixedbugs1/about/
- By Richard Knight 2021
+ By Richard Knight 2023, 2024
http://1bpm.net
q@1bpm.net
@@ -21,7 +21,7 @@ nchnls = 2
0dbfs = 1
seed 0
-#define NOFILEIO ## ; file IO with readfi not supported on all platforms: disables bid_loadfile
+#define NOFILEIO ## ; file IO with readfi not supported on all platforms: disables bid_loadfile
gkmastergain init 1 ; master gain
gkpump = 0 ; kick ducking control
@@ -29,7 +29,7 @@ gksection init -1
#include "wavetables.udo" ; general waveforms
#include "bussing.udo" ; global audio bussing
-#include "bid.udo" ; Bug Infested Directive tools and parsing
+#include "bid.udo" ; Bug Infested Directive tools and parsing
#include "instruments.udo" ; sound generators
#include "txt_tools.udo" ; text tools
@@ -112,25 +112,6 @@ instr global_master
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
-
/*
Parse BID file and run the sequencer
@@ -142,7 +123,7 @@ instr parseandrun
bid_loadtext(SBID)
tt_notify("Running sequencer")
- event_i "i", "sequencer", 0, 3600
+ schedule "sequencer", 0, 3600
turnoff
endin
@@ -151,66 +132,17 @@ instr endfade
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
- event_i "i", "global_delay3", 0, p3
- 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 "hit1", kpos, ksection
- bid_seq "snare", kpos, ksection
- bid_seq "kick", kpos, ksection
- bid_seq "hat1", kpos, ksection
- bid_seq "bass1", kpos, ksection
- bid_seq "melb1", kpos, ksection
- bid_seq "hat2", kpos, ksection
- ;bid_seq "glitchread", kpos, ksection
- bid_seq "shaker", 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
-
+ schedule "bid_setcurrentchord", 0, 1, isection, 0
+ schedule "global_master", 0, p3
+ schedule "global_delay1", 0, p3
+ schedule "global_delay2", 0, p3
+ schedule "global_delay3", 0, p3
+ gksection bid_seq_all isection
endin
+
</CsInstruments>
<CsScore>
i"parseandrun" 0 1
diff --git a/BUG10/bid.udo b/BUG10/bid.udo
index 17e9be2..3c96bdc 100644
--- a/BUG10/bid.udo
+++ b/BUG10/bid.udo
@@ -1,15 +1,15 @@
#ifndef UDO_BID
#define UDO_BID ##
/*
- Debugger - Unfixed Bugs : BUG #5
+ Debugger - Unfixed Bugs : BUG #10
- Bug Infested Directive file parser v1 and tools
+ Bug Infested Directive file parser v1.2 and tools
Designed to create a reusable loop based score format in the Unfixed Bugs project and beyond.
*/
-#define BID_VERSION #1.1#
+#define BID_VERSION #1.2#
#include "txt_tools.udo"
@@ -118,37 +118,6 @@ opcode _bid_parserowitems, i, Siii
endop
-/*
- Read BID data for specified element and trigger accordingly.
-
- bid_seq Splayer, kposition, ksection
-
- Splayer name of BID element
- kposition position in pattern provided by master sequencer
- ksection section in composition provided by master sequencer
-
-*/
-opcode bid_seq, 0, Skk
- Splayer, kpos, ksection xin
- Sinstrument = sprintf("play_%s", Splayer)
- instrindex = _bid_gettextindex(Splayer)
- kdata = gibid_sections[ksection][instrindex]
-
- if (kdata != -1) then ; null section
- kon = tablekt:k(kpos, gibid_sectiondata[kdata][0])
-
- if (kon == 1) then
- kchance = tablekt:k(kpos, gibid_sectiondata[kdata][3])
- if (random:k(0, 1) < kchance) then
- ktime = (kpos % 2 == 0) ? 0 : gibid_swingtime
- kdur = tablekt:k(kpos, gibid_sectiondata[kdata][1]) * gibid_beattime
- ;kamp = tablekt:k(kpos, gisectiondata[kdata][2])
- event "i", Sinstrument, ktime, kdur, kpos, kdata
- endif
- endif
- endif
-endop
-
/*
Get a parameter for the specified pattern position.
@@ -345,6 +314,123 @@ complete:
endop
+
+/*
+ Read BID data for specified element and trigger accordingly.
+
+ bid_seq Splayer, kposition, ksection
+
+ Splayer name of BID element
+ kposition position in pattern provided by master sequencer
+ ksection section in composition provided by master sequencer
+
+*/
+opcode bid_seq, 0, Skk
+ Splayer, kpos, ksection xin
+ Sinstrument = sprintf("play_%s", Splayer)
+ instrindex = _bid_gettextindex(Splayer)
+ kdata = gibid_sections[ksection][instrindex]
+
+ if (kdata != -1) then ; null section
+ kon = tablekt:k(kpos, gibid_sectiondata[kdata][0])
+
+ if (kon == 1) then
+ kchance = tablekt:k(kpos, gibid_sectiondata[kdata][3])
+ if (random:k(0, 1) < kchance) then
+ ktime = (kpos % 2 == 0) ? 0 : gibid_swingtime
+ kdur = tablekt:k(kpos, gibid_sectiondata[kdata][1]) * gibid_beattime
+ ;kamp = tablekt:k(kpos, gisectiondata[kdata][2])
+ event "i", Sinstrument, ktime, kdur, kpos, kdata
+ endif
+ endif
+ endif
+endop
+
+
+instr _bid_exit
+ exitnow
+endin
+
+/*
+ Print notification of performance time since last notification
+ or if isection is -1, print completion notification
+*/
+gibid_timetrack times
+instr bid_notify_change
+ isection = p4
+ itime times
+ if (isection == -1) then
+ tt_notify(sprintf"Complete, runtime: %s", tt_parsetime(itime)))
+ exitnow
+ else
+ isectiontime = itime - gibid_timetrack
+ tt_notify(sprintf("%s : section %d complete in %s", tt_parsetime(itime), isection, tt_parsetime(isectiontime)))
+ gibid_timetrack = itime
+ endif
+ turnoff
+endin
+
+
+opcode bid_seq_all, k, oo
+ istartsection, index xin
+ ksection init istartsection
+ kpos init 0
+ kposabs init 0
+ kposchord init 0
+ imaxinstruments = lenarray(gSbid_sequenced)
+
+ kmetro metro (gibid_tempo / 60) * 4
+
+ if (kmetro == 1) then
+ if (ksection > gibid_maxsection) then
+ schedulek("bid_notify_change", 0, 1, -1)
+ endif
+
+ kindex = 0
+ while (kindex < imaxinstruments) do
+ kdata = gibid_sections[ksection][kindex]
+ if (kdata != -1) then ; null section
+ kon = tablekt:k(kpos, gibid_sectiondata[kdata][0])
+
+ if (kon == 1) then
+ kchance = tablekt:k(kpos, gibid_sectiondata[kdata][3])
+ if (random:k(0, 1) < kchance) then
+ ktime = (kpos % 2 == 0) ? 0 : gibid_swingtime
+ kdur = tablekt:k(kpos, gibid_sectiondata[kdata][1]) * gibid_beattime
+ ;kamp = tablekt:k(kpos, gisectiondata[kdata][2])
+ schedulek(sprintfk("play_%s", gSbid_sequenced[kindex]), ktime, kdur, kpos, kdata)
+ endif
+ endif
+ endif
+ kindex += 1
+ od
+
+ kpos = (kpos < 31) ? kpos + 1 : 0
+ ksection16ths = bid_getsectionlength(ksection) * 4
+
+ if (kposabs + 1 < ksection16ths) then
+ kposabs += 1
+ else
+ schedulek("bid_notify_change", 0, 1, ksection)
+ ksection += 1
+ kposchord = 0
+ kpos = 0
+ kposabs = 0
+ schedulek("bid_setcurrentchord", 0, 1, ksection, 1)
+ endif
+
+ if (kposchord + 1 < gkbid_chordlength * 4) then
+ kposchord += 1
+ else
+ kposchord = 0
+ schedulek("bid_setcurrentchord", 0, 1, ksection, 1)
+ endif
+ endif
+ xout ksection
+endop
+
+
+
/*
Parse a Bug Infested Directive Format string to global arrays, ftables and variables.
Handles patterns, tempo, chord groups and sections etc accordingly.
diff --git a/BUG10/bid_source.udo b/BUG10/bid_source.udo
index e55c5f5..5eb5768 100644
--- a/BUG10/bid_source.udo
+++ b/BUG10/bid_source.udo
@@ -8,7 +8,7 @@
SBID = {{
; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #10
-v 1.1
+v 1.2
; tempo, swing percent
b 131, 33
@@ -57,11 +57,17 @@ i hat2, 5, 2
i bass1, 1
; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1
- 1, 1, 1,.1, 1, 1, 1,.1, 1, 1, 1,.1, 1, 1, 1,.1, 1, 1, 1,.1, 1, 1, 1,.1, 1, 1, 1,.1, 1, 1, 1,.1
+ .1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
-i bass1, 2, 1
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+i bass1, 2
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1
+ .1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1
+ 1,.5,.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 2, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
i bass1, 3, 1
i bass1, 4, 1
i bass1, 5, 1
@@ -91,17 +97,16 @@ i snare, 3, 1
i snare, 4, 1
i snare, 5, 1
-i hit1, 1
+
+i clap, 1
; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
- 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
- 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0
+ .1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.1,.4,.1,.1,.1,.1,.1
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.2, 1, 1, 1, 1, 1
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
-i hit1, 2, 1
-i hit1, 3, 1
-i hit1, 4, 1
-i hit1, 5, 1
-
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+i clap, 2, 1
+i clap, 3, 1
i shaker, 1
; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
diff --git a/BUG10/instruments.udo b/BUG10/instruments.udo
index dcb4ba3..6e08099 100644
--- a/BUG10/instruments.udo
+++ b/BUG10/instruments.udo
@@ -13,40 +13,25 @@
#include "bid.udo"
instr play_bass1
- ifreq = cpsmidinn(table(1, gibid_chordfn) - 24)
+
+ iamp = bid_getparameter(p4, p5, 2) * random(0.4, 1)
+ ifreqmode = bid_getparameter(p4, p5, 4)
+
+ if (ifreqmode != 0) then
+ ifreq = cpsmidinn(table(ifreqmode, gibid_chordfn) - 24)
+ else
+ ifreq = cpsmidinn(table(1, gibid_chordfn) - 24)
+ endif
kindex1 line 4, p3, 1
kindex2 line 5, p3, 1
kamp linseg 1, p3*0.9, 1, p3*0.1, 0
- aL foscil 1, ifreq, 8, 1.5, kindex1, gifnSine
- aR foscil 1, ifreq, 8, 1.5, kindex2, gifnSine
- aL *= kamp * 0.88
- aR *= kamp * 0.88
+ aL foscil iamp, ifreq, 8, 1.5, kindex1, gifnSine
+ aR foscil iamp, ifreq, 8, 1.5, kindex2, gifnSine
+ aL *= kamp * 0.75
+ aR *= kamp * 0.75
bus_mix("master", aL, aR)
endin
-instr play_hit1
- kfreq line cpsmidinn(table(2, gibid_chordfn) - 24), p3, cpsmidinn(table(1, gibid_chordfn) - 24)
- kindex1 line 4, p3, 1
- kindex2 line 5, p3, 1
- kamp linseg 1, p3*0.9, 1, p3*0.1, 0
- aL1 foscil 1, kfreq, 1, 1.5, kindex1, gifnSquare
- aR1 foscil 1, kfreq, 1, 1.5, kindex2, gifnSquare
- aL2 foscil 1, kfreq, 2, 2.5, kindex2, gifnSine
- aR2 foscil 1, kfreq, 2, 2.5, kindex1, gifnSine
- aL = (aL1 + aL2) * kamp * 0.88
- aR = (aL1 + aL2) * kamp * 0.88
- aL distort aL, 0.6, gifnSine
- aR distort aR, 0.6, gifnSine
-
- knoiseenv line 3, p3, 0.1
- aLn unirand knoiseenv
- aRn unirand knoiseenv
- aLn butterlp aLn, 5000
- aRn butterlp aRn, 5000
- aL = aLn * aL * 0.1
- aR = aRn * aR * 0.1
- bus_mix("master", aL, aR)
-endin
instr play_melb1
ifreq = cpsmidinn(table(1, gibid_chordfn)) * 1
@@ -63,9 +48,9 @@ endin
instr play_hat1
- iamp = bid_getparameter(p4, p5, 2)
- p3 = 0.05
- kfreq line 300, p3, 100
+ iamp = bid_getparameter(p4, p5, 2) * 0.9
+ p3 = 0.1
+ kfreq line 600, p3, 400
aenv expsega .1, .0005, 1, p3 - .0005, .01
asqr1 oscil 1, kfreq, gifnSquare, -1
asqr2 oscil 1, kfreq*1.4471, gifnSaw, -1
@@ -76,7 +61,7 @@ instr play_hat1
a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6
a808 butterhp a808, 4270
a808 butterhp a808, 4270
- aout = a808 * aenv * iamp * 2
+ aout = a808 * aenv * iamp
bus_mix("master", aout, aout)
endin
@@ -87,7 +72,7 @@ instr play_hat2
idel2 = random(0.005, 0.01)
xtratim(max(idel1, idel2))
- kfreq line 400, p3, 100
+ kfreq line 200, p3, 100
aenv expsega .1, .0005, 1, p3 - .0005, .01
asqr1 oscil 1, kfreq, gifnSquare, -1
asqr2 oscil 1, kfreq*1.4471, gifnSine, -1
@@ -98,13 +83,29 @@ instr play_hat2
a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6
a808 butterhp a808, 3270
a808 butterhp a808, 3270
- aout = a808 * aenv * iamp * 1.1
+ aout = a808 * aenv * iamp * 1.5
aL delay aout, idel1
aR delay aout, idel2
bus_mix("master", aL, aR)
endin
+instr play_clap
+ iamp = bid_getparameter(p4, p5, 2) * random(0.4, 1) * 0.8
+ aL noise 1, 0.6
+ aR noise 1, 0.7
+ aL butterbp aL, random(1000, 1500), random(800, 1200)
+ aR butterbp aR, random(1000, 1500), random(800, 1200)
+ aL taninv aL*2
+ aR taninv aR*2
+
+ kamp linseg 2, p3*0.1, 0, p3*0.1, 2, p3*0.1, 0, p3*0.1, 1.5, p3*0.1, 0, p3*0.1, 1, p3*0.4, 0
+ aL *= kamp * iamp * 4
+ aR *= kamp * iamp * 4
+ bus_mix("master", aL, aR)
+
+endin
+
instr play_kick ; 808 style kick
iamp = bid_getparameter(p4, p5, 2)