aboutsummaryrefslogtreecommitdiff
path: root/BUG4
diff options
context:
space:
mode:
Diffstat (limited to 'BUG4')
-rw-r--r--BUG4/BUG4.csd181
-rw-r--r--BUG4/bid.udo425
-rw-r--r--BUG4/bid_source.udo494
-rw-r--r--BUG4/bussing.udo5
-rw-r--r--BUG4/instruments.udo489
-rw-r--r--BUG4/txt_tools.udo82
-rw-r--r--BUG4/wavetables.udo2
7 files changed, 1577 insertions, 101 deletions
diff --git a/BUG4/BUG4.csd b/BUG4/BUG4.csd
index fbeefa3..a506e53 100644
--- a/BUG4/BUG4.csd
+++ b/BUG4/BUG4.csd
@@ -1,6 +1,7 @@
<CsoundSynthesizer>
<CsOptions>
-odac
+-m0
</CsOptions>
<CsInstruments>
/*
@@ -8,36 +9,42 @@
http://git.1bpm.net/csd-unfixedbugs1/about/
- By Richard Knight 2021
+ By Richard Knight 2022
http://1bpm.net
q@1bpm.net
*/
sr = 44100
-ksmps = 10
+ksmps = 100
nchnls = 2
0dbfs = 1
seed 0
-gitempo = 118
+#define NOFILEIO ## ; file IO with readfi not supported on all platforms: disables bid_loadfile
+
gkmastergain init 1 ; master gain
gkpump = 0 ; kick ducking control
-gkreverse init 0 ; global reverse
+gksection init -1
#include "wavetables.udo" ; general waveforms
#include "bussing.udo" ; global audio bussing
+#include "bid.udo" ; Bug Infested Directive tools and parsing
#include "instruments.udo" ; sound generators
+#include "txt_tools.udo" ; text tools
+/*
+ Global delay instrument 1
+*/
instr global_delay1
aL, aR bus_read "delay1"
- ifreq1 = (118 / 60) / 2
- kfdbkL = abs(oscil(0.6, 1.63))
- kfdbkR = abs(oscil(0.6, 1.67))
+ ifreq1 = (gibid_tempo / 60) / 8
+ kfdbkL = abs(oscil(0.8, 1.63))
+ kfdbkR = abs(oscil(0.8, 1.67))
- atimeL = abs(oscil(0.3, ifreq1))
- atimeR = abs(oscil(0.3, ifreq1))
+ atimeL = abs(oscil(0.2, ifreq1)) + 0.01
+ atimeR = abs(oscil(0.2, ifreq1)) + 0.01
aLdlr delayr 1
aLdel deltapi atimeL
@@ -49,10 +56,15 @@ instr global_delay1
aRdel butterhp aRdel, 130
delayw aR + (aRdel * kfdbkR)
-
+ aLdel *= 1-gkpump
+ aRdel *= 1-gkpump
bus_mix("master", aLdel, aRdel)
endin
+
+/*
+ Global delay instrument 2
+*/
instr global_delay2
aL, aR bus_read "delay2"
aLdlr delayr 0.2
@@ -65,64 +77,139 @@ instr global_delay2
bus_mix("master", aLdel, aRdel)
endin
+
/*
Master audio output
*/
instr global_master
- igain = 0.4
+ igain = 1
aL, aR bus_read "master"
- ;aL limit aL*0.8, 0, 1
- ;aR limit aR*0.8, 0, 1
+
+ awindex phasor giglitchsamples/sr
+ tablew aL, awindex*giglitchsamples, giglitchbufferL
+ tablew aR, awindex*giglitchsamples, giglitchbufferR
+
+ if (gksection == 1 || gksection == 2) then
+ aL butterhp aL, 100
+ aR butterhp aR, 100
+ elseif (gksection == 8) then
+ islen = tab_i(8, gibid_sectionlengths)*gibid_beattime
+ khpf linseg 0, islen*0.5, 0, islen*0.2, 30, islen*0.2, 60, islen*0.1, 1000
+ 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
-instr seq
- event_i "i", "global_master", 0, p3
- event_i "i", "global_delay1", 0, p3
- event_i "i", "global_delay2", 0, p3
- kbeat metro (gitempo / 60) * 4
- kpos init 0
- if (kbeat == 1) then
- if (kpos % 3 == 0) then
- event "i", "play_rim", 0, 1
- endif
- if ((kpos+1) % 2 == 0 && random:k(0, 1) > 0.8) then
- event "i", "play_303", 0, 0.01, 106, 106, 90, 1
- endif
+/*
+ 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
- km8m init 0
- if ((kpos+1) % 8 == 0) then
- kstart = (km8m == 0) ? 40 : 45
- kend = (km8m == 0) ? 43 : 38
- event "i", "play_303", 0, 0.3, kstart, kend, 40, 0
- km8m = 1- km8m
- endif
-
- if (kpos % 9 == 0) then
- ;event "i", "play_blip", 0, 0.01
- endif
+/*
+ Parse BID file and run the sequencer
+*/
+instr parseandrun
+ tt_notify("Parsing events")
+
+ #include "bid_source.udo"
+ bid_loadtext(SBID)
+
+ tt_notify("Running sequencer")
+ event_i "i", "sequencer", 0, 3600
+ turnoff
+endin
- if (kpos % 4 == 0) then
- event "i", "play_kick", 0, 0.2, 0
- endif
- if ((kpos+2) % 16 == 0) then
- event "i", "play_kick", 0, 0.4, 1
+
+/*
+ Sequence BID elements
+*/
+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
+ 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
- if (kpos % 8 == 0) then
- event "i", "play_clap", 0, 0.02
+ ; sequence BID elements
+ bid_seq "kick", kpos, ksection
+ bid_seq "kick2", kpos, ksection
+ bid_seq "clap", kpos, ksection
+ bid_seq "blip", kpos, ksection
+ bid_seq "303", kpos, ksection
+ bid_seq "hat1", kpos, ksection
+ bid_seq "chord1", kpos, ksection
+ bid_seq "chord2", kpos, ksection
+ bid_seq "chord3", kpos, ksection
+ bid_seq "snare", kpos, ksection
+ bid_seq "mel1", kpos, ksection
+ bid_seq "hat2", kpos, ksection
+ bid_seq "303b", kpos, ksection
+ bid_seq "shaker", kpos, ksection
+ bid_seq "glitchread", 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
+
- kpos += 1
endif
+
endin
</CsInstruments>
<CsScore>
-i"seq" 0 400
-
+i"parseandrun" 0 1
</CsScore>
</CsoundSynthesizer> \ No newline at end of file
diff --git a/BUG4/bid.udo b/BUG4/bid.udo
new file mode 100644
index 0000000..a5eea11
--- /dev/null
+++ b/BUG4/bid.udo
@@ -0,0 +1,425 @@
+#ifndef UDO_BID
+#define UDO_BID ##
+/*
+ Debugger - Unfixed Bugs : BUG #4
+
+ Bug Infested Directive file parser v1 and tools
+
+ Designed to create a reusable loop based score format in the Unfixed Bugs project and beyond.
+*/
+
+
+#define BID_VERSION #1.0#
+
+#include "txt_tools.udo"
+
+; globals
+gibid_tempo init -1 ; beats per minute
+gibid_beattime init -1 ; time of one beat in second
+gibid_maxsection init -1 ; max number of sections
+gibid_chordfn init -1 ; current chord ftable
+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_chordgroups[][] init 16, 12 ; chord groups, pointers to sectionchords by section
+gibid_sectionchords[] init 16 ; ftables of section chords
+
+gibid_currentchordnum = 0 ; current chord number
+gibid_lastchordgroup = -1 ; last chord group
+gibid_lastsection = -1 ; last section
+
+gSbid_sequenced[] init 1 ; internal tracking of sequenced elements
+gibid_sequenceinit init 1 ; internal tracking of sequenced init
+gibid_swingtime init -1 ; swing time calculated from percent
+
+/*
+ Get BID instrument index, creating new reference if specified.
+ Internal use only.
+
+ index _bid_gettextindex Sname, [iaddifnotexists = -1]
+
+ index BID instrument index
+
+ Sname name to look up or create
+ iaddifnotexists 1=create , default=fatal if not exists
+*/
+opcode _bid_gettextindex, i, Sj
+ Sname, iaddifnotexists xin
+ ifinalindex = -1
+ index = 0
+ while (index < lenarray(gSbid_sequenced)) do
+ if (strcmp(gSbid_sequenced[index], Sname) == 0) then
+ ifinalindex = index
+ igoto complete
+ endif
+ index += 1
+ od
+
+ if (iaddifnotexists == 1) then
+ if (gibid_sequenceinit == 1) then
+ gibid_sequenceinit = 0
+ SequencedNew[] fillarray Sname
+ ifinalindex = 0
+ else
+ SequencedNew[] init lenarray(gSbid_sequenced) + 1
+ index = 0
+ while (index < lenarray(gSbid_sequenced)) do
+ SequencedNew[index] = gSbid_sequenced[index]
+ index += 1
+ od
+ SequencedNew[index] = Sname
+ ifinalindex = index
+ endif
+ gSbid_sequenced = SequencedNew
+ igoto complete
+ else
+ tt_notify_fatal(sprintf("Sequenced index for '%s' not found", Sname))
+ endif
+
+complete:
+ xout ifinalindex
+endop
+
+
+
+/*
+ Parse a row of comma-separated numerical values of either patterns or chords.
+ Internal use only.
+
+ inum _bid_parserowitems Sline, ix1, ix2, imode
+
+ inum number of elements found parsed
+
+ Sline input line
+ ix1 array dimension 1 index
+ ix2 array dimension 2 index
+ imode 0=count elements; 1=write patterns; 2=write chords
+*/
+opcode _bid_parserowitems, i, Siii
+ Sline, ix1, ix2, imode xin
+ inum = 0
+ while (strlen(Sline) > 0) do
+ icomma = strindex(Sline, ",")
+ Stemp = strsub(Sline, 0, icomma)
+ icomma = (icomma == -1) ? 0 : icomma
+ Sline = strsub(Sline, icomma + 1)
+ if (imode == 1) then
+ tabw_i strtod(Stemp), inum, gibid_sectiondata[ix1][ix2]
+ elseif (imode == 2) then
+ tabw_i strtod(Stemp), inum, gibid_chordgroups[ix1][ix2]
+ endif
+ inum += 1
+ od
+ xout inum
+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])
+ ;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.
+ ipos and idataindex are provided as p4 and p5 to instruments scheduled by bid_seq,
+ hence can typically used as bid_getparameter(p4, p5, iparameter)
+
+ idata bid_getparameter ipos, idataindex, iparameter
+
+ idata the resulting value
+
+ ipos position in pattern
+ idataindex section specific data index; pointer to ftable
+ iparameter parameter index as in BID file; defaults include 0=on/off, 1=duration, 2=amp, 3=chance
+
+*/
+opcode bid_getparameter, i, iii
+ ipos, idataindex, iparameter xin
+ xout tab_i(ipos, gibid_sectiondata[idataindex][iparameter])
+endop
+
+
+/*
+ Get a section length in beats
+
+ klength bid_getsectionlength ksection
+
+ klength length in beats
+
+ ksection section to look up
+*/
+opcode bid_getsectionlength, k, k
+ ksection xin
+ xout tab:k(ksection, gibid_sectionlengths)
+endop
+
+/*
+ Parse a row of comma-separated values to either section patterns or chord storage.
+ Scans row, assigns ftable of appropriate length and then fills ftable.
+ Internal use only.
+
+ _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
+ imode 1=section patterns, 2=chords
+*/
+opcode _bid_parserow, 0, Siii
+ Sline, ix1, ix2, imode xin
+ isize = _bid_parserowitems(Sline, ix1, ix2, 0)
+ if (imode == 1) then
+ gibid_sectiondata[ix1][ix2] ftgen 0, 0, -isize, -7, 0
+ elseif (imode == 2) then
+ gibid_chordgroups[ix1][ix2] ftgen 0, 0, -isize, -7, 0
+ endif
+ isize = _bid_parserowitems(Sline, ix1, ix2, imode)
+endop
+
+
+
+/*
+ Parse a line from a BID string
+ Internal use only.
+
+ idataout[] _bid_parseline Sline, idatain[]
+
+ idataout[] state data
+
+ Sline line to parse
+ idatain[] state data
+
+*/
+opcode _bid_parseline, i[], Si[]
+ Sline, idata[] xin
+ iparameter = idata[0]
+ isection = idata[1]
+ ichordnum = idata[2]
+ isectiondataindex = idata[3]
+ imode = idata[4]
+
+ if (strlen(Sline) > 0) then
+ Sfirstchar = strsub(Sline, 0, 1)
+
+ ; comment
+ if (strcmp(Sfirstchar, ";") == 0) then
+ ; no action
+
+ ; version check
+ elseif (strcmp(Sfirstchar, "v") == 0) then
+ imode = 0
+ iversion = strtod(strsub(Sline, 2))
+ if (iversion != $BID_VERSION) then
+ tt_notify(sprintf("Incompatible BID file version: got %.2f , expected %.2f", iversion, $BID_VERSION))
+ exitnow
+ endif
+
+ ; section header
+ elseif (strcmp(Sfirstchar, "s") == 0) then
+ imode = 1
+ icomma = strindex(Sline, ",")
+ isectionnum = strtod(strsub(Sline, 2, icomma))
+ Sub = strsub(Sline, icomma+1)
+ icomma = strindex(Sub, ",")
+ isectionlength = strtod(strsub(Sub, 0, icomma))
+ ichordgroup = strtod(strsub(Sub, icomma+1))
+ gibid_sectionchords[isectionnum] = ichordgroup
+ tabw_i isectionlength, isectionnum, gibid_sectionlengths
+
+ ; tempo
+ elseif (strcmp(Sfirstchar, "b") == 0) then
+ imode = -1
+ icomma = strindex(Sline, ",")
+ gibid_tempo = strtod(strsub(Sline, 2, icomma))
+ gibid_beattime = 60 / gibid_tempo
+ iswingpercent = strtod(strsub(Sline, icomma+1))
+ gibid_swingtime = ((gibid_beattime/4)/100) * iswingpercent
+
+ ; chord group header
+ elseif (strcmp(Sfirstchar, "c") == 0) then
+ imode = 3
+ ichordgroup = strtod(strsub(Sline, 2))
+ ichordnum = 0
+
+ ; pattern header
+ elseif (strcmp(Sfirstchar, "i") == 0) then
+ imode = 4
+ iparameter = 0
+
+ icomma = strindex(Sline, ",")
+ instrindex = _bid_gettextindex(strsub(Sline, 2, icomma), 1)
+ Sub = strsub(Sline, icomma+1)
+ icomma2 = strindex(Sub, ",")
+ isection = strtod(strsub(Sub, 0, icomma2))
+ if (isection > gibid_maxsection) then
+ gibid_maxsection = isection
+ endif
+ if (icomma2 != -1) then ; repeat or null section
+ irepeatsection = strtod(strsub(Sub, icomma2+1))
+ if (irepeatsection == -1) then
+ inewsection = -1
+ else
+ inewsection = gibid_sections[irepeatsection][instrindex]
+ endif
+ gibid_sections[isection][instrindex] = inewsection
+ else
+ isectiondataindex += 1
+ gibid_sections[isection][instrindex] = isectiondataindex
+ endif
+
+ ; chord row
+ elseif (imode == 3) then
+ _bid_parserow(Sline, ichordgroup, ichordnum, 2)
+ ichordnum += 1
+
+ ; pattern row
+ elseif (imode == 4) then
+ _bid_parserow(Sline, isectiondataindex, iparameter, 1)
+ iparameter += 1
+ endif
+ endif
+ idata[0] = iparameter
+ idata[1] = isection
+ idata[2] = ichordnum
+ idata[3] = isectiondataindex
+ idata[4] = imode
+ xout idata
+endop
+
+
+/*
+ Parse a Bug Infested Directive Format string to global arrays, ftables and variables.
+ Handles patterns, tempo, chord groups and sections etc accordingly.
+
+ bid_loadtext Sfile, [imode = 0]
+
+ Stext directive data as string to parse
+*/
+opcode bid_loadtext, 0, S
+ Stext xin
+ idata[] fillarray -1, -1, -1, -1, -1
+read:
+ index = strindex(Stext, "\n")
+ if (index != -1) then
+ Sline = strsub(Stext, 0, index)
+ Stext = strsub(Stext, index + 1)
+ idata[] _bid_parseline Sline, idata
+
+ igoto read
+ else
+ igoto complete
+ endif
+
+complete:
+endop
+
+
+/*
+ Parse a Bug Infested Directive Format string to global arrays, ftables and variables.
+ Handles patterns, tempo, chord groups and sections etc accordingly.
+ Requires readfi support which is not available on all platforms. Platforms that do not support that
+ should set NOFILEIO.
+
+ bid_loadfile Sfile
+
+ Sfile directive file to parse
+*/
+opcode bid_loadfile, 0, S
+ Sfile xin
+#ifdef NOFILEIO
+ tt_notify_fatal("Attempting to use parsefile when NOFILEIO is set")
+#else
+ if (filevalid(Sfile) == 0) then
+ tt_notify(sprintf("Directive file cannot be found: '%s'", Sfile))
+ exitnow
+ endif
+ idata[] fillarray -1, -1, -1, -1, -1
+read:
+ Sline, ilinenum readfi Sfile
+ Sline = tt_stripnewline(Sline)
+
+ idata[] _bid_parseline Sline, idata
+
+ if (ilinenum != -1) igoto read
+#endif
+endop
+
+
+
+/*
+ Set the current chord given a section
+ p4 the section number
+ p5 0=start at beginning, 1=increment chord index
+*/
+instr bid_setcurrentchord
+ isection = p4
+ ichordincrement = p5
+ if (isection > gibid_maxsection) then
+ turnoff
+ endif
+
+ ichordgroup = gibid_sectionchords[isection]
+ if (ichordgroup != gibid_lastchordgroup || isection != gibid_lastsection) then
+ gibid_currentchordnum = 0
+ gibid_lastchordgroup = ichordgroup
+ gibid_lastsection = isection
+ elseif (ichordincrement == 1) then
+ if (gibid_currentchordnum + 1 < lenarray(gibid_chordgroups, 2) - 1) then
+ if (gibid_chordgroups[ichordgroup][gibid_currentchordnum + 1] == 0) then
+ gibid_currentchordnum = 0
+ else
+ gibid_currentchordnum += 1
+ endif
+ else
+ gibid_currentchordnum = 0
+ endif
+ else
+ gibid_currentchordnum = 0
+ endif
+
+ ifn = gibid_chordgroups[ichordgroup][gibid_currentchordnum]
+
+ if (ifn > 0) then
+ gkbid_chordlength = tab:k(0, ifn)
+ gibid_chordfn = ifn
+ endif
+
+ if (timeinstk() > 2) then
+ turnoff
+ endif
+endin
+
+
+#end
+
diff --git a/BUG4/bid_source.udo b/BUG4/bid_source.udo
new file mode 100644
index 0000000..36536ba
--- /dev/null
+++ b/BUG4/bid_source.udo
@@ -0,0 +1,494 @@
+/*
+ Debugger - Unfixed Bugs : BUG #4
+
+ Bug Infested Directives source
+ Provided as a string due to readfi not being available on all platforms.
+ Used with bid_loadtext (whereas a separate file would be used with bid_loadfile and requires readfi support)
+*/
+
+SBID = {{
+; Bug Infested Directives : Debugger - Unfixed Bugs : BUG #4
+v 1.0
+
+; tempo, swing percent
+b 118, 42
+
+; chord groups
+c 1
+ 4, 60, 65, 67, 71, 72
+ 4, 63, 65, 66, 71, 72
+
+c 2
+ 4, 67, 72, 76, 78, 79
+ 4, 63, 65, 66, 71, 72
+
+
+; sections: section number, length, chordgroup
+s 1, 28, 1
+s 2, 4, 2
+s 3, 64, 1
+s 4, 64, 1
+s 5, 64, 1
+s 6, 28, 1
+s 7, 4, 1
+s 8, 64, 1
+s 9, 64, 1
+s 10, 60, 1
+s 11, 4, 2
+s 12, 64, 1
+s 13, 8, 1
+
+; patterns: trig , dur, amp, chance
+
+i glitchread, 1, -1
+i glitchread, 2, -1
+i glitchread, 3, -1
+i glitchread, 4, -1
+i glitchread, 5
+; 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, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0
+ .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,.1
+ 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, 6, -1
+i glitchread, 7, -1
+i glitchread, 8
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0
+ .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,.1
+ 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, 9, 8
+i glitchread, 10, 8
+i glitchread, 11, 2
+i glitchread, 12, -1
+i glitchread, 13, -1
+
+
+i blip, 1
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 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,.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,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i blip, 2
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 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,.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,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i blip, 3, 1
+i blip, 4, 1
+i blip, 5, -1
+i blip, 6, -1
+i blip, 7, 2
+i blip, 8, 1
+i blip, 9, 2
+i blip, 10, 1
+i blip, 11, 2
+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,.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,.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,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+
+
+i mel1, 1, -1
+i mel1, 2, -1
+i mel1, 3
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .2,.2,.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
+ 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i mel1, 4, 1
+i mel1, 5, -1
+i mel1, 6, -1
+i mel1, 7, -1
+i mel1, 8, 3
+i mel1, 9, 3
+i mel1, 10, 3
+i mel1, 11, -1
+i mel1, 12
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.2,.1,.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,.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,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i mel1, 13, -1
+
+
+i 303, 1
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1
+ .5,.1,.5,.1,.5,.5,.2,.5,.5,.5,.2,.2,.5,.5,.5,.5,.5,.5,.2,.5,.5,.2,.5,.5,.5,.5,.5,.5,.5,.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,.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
+ 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2
+i 303, 2, -1
+i 303, 3
+; 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
+ .5,.1,.5,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.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,.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,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 0, 1, 0, 1, 1, 0, 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
+i 303, 4
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0
+ .5,.1,.1,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.1,.1,.1,.5,.5,.5,.5,.5,.1,.1,.1,.5,.5,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 2, 2, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 0, 1, 1, 2, 2, 2, 1, 1, 1, 1
+i 303, 5
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
+ .4,.1,.1,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.2,.2,.2,.4,.1,.1,.1,.5,.5,.5,.5,.5,.1,.1,.1,.5,.5,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 2, 2, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 0, 1, 1, 2, 2, 2, 1, 1, 2, 2
+i 303, 6
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1
+ .4,.1,.1,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.2,.2,.2,.4,.1,.1,.1,.5,.5,.5,.5,.5,.1,.1,.1,.5,.5,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 2, 2, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 0, 1, 1, 2, 2, 2, 1, 1, 2, 2
+i 303, 7, -1
+i 303, 8, 3
+i 303, 9, 3
+i 303, 10, 4
+i 303, 11, -1
+i 303, 12, 5
+i 303, 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
+ 2,.1,.1,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.2,.2,.2,.4,.1,.1,.1,.5,.5,.5,.5,.5,.1,.1,.1,.5,.5,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+ 0, 2, 2, 2, 1, 1, 0, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 2, 2, 2, 1, 1, 0, 1, 1, 2, 2, 2, 1, 1, 2, 2
+
+
+i 303b, 1, -1
+i 303b, 2, -1
+i 303b, 3, -1
+i 303b, 4
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0
+ .2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.2,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i 303b, 5
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 0
+ .2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.5,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.2,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i 303b, 6
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0
+ .2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.5,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.1,.2,.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,.6, 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, 1, 1, 1, 1,.6, 1,.4, 1, 1, 1, 1, 1, 1, 1, 1
+i 303b, 7, -1
+i 303b, 8, -1
+i 303b, 9, 5
+i 303b, 10, 4
+i 303b, 11, -1
+i 303b, 12, -1
+i 303b, 13, -1
+
+
+i shaker, 1, -1
+i shaker, 2, -1
+i shaker, 3, -1
+i shaker, 4, -1
+i shaker, 5
+; 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, 6
+; 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, 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,.9,.9,.8,.8,.7,.7,.6,.6,.5,.5,.4,.4,.3,.3,.2,.2,.1,.1, 1, 1, 1, 1, 1, 1, 1, 1,.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
+i shaker, 7, -1
+i shaker, 8, -1
+i shaker, 9, 5
+i shaker, 10, -1
+i shaker, 11, -1
+i shaker, 12, -1
+i shaker, 13, -1
+
+
+i chord1, 1, -1
+i chord1, 2, -1
+i chord1, 3
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0
+ .5,.1,.5,.1,.5,.5,.5,.5,.5,.5,.5,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.1,.5,.1,.5,.1,.5,.5,.5,.5,.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,.6, 1, 1, 1, 1, 1, 1, 1, 1
+ 1,.6, 1,.6, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.8, 0,.7, 1,.6, 1, 1, 1, 1, 1, 1
+i chord1, 4, 3
+i chord1, 5, -1
+i chord1, 6, -1
+i chord1, 7, -1
+i chord1, 8, 3
+i chord1, 9, 3
+i chord1, 10, 3
+i chord1, 11, -1
+i chord1, 12, -1
+i chord1, 13, -1
+
+
+i chord2, 1, -1
+i chord2, 2
+; 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, 0, 1, 0, 0, 0, 0, 0, 0, 0
+ .5,.1,.5,.1,.5,.5,.5,.5,.5,.5,.8,.1,.5,.5,.5,.5,.5,.5,.5,.5,.5,.1,.3,.1,.3,.1,.5,.5,.5,.5,.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,.6, 1, 1, 1, 1, 1, 1, 1, 1
+ 1,.6, 1,.6, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 0,.7,.6,.6, 1, 1, 1, 1, 1, 1
+ 0, 0, 0, 0, 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
+i chord2, 3
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ .5,.1,.5,.1,.5,.5,.5,.5,.5,.5,.1,.3,.5,.5,.5,.5,.5,.5,.5,.5,.5,.3,.3,.1,.3,.1,.5,.5,.5,.5,.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,.6, 1, 1, 1, 1, 1, 1, 1, 1
+ 1,.6, 1,.6, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 1,.7,.6,.6, 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 chord2, 4, 3
+i chord2, 5, -1
+i chord2, 6
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0
+ .5,.1,.5,.1,.5,.5,.5,.5,.5,.5,.6,.1,.5,.5,.4,.5,.5,.5,.5,.5,.5,.1,.3,.1,.3,.1,.5,.5,.4,.5,.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,.6, 1, 1, 1, 1, 1, 1, 1, 1
+ 1,.6, 1,.6, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 0,.7,.6,.6, 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 chord2, 7, 2
+i chord2, 8, 3
+i chord2, 9, 3
+i chord2, 10, -1
+i chord2, 11, 2
+i chord2, 12, -1
+i chord2, 13, -1
+
+
+i chord3, 1, -1
+i chord3, 2, -1
+i chord3, 3, -1
+i chord3, 4, -1
+i chord3, 5
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0
+ .2,.1,.5,.1,.5,.5,.5,.5,.2,.5,.6,.1,.5,.5,.5,.5,.2,.5,.5,.5,.5,.1,.3,.1,.2,.1,.5,.5,.5,.5,.1,.5
+ 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,.7, 1
+ 1,.6, 1,.6, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 0,.7, 1,.6, 1, 1, 1, 1, 1, 1
+i chord3, 6, 5
+i chord3, 7
+; 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,.5,.1,.5,.5,.5,.5,.2,.5,.6,.1,.5,.5,.5,.5,.2,.5,.5,.5,.5,.1,.3,.1,.2,.1,.5,.5,.5,.5,.1,.5
+ 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,.7, 1
+ 1,.6, 1,.6, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.3, 0,.7, 1,.6, 1, 1, 1, 1, 1, 1
+i chord3, 8, -1
+i chord3, 9, 5
+i chord3, 10, 5
+i chord3, 11, -1
+i chord3, 12, -1
+i chord3, 13, -1
+
+
+i clap, 1, -1
+i clap, 2
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0,.1, 0, 0,.02, 0, 0, 0, 0,.02, 1, 0, 0, 0, 0, 0, 0,.02, 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
+i clap, 3
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 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, 0, 0
+ 0, 0, 0, 0,.02, 0, 0, 0, 0, 0, 0, 0,.02, 0, 0, 0, 0, 0, 0, 0,.02, 1, 0, 0, 0, 0, 0, 0,.02, 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
+i clap, 4
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 1, 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, 0, 0
+ 0,.02, 0, 0,.02, 0, 0, 0, 0, 0, 0, 0,.02, 0, 0, 0, 0, 0, 0, 0,.02, 1, 0, 0, 0, 0, 0, 0,.02, 0, 0, 1
+ 1,.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,.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
+i clap, 5, 3
+i clap, 6
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 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,.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,.09, 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
+i clap, 7, 2
+i clap, 8, 3
+i clap, 9, 3
+i clap, 10, 3
+i clap, 11, 2
+i clap, 12, -1
+i clap, 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
+ .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, 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
+
+
+i snare, 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, 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,.7, 1,.7, 1, 1, 1, 1, 1,.7, 1, 1, 1, 1, 1, 1, 1,.7, 1,.7, 1, 1, 1, 1, 1, 1
+i snare, 2
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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,.7, 1,.7, 1, 1, 1, 1, 1,.7, 1, 1, 1, 1, 1, 1, 1,.7, 1,.7, 1, 1, 1, 1, 1, 1
+i snare, 3
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 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,.7, 1,.7, 1, 1, 1, 1, 1,.7, 1, 1, 1, 1, 1, 1, 1,.7, 1,.7, 1, 1, 1, 1, 1, 1
+i snare, 4, 3
+i snare, 5, -1
+i snare, 6, -1
+i snare, 7, 2
+i snare, 8, 3
+i snare, 9, 3
+i snare, 10, -1
+i snare, 11, 2
+i snare, 12, -1
+i snare, 13, -1
+
+
+i hat1, 1
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 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, 1,.1,.2,.3,.4,.3,.2,.1, 1, 1, 1, 1, 1, 1, 1, 1,.1,.3,.5,.7,.5,.3,.1, 1,.8, 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,.5, 1,.5, 1, 1, 1, 1, 1, 1
+i hat1, 2
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 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,.2,.3,.4,.5,.6,.7,.8,.9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.8, 1,.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,.5, 1,.5, 1, 1, 1, 1, 1, 1
+i hat1, 3
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 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,.8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,.8, 1,.8, 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,.5, 1,.5, 1, 1, 1, 1, 1, 1
+i hat1, 4, 3
+i hat1, 5, -1
+i hat1, 6, 1
+i hat1, 7, 2
+i hat1, 8, 3
+i hat1, 9, 3
+i hat1, 10, 3
+i hat1, 11, 2
+i hat1, 12, 1
+i hat1, 13
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 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
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 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,.8,.7,.6,.5,.4,.3,.2,.1, 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
+
+i hat2, 1, -1
+i hat2, 2, -1
+i hat2, 3, -1
+i hat2, 4
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 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,.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 hat2, 5, 4
+i hat2, 6, -1
+i hat2, 7, -1
+i hat2, 8, 4
+i hat2, 9, 4
+i hat2, 10, 4
+i hat2, 11, -2
+i hat2, 12, 4
+i hat2, 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
+ .5, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1
+
+
+i kick, 1
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 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, 0, 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 - - -
+ 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 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, 0, 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, 3, 1
+i kick, 4, 1
+i kick, 5, 1
+i kick, 6
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 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, 0, 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, 7, 2
+i kick, 8, 1
+i kick, 9, 1
+i kick, 10, 1
+i kick, 11, 2
+i kick, 12, 1
+i kick, 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
+ .5, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1
+
+
+i kick2, 1
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
+ 1, 1, 1, 1, 1, 1, 1, 1, 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 kick2, 2
+; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - -
+ 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0
+ .4,.4,.4,.4,.4,.4,.4,.4,.4,.3,.2,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.4,.3,.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
+i kick2, 3, -1
+i kick2, 4, -1
+i kick2, 5, -1
+i kick2, 6, 1
+i kick2, 7, 2
+i kick2, 8, -1
+i kick2, 9, -1
+i kick2, 10, 1
+i kick2, 11, 2
+i kick2, 12, 1
+i kick2, 13, -1
+}}
diff --git a/BUG4/bussing.udo b/BUG4/bussing.udo
index 78755ce..62e4e1c 100644
--- a/BUG4/bussing.udo
+++ b/BUG4/bussing.udo
@@ -1,5 +1,10 @@
#ifndef UDO_BUSSING
#define UDO_BUSSING ##
+/*
+ Debugger - Unfixed Bugs : BUG #4
+
+ Global audio bussing
+*/
/*
diff --git a/BUG4/instruments.udo b/BUG4/instruments.udo
index e8f85d3..8de11c9 100644
--- a/BUG4/instruments.udo
+++ b/BUG4/instruments.udo
@@ -10,14 +10,28 @@
#include "wavetables.udo"
#include "bussing.udo"
+#include "bid.udo"
+/*
+ 303 bendy bass
+*/
instr play_303
- iamp = 1.2 ;getparameter(p4, p5, 2)
-
- inote1 = p4
- inote2 = p5
- ifilter = p6
+ iamp = bid_getparameter(p4, p5, 2)
+ idirection = bid_getparameter(p4, p5, 4)
+
+ if (idirection < 2) then
+ inote1b = tab_i(1, gibid_chordfn) - 24
+ inote2b = tab_i(2, gibid_chordfn) - 36
+ ifilter = (idirection == 0) ? 35 : 45
+ inote1 = (idirection == 0) ? inote1b : inote2b
+ inote2 = (idirection == 0) ? inote2b : inote1b
+ else
+ inote1 = tab_i(random(1, ftlen(gibid_chordfn) - 1), gibid_chordfn) - 24
+ inote2 = inote1
+ ifilter = random(30, 50)
+ endif
+
ifrq1 = 440 * exp(log(2) * (ifilter - 69) / 12) ; filter start freq.
kamp linseg 1, p3*0.8, 1, p3*0.2, 0
@@ -36,60 +50,67 @@ instr play_303
keqf limit kffrq * 4, 10, sr * 0.48 ; EQ frequency
a1 pareq a1 * 0.4, keqf, 4.0, 1.0, 2
a1 butterhp a1, 50
- a1 = a1 * kamp
+ a1 pareq a1, 200, 0.8, 0.7
+ a1 = a1 * kamp * 0.8
+ a1 *= 1-gkpump
aL, aR pan2 a1, random(0.3, 0.7)
- if (p7 == 1 && random(0, 1) > 0.6) then
- bus_mix("delay2", aL, aR)
- endif
+ ;bus_mix("delay2", aL, aR)
bus_mix("master", aL, aR)
endin
/*
- Istvan Varga
-*/
-instr play_rim
- iamp = 1
- icps = 220
- acps expon icps, 0.0025, icps * 0.5
- acps = acps + icps
- iamp = 1
- a1a phasor acps, 0.0
- a1b phasor acps, 0.5
- afmenv expon 1.0, 0.02, 0.5
- a1 = (a1a-a1b)*6.0*afmenv
- acps = acps*(1.0+a1)
- a0 oscil3 1.0, acps
- a1 unirand 2.0
- a1 tone a1-1.0, 2000
- a0 = a0 + a1*0.1
- aenv expon 1.0, 0.005, 0.5
- a0 limit 4.0*iamp*a0*aenv, -1.0, 1.0
- a0 table3 a0*4096.0, gifnSaw, 0, 0, 1
- kffrq expseg 2000, 0.07, 100, 1, 100
- a0x tone a0, 10000
- a0y = a0 - a0x
- a0x delay a0y, 0.0002
- a0 = a0 - a0x*4.0
- a0 pareq a0, kffrq, 0, 0.7071, 2
- a_ linseg 1, p3-0.1, 1, 0.025, 0, 1, 0
- a0 = a0*a_
- aL, aR pan2 a0*iamp, random(0.3, 0.8)
+ 303 higher register melodics
+*/
+instr play_303b
+ iamp = bid_getparameter(p4, p5, 2)
+ ifilter = random(50, 90)
+ inote = tab_i(random(1, ftlen(gibid_chordfn) - 1), gibid_chordfn)
- bus_mix("delay1", aL, aR)
+ ifrq1 = 440 * exp(log(2) * (ifilter - 69) / 12) ; filter start freq.
+ kamp linseg 1, p3*0.8, 1, p3*0.2, 0
+ kcps init cpsmidinn(inote)
+ kffrq port 0, 60/150, ifrq1 ; filter frequency
+ 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, 150
+ a1 = a1 * kamp * 0.8
+ a1 *= 1-gkpump
+ aL, aR pan2 a1, random(0.3, 0.7)
+ bus_mix("delay2", aL*0.3, aR*0.3)
bus_mix("master", aL, aR)
endin
+
+/*
+ Delayed watery blip
+*/
instr play_blip
- a1 oscil 0.6, 4400
- kamp line 1, p3, 0
- a1 *= kamp
+ iamp = bid_getparameter(p4, p5, 2)
+ a0 oscil 0.6, cpsmidinn(tab_i(1, gibid_chordfn)+48)
+ kamp linseg 1, p3*0.1, 0, p3*0.9, 0
+ a0 *= kamp
+ aL, aR pan2 a0*iamp, random(0.3, 0.8)
- bus_mix("delay2", a1, a1)
+ bus_mix("delay1", aL, aR)
+ ;bus_mix("master", aL, aR)
endin
-
+/*
+ Harsh clap
+*/
instr play_clap
+ iamp = bid_getparameter(p4, p5, 2)
aL noise 1, 0.3
aR noise 1, 0.4
aL butterbp aL, 1200, 700
@@ -98,19 +119,100 @@ instr play_clap
aR taninv aR*7
kamp linseg 2, p3, 0
- aL *= kamp
- aR *= kamp
+ aL *= kamp * iamp
+ aR *= kamp * iamp
bus_mix("delay2", aL, aR)
bus_mix("master", aL, aR)
endin
-instr play_kick ; 808 style kick
- iamp = 1
+/*
+ Closed lower frequency hi-hat
+*/
+instr play_hat1
+ iamp = bid_getparameter(p4, p5, 2)
+ idel = random(0.001, 0.02)
+ xtratim idel
+ p3 = random(0.02, 0.1)
+ ifreq = (i(gksection) < 3) ? 600 : 840 ; 840
+ aenv expsega .1, .0005, 1, p3 - .0005, .01
+ asqr1 oscil 1, ifreq, gifnSquare, -1
+ asqr2 oscil 1, ifreq*1.4471, gifnSquare, -1
+ asqr3 oscil 1, ifreq*1.6170, gifnSquare, -1
+ asqr4 oscil 1, ifreq*1.9265, gifnSquare, -1
+ asqr5 oscil 1, ifreq*2.5028, gifnSquare, -1
+ asqr6 oscil 1, ifreq*2.6637, gifnSquare, -1
+ a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6
+ a808 butterhp a808, 4270
+ a808 butterhp a808, 4270
+ aout = a808 * aenv * iamp
+ aout delay aout, idel
+ if (i(gksection) == 1) then
+ bus_mix("delay2", aout*0.9, aout*0.9)
+ endif
+ bus_mix("master", aout, aout)
+endin
+
+
+/*
+ Open higher frequency hi-hat
+*/
+instr play_hat2
+ iamp = bid_getparameter(p4, p5, 2)
+ idel1 = random(0.005, 0.02)
+ idel2 = random(0.005, 0.02)
+ xtratim(max(idel1, idel2))
+ p3 = 0.1
+ kfreq line 1000, p3, 300
+ aenv expsega .1, .0005, 1, p3 - .0005, .01
+ asqr1 oscil 1, kfreq, gifnSquare, -1
+ asqr2 oscil 1, kfreq*1.4471, gifnSquare, -1
+ asqr3 oscil 1, kfreq*1.6170, gifnSquare, -1
+ asqr4 oscil 1, kfreq*1.9265, gifnSquare, -1
+ asqr5 oscil 1, kfreq*2.5028, gifnSquare, -1
+ asqr6 oscil 1, kfreq*2.6637, gifnSquare, -1
+ a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6
+ a808 butterhp a808, 3270
+ a808 butterhp a808, 3270
+ aout = a808 * aenv * iamp * 0.9
+ aL delay aout, idel1
+ aR delay aout, idel2
+ bus_mix("master", aL, aR)
+endin
+
+
+/*
+ Blocky square-ish FM chord clunk
+*/
+instr play_mel1
+ iamp = bid_getparameter(p4, p5, 2)
+ inote1 = tab_i(ftlen(gibid_chordfn) - 3, gibid_chordfn)
+ inote2 = tab_i(ftlen(gibid_chordfn) - 4, gibid_chordfn)
+ a1 foscil 0.46, cpsmidinn(inote1), 1, 2, 1, gifnSine
+ a2 foscil 0.46, cpsmidinn(inote2), 1, 2, 1, gifnSine
+ a1 += a2
+ a1 butterhp a1, 130
+ kenv linseg 1, p3*0.1, 0.6, p3*0.5, 0.4, p3*0.4, 0
+ aout = a1*kenv*iamp*2
+ aL, aR pan2 aout, random(0, 1)
+ bus_mix("master", aL, aR)
+ if (random(0, 1) > 0.77) then
+ bus_mix("delay1", aL*0.9, aR*0.9)
+ endif
+endin
+
+
+/*
+ Lightly distorted 808 style kick
+*/
+instr play_kick
+ iamp = bid_getparameter(p4, p5, 2)
+
+ idist = 0.35
xtratim 0.1
krelease release
- ktune init -1.1
+ ktune init -1.4
kmul transeg 0.2, p3*0.5, -15, 0.01, p3*0.5, 0, 0
kbend transeg 0.5, 1.2, -4, 0, 1, 0, 0
asig gbuzz 0.5, 50*octave(ktune)*semitone(kbend), 20, 1, kmul, gifnCosine
@@ -123,12 +225,293 @@ instr play_kick ; 808 style kick
aimp oscili aenv, acps*octave(ktune*0.25)
amix = ((asig*0.7)+(aimp*0.35))*2*iamp
gkpump = min(rms(amix) * 7, 1)
- aout1 pareq amix, 100, 0.01, 0.6
- aout1 distort aout1, 0.25, (p4 == 1 && random(0, 1) > 0.6) ? gifnSaw : gifnSine
- aout1 pareq aout1, 100, 0.01, 0.6
- aout1 *= 3
+ aout1 pareq amix, 100, 0.01, 0.7
+ aout1 distort aout1, idist, gifnSine
+ aout1 pareq aout1, 40, 3, 0.4
+ aout1 pareq aout1, 130, 0.04, 0.6
+ aout1 pareq aout1, 4900, 2, 0.7
+ aout1 pareq aout1, 8900, 8, 0.7
+ aout1 *= 2
bus_mix("master", aout1, aout1)
endin
+/*
+ Heavily waveshape distorted clunky pseudo kick
+*/
+instr play_kick2
+ iamp = bid_getparameter(p4, p5, 2)
+ xtratim 0.1
+ krelease release
+ ktune random -1, 1
+ ifn = gibid_chordgroups[1][1] ; gibid_chordfn
+ ifreq = cpsmidinn(tab_i(1, ifn) - 24)
+ kmul transeg 0.2, p3*0.5, -15, 0.01, p3*0.5, 0, 0
+ kbend transeg 0.5, 1.2, -4, 0, 1, 0, 0
+ ;ifreq = 50*octave(ktune)
+ asig gbuzz 0.5, ifreq*semitone(kbend), 20, 1, kmul, gifnCosine
+ aenv transeg 1, p3-0.004, -6, 0
+ gkpump = k(aenv)
+ aatt linseg 0, 0.004, 1
+ asig = asig*aenv*aatt
+ aenv linseg 1, 0.07, 0
+ acps expsega 400, 0.07, 0.001, 1, 0.001
+ aimp oscili aenv, acps*octave(ktune*0.25)
+ amix = ((asig*0.7)+(aimp*0.35))*2*iamp
+ aout1 pareq amix, 100, 0.01, 0.6
+ aout1 distort aout1, random(0.1, 0.7), gifnSaw
+ aout1 pareq aout1, 100, 0.01, 0.3
+ aout1 butterhp aout1, 80
+ aout1 *= 5
+ if (random(0, 1) > 0.5) then
+ if (random(0, 1) > 0.7) then
+ bus_mix("delay1", aout1*0.6, aout1*0.3)
+ endif
+ if (random(0, 1) > 0.7) then
+ bus_mix("delay2", aout1*0.6, aout1*0.3)
+ endif
+ endif
+ aout1 *= 1-gkpump
+ bus_mix("master", aout1*0.7, aout1)
+endin
+
+
+/*
+ Shaker
+*/
+instr play_shaker
+ iamp = bid_getparameter(p4, p5, 2)
+ idel1 = random(0.005, 0.02)
+ idel2 = random(0.005, 0.02)
+ xtratim(max(idel1, idel2))
+ p3 = 0.05
+ kfreq line 700, p3, 300
+ aenv expsega .1, .0005, 1, p3 - .0005, .01
+ asqr1 oscil 1, kfreq, gifnSaw, -1
+ asqr2 oscil 1, kfreq*1.4471, gifnSaw, -1
+ asqr3 oscil 1, kfreq*1.6170, gifnSaw, -1
+ asqr4 oscil 1, kfreq*1.9265, gifnSaw, -1
+ asqr5 oscil 1, kfreq*2.5028, gifnSine, -1
+ asqr6 oscil 1, kfreq*2.6637, gifnSine, -1
+ a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6
+ a808 butterhp a808, 2270
+ a808 butterhp a808, 2270
+ aout = a808 * aenv * iamp * 0.3 * (1-gkpump)
+ aL delay aout, idel1
+ aR delay aout, idel2
+ bus_mix("master", aL, aR)
+ bus_mix("delay1", aL*0.25, aR*0.25)
+
+endin
+
+
+/*
+ Beef snare informed by original instrument by Istvan Varga
+*/
+instr play_snare
+ icps0 = 111
+ iamp = bid_getparameter(p4, p5, 2)
+ p3 = random(0.03, 0.1)
+ icps1 = 2.0 * icps0
+ kcps port icps0, 0.007, icps1
+ kcpsx = kcps * 1.5
+
+ kfmd port 0.0, 0.01, 0.7
+ aenv1 expon 1.0, 0.03, 0.5
+ kenv2 port 1.0, 0.008, 0.0
+ aenv2 interp kenv2
+ aenv3 expon 1.0, 0.025, 0.5
+
+ a_ oscili 1.0, kcps
+ a1 oscili 1.0, kcps * (1.0 + a_*kfmd)
+ a_ oscili 1.0, kcpsx
+ a2 oscili 1.0, kcpsx * (1.0 + a_*kfmd)
+
+ a3 unirand 2.0
+ a3 = a3 - 1.0
+ a3 butterbp a3, 3200, 1500
+ a3 = a3 * aenv2
+
+ a0 = a1 + a2*aenv3 + a3*1.0
+ a0 = a0 * aenv1
+ a0 butterhp a0, 210
+ aout = a0*iamp
+ bus_mix("master", aout, aout)
+
+endin
+
+
+/*
+ Convenience opcode for playing current chord on given instrument, passing p4 as note and p5 as amp
+
+ chordinstrument Sinstrument
+
+ Sinstrument the instrument name
+ ipos position in pattern
+ idataindex section specific data index; pointer to ftable
+*/
+opcode chordinstrument, 0, Sii
+ Sinstrument, ipos, idataindex xin
+ iamp = bid_getparameter(ipos, idataindex, 2)
+ index = 1 ; index 0 is chordgroup length
+ while (index < ftlen(gibid_chordfn)) do
+ event_i "i", Sinstrument, 0, p3, tab_i(index, gibid_chordfn), iamp
+ index += 1
+ od
+
+endop
+
+
+/*
+ Flutey chord
+*/
+instr chord1
+ inote = p4
+ iamp = p5
+ aL fmpercfl 0.65, cpsmidinn(inote), 1, 2, 0.1, 10, gifnSine, gifnSquare, gifnSine, gifnSquare, gifnSine
+ aR fmpercfl 0.65, cpsmidinn(inote), 1, 1.4, 0.2, 10, gifnSine, gifnSaw, gifnSine, gifnSquare, gifnSine
+ aL butterhp aL, 340
+ aR butterhp aR, 340
+ aL butterlp aL, 4000
+ aR butterlp aR, 4000
+ kenv linseg 1, p3*0.5, 1, p3*0.4, 1, p3*0.1, 0
+ aL *= kenv
+ aR *= kenv
+ bus_mix("master", aL, aR)
+endin
+
+
+/*
+ Play chord1 above, called from BID
+*/
+instr play_chord1
+ chordinstrument "chord1", p4, p5
+ turnoff
+endin
+
+
+/*
+ Not really a crash, more just noise
+*/
+instr play_crash
+ aL noise 1.7, 0.2
+ aR noise 1.7, 0.3
+ ifreq1 random 100, 1000
+ ifreq2 random 7000, 12000
+ if (random(0, 1) > 0.5) then
+ istartfreq = ifreq1
+ iendfreq = ifreq2
+ else
+ istartfreq = ifreq2
+ iendfreq = ifreq1
+ endif
+ kfreq line 500, p3, 9000
+ aL butterhp aL, kfreq
+ aR butterhp aR, kfreq
+ kenv linseg 0, p3*0.5, 1, p3*0.5, 0
+ aL *= kenv
+ aR *= kenv
+ ;bus_mix("master", aL, aR)
+ bus_mix("delay1", aL, aR)
+endin
+
+
+/*
+ Warped chord
+*/
+instr chord2
+ inote = p4
+ iamp = p5
+ ilower = p6
+ iamp = 0.55
+ if (ilower == 1) then
+ iamp = 1
+ else
+ inote += 12
+ endif
+ kfmod oscil 10, 6
+ kfl linseg 1, p3*0.8, 1, p3*0.2, 0.1
+ aL fmpercfl iamp, (cpsmidinn(inote)+kfmod)*kfl*0.5, 1, 2, 0.6, 10, gifnSine, gifnSquare, gifnSine, gifnSquare, gifnSine
+ aR fmpercfl iamp, (cpsmidinn(inote)+kfmod)*kfl*0.5, 1, 1.4, 0.9, 10, gifnSine, gifnSaw, gifnSine, gifnSquare, gifnSine
+ aL butterhp aL, 540
+ aR butterhp aR, 540
+ kenv line 0, p3, 1
+ aL *= kenv
+ aR *= kenv
+ bus_mix("master", aL, aR)
+endin
+
+
+/*
+ Play chord2 above, called from BID
+*/
+instr play_chord2
+ iamp = bid_getparameter(p4, p5, 2)
+ ilower = bid_getparameter(p4, p5, 4)
+ index = 1 ; index 0 is chordgroup length
+ while (index < ftlen(gibid_chordfn)) do
+ event_i "i", "chord2", 0, p3, tab_i(index, gibid_chordfn), iamp, ilower
+ index += 1
+ od
+ turnoff
+endin
+
+
+/*
+ Organ type chord
+*/
+instr chord3
+ inote = p4 - 12
+ iamp = p5
+ ifreq = cpsmidinn(inote)
+ kfreq linseg 10, p3*0.4, ifreq, p3*0.6, ifreq
+ aL fmb3 0.65, kfreq, 1, random(1.2, 2.2), random(0.1, 0.3), random(5, 15), gifnSine, gifnSquare, gifnSine, gifnSquare, gifnSine
+ aR fmb3 0.65, kfreq, 1, random(1.2, 2.2), random(0.1, 0.3), random(5, 15), gifnSine, gifnSaw, gifnSine, gifnSquare, gifnSine
+ aL butterhp aL, 340
+ aR butterhp aR, 340
+
+ kenv linseg 1, p3*0.95, 1, p3*0.05, 0
+ aL *= kenv
+ aR *= kenv
+ bus_mix("master", aL, aR)
+endin
+
+/*
+ Play chord3 above, called from BID
+*/
+instr play_chord3
+ chordinstrument "chord3", p4, p5
+ turnoff
+endin
+
+
+/*
+ Retrigger sampler with appropriate pitching
+*/
+giglitchsamples = 44100
+giglitchbufferL ftgen 0, 0, giglitchsamples, 7, 0
+giglitchbufferR ftgen 0, 0, giglitchsamples, 7, 0
+instr play_glitchread
+ iamp = bid_getparameter(p4, p5, 2)
+ ifreq = cpsmidinn(tab_i(random(1, ftlen(gibid_chordfn) - 1), gibid_chordfn))
+ ilen = ((1/(ifreq))*sr)*pow(2, round(random(0, 4)))
+ istart random 0, giglitchsamples-ilen
+ awindex phasor giglitchsamples / ilen
+ aL table awindex*giglitchsamples, giglitchbufferL
+ aR table awindex*giglitchsamples, giglitchbufferR
+ aL butterhp aL, 350
+ aR butterhp aL, 350
+ aL *= 0.2 * iamp
+ aR *= 0.2 * iamp
+ if (random(0, 1) > 0.7) then
+ if (random(0, 1) > 0.5) then
+ bus_mix("delay2", aL, aR)
+ else
+ bus_mix("delay2", aL, aR)
+ endif
+ endif
+ bus_mix("master", aL, aR)
+endin
+
+
#end
diff --git a/BUG4/txt_tools.udo b/BUG4/txt_tools.udo
new file mode 100644
index 0000000..d34459e
--- /dev/null
+++ b/BUG4/txt_tools.udo
@@ -0,0 +1,82 @@
+#ifndef UDO_TXTTOOLS
+#define UDO_TXTTOOLS ##
+/*
+ Debugger - Unfixed Bugs : BUG #4
+
+ Text tools
+*/
+
+
+/*
+ Print a notification prepended with a line of asterisks
+
+ tt_notify Stext
+
+ Stext text to print
+*/
+opcode tt_notify, 0, S
+ Stext xin
+ Snew = "\n"
+ iwidth = 60
+ index = 0
+ while (index < iwidth) do
+ Snew = strcat(Snew, "*");
+ index += 1
+ od
+ prints strcat(strcat(Snew, "\n"), strcat(Stext, "\n\n"))
+endop
+
+
+
+/*
+ Print a notification prepended with a line of asterisks and exit
+
+ tt_notify Stext
+
+ Stext text to print
+*/
+opcode tt_notify_fatal, 0, S
+ Stext xin
+ tt_notify(Stext)
+ exitnow
+endop
+
+
+/*
+ Return a number of seconds as HH:MM:SS format
+
+ Stime tt_parsetime iseconds
+
+ iseconds seconds to parse
+
+ Stime formatted time
+
+*/
+opcode tt_parsetime, S, i
+ input xin
+ ihours = floor(input / 3600)
+ iminutes = floor((input - (ihours * 3600)) / 60)
+ iseconds = input - (ihours * 3600) - (iminutes * 60)
+ xout sprintf("%02d:%02d:%05.2f", ihours, iminutes, iseconds)
+endop
+
+
+/*
+ Strip newline from end of line: built-in opcode has some problems
+
+ Soutput tt_stripnewline Sinput
+
+ Soutput processed without newline at end if existent
+
+ Sinput line to process
+*/
+opcode tt_stripnewline, S, S
+ Sline xin
+ index = strindex(Sline, "\n")
+ if (index != -1) then
+ Sline = strsub(Sline, 0, index)
+ endif
+ xout Sline
+endop
+
+#end
diff --git a/BUG4/wavetables.udo b/BUG4/wavetables.udo
index e81f075..82b0552 100644
--- a/BUG4/wavetables.udo
+++ b/BUG4/wavetables.udo
@@ -1,7 +1,7 @@
#ifndef UDO_WAVETABLES
#define UDO_WAVETABLES ##
/*
- Debugger - Unfixed Bugs : BUG #3
+ Debugger - Unfixed Bugs : BUG #4
General waveforms
*/