aboutsummaryrefslogtreecommitdiff
path: root/BID-rework
diff options
context:
space:
mode:
Diffstat (limited to 'BID-rework')
-rw-r--r--BID-rework/BUG5.csd154
-rw-r--r--BID-rework/bid.udo431
-rw-r--r--BID-rework/bid_source.udo135
-rw-r--r--BID-rework/bussing.udo62
-rw-r--r--BID-rework/instruments.udo312
-rw-r--r--BID-rework/txt_tools.udo82
-rw-r--r--BID-rework/wavetables.udo16
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
-