diff options
| author | Richard <richard@1bpm.net> | 2025-02-28 02:08:19 +0000 | 
|---|---|---|
| committer | Richard <richard@1bpm.net> | 2025-02-28 02:08:19 +0000 | 
| commit | 0f09f0882ed87bea9ff3e745c73f5d4743854fbb (patch) | |
| tree | 62d04024200a4942ce4e012227822fdaae6a2e25 | |
| parent | 6a8342a78bb65afbec9eac5693438a3107ff1dd3 (diff) | |
| download | csd-unfixedbugs1-master.tar.gz csd-unfixedbugs1-master.tar.bz2 csd-unfixedbugs1-master.zip | |
| -rw-r--r-- | BUG10/BUG10.csd | 92 | ||||
| -rw-r--r-- | BUG10/bid.udo | 154 | ||||
| -rw-r--r-- | BUG10/bid_source.udo | 31 | ||||
| -rw-r--r-- | BUG10/instruments.udo | 69 | ||||
| -rw-r--r-- | BUG3/BUG3.csd | 2 | ||||
| -rw-r--r-- | BUG4/BUG4.csd | 5 | ||||
| -rw-r--r-- | BUG4/bid.udo | 2 | ||||
| -rw-r--r-- | BUG5/BUG5.csd | 2 | ||||
| -rw-r--r-- | BUG6/BUG6.csd | 139 | ||||
| -rw-r--r-- | BUG6/bid.udo | 150 | ||||
| -rw-r--r-- | BUG6/bid_source.udo | 158 | ||||
| -rw-r--r-- | BUG6/bussing.udo | 17 | ||||
| -rw-r--r-- | BUG6/instruments.udo | 11 | ||||
| -rw-r--r-- | BUG7/BUG7.csd | 48 | ||||
| -rw-r--r-- | BUG7/basis.csd | 62 | ||||
| -rw-r--r-- | BUG7/bid.udo | 149 | ||||
| -rw-r--r-- | BUG7/bid_source.udo | 15 | ||||
| -rw-r--r-- | BUG8/BUG8.csd | 6 | ||||
| -rw-r--r-- | BUG9/BUG9.csd | 101 | ||||
| -rw-r--r-- | BUG9/bid.udo | 157 | ||||
| -rw-r--r-- | BUG9/bid_source.udo | 238 | ||||
| -rw-r--r-- | BUG9/instruments.udo | 191 | ||||
| -rw-r--r-- | README.md | 16 | 
23 files changed, 1208 insertions, 607 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) diff --git a/BUG3/BUG3.csd b/BUG3/BUG3.csd index 2f5467f..5df9708 100644 --- a/BUG3/BUG3.csd +++ b/BUG3/BUG3.csd @@ -16,7 +16,7 @@  sr = 44100  ksmps = 100  nchnls = 2 -0dbfs = 1 +0dbfs = 1.1  seed 0  #define NOFILEIO ## 		; file IO with readfi not supported on all platforms: disables bid_loadfile diff --git a/BUG4/BUG4.csd b/BUG4/BUG4.csd index 59d2e50..243b946 100644 --- a/BUG4/BUG4.csd +++ b/BUG4/BUG4.csd @@ -18,7 +18,7 @@  sr = 44100  ksmps = 100  nchnls = 2 -0dbfs = 1 +0dbfs = 1.1  seed 0  #define NOFILEIO ## 		; file IO with readfi not supported on all platforms: disables bid_loadfile @@ -114,7 +114,8 @@ gitimetrack times  instr notify_change  	isection = p4  	itime times -	if (isection == -1) then + +	if ((isection >= gibid_maxsection) || isection == -1) then  		tt_notify(sprintf"Complete, runtime: %s", tt_parsetime(itime)))  		exitnow  	else diff --git a/BUG4/bid.udo b/BUG4/bid.udo index a5eea11..61891b3 100644 --- a/BUG4/bid.udo +++ b/BUG4/bid.udo @@ -1,7 +1,7 @@  #ifndef UDO_BID  #define UDO_BID ##  /* -	Debugger - Unfixed Bugs : BUG #4 +	Debugger - Unfixed Bugs : BUG #3  	Bug Infested Directive file parser v1 and tools diff --git a/BUG5/BUG5.csd b/BUG5/BUG5.csd index 1522800..7f298e7 100644 --- a/BUG5/BUG5.csd +++ b/BUG5/BUG5.csd @@ -18,7 +18,7 @@  sr = 44100  ksmps = 64  nchnls = 2 -0dbfs = 1 +0dbfs = 1.1  seed 0  #define NOFILEIO ## 		; file IO with readfi not supported on all platforms: disables bid_loadfile diff --git a/BUG6/BUG6.csd b/BUG6/BUG6.csd index 076d5f2..c9cbea4 100644 --- a/BUG6/BUG6.csd +++ b/BUG6/BUG6.csd @@ -9,7 +9,7 @@  	http://git.1bpm.net/csd-unfixedbugs1/about/ -	By Richard Knight 2021 +	By Richard Knight 2021, 2023, 2024  		http://1bpm.net  		q@1bpm.net @@ -18,14 +18,14 @@  sr = 44100  ksmps = 64  nchnls = 2 -0dbfs = 1 +0dbfs = 1.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 +gksection init 1  #include "wavetables.udo"	; general waveforms  #include "bussing.udo"		; global audio bussing @@ -95,19 +95,13 @@ instr global_delay3  	bus_mix("master", aLdel, aRdel)  endin -/* -	Master audio output -*/ -instr global_master -	igain = 1 -	aL, aR bus_read "master" -	awindex phasor giglitchsamples/sr -	tablew aL, awindex*giglitchsamples, giglitchbufferL -	tablew aR, awindex*giglitchsamples, giglitchbufferR - -	if (gksection == 1) then -		ilen = tab_i(1, gibid_sectionlengths) * gibid_beattime +instr section_bus +	isection = p4 +	ilen = p3 +	aL, aR bus_read "section_bus_send" +	 +	if (isection == 1) then  		khpf linseg 0, ilen*0.5, 0, ilen*0.3, 100, ilen*0.1, 200, ilen*0.1, 900  		knoiseamp linseg 0, ilen*0.8, 0.04, ilen*0.1, 0.1, ilen*0.1, 0.6  		anL = noise(0.5, 0.2) @@ -119,8 +113,7 @@ instr global_master  		aR += resony(anR, kfreq*4, 8, 24, 4) * 0.01 * knoiseamp  		aL butterhp aL, khpf  		aR butterhp aR, khpf -	elseif (gksection == 3) then -		ilen = tab_i(3, gibid_sectionlengths) * gibid_beattime +	elseif (isection == 3 || isection == 8 || isection == 12) then  		anL = noise(0.5, 0.5)  		anR = noise(0.5, 0.5)  		knoiseamp linseg 0, ilen*0.7, 0.1, ilen*0.1, 0.2, ilen*0.2, 0.9 @@ -129,34 +122,37 @@ instr global_master  		kfreq linseg ifreq1, ilen*0.8, ifreq1, ilen*0.2, ifreq2  		aL += resony(anL, kfreq*4, 3, 24, 4) * 0.005 * knoiseamp  		aR += resony(anR, kfreq*4, 3, 24, 4) * 0.005 * knoiseamp -		bus_mix("delay1", aL*knoiseamp*0.5, aR*knoiseamp*0.5) +		bus_mix("delay1", aL*knoiseamp*0.3, aR*knoiseamp*0.3)  		khpf expseg 1, ilen*0.4, 300, ilen*0.4, 600, ilen*0.1, 20, ilen*0.1, 20  		aL butterhp aL, khpf  		aR butterhp aR, khpf  	endif -	aL limit aL*0.5, -1, 1 -	aR limit aR*0.5, -1, 1 -	outs aL*gkmastergain*igain, aR*gkmastergain*igain -endin +	bus_set("section_bus_return", aL, aR) +endin  /* -	Print notification of performance time since last notification -		or if isection is -1, print completion notification +	Master audio output  */ -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 +instr global_master +	igain = 1 +	aL, aR bus_read "master" + +	awindex phasor giglitchsamples/sr +	tablew aL, awindex*giglitchsamples, giglitchbufferL +	tablew aR, awindex*giglitchsamples, giglitchbufferR + +	if (changed:k(gksection) == 1) then +		schedulek("section_bus", 0, tab:k(gksection, gibid_sectionlengths) * gibid_beattime, gksection)  	endif -	turnoff + +	bus_set("section_bus_send", aL, aR) +	aL, aR bus_read "section_bus_return" + +	 +	aL limit aL*0.5, -1, 1 +	aR limit aR*0.5, -1, 1 +	outs aL*gkmastergain*igain, aR*gkmastergain*igain  endin @@ -170,77 +166,22 @@ instr parseandrun  	bid_loadtext(SBID)  	tt_notify("Running sequencer") -	event_i "i", "sequencer", 0, 3600 +	schedule("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 -	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 "kick", kpos, ksection -		bid_seq "kick2", kpos, ksection -		bid_seq "clap", kpos, ksection -		bid_seq "303", kpos, ksection -		bid_seq "hat1", kpos, ksection -		bid_seq "snare", kpos, ksection -		bid_seq "hat2", kpos, ksection -		bid_seq "303b", kpos, ksection -		bid_seq "glitchread", kpos, ksection -		bid_seq "blip", 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/BUG6/bid.udo b/BUG6/bid.udo index 17e9be2..05f5372 100644 --- a/BUG6/bid.udo +++ b/BUG6/bid.udo @@ -9,7 +9,7 @@  */ -#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/BUG6/bid_source.udo b/BUG6/bid_source.udo index 76d508a..05b9fff 100644 --- a/BUG6/bid_source.udo +++ b/BUG6/bid_source.udo @@ -1,5 +1,5 @@  /* -	Debugger - Unfixed Bugs : BUG #4 +	Debugger - Unfixed Bugs : BUG #6  	Bug Infested Directives source  	Provided as a string due to readfi not being available on all platforms. @@ -7,8 +7,8 @@  */  SBID = {{ -; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #4 -v 1.1 +; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #6 +v 1.2  ; tempo, swing percent  b 128, 40 @@ -25,8 +25,16 @@ c 2  s 1, 64, 1  s 2, 64, 1  s 3, 8, 2 -s 4, 56, 1 -s 5, 32, 2 +s 4, 52, 1 +s 5, 4, 2 +s 6, 64, 1 +s 7, 60, 1 +s 8, 4, 2 +s 9, 64, 1 +s 10, 28, 1 +s 11, 4, 2 +s 12, 32, 1 +s 13, 1, 1  i glitchread, 1, -1  i glitchread, 2, -1 @@ -38,6 +46,14 @@ i glitchread, 4    1, 1, 1, 1, 1,.9, 1,.8, 1, 1, 1,.9, 1,.8,.6, 1, 1, 1, 1, 1, 1,.9, 1,.8, 1, 1, 1,.9, 1,.8, 1, 1    1, 1, 1,.8, 1,.8, 1,.8, 1,.8, 1,.8, 1,.8,.3, 1, 1, 1, 1,.8, 1,.8, 1,.8, 1,.8, 1,.8, 1,.8, 1, 1  i glitchread, 5, -1 +i glitchread, 6, 4 +i glitchread, 7, -1 +i glitchread, 8, 4 +i glitchread, 9, -1 +i glitchread, 10, 4 +i glitchread, 11, 4 +i glitchread, 12, 4 +i glitchread, 13, -1  i 303, 1, -1 @@ -55,6 +71,19 @@ i 303, 5   .1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.3,.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 +i 303, 6 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1 + .1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.1,.3,.1,.1,.3,.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 +i 303, 7, 2 +i 303, 8, -1 +i 303, 9, 2 +i 303, 10, -1 +i 303, 11, -1 +i 303, 12, -1 +i 303, 13, -1  i 303b, 1 @@ -72,6 +101,15 @@ i 303b, 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, 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 303b, 6, 5 +i 303b, 7, 5 +i 303b, 8, 5 +i 303b, 9, 1 +i 303b, 10, 1 +i 303b, 11, 5 +i 303b, 12, -1 +i 303b, 13, -1 +  i blip, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -88,6 +126,25 @@ i blip, 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, 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 blip, 6, -1 +i blip, 7 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 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 + .6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6 +i blip, 8, 1 +i blip, 9, 1 +i blip, 10, 1 +i blip, 11, 1 +i blip, 12, -1 +i blip, 13 +; 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 + .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,.6, 1, 1, 1, 1, 1, 1, 1, 1 +  1, 1, 1, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1 +  i clap, 1, -1  i clap, 2 @@ -104,6 +161,19 @@ i clap, 3    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 clap, 4, 2  i clap, 5, 3 +i clap, 6 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 +  0, 0, 0, 0,.1, 0, 0,.1, 0, 0, 0, 0,.1, 0, 0, 0, 0,.1, 0, 0,.1, 1, 0, 0, 0, 0, 0, 0,.1, 0, 0, 1 +  1, 1, 1, 1, 1, 1, 1,.6, 1, 1, 1, 1, 1, 1, 1, 1, 1,.6, 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,.4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i clap, 7, 6 +i clap, 8, -1 +i clap, 9, 6 +i clap, 10, 6 +i clap, 11, -1 +i clap, 12, -1 +i clap, 13, -1  i snare, 1 @@ -121,6 +191,19 @@ i snare, 3    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 1, 1,.3,.3, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 1,.3, 1,.3,.3,.3  i snare, 4, 1  i snare, 5, 3 +i snare, 6, -1 +i snare, 7, 1 +i snare, 8 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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,.3, 1, 1,.3,.3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i snare, 9, -1 +i snare, 10, 1 +i snare, 11, 8 +i snare, 12, -1 +i snare, 13, -1  i hat1, 1 @@ -133,6 +216,19 @@ i hat1, 2, 1  i hat1, 3, 1  i hat1, 4, 1  i hat1, 5, 1 +i hat1, 6 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 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 +i hat1, 7, 6 +i hat1, 8, -1 +i hat1, 9, 1 +i hat1, 10, -1 +i hat1, 11, -1 +i hat1, 12, -1 +i hat1, 13, -1  i hat2, 1, -1 @@ -152,6 +248,20 @@ i hat2, 3    1, 0, 1, 0, 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  i hat2, 4, 2  i hat2, 5, 2 +i hat2, 6 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 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, 0, 0, 1, 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,.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.5, 1,.5, 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 hat2, 7, 6 +i hat2, 8, -1 +i hat2, 9, 2 +i hat2, 10, -1 +i hat2, 11, -1 +i hat2, 12, -1 +i hat2, 13, -1  i shaker, 1 @@ -164,6 +274,20 @@ i shaker, 2, 1  i shaker, 3, 1  i shaker, 4, 1  i shaker, 5, -1 +i shaker, 6 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 0, 0, 0, 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, 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,.6, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.6, 1,.6, 1, 1, 1, 1, 1, 1 +  1, 1, 1, 1, 1, 1, 1,.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.5, 1,.5, 1, 1, 1, 1, 1, 1 +i shaker, 7, 6 +i shaker, 8, -1 +i shaker, 9, 1 +i shaker, 10, 1 +i shaker, 11, -1 +i shaker, 12, -1 +i shaker, 13, -1 +  i kick, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -184,7 +308,21 @@ i kick, 5    1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0   .4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.3    1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1 -  1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1 +  1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.4, 1, 1, 1,.1, 1 +i kick, 6 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  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, 0, 1, 0 + .4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.3 +  1, 0,.8, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.8, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.7,.6 +  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,.4,.2 +i kick, 7, 6 +i kick, 8, -1 +i kick, 9, 1 +i kick, 10, 1 +i kick, 11, -1 +i kick, 12, 1 +i kick, 13, -1 +  i kick2, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -196,4 +334,12 @@ i kick2, 2, 1  i kick2, 3, 1  i kick2, 4, 1  i kick2, 5, 1 +i kick2, 6, -1 +i kick2, 7, 1 +i kick2, 8, -1 +i kick2, 9, 1 +i kick2, 10, 1 +i kick2, 11, -1 +i kick2, 12, -1 +i kick2, 13, -1  }} diff --git a/BUG6/bussing.udo b/BUG6/bussing.udo index 78755ce..56ea46a 100644 --- a/BUG6/bussing.udo +++ b/BUG6/bussing.udo @@ -36,6 +36,7 @@ endop +  /*  	Read from a stereo bus, and then clear the bus @@ -57,6 +58,22 @@ opcode bus_read, aa, S  endop +/* +	Set to a stereo bus + +	bus_set Sbus, aL, aR + +	Sbus	bus name +	aL	left channel +	aR	right channel +*/ +opcode bus_set, 0, Saa +	Sbus, aL, aR xin +	SbusL, SbusR bus_name Sbus +	chnset aL, SbusL +	chnset aR, SbusR +endop +  #end diff --git a/BUG6/instruments.udo b/BUG6/instruments.udo index a6d3458..0b91a1e 100644 --- a/BUG6/instruments.udo +++ b/BUG6/instruments.udo @@ -78,10 +78,10 @@ endin  instr play_blip  	iamp = bid_getparameter(p4, p5, 2) -	inote1 = table(p4+3, gibid_chordfn, 0, 0, 1) +12 -	inote2 = table(p4+5, gibid_chordfn, 0, 0, 1) +12 -	a1 oscil 1, cpsmidinn(inote1) -	a2 oscil 1, cpsmidinn(inote2) +	inote1 = table(p4+3, gibid_chordfn, 0, 0, 1) + 12 +	inote2 = table(p4+5, gibid_chordfn, 0, 0, 1) + 12 +	a1 oscil 1.2, cpsmidinn(inote1) +	a2 oscil 1.2, cpsmidinn(inote2)  	kamp linseg 1, p3*0.2, 0, p3*0.8, 0  	aL = a1 * kamp  	aR = a2 * kamp @@ -160,7 +160,8 @@ instr play_hat2  	aout = a808 * aenv * iamp * 1.1  	aL delay aout, idel1  	aR delay aout, idel2 -	if (i(gksection) == 1 && random(0, 1) > 0.7) then +	isection = i(gksection) +	if ((isection == 1 || isection == 9) && random(0, 1) > 0.7) then  		bus_mix("delay2", aL*0.4, aR*0.4)  	endif  	bus_mix("master", aL, aR) diff --git a/BUG7/BUG7.csd b/BUG7/BUG7.csd index 9e52133..98be65b 100644 --- a/BUG7/BUG7.csd +++ b/BUG7/BUG7.csd @@ -29,9 +29,8 @@ 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  #include "src_vox.udo"  #include "oprepare.udo"		; offline preparation system @@ -123,25 +122,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 -  /*  	Initialise the performance: run offline preparation and then call parseandrun @@ -162,18 +142,28 @@ instr parseandrun  	bid_loadtext(SBID)  	tt_notify("Running sequencer") -	event_i "i", "sequencer", 0, 3600 +	schedule "sequencer", 0, 3600  	turnoff  endin -instr endfade -	exitnow -endin - -  instr sequencer  	isection = 1 +	 +	schedule "bid_setcurrentchord", 0, 1, isection, 0 +	schedule "global_master", 0, p3 +	schedule "global_delay1", 0, p3 +	schedule "global_delay2", 0, p3 +	gksection bid_seq_all isection +	 +	if (isection == 1) then +		schedule "play_stringchord", 0, tab_i(1, gibid_sectionlengths)*gibid_beattime, 1, 1 +	endif +endin + +/* +instr sequencer_old +	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 @@ -214,7 +204,7 @@ instr sequencer  		if (kposabs+1 < ksection16ths) then  			kposabs += 1  		else -			event "i","notify_change", 0, 1, ksection +			event "i", "notify_change", 0, 1, ksection  			;event "i", "play_crash", 0, gibid_beattime*4  			ksection += 1  			kposchord = 0 @@ -233,8 +223,8 @@ instr sequencer  	endif -  endin +*/  </CsInstruments>  <CsScore> diff --git a/BUG7/basis.csd b/BUG7/basis.csd deleted file mode 100644 index ff5b2c5..0000000 --- a/BUG7/basis.csd +++ /dev/null @@ -1,62 +0,0 @@ -<CsoundSynthesizer> -<CsOptions> --odac -</CsOptions> -<CsInstruments> -sr = 44100 -kr = 4410 -nchnls = 2 -0dbfs = 1 -seed 0 -gifnSine = 1 - -instr rim -	icps = p4 ;1000 -	acps expon icps, 0.0025, icps * 0.5 -	acps = acps + icps -	iamp = 0.1 -	a1a phasor acps, 0	 -	a1b phasor acps, random(0, 1) -	afmenv expon 1.0, 0.02, 0.4 -	a1 = (a1a-a1b)*random(1, 10)*afmenv -	acps = acps*(1.0+a1) -	a0 oscil3 1.0, acps -	aenv expon 1.0, 0.005, 0.5 -	a0 limit 4.0*a0*aenv, -1.0, 1.0 -	a0 butterhp a0, 230 -	aL, aR pan2 a0*iamp, random(0.3, 0.8) -	outs aL, aR -endin - -instr play_rim -	if (random:k(0, 1) > 0.3) then -		event "i", "play_rim", 0, 0.4, 3000 -	endif -	if (random:k(0, 1) > 0.3) then -		event "i", "play_rim", 0, 0.4, 1000 -	endif -	if (random:k(0, 1) > 0.3) then -		event "i", "play_rim", 0, 0.4, 2000 -	endif -	if (random:k(0, 1) > 0.3) then -		event "i", "play_rim", 0, 0.4, 500 -	endif -	if (random:k(0, 1) > 0.3) then -		event "i", "play_rim", 0, 0.4, 2500 -	endif -	if (random:k(0, 1) > 0.3) then -		event "i", "play_rim", 0, 0.4, 3500 -	endif -endin - - -</CsInstruments> -<CsScore> -i1 0 100 -f1 0 16384 10 1                                          ; Sine -f2 0 16384 10 1 0.5 0.3 0.25 0.2 0.167 0.14 0.125 .111   ; Sawtooth -f3 0 16384 10 1 0   0.3 0    0.2 0     0.14 0     .111   ; Square -f4 0 16384 10 1 1   1   1    0.7 0.5   0.3  0.1          ; Pulse - -</CsScore> -</CsoundSynthesizer>
\ No newline at end of file diff --git a/BUG7/bid.udo b/BUG7/bid.udo index 17e9be2..60d6aa0 100644 --- a/BUG7/bid.udo +++ b/BUG7/bid.udo @@ -9,7 +9,7 @@  */ -#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,122 @@ 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/BUG7/bid_source.udo b/BUG7/bid_source.udo index e122649..32db3e5 100644 --- a/BUG7/bid_source.udo +++ b/BUG7/bid_source.udo @@ -1,5 +1,5 @@  /* -	Debugger - Unfixed Bugs : BUG #4 +	Debugger - Unfixed Bugs : BUG #7  	Bug Infested Directives source  	Provided as a string due to readfi not being available on all platforms. @@ -8,7 +8,7 @@  SBID = {{  ; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #7 -v 1.1 +v 1.2  ; tempo, swing percent  b 121, 27 @@ -26,17 +26,6 @@ s 2, 4, 1  s 3, 64, 1 -i glitchread, 1, -1 -i glitchread, 2, -1 -i glitchread, 3 -; 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 - .3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3,.3 - - -  i 3031, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  -    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 diff --git a/BUG8/BUG8.csd b/BUG8/BUG8.csd index 7b5398f..573f329 100644 --- a/BUG8/BUG8.csd +++ b/BUG8/BUG8.csd @@ -265,7 +265,7 @@ instr 1  		endif  	endif -	event_i "i", "clickmaker", 0, 1 +	event_i "i", "clickmaker", 0, 1000  	kmetro2 metro 3  	if (ktime > 5 && kmetro2 == 1 && random:k(0, 1) > 0.95) then @@ -294,8 +294,8 @@ instr 1  	a1L = ay  	a1R = ay  	;a1L, a1R SCReverb ay, ay, 0.9, 10000 -	aL = a1L + a2L  -	aR = a1R + a2R +	aL = a2L ;+ a1L +	aR = a2R ;+ a1R  	outs aL, aR  endin diff --git a/BUG9/BUG9.csd b/BUG9/BUG9.csd index f320921..196d0cd 100644 --- a/BUG9/BUG9.csd +++ b/BUG9/BUG9.csd @@ -5,11 +5,11 @@  </CsOptions>  <CsInstruments>  /* -	Debugger - Unfixed Bugs : BUG #8 +	Debugger - Unfixed Bugs : BUG #9  	http://git.1bpm.net/csd-unfixedbugs1/about/ -	By Richard Knight 2021 +	By Richard Knight 2022, 2024  		http://1bpm.net  		q@1bpm.net @@ -18,20 +18,13 @@  sr = 44100  ksmps = 100  nchnls = 2 -0dbfs = 1 +0dbfs = 1.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 "bid.udo"			; Bug Infested Directive tools and parsing  #include "instruments.udo"	; sound generators -#include "txt_tools.udo"	; text tools  /* @@ -42,27 +35,7 @@ instr global_master  	aL, aR bus_read "master"	  	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 +	outs aL * igain, aR * igain  endin @@ -70,73 +43,25 @@ endin  	Parse BID file and run the sequencer  */  instr parseandrun -	tt_notify("Parsing events") +	tt_notify "Parsing events"  	#include "bid_source.udo"  	bid_loadtext(SBID) -	tt_notify("Running sequencer") -	event_i "i", "sequencer", 0, 3600 +	tt_notify "Running sequencer" +	schedule "sequencer", 0, 3600  	turnoff  endin - -/* -	Sequence BID elements -*/  instr sequencer -	isection = 1 -	event_i "i", "bid_setcurrentchord", 0, 1, isection, 0 -	event_i "i", "global_master", 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", "notify_change", p3, 1, -1 -			turnoff -		endif - -		; sequence BID elements -		bid_seq "kick", kpos, ksection -		bid_seq "clap", kpos, ksection -		bid_seq "hat1", kpos, ksection -		bid_seq "hat2", kpos, ksection -		bid_seq "bass", kpos, ksection -		bid_seq "mel1", kpos, ksection -		bid_seq "mel2", 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 -			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 -		 +	isection = 2 +	schedule "bid_setcurrentchord", 0, 1, isection, 0 +	schedule "global_master", 0, p3 +	gksection bid_seq_all isection +endin -	endif -endin  </CsInstruments>  <CsScore> diff --git a/BUG9/bid.udo b/BUG9/bid.udo index 17e9be2..a31a603 100644 --- a/BUG9/bid.udo +++ b/BUG9/bid.udo @@ -1,7 +1,7 @@  #ifndef UDO_BID  #define UDO_BID ##  /* -	Debugger - Unfixed Bugs : BUG #5 +	Debugger - Unfixed Bugs : BUG #9  	Bug Infested Directive file parser v1 and tools @@ -9,7 +9,7 @@  */ -#define BID_VERSION #1.1# +#define BID_VERSION #1.3#  #include "txt_tools.udo" @@ -23,7 +23,7 @@ gkbid_chordlength init -1	; current chord length  ; BID internals  gibid_sectionlengths ftgen 0, 0, -64, -7, 0	; section lengths  gibid_sections[][] init 64, 64		; section pointers to data -gibid_sectiondata[][] init 99, 6	; section data, ftables contained +gibid_sectiondata[][] init 99, 8	; section data, ftables contained  gibid_chordgroups[][] init 16, 12	; chord groups, pointers to sectionchords by section  gibid_sectionchords[] init 16		; ftables of section chords @@ -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. @@ -192,8 +161,8 @@ endop  	_bid_parserow Sline, ix1, ix2, imode  	Sline		line to parse -	ix1		array dimension 1 index of target storage -	ix2		array dimension 2 index of target storage +	ix1			array dimension 1 index of target storage +	ix2			array dimension 2 index of target storage  	imode		1=section patterns, 2=chords  */  opcode _bid_parserow, 0, Siii @@ -345,6 +314,122 @@ 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/BUG9/bid_source.udo b/BUG9/bid_source.udo index 205939b..bf5f7cb 100644 --- a/BUG9/bid_source.udo +++ b/BUG9/bid_source.udo @@ -1,5 +1,5 @@  /* -	Debugger - Unfixed Bugs : BUG #8 +	Debugger - Unfixed Bugs : BUG #9  	Bug Infested Directives source  	Provided as a string due to readfi not being available on all platforms. @@ -7,8 +7,8 @@  */  SBID = {{ -; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #4 -v 1.1 +; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #9 +v 1.3  ; tempo, swing percent  b 121, 42 @@ -17,11 +17,23 @@ b 121, 42  c 1    4, 60, 65, 67, 75, 77    4, 63, 65, 66, 71, 72 - +c 2 +  4, 60, 65, 67, 75, 77 +  4, 63, 65, 66, 71, 72 +  4, 61, 66, 68, 73, 76 +c 3 +  8, 60, 65, 67, 75, 77 +  8, 63, 65, 66, 71, 72 +  8, 63, 65, 67, 75, 77 +  8, 63, 65, 67, 77, 79, 82  ; sections: section number, length, chordgroup  s 1, 64, 1 - +s 2, 8, 1 +s 3, 60, 3 +s 4, 4, 1 +s 5, 4, 1 +s 6, 64, 1  ; patterns: trig , dur, amp, chance @@ -32,6 +44,15 @@ i clap, 1    0, 0, 0, 0,.2, 0, 0, 0, 0, 0, 0, 0,.2, 0, 0,.2, 0, 0, 0, 0,.2, 1, 0, 0, 0, 0, 0, 0,.2, 0, 0, 1    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.9, 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,.3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i clap, 2 +  0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 +  0, 0, 0, 0,.2, 0, 0, 0, 0, 0,.6, 0,.2, 0, 0,.2, 0, 0, 0, 0,.2, 1, 0, 0, 0, 0, 0, 0,.2, 0, 0, 1 +  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.5, 1, 1, 1, 1,.9, 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,.3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i clap, 3, 1 +i clap, 4, -1 +i clap, 5, 2 +i clap, 6, 1  i bass, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -39,16 +60,62 @@ i bass, 1   .2,.2,.2,.2,.2,.4,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.4,.2,.2,.2,.2,.4,.2,.2,.2,.2,.2,.2,.2,.2,.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   .8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8 - +  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 bass, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 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, 0, 1, 1, 0 + .2,.2,.2,.2,.2,.4,.5,.2,.2,.2,.2,.2,.2,.2,.5,.2,.2,.1,.2,.2,.2,.2,.5,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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 bass, 3 +  0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0 + .2,.2,.2,.2,.2,.4,.5,.2,.2,.2,.2,.2,.2,.2,.5,.2,.2,.1,.2,.2,.2,.2,.5,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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 +i bass, 4 +  0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0 + .2,.2,.2,.2,.2,.2,.5,.2,.2,.2,.1,.2,.2,.2,.5,.2,.2,.1,.2,.2,.2,.2,.5,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i bass, 5, 2 +i bass, 6, 1  i mel1, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 - .2,.2,.2,.2,.2,.4,.2,.4,.2,.2,.4,.2,.2,.2,.9,.2,.5,.4,.2,.2,.2,.2,.4,.2,.2,.2,.2,.2,.2,.2,.2,.2 + .2,.2,.2,.2,.2,.4,.2,.4,.2,.2,.4,.2,.2,.9,.9,.2,.5,.4,.2,.2,.2,.2,.4,.2,.2,.2,.2,.2,.2,.2,.2,.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   .8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8 +i mel1, 2, -1 +i mel1, 3, 1 +i mel1, 4 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0 + .2,.2,.2,.2,.2,.4,.2,.4,.2,.2,.4,.2,.2,.6,.9,.2,.5,.4,.2,.2,.2,.2,.4,.2,.2,.2,.2,.2,.2,.2,.2,.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 + .8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8,.8 +i mel1, 5, -1 +i mel1, 6, 1 - +i kick, 1 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 0, 0, 0, 1, 0, 1, 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 + .4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.3,.3 +  1, 0,.8, 0, 1, 0,.5, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.8, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.6,.6 +  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,.6,.2 +i kick, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 + .4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.3,.3 +  1, 0, 1, 0, 1, 1,.5, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0,.8, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.6,.6 +  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,.6,.2 +i kick, 3, 1 +i kick, 4, -1 +i kick, 5, 2 +i kick, 6, 1  i hat1, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -56,7 +123,11 @@ i hat1, 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,.6, 1, 1, 1, 1, 1, 1, 1,.6, 1,.6, 1, 1, 1, 1, 1,.6, 1, 1, 1, 1, 1, 1, 1,.2    1, 1, 1, 1, 1, 1, 1, 1, 1,.5, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.5, 1,.5, 1, 1, 1, 1, 1, 1 - +i hat1, 2, 1 +i hat1, 3, 1 +i hat1, 4, -1 +i hat1, 5, 1 +i hat1, 6, 1  i hat2, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -64,7 +135,35 @@ i hat2, 1    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.2,.05, 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 hat2, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .5,.1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.2,.05, 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 +i hat2, 3, 1 +i hat2, 4, -1 +i hat2, 5, 2 +i hat2, 6, 1 +i shaker, 1, -1 +i shaker, 2, -1 +i shaker, 3, -1 +i shaker, 4 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  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 +i shaker, 5 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 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 +i shaker, 6, 2  i mel2, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - @@ -72,13 +171,124 @@ i mel2, 1   .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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 mel2, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0 + .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.2,.2,.1,.2,.2,.2,.2,.1,.1,.1,.2,.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, 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 mel2, 3, 1 +i mel2, 4 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0 + .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.4,.2,.2,.1,.1,.1,.2,.2,.1,.2,.2,.2,.2,.1,.1,.1,.2,.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, 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 mel2, 5, 2 +i mel2, 6, 1 -i kick, 1 + +i chord1, 1  ; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - -  1, 0, 0, 0, 1, 0, 1, 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 - .4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.3,.3 -  1, 0,.8, 0, 1, 0,.5, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.8, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,.6,.6 -  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,.6,.2 +  0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0 + .2,.2,.2,.1,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0 +  0, 0, 0, 1, 0, 0, 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 +i chord1, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 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 + .2,.2,.2,.3,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.2,.2,.2,.2,.2,.2,.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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0 +  0, 0, 0, 1, 0, 0, 2, 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 chord1, 3 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 + .2,.2,.2,.3,.2,.2,.2,.2,.2,.2,.2,.2,.2,.8,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.2,.2,.2,.2,.2,.2,.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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 2, 0, 0, 0, 0 +  0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +i chord1, 4 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +  1,.3,.2,.2,.2,.2,.2,.2, 1,.2,.2,.2,.2,.2,.3,.4,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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 +  3, 2, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  2, 1, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0 +  0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +i chord1, 5, 2 +i chord1, 6, 1 + + +i chord2, 1 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  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, 1, 1, 0 + .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  0, 0, 0, 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, 1, 2, 0 +i chord2, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + .1,.3,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.3,.4,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.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, 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, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0 +i chord2, 3 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0 + .2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.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, 1, 1, 1, 1,.7,.7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +  2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 +  0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0 +i chord2, 4, 2 +i chord2, 5, 2 +i chord2, 6, 1 + +i chord3, 1, -1 +i chord3, 2, -1 +i chord3, 3 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 0, 1, 0, 1, 0, 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 + .5, 0,.2, 0,.2, 0,.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 +  1, 0,.5, 0,.4, 0,.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 +  1, 0, 1, 0, 1, 0, 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 +i chord3, 4, -1 +i chord3, 5, -1 +i chord3, 6, 3 + +i 303, 1 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 + .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.06,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.06,.06,.2,.2,.2,.2,.2,.2,.2,.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, 1, 1, 1, 1, 1,0.2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i 303, 2 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 + .2,.2,.2,.03,.2,.04,.2,.2,.2,.2,.06,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.06,.06,.2,.2,.2,.2,.2,.2,.2,.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, 1, 1, 1, 1, 1,0.2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i 303, 3, 1 +i 303, 4 +; 1  -  -  -  2  -  -  -  3  -  -  -  4  -  -  -  5  -  -  -  6  -  -  -  7  -  -  -  8  -  -  - +  1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 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,.9, 1,.8,.7,.6,.5,.4,.3, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +i 303, 5, 2 +i 303, 6, 1  }} diff --git a/BUG9/instruments.udo b/BUG9/instruments.udo index 198d196..14399ae 100644 --- a/BUG9/instruments.udo +++ b/BUG9/instruments.udo @@ -14,21 +14,36 @@  instr play_bass -	iamp = bid_getparameter(p4, p5, 2) -	ifreq = cpsmidinn(table(1, gibid_chordfn, 0, 0, 1) - 48) -	k1 linseg 2.1, p3*0.2, 2, p3*0.8, 2 -	k2 line 10, p3, 0 +	iamp = bid_getparameter(p4, p5, 2)  +	imode = bid_getparameter(p4, p5, 4)  +	if (imode == 0) then +		ifreq = cpsmidinn(table(1, gibid_chordfn, 0, 0, 1) - 48) +		k1 linseg 2.1, p3*0.2, 2, p3*0.8, 2 +		k2 line 10, p3, 0 +	else  +		ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1) - 48) +		if (ifreq < 20) then +			ifreq *= 2 +		endif +		k1 init round(random(1, 2)) +		k2 init random(2, 4) +	endif  	kamp linseg 1, p3*0.1, 0.6, p3*0.9, 0  	aL foscil 1, ifreq, 4, k1, k2, gifnSine  	aR foscil 1, ifreq, 3.9, k1, k2, gifnSine  	aL pareq aL*1.3, 200, 0.3, 0.7  	aR pareq aR*1.3, 200, 0.3, 0.7 +	 +	if (imode == 0) then +		aL butterlp aL, 150 +		aR butterlp aR, 150 +	endif  	bus_mix("master", aL*kamp*iamp, aR*kamp*iamp)  endin  instr play_mel1 -	iamp = bid_getparameter(p4, p5, 2) -	ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1) + 12) +	iamp = bid_getparameter(p4, p5, 2) * 1.5 +	ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1))  	kamp init 1  	aL wgbowedbar 1, ifreq, 0.5, 0.2, 0.995  	aR wgbowedbar 1, ifreq, 0.3, 0.5, 0.995 @@ -37,7 +52,7 @@ endin  instr play_mel2  	iamp = bid_getparameter(p4, p5, 2) -	ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1) - 12) +	ifreq = cpsmidinn(table(random(1, 4), gibid_chordfn, 0, 0, 1) - 24)  	k1 linseg 1.1, p3*0.2, 2, p3*0.8, 2  	k2 line 1, p3, 6  	kamp linseg 1, p3*0.1, 0.6, p3*0.9, 0 @@ -48,19 +63,60 @@ instr play_mel2  	bus_mix("master", aL*kamp*iamp, aR*kamp*iamp)  endin + +instr play_shaker +	iamp = bid_getparameter(p4, p5, 2) * 0.5 +	p3 = 0.04 +	kamp linseg iamp, p3, 0 +	aL shaker kamp, random(4000, 4500), 4, 0.999, 4 +	aR shaker kamp, random(4000, 4500), 4, 0.999, 4 +	bus_mix("master", aL, aR) +endin + + +/* +	tb303 style synth +*/ +instr play_303 +	iamp = bid_getparameter(p4, p5, 2) +	inote1 = tab_i(random(1, ftlen(gibid_chordfn) - 3), gibid_chordfn) +	ifrq1 = random(200, 600) +	kamp linseg 1, p3*0.9, 1, p3*0.1, 0 +	ifreq1 = cpsmidinn(inote1) +	kcps init ifreq1 +	kffrq init ifrq1 +	a1 phasor kcps		; oscillator +	a1 = 1 - 2 * a1 + +	a1x butterbp a1, kffrq, kcps * 1.0			; filters +	a1x =  a1x * (2 + kffrq / kcps)	; correct amplitude +	a1 = a1x + a1 * 0.25 ; 0.5 +	a1 butterlp a1, kffrq + +	a1 = taninv(a1 * 4 * iamp)	; distortion ; 2.5 + +	keqf limit kffrq * 4, 10, sr * 0.48	; EQ frequency +	a1 pareq a1 * 0.4, keqf, 4.0, 1.0, 2 +	a1 butterhp a1, 70 +	a1 = a1 * kamp * 0.62 +	aL, aR pan2 a1, random(0.2, 0.8) +	bus_mix("master", aL, aR) +endin + +  /*  	clap  */  gifnClap ftgen 0, 0, 1024, 7, 1, 128, 0, 1, 0.9, 128, 0, 1, 0.8, 128, 0, 1, 0.7, 128, 0, 1, 0.5, 256, 0.1, 256, 0  instr play_clap -	iamp = bid_getparameter(p4, p5, 2) -	p3 = 0.25 +	iamp = bid_getparameter(p4, p5, 2) * 1.3 +	p3 = (p3 <= 0.2) ? 0.07 : p3  	kbetaL line 0.9, p3, 0.01  	kbetaR line 0.8, p3, 0.01  	aL noise 1, kbetaL  	aR noise 1, kbetaR -	kfreqL line 700+random(-100, 100), p3, 2500+random(-100, 100) -	kfreqR line 700+random(-100, 100), p3, 2500+random(-100, 100) +	kfreqL line 1100+random(-100, 100), p3, 2500+random(-100, 100) +	kfreqR line 1100+random(-100, 100), p3, 2500+random(-100, 100)  	apt oscil 1, line(50, p3, 2000)  	apt2 oscil 1, line(500, p3, 20) @@ -106,7 +162,7 @@ instr play_hat1  	idel = random(0.001, 0.02)  	xtratim idel  	p3 = random(0.01, 0.04) -	ifreq = 200 +	ifreq = 300  	aenv expsega .1, .0005, 1, p3 - .0005, .01  	asqr1 oscil 1, ifreq, gifnSaw, -1  	asqr2 oscil 1, ifreq*1.4471, gifnSquare, -1 @@ -137,10 +193,14 @@ endin  instr play_hat2  	iamp = bid_getparameter(p4, p5, 2) +	imode = bid_getparameter(p4, p5, 4)  	idel1 = random(0.005, 0.02)  	idel2 = random(0.005, 0.02)  	xtratim(max:i(idel1, idel2))  	kfreq = abs(oscil(50, 10)) + 800 +	if (imode == 1) then  +		kfreq linseg 100, p3, 1000 +	endif  	aenv expsega .1, .0005, 1, p3 - .0005, .01  	asqr1 oscil 1, kfreq, gifnSquare, -1  	asqr2 oscil 1, kfreq*1.4471, gifnSquare, -1 @@ -158,6 +218,109 @@ instr play_hat2  endin +instr play_chord1_note +	inote = p4 +	iplaymode = p5 +	iamp = 0.4 +	ivibdepthL = 0.01 +	ivibdepthR = ivibdepthL +	if (iplaymode = 1) then +		klpf linseg 20, p3*0.5, 500, p3*0.5, 6000 +		ic1 = 8 +	elseif (iplaymode == 2) then +		p3 = random(0.7, 2) +		klpf linseg 20, p3*0.5, 6000, p3*0.5, 12000 +		ivibdepthL = random(5, 10) +		ivibdepthR = random(5, 10) +		iamp *= 0.17 +		ic1 = random(0.1, 2) +	else +		ic1 = random(4, 10) +		klpf linseg 11000, p3, 200 +	endif +	kamp linseg 1, p3*0.9, 1, p3*0.1, 0 + +	aL fmrhode kamp * iamp, cpsmidinn(inote), ic1 + random(-1, 1), 0.4, ivibdepthL, 3, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine +	aR fmrhode kamp * iamp, cpsmidinn(inote), ic1 + random(-1, 1), 0.4, ivibdepthR, 6, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine + +	aL butterhp aL, 450 +	aL butterlp aL, klpf +	aR butterhp aR, 450 +	aR butterlp aR, klpf + +	bus_mix("master", aL, aR) +endin + +instr play_chord1 +	iamp = bid_getparameter(p4, p5, 2) +	ichordgroup = bid_getparameter(p4, p5, 4) +	ichordnum = bid_getparameter(p4, p5, 5) +	iplaymode = bid_getparameter(p4, p5, 6) +	ifn = gibid_chordgroups[ichordgroup][ichordnum] +	index = 0 +	while (index < ftlen(ifn)) do +		schedule("play_chord1_note", 0, p3, tab_i(index, ifn), iplaymode) +		index += 1 +	od +	turnoff +endin + + + +instr play_chord2_note +	inote = p4 +	kamp linseg 1, p3*0.9, 1, p3*0.1, 0 +	iamp = 0.4 +	aL fmbell kamp * iamp, cpsmidinn(inote), 1, 1, 0.01, 3, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine +	aR fmbell kamp * iamp, cpsmidinn(inote), 1.1, 1, 0.01, 6, gifnSine, gifnSine, gifnSine, gifnSine, gifnSine +	klpf linseg 14000, p3, 200 + +	aL butterhp aL, 450 +	aL butterlp aL, klpf +	aR butterhp aR, 450 +	aR butterlp aR, klpf + +	bus_mix("master", aL, aR) +endin + +instr play_chord2 +	iamp = bid_getparameter(p4, p5, 2) +	ichordgroup = bid_getparameter(p4, p5, 4) +	ichordnum = bid_getparameter(p4, p5, 5) +	ifn = gibid_chordgroups[ichordgroup][ichordnum] +	index = 0 +	while (index < ftlen(ifn)) do +		schedule("play_chord2_note", 0, p3, tab_i(index, ifn)) +		index += 1 +	od +	turnoff +endin + + + +instr play_chord3_note +	inote = p4 +	iamp = p5 +	klfo lfo random(5, 10), random(0.1, 0.4) +	a1 oscil 0.15 * iamp, cpsmidinn(inote) + klfo +	a1 butterhp a1, 450 +	kamp linseg 1, p3*0.8, 1, p3*0.1, 0 +	a1 *= kamp +	aL, aR pan2 a1, random(0, 1) + +	bus_mix("master", aL, aR) +endin + +instr play_chord3 +	iamp = bid_getparameter(p4, p5, 2) +	ifn = gibid_chordfn +	index = 0 +	while (index < ftlen(ifn)) do  +		schedule("play_chord3_note", 0, p3, tab_i(index, ifn), iamp) +		index += 1 +	od +	turnoff +endin  /* @@ -166,10 +329,10 @@ endin  instr play_kick	  	iamp = bid_getparameter(p4, p5, 2)  	aout1 wgbowedbar 1, 60, 0.9, 0.1, 0.1 -	aout1 distort aout1, 0.25, gifnSquare +	aout1 distort aout1, 0.45, gifnSquare  	aout1 pareq aout1, 130, 0.3, 0.6  	aout1 pareq aout1, 9000, 5, 0.6 -	aout1 *= 0.8 +	aout1 *= 1.3  	bus_mix("master", aout1, aout1)  endin @@ -21,24 +21,24 @@ Significant work has been done on contructing a custom arrangement format for in  The original BID file is provided as text (bid\_source.txt), but not all platforms support the readfi opcode as required by bid\_loadfile, hence it has been encapsulated in a string within bid_source.udo , and bid\_loadtext is used instead. If readfi is supported and bid\_loadfile is to be used, NOFILEIO should be unset.	  ### BUG4 (2021)  -Utilises the BID loop arrangement format created in BUG3 and computed during realtime playback. +Utilises the BID loop arrangement format created in BUG3 and computed during realtime playback. Microhouse type track.  ### BUG5 (2021-2022) -Further usage of the BID loop arrangement format. +Further usage of the BID loop arrangement format. Atmospheric house kind of vibe. -### BUG6 (2021-2023) : Not Complete -In progress. +### BUG6 (2021-2024) +A hard techno style sort of thing influenced by Surgeon, Richie Hawtin etc. -### BUG7 (2022-2023) : Not Complete +### BUG7 (2022-2024) : Not Complete  In progress. -### BUG8 (2022-2023) : Not Complete +### BUG8 (2022-2024) : Not Complete  In progress. -### BUG9 (2022-2023) : Not Complete +### BUG9 (2022-2024) : Not Complete  In progress. -### BUG10 (2022-2023) : Not Complete +### BUG10 (2022-2024) : Not Complete  In progress.  ## Credits |