diff options
author | Richard <q@1bpm.net> | 2021-11-09 21:10:12 +0000 |
---|---|---|
committer | Richard <q@1bpm.net> | 2021-11-09 21:10:12 +0000 |
commit | 69d812698d8b6b4e963d49d0953ebeca05fa6500 (patch) | |
tree | e7fcf987afe9cd1ca290cbee3011bd6b3deacb8a /BUG4 | |
parent | dae3d836d099b1abf8b4e6e935d148eccb90f96e (diff) | |
download | csd-unfixedbugs1-69d812698d8b6b4e963d49d0953ebeca05fa6500.tar.gz csd-unfixedbugs1-69d812698d8b6b4e963d49d0953ebeca05fa6500.tar.bz2 csd-unfixedbugs1-69d812698d8b6b4e963d49d0953ebeca05fa6500.zip |
BUG4 finished
Diffstat (limited to 'BUG4')
-rw-r--r-- | BUG4/BUG4.csd | 181 | ||||
-rw-r--r-- | BUG4/bid.udo | 425 | ||||
-rw-r--r-- | BUG4/bid_source.udo | 494 | ||||
-rw-r--r-- | BUG4/bussing.udo | 5 | ||||
-rw-r--r-- | BUG4/instruments.udo | 489 | ||||
-rw-r--r-- | BUG4/txt_tools.udo | 82 | ||||
-rw-r--r-- | BUG4/wavetables.udo | 2 |
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 */ |