diff options
Diffstat (limited to 'BID-rework')
-rw-r--r-- | BID-rework/BUG5.csd | 154 | ||||
-rw-r--r-- | BID-rework/bid.udo | 431 | ||||
-rw-r--r-- | BID-rework/bid_source.udo | 135 | ||||
-rw-r--r-- | BID-rework/bussing.udo | 62 | ||||
-rw-r--r-- | BID-rework/instruments.udo | 312 | ||||
-rw-r--r-- | BID-rework/txt_tools.udo | 82 | ||||
-rw-r--r-- | BID-rework/wavetables.udo | 16 |
7 files changed, 0 insertions, 1192 deletions
diff --git a/BID-rework/BUG5.csd b/BID-rework/BUG5.csd deleted file mode 100644 index 4f05983..0000000 --- a/BID-rework/BUG5.csd +++ /dev/null @@ -1,154 +0,0 @@ -<CsoundSynthesizer> -<CsOptions> --odac -</CsOptions> -<CsInstruments> -/* - Debugger - Unfixed Bugs : BUG #5 - - http://git.1bpm.net/csd-unfixedbugs1/about/ - - By Richard Knight 2022 - http://1bpm.net - q@1bpm.net - -*/ - -sr = 44100 -ksmps = 10 -nchnls = 2 -0dbfs = 1 -seed 0 - -#define NOFILEIO ## ; file IO with readfi not supported on all platforms: disables bid_loadfile - -gkmastergain init 1 ; master gain -gkpump = 0 ; kick ducking control -gksection init -1 - -#include "wavetables.udo" ; general waveforms -#include "bussing.udo" ; global audio bussing -#include "bid.udo" ; Bug Infested Directive tools and parsing -#include "instruments.udo" ; sound generators -#include "txt_tools.udo" ; text tools - - -instr global_delay1 - aL, aR bus_read "delay1" - aL *= abs(oscil(1, 1)) - aR *= abs(oscil(1, 1)) - aLdlr delayr 0.8 - kdeltime = abs(oscil(0.02, 0.04)) + (gibid_beattime* 0.5) - aLdel deltapi kdeltime + 0.002 - delayw aL + (aLdel * 0.7) - aRdlr delayr 0.8 - aRdel deltapi kdeltime + 0.001 - delayw aR + (aRdel * 0.7) - ;aLdel *= 1-gkpump - ;aRdel *= 1-gkpump - bus_mix("master", aLdel, aRdel) -endin - -/* - Global send effects: reverb -*/ -instr global_reverb - aL, aR bus_read "reverb" - aL, aR freeverb aL, aR, 0.6, 0.3 - bus_mix("master", aL, aR) -endin - -/* - Master audio output -*/ -instr global_master - igain = 1 - aL, aR bus_read "master" - aL limit aL*0.5, -1, 1 - aR limit aR*0.5, -1, 1 - outs aL*gkmastergain*igain, aR*gkmastergain*igain -endin - - -/* - Parse BID file and run the sequencer -*/ -instr parseandrun - tt_notify("Parsing events") - - #include "bid_source.udo" - bid_loadtext(SBID) - - tt_notify("Running sequencer") - event_i "i", "sequencer", 0, 3600 - turnoff -endin - -instr endfade - exitnow -endin - - - -instr sequencer - isection = 1 - event_i "i", "bid_setcurrentchord", 0, 1, isection, 0 - event_i "i", "global_delay1", 0, p3 - event_i "i", "global_reverb", 0, p3 - event_i "i", "global_master", 0, p3 - kmetro metro (gibid_tempo / 60) * 4 - kpos init 0 - kposabs init 0 - ksection init isection - kposchord init 0 - gksection = ksection - if (kmetro == 1) then - if (ksection > gibid_maxsection) then - event "i", "endfade", 0, gibid_beattime*8 - turnoff - endif - - - bid_seq "kick", kpos, ksection - bid_seq "hat1", kpos, ksection - bid_seq "hat2", kpos, ksection - bid_seq "snare", kpos, ksection - bid_seq "mel1", kpos, ksection - bid_seq "stringchord", kpos, ksection - bid_seq "chord1", kpos, ksection - bid_seq "bass", kpos, ksection - bid_seq "clap", kpos, ksection - bid_seq "303", kpos, ksection - - - kpos = (kpos < 31) ? kpos + 1 : 0 - ksection16ths = bid_getsectionlength(ksection) * 4 - - if (kposabs+1 < ksection16ths) then - kposabs += 1 - else - ksection += 1 - kposchord = 0 - kpos = 0 - kposabs = 0 - event "i", "bid_setcurrentchord", 0, 1, ksection, 1 - endif - - - if (kposchord+1 < gkbid_chordlength*4) then - kposchord += 1 - else - kposchord = 0 - event "i", "bid_setcurrentchord", 0, 1, ksection, 1 - endif - - - endif -endin - -</CsInstruments> -<CsScore> -i"parseandrun" 0 1 - -</CsScore> -</CsoundSynthesizer>
\ No newline at end of file diff --git a/BID-rework/bid.udo b/BID-rework/bid.udo deleted file mode 100644 index 4c0e797..0000000 --- a/BID-rework/bid.udo +++ /dev/null @@ -1,431 +0,0 @@ -#ifndef UDO_BID -#define UDO_BID ## -/* - Debugger - Unfixed Bugs : BUG #5 - - 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.1# - -#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_sectionmax init 64 -gibid_sectionlengths ftgen 0, 0, -gibid_sectionmax, -7, 0 ; section lengths -gibid_sections ftgen 0, 0, -pow(gibid_sectionmax, 2), -7, 0 ; section pointers to data: dim0=section, dim1=instrument -gibid_sectiondata ftgen 0, 0, -(99*6), -7, 0 ; section data, ftables contained: dim0=ID, dim1=parameter ftable number - -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 = tab:k(ksection * gibid_sectionmax + instrindex, gibid_sections) - - if (kdata != -1) then ; null section - tab:k(kpos, - kon = tablekt:k(kpos, gibid_sectiondata[kdata][0]) - - if (kon == 1) then - kchance = tablekt:k(kpos, gibid_sectiondata[kdata][3]) - if (random:k(0, 1) < kchance) then - ktime = (kpos % 2 == 0) ? 0 : gibid_swingtime - kdur = tablekt:k(kpos, gibid_sectiondata[kdata][1]) * gibid_beattime - ;kamp = tablekt:k(kpos, gisectiondata[kdata][2]) - event "i", Sinstrument, ktime, kdur, kpos, kdata - endif - endif - endif -endop - - -/* - Get a parameter for the specified pattern position. - 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 - ifn = tab_i(idataindex * gibid_sectionmax + iparameter, gibid_sectiondata) - xout tab_i(ipos, ifn) -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 - ifn ftgen 0, 0, -isize, -7, 0 - tabw_i(ifn, ix1 * gibid_sectionmax + ix2, gibid_sectiondata) - 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 = tab_i(irepeatsection * gibid_sectionmax + instrindex, gibid_sections) - endif - tabw_i(inewsection, isection * gibid_sectionmax + instrindex, gibid_sections) - ;gibid_sections[isection][instrindex] = inewsection - else - isectiondataindex += 1 - tabw_i(isectiondataindex, isection * gibid_sectionmax + instrindex, gibid_sections) - 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/BID-rework/bid_source.udo b/BID-rework/bid_source.udo deleted file mode 100644 index a64d00a..0000000 --- a/BID-rework/bid_source.udo +++ /dev/null @@ -1,135 +0,0 @@ -/* - Debugger - Unfixed Bugs : BUG #5 - - 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 #5 -v 1.1 - -; tempo, swing percent -b 123, 41 - -; chord groups -c 1 - 3.5, 56, 59, 61, 64 - 4.5, 56, 59, 63 - 8, 59, 60, 62, 65, 69 - -c 2 - 8, 56, 59, 61, 64, 69 - 8, 56, 59, 65, 71, 73 -;8, 56, 59, 63, 68 -;4.5, 57, 60, 65, 69, 71 -; 4.5, 60, 61, 65, 67, 70 ; 57, 60, 65, 69, 71 - - -; sections: section number, length, chordgroup -s 1, 32, 2 -s 2, 32, 1 -s 3, 32, 1 - - - -; patterns: trig , dur, amp, chance -i stringchord, 1 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 - 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.5, 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,.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 stringchord, 2, -1 -i stringchord, 3, -1 - - -i chord1, 1, -1 -i chord1, 2 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 1, 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, 0 - 3.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4.5, 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,.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, 3, 2 - -i clap, 1, -1 -i clap, 2 -; 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,.1, 0, 0, 0, 0, 0, 0, 0,.1, 0, 0, 0, 0, 0, 0, 0,.1, 1, 0, 0, 0, 0, 0, 0,.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 -i clap, 3, 2 - -i snare, 1 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 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,.5, 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 snare, 2, 1 -i snare, 3, 1 - -i hat1, 1 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 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, 2, 1 -i hat1, 3, 1 - -i hat2, 1, -1 -i hat2, 2 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 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, 1, 1, 1, 1, 1, 1, 1, 1 -i hat2, 3, 2 - - -i mel1, 1 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0 - .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.2,.2,.1,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.5,.2,.2,.2 - 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 mel1, 2 - 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0 - .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.2,.2,.1,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.1,.1,.5,.2,.2,.2 - 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 mel1, 3, 2 - - -i 303, 1, -1 -i 303, 2, -1 -i 303, 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 - .2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2 - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 - .6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6,.6 - - -i bass, 1, -1 -i bass, 2 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1 - .5,.2,.2,.2,.2,.2,.2,.2,.2,.2,.5,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.2,.5,.2,.2,.2,.2,.2, - 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 bass, 3, 2 - - -i kick, 1 -; 1 - - - 2 - - - 3 - - - 4 - - - 5 - - - 6 - - - 7 - - - 8 - - - - 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0 - .9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9,.9 - 1, 0,.8, 0, 1, 0, 0, 0, 1, 0,.7, 0, 1, 0, 0, 0, 1, 0,.8, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0,.6,.6 - 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, 1, 1,.6,.2 -i kick, 2, 1 -i kick, 3, 1 -}} diff --git a/BID-rework/bussing.udo b/BID-rework/bussing.udo deleted file mode 100644 index 78755ce..0000000 --- a/BID-rework/bussing.udo +++ /dev/null @@ -1,62 +0,0 @@ -#ifndef UDO_BUSSING -#define UDO_BUSSING ## - - -/* - Get the stereo L and R names for a singular bus name - - SnameL, SnameR bus_name Sbus - - SnameL left bus identifier - SnameR right bus identifier - - Sbus bus name -*/ -opcode bus_name, SS, S - Sbus xin - xout sprintf("%sL", Sbus), sprintf("%sR", Sbus) -endop - - -/* - Mix to a stereo bus - - bus_mix Sbus, aL, aR - - Sbus bus name - aL left channel - aR right channel -*/ -opcode bus_mix, 0, Saa - Sbus, aL, aR xin - SbusL, SbusR bus_name Sbus - chnmix aL, SbusL - chnmix aR, SbusR -endop - - - -/* - Read from a stereo bus, and then clear the bus - - aL, aR bus_read Sbus - - aL left channel - aR right channel - - Sbus bus name -*/ -opcode bus_read, aa, S - Sbus xin - SbusL, SbusR bus_name Sbus - aL chnget SbusL - aR chnget SbusR - chnclear SbusL - chnclear SbusR - xout aL, aR -endop - - - - -#end diff --git a/BID-rework/instruments.udo b/BID-rework/instruments.udo deleted file mode 100644 index 834f942..0000000 --- a/BID-rework/instruments.udo +++ /dev/null @@ -1,312 +0,0 @@ -#ifndef UDO_INSTRUMENTS -#define UDO_INSTRUMENTS ## -/* - Debugger - Unfixed Bugs : BUG #5 - - Sound generators - Names should correspond to those used in BID file, prepended with play_ -*/ - - -#include "wavetables.udo" -#include "bussing.udo" -#include "bid.udo" - - -instr play_hat1 - iamp = bid_getparameter(p4, p5, 2) - idel1 = random(0.01, 0.03) - idel2 = random(0.01, 0.03) - xtratim(max(idel1, idel2)) - p3 = 0.22 - kfreq linseg 1000, p3*0.2, 300, p3*0.8, 500 ; mid as 500 not 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 - aL delay aout, idel1 - aR delay aout, idel2 - bus_mix("master", aL, aR) -endin - - -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)) - kfreq init 415.3*0.8 - 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, gifnSaw, -1 - asqr6 oscil 1, kfreq*2.6637, gifnSaw, -1 - a808 sum asqr1, asqr2, asqr3, asqr4, asqr5, asqr6 - a808 butterhp a808, 3270 - a808 butterhp a808, 3270 - aout = a808 * aenv * iamp - aL delay aout, idel1 - aR delay aout, idel2 - bus_mix("master", aL, aR) -endin - -instr play_bass - iamp = bid_getparameter(p4, p5, 2) - inote = tab_i(random(1, ftlen(gibid_chordfn) - 3), gibid_chordfn) - 24 - a1 foscil 0.56, cpsmidinn(inote), 1, 2, random(0, 6), gifnSine - a1 pareq a1, 150, 0.24, 0.9 - a1 pareq a1, 80, 1.3, 0.9 - kenv linseg 1, p3, 0 - aout = a1*kenv - bus_mix("master", aout, aout) -endin - - -instr play_kick ; 808 style kick - iamp = bid_getparameter(p4, p5, 2) - - idist = 0.35 ;= (i(gksection) == 1) ? 0.55 : 0.35 - xtratim 0.1 - krelease release - ktune init 0 - 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 - 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 - gkpump = min(rms(amix) * 7, 1) - aout1 distort amix, idist, gifnSine - - - aout1 *= 1.6 - bus_mix("master", aout1, aout1) -endin - - -instr play_snare - icps0 = 211 - iamp = bid_getparameter(p4, p5, 2) - ;p3 = random(0.03, 0.5) - 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 - - - -instr play_clap - iamp = bid_getparameter(p4, p5, 2) - ;p3 = 0.065 - aL noise 1, 0.9 - aR noise 0.5, 0.4 - aL butterbp aL, 1200, 1100 - aR butterbp aR, 1200, 1100 - aL butterhp aL, 400 - aR butterhp aR, 400 - kamp1 linseg 1, p3*0.1, 0, p3*0.1, 1, p3*0.2, 0.1, p3*0.3, 0.5, p3*0.2, 0, p3*0.05, 0.4, p3*0.05, 0 - kamp2 linseg 1, p3*0.15, 0, p3*0.15, 1, p3*0.1, 0.1, p3*0.2, 0.5, p3*0.3, 0, p3*0.05, 0.4, p3*0.05, 0 - - aL = aL*kamp1*12*iamp - aR = aR*kamp2*12*iamp - bus_mix("master", aL, aR) - bus_mix("reverb", aL*0.2, aR*0.2) -endin - -instr play_mel1 - iamp = bid_getparameter(p4, p5, 2) - inote = tab_i(1, gibid_chordfn) ;tab_i(random(1, ftlen(gibid_chordfn) - 3), gibid_chordfn) - 12 - inote2 = tab_i(2, gibid_chordfn) ;tab_i(random(1, ftlen(gibid_chordfn) - 3), gibid_chordfn) - 12 - aL moog 0.6*iamp, cpsmidinn(inote - 12), 0.1, 0.02, 4, 0.01, gifnSine, gifnSaw, gifnSine - aR moog 0.6*iamp, cpsmidinn(inote2 - 12), 0.1, 0.002, 4, 0.01, gifnSine, gifnSaw, gifnSine - kenv linseg 1, p3*0.8, 0, p3*0.2, 0 - aL *= kenv - aR *= kenv - bus_mix("master", aL, aR) -endin - -instr string - if (random(0, 1) > 0.8) then - ifqc = cpsmidinn(p4) - else - ifqc = cpsmidinn(p4+12) - endif - iamp = p5 -idur = p3 - ifm1 = ifqc - ifm2 = ifqc*3 - ifm3 = ifqc*4 - indx1 = 7.5/log(ifqc) ;range from ca 2 to 1 - indx2 = 15/sqrt(ifqc) ;range from ca 2.6 to .5 - indx3 = 1.25/sqrt(ifqc) ;range from ca .2 to .038 - - irise = 0.1 - idec = 0.4 - inoisdur= .1 - ivibdel = 0.25 - ivibwth = 0.01 - ivibrte = 5.5 - - kvib init 0 - kvbctl linen 1,.5,p3-ivibdel,.1 ; vibrato control envelope - krnd randi .0075,2 ; random deviation vib width - kvib oscili kvbctl*ivibwth+krnd,ivibrte*kvbctl ; generator - - ktrans linseg 1,inoisdur,0,1,0 ; transient envelope - anoise randi ktrans*iamp/4,.2*ifqc ; attack noise... - attack oscili anoise,2000 ; ...centered around 2kHz - - amod1 oscili ifm1*(indx1+ktrans),ifm1 - amod2 oscili ifm2*(indx2+ktrans),ifm2 - amod3 oscili ifm3*(indx3+ktrans),ifm3 - asig oscili iamp,(ifqc+amod1+amod2+amod3)*(1+kvib) - asig linen (asig+attack),irise,idur,idec - asig butterhp asig, 800 - asig butterhp asig, 200 - kenv linseg 0, p3*0.25, 0.7, p3*0.5, 1, p3*0.25, 0 - asig *= kenv - asig *= 0.2 - aL = asig - aR = asig - bus_mix("delay1", aL, aR) -bus_mix("reverb", aL, aR) - - -endin - - -instr play_303 - iamp = bid_getparameter(p4, p5, 2) - ifilter = random(50, 70) - inote = tab_i(random(1, ftlen(gibid_chordfn) - 1), gibid_chordfn) - - ifrq1 = 440 * exp(log(2) * (ifilter - 69) / 12) ; filter start freq. - kamp linseg 1, p3-0.01, 1, 0.025, 0, 1, 0 ; release envelope - 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, 250 - a1 = a1 * kamp * 0.72 - aL, aR pan2 a1, random(0.3, 0.7) - bus_mix("reverb", aL*0.3, aR*0.3) - bus_mix("master", aL*0.8, aR*0.8) -endin - -instr chord1 - inote = p4 - iamp = p5 - kfreq init cpsmidinn(inote) - - aphs1 phasor kfreq - aphs2 phasor kfreq - koda = abs(oscil(random(0, 2), random(0, 1))) - a1 tablei aphs1, gifnSine, 1, 0, 1 - a1 *= linseg(1, p3*0.9, 0) - - av1L linseg 3, p3, 0 - aL tablei (aphs2+a1)+av1L+koda, gifnSine, 1, 0, 1 - - av1R linseg 4, p3, 0 - aR tablei (aphs2+a1)+av1R+koda, gifnSine, 1, 0, 1 - - kfi linseg 0, p3*0.2, 1, p3*0.8, 1 - aL phaser1 aL*kfi, oscil:k(7400, 0.1, gifnSine, random(0, 0.5)) + 1000, 8, .9 - aR phaser1 aR*kfi, oscil:k(7400, 0.1, gifnSine, random(0, 0.5)) + 1000, 8, .9 - aL *= 0.16 * iamp - aR *= 0.16 * iamp - aL butterhp aL, 520 - aR butterhp aR, 520 - if (i(gksection) == 3) then - aL butterlp aL, 1000 - aR butterlp aR, 1000 - endif - bus_mix("delay1", aL, aR) - ;bus_mix("master", aL, aR) -endin - - -/* - Play chord1 above, called from BID -*/ -instr play_chord1 - chordinstrument "chord1", p4, p5 - turnoff -endin - -instr play_stringchord - chordinstrument "string", p4, p5 - turnoff -endin - - - -#end diff --git a/BID-rework/txt_tools.udo b/BID-rework/txt_tools.udo deleted file mode 100644 index a6c4511..0000000 --- a/BID-rework/txt_tools.udo +++ /dev/null @@ -1,82 +0,0 @@ -#ifndef UDO_TXTTOOLS -#define UDO_TXTTOOLS ## -/* - Debugger - Unfixed Bugs : BUG #5 - - 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/BID-rework/wavetables.udo b/BID-rework/wavetables.udo deleted file mode 100644 index 1b2c209..0000000 --- a/BID-rework/wavetables.udo +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef UDO_WAVETABLES -#define UDO_WAVETABLES ## -/* - Debugger - Unfixed Bugs : BUG #5 - - General waveforms -*/ - -ipoints = 16384 -gifnCosine ftgen 0, 0, ipoints, 9, 1, 1, 90 -gifnSine ftgen 0, 0, ipoints, 10, 1 -gifnSquare ftgen 0, 0, ipoints, 10, 1, 0, 0.3, 0, 0.2, 0, 0.14, 0, .111 -gifnSaw ftgen 0, 0, ipoints, 10, 0, .2, 0, .4, 0, .6, 0, .8, 0, 1, 0, .8, 0, .6, 0, .4, 0, .2 - -#end - |