; blip rhythm
; Mike Ciul
; 2008 Sep 07
sr = 44100
kr = 441
ksmps = 100
nchnls = 2
gaComb1Send init 0
gaComb2Send init 0
gaLowpassSend init 0
gaAbsSend init 0
gaDownbeatSend init 0
ga8thsSend init 0
ga16thsSend init 0
gkDownbeatRMS init 0
;TODO - make it possible to open comb gates with keystroke - local/global conflict
giBPM init 130
giChannelLimit init 10000
giLookahead init 0.01
;gi0dbfs init 32767
; *******************************************************
; Instrument 1
; L: Comb 1
;
instr 1
iPitch = p4
iDelayTime = 1 / p4
aChain delay gaComb1Send, iDelayTime
; since a non-inverting comb filter has a peak at 0 Hz, do a highpass filter
; (a leakDC would be nice, but this is similar?)
; half-power point: half the comb fundamental
aChain atone aChain, (0.5/iDelayTime)
; limit signal with distortion
; imeth=2 tanh method ilimit
aChain clip aChain, 2, giChannelLimit
; imeth=0 Bram de Jong method iarg=0.75 - where clipping starts
; possible problems if input exceeds unity?
;aChain clip aChain, 0, giChannelLimit, 0.25
; Try a gate.
kRMS rms aChain
kRMS = kRMS / giChannelLimit
outvalue "comb1 RMS", kRMS
iOpenThresh = 0.01
iResetThresh = 0.001
iCloseThresh = 0.1
iFloor = 0.1
iOpenTime = 0.01
iCloseTime = 0.75
iMix = 0.25
kGate init 1
kReset init 0
if kGate == 0 then
kGain = iFloor
kPortHalfTime = iCloseTime / 10
if kReset == 1 then
if gkDownbeatRMS > iOpenThresh then
kGate = 1
kReset = 0
endif
else
if gkDownbeatRMS < iResetThresh then
kReset = 1
endif
endif
else
kGain = 1
kPortHalfTime = iOpenTime / 10
if kRMS > iCloseThresh then
kGate = 0
endif
endif
kGain portk kGain, kPortHalfTime
outvalue "test", kGain
aChain = aChain * kGain
; effect sends
kToLowpass invalue "comb1-lowpass"
kToAbs invalue "comb1-abs"
kToDownbeat invalue "combs-downbeat"
gaLowpassSend = gaLowpassSend + aChain * kToLowpass
gaAbsSend = gaAbsSend + aChain * kToAbs
; send to downbeat post-expansion
gaDownbeatSend = gaDownbeatSend + aChain * kToDownbeat
; output audio
outs1 aChain * iMix
; clear effects send for this instrument
gaComb1Send = 0
endin
; *******************************************************
; Instrument 2
; R: Comb 2 (inverting)
;
instr 2
iPitch = p4
iDelayTime = 0.5 / p4 ; inverting delay has pitch an octave lower
aChain delay gaComb2Send, iDelayTime
; limit signal with distortion
; imeth=2 tanh method ilimit
aChain clip aChain, 2, giChannelLimit
; imeth=0 Bram de Jong method iarg=0.75 - where clipping starts
; possible problems if input exceeds unity?
;aChain clip aChain, 0, giChannelLimit, 0.25
; Try a gate.
kRMS rms aChain
kRMS = kRMS / giChannelLimit
outvalue "comb2 RMS", kRMS
iOpenThresh = 0.01
iResetThresh = 0.001
iCloseThresh = 0.1
iFloor = 0.1
iOpenTime = 0.01
iCloseTime = 0.75
iMix = 0.25
kGate init 1
kReset init 0
if kGate == 0 then
kGain = iFloor
kPortHalfTime = iCloseTime / 10
if kReset == 1 then
if gkDownbeatRMS > iOpenThresh then
kGate = 1
kReset = 0
endif
else
if gkDownbeatRMS < iResetThresh then
kReset = 1
endif
endif
else
kGain = 1
kPortHalfTime = iOpenTime / 10
if kRMS > iCloseThresh then
kGate = 0
endif
endif
kGain portk kGain, kPortHalfTime
; invert
aChain = -1 * kGain * aChain
; effect sends
kToLowpass invalue "comb2-lowpass"
kToLowpass portk kToLowpass, 0.001
kToAbs invalue "comb2-abs"
kToAbs portk kToAbs, 0.001
kToDownbeat invalue "combs-downbeat"
kToDownbeat portk kToDownbeat, 0.001
gaLowpassSend = gaLowpassSend + aChain * kToLowpass
gaAbsSend = gaAbsSend + aChain * kToAbs
; send to downbeat post-expansion
gaDownbeatSend = gaDownbeatSend + aChain * kToDownbeat
; output audio
outs2 aChain * iMix
; clear effects send for this instrument
gaComb2Send = 0
endin
; *******************************************************
; Instrument 3
; Lowpass filter
;
instr 3
kCutoffOct invalue "lowpass cutoff octave"
kCutoffOct portk kCutoffOct, 0.001
kCutoff = cpsoct(kCutoffOct)
outvalue "lowpass cutoff", kCutoff
kCutoff port kCutoff, 0.1
; input cutoff Q (1-500)
aChain lowpass2 gaLowpassSend, kCutoff, 2
; limit signal with distortion
; imeth=2 tanh method ilimit
aChain clip aChain, 2, giChannelLimit
; imeth=0 Bram de Jong method iarg=0.75 - where clipping starts
; possible problems if input exceeds unity?
;aChain clip aChain, 0, giChannelLimit, 0.1
; no output, but record level
kRMS rms aChain
outvalue "lowpass RMS", kRMS / giChannelLimit
; effect sends
kToComb1 invalue "lowpass-comb1"
kToComb1 portk kToComb1, 0.001
kToComb2 invalue "lowpass-comb2"
kToComb2 portk kToComb2, 0.001
gaComb1Send = gaComb1Send + aChain * kToComb1
gaComb2Send = gaComb2Send + aChain * kToComb2
; clear effects send for this instrument
gaLowpassSend = 0
endin
; *******************************************************
; Instrument 4
; single-sideband amplitude modulation
; (fancy ring modulation)
;
instr 4
kModFreq invalue "Mod Frequency"
kModFreq portk kModFreq, 0.001
kModDir invalue "Mod Dir"
kModDir portk kModDir, 0.01
aChain = gaAbsSend
iHiPassMin = 10
kHiPassMax = kModFreq
; highpass filter to prevent fold-under
kHiPassFreq = iHiPassMin + ( kHiPassMax * abs( kModDir * -1 ) )
; input cutoff res (1-100) mode (1=hipass)
aChain bqrez aChain, kHiPassFreq, 1, 1
aReal, aImag hilbert aChain
; a complex pure tone with positive frequency
aModReal oscil 1, kModFreq, 1, 0.25
aModImag oscil 1, kModFreq, 1
aChain = ( aReal * aModReal + aImag * aModImag * kModDir )
;aChain dcblock aChain
; limit signal with distortion
; imeth=2 tanh method ilimit
;aChain clip aChain, 2, giChannelLimit
; imeth=0 Bram de Jong method iarg=0.75 - where clipping starts
; possible problems if input exceeds unity?
aChain clip aChain, 0, giChannelLimit, 0.9
; no output, but record level
kRMS rms aChain
outvalue "abs RMS", kRMS / giChannelLimit
; effect sends
kToComb1 invalue "abs-comb1"
kToComb1 portk kToComb1, 0.001
kToComb2 invalue "abs-comb2"
kToComb2 portk kToComb2, 0.001
gaComb1Send = gaComb1Send + aChain * kToComb1
gaComb2Send = gaComb2Send + aChain * kToComb2
; clear effects send for this instrument
gaAbsSend = 0
endin
; *******************************************************
; Instrument 5
; downbeat: delay, filter/ringmod, compander
;
instr 5
iMeasures1 = p4 ; first delay line, for audio output
iMeasures2 = p5 ; second delay, RMS send to combs
iOneMeasure = 60.0 * 4 / giBPM
iAudioDelay = iMeasures1 * iOneMeasure
iRMSDelay = iMeasures2 * iOneMeasure
;switching the delays so audio uses second delay
aChain delay gaDownbeatSend, iAudioDelay
kRMS rms gaDownbeatSend
kRMS = kRMS / giChannelLimit
outvalue "downbeat RMS", kRMS
;try this gate-like thing:
iMaxGain = 1.0
iMinGain = 0.25
iThreshold = 0.001
iCloseHalfTime = iOneMeasure / 16 / 10
iOpenHalfTime = iOneMeasure * 1.0 / 10
if kRMS > iThreshold then
kGoal = iMinGain
kHalfTime = iCloseHalfTime
else
kGoal = iMaxGain
kHalfTime = iOpenHalfTime
endif
kGain portk kGoal, kHalfTime
outvalue "downbeat gate", kGain
aGated = aChain * kGain
; effect sends
; send RMS to combs, via a delay
kRegen invalue "downbeat regen"
kRegen portk kRegen, 0.001
kToCombs invalue "downbeat-combs"
kToCombs portk kToCombs, 0.001
aCombsSend delay gaDownbeatSend, iRMSDelay
aCombsSend = aCombsSend * kToCombs
gkDownbeatRMS delayk kRMS, iRMSDelay - giLookahead
gaComb1Send = gaComb1Send + aCombsSend
gaComb2Send = gaComb2Send + aCombsSend
ga8thsSend = ga8thsSend + aGated * 0.5
gaDownbeatSend = aGated * kRegen ; clearing old value
; add kick drum FX to output signal
iThumpFreq = 40
iThumpBW = 30
iThumpModBW = 10
iThumpBend = 20
iClickFreq = 13000
iClickBW = 10000
iThumpAmp = 0.3
iClickAmp = 3.0
iThumpModAmp = 0.01
iThumpHP = iThumpBW / 2
iClickHP = sr / 2 - iClickBW / 2
aThump tone aChain, iThumpHP
aClick reson aGated, iClickFreq, iClickBW
kThumpModFreq = iThumpFreq + ( kRMS - 1 ) * iThumpBend
aThumpMod reson aGated, kThumpModFreq, iThumpModBW
; don't forget, when ring modulating with signals not normalized to 0db,
; you must divide by 0dbfs (giChannelLimit here).
; We don't do it with the click because the amplitude is so low.
kMix invalue "downbeat mix"
kMix portk kMix, 0.001
iThumpMul = iThumpAmp / giChannelLimit
aThump = ( aThump * iThumpMul + iThumpModAmp ) * aThumpMod
; distortion as a limiter
; imeth=0 Bram de Jong method iarg=0.75 - where clipping starts
; possible problems if input exceeds unity?
aThump clip aThump, 0, giChannelLimit, 0.75
aChain = ( aThump + aClick * iClickAmp ) * kMix
; do we need a gain control on the output?
outs aChain, aChain
endin
; *******************************************************
; Instrument 6
; 8th notes: ping pong delay
;
instr 6
iMeasuresL = p4 ; left delay feeds right delay
iMeasuresR = p5 ; and back again
i8thsL = p6
i8thsR = p7
iOneMeasure = 60.0 * 4 / giBPM
iOne8th = iOneMeasure / 8
iLDelay = iMeasuresL * iOneMeasure + i8thsL * iOne8th
iRDelay = iMeasuresR * iOneMeasure + i8thsR * iOne8th
aLeft delay ga8thsSend, iLDelay
aRight delay aLeft, iRDelay
kRMS rms aRight
kRMS = kRMS / giChannelLimit
kStereoRMS rms aLeft + aRight
kStereoRMS = kStereoRMS / giChannelLimit
outvalue "8ths RMS", kStereoRMS
;try this gate-like thing:
iMaxGain = 1.0
iMinGain = 0.5
iThreshold = 0.01
iCloseHalfTime = iOne8th * 3 / 8 / 10
iOpenHalfTime = iOne8th * 6 / 10
if kRMS > iThreshold then
kGoal = iMinGain
kHalfTime = iCloseHalfTime
else
kGoal = iMaxGain
kHalfTime = iOpenHalfTime
endif
kGain portk kGoal, kHalfTime
aGated = aRight * kGain
;effect sends
kRegen invalue "8ths regen"
kRegen portk kRegen, 0.001
kToDownbeat invalue "8ths-downbeat"
kToDownbeat portk kToDownbeat, 0.001
ga8thsSend = aGated * kRegen ; clearing old value
gaDownbeatSend = gaDownbeatSend + aGated * kToDownbeat
ga16thsSend = ga16thsSend + aGated * 2
; add snare drum FX to output signal?
kMix invalue "8ths mix"
kMix portk kMix, 0.001
outs aLeft * kMix, aRight * kMix
endin
; *******************************************************
; Instrument 7
; 16th notes
;
instr 7
i16ths1 = p4
i16ths2 = p5
i16ths3 = p6
iModFreq = 300
iOneMeasure = 60.0 * 4 / giBPM
iOne16th = iOneMeasure / 16
iError = 0.005
iDelay1 = i16ths1 * iOne16th
iDelay2 = i16ths2 * iOne16th
iDelay3 = i16ths3 * iOne16th
; try some crazy modulation
; the hilbert transform generates a complex signal from a real signal
aRe, aIm hilbert ga16thsSend
aRe1 delay aRe, iDelay1
aIm1 delay aIm, iDelay1
aRe2 delay aRe1, iDelay2
aIm2 delay aIm1, iDelay2
aRe3 delay aRe2, iDelay2
aIm3 delay aIm1, iDelay2
; try modulating the first delay with itself, to produce double frequencies?
; we're doing multiplication of complex numbers,
; but only saving the real part of the result
aMod1 = aRe1 * aRe1
aMod2 = aRe2 * aRe2
aChain1 = ( aMod1 + aMod2 ) / giChannelLimit
; no effect for second delay
aChain2 = aRe2
; for third delay, modulate by a fixed frequency
aModCos oscil 1, iModFreq, 1, .25
aModSin oscil 1, iModFreq, 1
aMod1 = aRe3 * aModCos
aMod2 = aIm3 * aModSin
; Both sum and difference frequencies can be
; output at once.
; this is upshift. For downshift use aMod1 - aMod2
aChain3 = aMod1 + aMod2
kRMS rms aChain3
kRMS = kRMS / giChannelLimit
kAllRMS rms aChain1 + aChain2 + aChain3
outvalue "16ths RMS", kAllRMS / giChannelLimit
;try this gate-like thing:
iMaxGain = 1.3
iMinGain = 0.3
iThreshold = 0.01
iCloseHalfTime = iOne16th * 0.5
iOpenHalfTime = iOne16th * 0.5 / 10
if kRMS > iThreshold then
kGoal = iMinGain
kHalfTime = iCloseHalfTime
else
kGoal = iMaxGain
kHalfTime = iOpenHalfTime
endif
kGain portk kGoal, kHalfTime
aGated = aChain3 * kGain
;effect sends
kRegen invalue "16ths regen"
kRegen portk kRegen, 0.001
kTo8ths invalue "16ths-8ths"
kTo8ths portk kTo8ths, 0.001
ga16thsSend = aGated * kRegen ; clearing old value
ga8thsSend = ga8thsSend + aGated * kTo8ths
; output
kMix invalue "16ths mix"
kMix portk kMix, 0.001
outs (aChain1 + aChain2) * kMix, (aChain1 + aChain3) * kMix
endin
; *******************************************************
; Instrument 100
; Noise blip
;
instr 100
iBlipDur = p4 ; can p3 be in milliseconds?
; try using an envelope
iSampleDur = 1 / sr
iMinBlip = 0.00001
; this is sort of an arbitrary formula for amplitude
;iBlipAmp = giChannelLimit * dbamp(iMinBlip) / dbamp(iBlipDur)
iBlipAmp = giChannelLimit * 0.1
;iDecay = ampdb( -90/(iBlipDur * sr) )
; prints "iBlipDur: %f sec, %d samples iDecay: %f", iBlipDur, iBlipDur * sr, iDecay
;aEnv linseg 0, iSampleDur, iBlipAmp, iBlipDur, iBlipAmp, iSampleDur, 0, 1, 0
; amp, rise time, overall dur, decay time, rise table, steady attenuation, decay attenuation
;aEnv envlpx iBlipAmp, iSampleDur, iBlipDur, iBlipDur - iSampleDur, 3, 1, 1 - iDecay
aEnv linseg 0, iBlipDur/2, iBlipAmp, iBlipDur/2, 0, 1, 0
aChain rand aEnv
; try an impulse
aChain mpulse giChannelLimit, 0
; send to comb filters
;gaComb1Send = gaComb1Send + aChain
;gaComb2Send = gaComb2Send + aChain
; send to LPF and ABS
gaLowpassSend = gaLowpassSend + aChain
gaAbsSend = gaAbsSend + aChain
endin
; *******************************************************
; Instrument 101
; Keyboard events
;
instr 101
klastkey init -1
key, kkeydown sense
if key != -1 && key < 128 then
; printks "key: %d down: %d", 0, key, kkeydown
; Interesting! Although every press generates an automatic fake release,
; an actual release generates a keypress of key + 128
kBlipDur invalue "blip time"
;event "scorechar", kinsnum, kdelay, kdur, [, kp4] [, kp5] [, ...]
;p3 is a fake dur, p4 is the actual time for the envelope, very short
event "i", 100, 0, kBlipDur * 0.001, kBlipDur * 0.001
; open feedback gates
; gkComb1Gate = 1
; gkComb2Gate = 1
klastkey = key
endif
endin
; *******************************************************
; Instrument 102
; Noise floor
;
instr 102
aChain rand 0.001
gaLowpassSend = gaLowpassSend + aChain
gaAbsSend = gaAbsSend + aChain
endin
; 4096 point sine wave
f1 0 4096 10 1
; probability distribution: values 1 and -1 both have 50% probability
f2 0 2 -41 1 50 -1 50
; a rising envelope
f 3 0 129 -7 0 128 1
; delay frequency
i1 0 8888 150
i2 0 8888 242.70509831248 ; 150 Hz * 1.61803398874989
i3 0 8888
i4 0 8888
; audio delay (bars) compander delay (bars) - these delays are in parallel
i5 0 8888 8 5
; L delay (bars) R delay (bars) L delay (8ths) R delay (8ths)
i6 0 8888 1 2 6 5
; 16ths delay (center) (L) (R)
i7 0 8888 13 13 13
i101 0 8888
i102 0 8888
Version: 3
Render: Real+File
Ask: Yes
Functions: None
Listing: Window
WindowBounds: 127 45 1011 750
CurrentView: orc
IOViewEdit: Off
Options: -b128 -A -o/Users/mike/eyeballsun/public_html/csound/bliprhythm.aif -s -m167 -R --midi-velocity-amp=4 --midi-key-cps=5
ioView background {60108, 65535, 63132}
ioText {208, 22} {185, 216} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder R: comb2 (inverting)
ioText {206, 241} {185, 302} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder one-way ring mod
ioText {20, 240} {183, 271} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder lowpass
ioText {445, 21} {320, 217} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder downbeat
ioText {625, 241} {229, 215} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder 16ths
ioText {404, 240} {219, 216} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder 8ths
ioSlider {269, 38} {34, 167} 0.000000 2.000000 0.000000 comb2-lowpass
ioSlider {338, 37} {34, 167} 0.000000 2.000000 0.808800 comb2-abs
ioText {253, 203} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder To LP
ioText {322, 202} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to mod
ioSlider {636, 37} {34, 167} 0.000000 1.000000 0.823500 downbeat regen
ioSlider {704, 37} {34, 167} 0.000000 1.000000 0.911700 downbeat-combs
ioText {624, 202} {62, 34} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder regen
ioText {688, 202} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to combs
ioSlider {503, 257} {34, 167} 0.000000 1.000000 0.000000 8ths regen
ioSlider {572, 256} {34, 167} 0.000000 1.000000 0.000000 8ths-downbeat
ioText {487, 422} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder regen
ioText {556, 421} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to downb
ioSlider {735, 258} {34, 167} 0.000000 1.000000 0.000000 16ths regen
ioSlider {804, 257} {34, 167} 0.000000 1.000000 0.000000 16ths-8ths
ioText {719, 423} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder regen
ioText {788, 422} {61, 34} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to 8ths
ioSlider {81, 259} {34, 167} 0.000000 2.000000 1.367600 lowpass-comb1
ioSlider {150, 258} {34, 167} 0.000000 2.000000 0.602800 lowpass-comb2
ioText {65, 424} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to comb1
ioText {134, 423} {66, 32} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to comb2
ioSlider {273, 258} {34, 167} 0.000000 2.000000 1.352800 abs-comb1
ioSlider {342, 257} {34, 167} 0.000000 2.000000 0.147000 abs-comb2
ioText {257, 423} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to comb1
ioText {326, 422} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to comb2
ioSlider {207, 454} {180, 34} 1.000000 100.000000 20.265400 Mod Frequency
ioText {296, 487} {38, 24} display 20.265400 0.000010 "Mod Frequency" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder
ioSlider {26, 454} {175, 34} 6.000000 14.000000 6.500000 lowpass cutoff octave
ioText {165, 486} {33, 28} label 0.000000 0.001000 "LP cutoff" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder Hz
ioText {100, 486} {61, 25} display 92.498604 0.001000 "lowpass cutoff" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder Hz
ioMeter {218, 41} {30, 195} {44563, 53738, 65535} "comb2 RMS" 0.000000 "comb2 RMS" 0.000000 fill 1 0 mouse
ioText {19, 21} {185, 216} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {60197, 60197, 60197} background noborder L: comb1
ioSlider {80, 37} {34, 167} 0.000000 2.000000 0.750000 comb1-lowpass
ioSlider {149, 36} {34, 167} 0.000000 2.000000 1.485200 comb1-abs
ioMeter {29, 40} {30, 195} {44563, 53738, 65535} "comb1 RMS" 0.000000 "comb1 RMS" 0.000000 fill 1 0 mouse
ioText {64, 202} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder To LP
ioText {133, 201} {66, 33} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder to mod
ioText {33, 486} {61, 29} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder cutoff
ioMeter {32, 261} {30, 195} {44563, 53738, 65535} "lowpass RMS" 0.000000 "lowpass RMS" 0.000000 fill 1 0 mouse
ioMeter {531, 37} {30, 195} {44563, 53738, 65535} "downbeat RMS" 0.000000 "downbeat RMS" 0.000000 fill 1 0 mouse
ioMeter {413, 258} {30, 195} {44563, 53738, 65535} "8ths RMS" 0.000000 "8ths RMS" 0.000000 fill 1 0 mouse
ioMeter {634, 262} {30, 195} {44563, 53738, 65535} "16ths RMS" 0.000000 "16ths RMS" 0.000000 fill 1 0 mouse
ioMeter {218, 260} {30, 195} {44563, 53738, 65535} "abs RMS" 0.000000 "abs RMS" 0.000000 fill 1 0 mouse
ioSlider {475, 39} {34, 167} 0.000000 0.500000 0.426450 combs-downbeat
ioText {453, 204} {77, 30} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder from combs
ioMeter {395, 20} {36, 216} {44563, 53738, 65535} "test" 0.100002 "test" 0.100002 fill 1 0 mouse
ioMeter {787, 20} {33, 219} {44563, 53738, 65535} "downbeat gate" 0.983457 "downbeat gate" 0.983457 fill 1 0 mouse
ioSlider {576, 36} {34, 167} 0.000000 0.500000 0.154400 downbeat mix
ioText {569, 201} {49, 34} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder mix
ioSlider {449, 257} {34, 167} 0.000000 2.000000 2.000000 8ths mix
ioText {442, 422} {49, 34} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder mix
ioSlider {674, 257} {34, 167} 0.000000 2.000000 1.838200 16ths mix
ioText {667, 422} {49, 34} label 0.000000 0.001000 "" center "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder mix
ioText {208, 485} {93, 28} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder mod frequency
ioText {364, 515} {27, 27} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder up
ioText {206, 514} {27, 27} label 0.000000 0.001000 "" left "Lucida Grande" 10 {0, 0, 0} {65535, 65535, 65535} nobackground noborder dn
ioSlider {235, 510} {128, 35} -1.000000 1.000000 0.216400 Mod Dir