<effect>
  <name>Dodd the Distorter</name>
  <enabled>true</enabled>
  <numIns>2</numIns>
  <numOuts>2</numOuts>
  <code>setksmps	1
alast1	init	0
alast2	init	0
alsto1	init	0
alsto2	init	0
inorm	=	0dbfs
kdry	=	&lt;dry&gt;
idelamp	=	&lt;delAmp&gt;
idelfrq	=	&lt;delFrq&gt;

adel1	jspline	idelamp *.5, idelfrq, idelfrq
adel2	jspline	idelamp *.5, idelfrq, idelfrq
adel1	=	adel1 + (idelamp * .5)
adel2	=	adel2 + (idelamp * .5)

; notmalize signal to 1
ain1	=	ain1 / inorm
ain2	=	ain2 / inorm

; abracadabra
adiff1	=	abs(ain1 - alast1)
adiff2	=	abs(ain2 - alast2)
asign1	divz	adiff1, ain1 - alast1, 1
asign2	divz	adiff2, ain2 - alast2, 1
aout1	=	alsto1 + (sqrt(sqrt(adiff1)) * asign1)
aout2	=	alsto2 + (sqrt(sqrt(adiff2)) * asign2)
if (idelamp == 0) then
alast1	=	ain1
alast2	=	ain2
else
alast1	vdelay	ain1, adel1, idelamp
alast2	vdelay	ain2, adel2, idelamp
endif
alsto1	=	aout1
alsto2	=	aout2

;reconstruct original amplitude
aout1	=	aout1 * inorm /  &lt;scale&gt;
aout2	=	aout2 * inorm /  &lt;scale&gt;

if (&lt;dcBlock&gt; &gt; 0) then
aout1	dcblock	aout1
aout2	dcblock	aout2
endif

aout1	=	(ain1*kdry)+(aout1*(1-kdry))
aout2	=	(ain2*kdry)+(aout2*(1-kdry))
</code>
  <comments>Experimental distortion unit of my own design. Basically, it tries to exagerate differences between adjascent samples, which winds up having the effect of sharpening all curves. The comparative samples can be delayed, adding more character to the distortion. Scale factor helps tame the resultant signal amplitude.</comments>
  <opcodeList/>
  <graphicInterface editEnabled='false'>
    <uniqueNameManager nameIndex='-1' defaultPrefix='bsbObj'/>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob' version='2'>
      <objectName>scale</objectName>
      <x>23</x>
      <y>19</y>
      <minimum>0.0</minimum>
      <maximum>50.0</maximum>
      <value>9.766606</value>
      <knobWidth>120</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>50</x>
      <y>156</y>
      <label>Scale Factor</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob' version='2'>
      <objectName>delAmp</objectName>
      <x>152</x>
      <y>19</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.0</value>
      <knobWidth>120</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>195</x>
      <y>154</y>
      <label>Del. Amp.</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider'>
      <objectName>delFrq</objectName>
      <x>30</x>
      <y>189</y>
      <minimum>0.0</minimum>
      <maximum>500.0</maximum>
      <resolution>1.0</resolution>
      <value>0.0</value>
      <sliderWidth>200</sliderWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>100</x>
      <y>225</y>
      <label>Del. Freq.</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBCheckBox'>
      <objectName>dcBlock</objectName>
      <x>30</x>
      <y>266</y>
      <label>DCBlock</label>
      <selected>true</selected>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob' version='2'>
      <objectName>dry</objectName>
      <x>205</x>
      <y>229</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.0</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName></objectName>
      <x>215</x>
      <y>307</y>
      <label>Dry Mix</label>
    </bsbObject>
  </graphicInterface>
  <bsbParameterList>
    <parameter uniqueId='241011843' name='delAmp' label='' min='0.0' max='1.0' resolution='-1.0' automationEnabled='false'>
      <line name='' version='2' max='1.0' min='0.0' resolution='-1.0' color='-8355712' rightBound='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='241011845' name='delFrq' label='' min='0.0' max='500.0' resolution='1.0' automationEnabled='false'>
      <line name='' version='2' max='500.0' min='0.0' resolution='1.0' color='-8355712' rightBound='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='1386580198' name='dry' label='' min='0.0' max='1.0' resolution='-1.0' automationEnabled='false'>
      <line name='' version='2' max='1.0' min='0.0' resolution='-1.0' color='-8355712' rightBound='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='241011841' name='scale' label='' min='0.0' max='50.0' resolution='-1.0' automationEnabled='false'>
      <line name='' version='2' max='50.0' min='0.0' resolution='-1.0' color='-8355712' rightBound='false'>
        <linePoint x='0.0' y='9.766606'/>
      </line>
    </parameter>
  </bsbParameterList>
</effect>