<effect>
  <name>StateVariable</name>
  <enabled>true</enabled>
  <numIns>2</numIns>
  <numOuts>2</numOuts>
  <code>if &lt;StateVarON&gt; == 1 then
    kenvfilter  = &lt;StateVar_frequency&gt; 
    kQ = &lt;StateVar_Q&gt;	
    ahp1,alp1,abp1,abr1 statevar ain1, kenvfilter, kQ, 10
    ahp2,alp2,abp2,abr2 statevar ain2, kenvfilter, kQ, 10

    klpgain =  &lt;StateVar_lowpass&gt;
    khpgain =  1 - &lt;StateVar_highpass&gt;
    kbpgain =  &lt;StateVar_bandpass&gt;
    kbrgain =  1 - &lt;StateVar_bandreject&gt;

    kfilterX    =   &lt;StateVar_filterX&gt;                                                 ; for use with XY controller
    kfilterY    =   &lt;StateVar_filterY&gt;                                                 ; set amplitude for the 4 filters

    klp	limit sqrt((1-kfilterX)*kfilterY), 0, 1
    khp	limit sqrt(kfilterX*kfilterY), 0, 1
    kbp	limit sqrt((1-kfilterY)*(1-kfilterX)), 0, 1
    kbr	limit sqrt((1-kfilterY)*kfilterX), 0, 1

    alp1 =  alp1 * klp * klpgain
    ahp1 =  ahp1 * khp * khpgain
    abp1 =  abp1 * kbp * kbpgain
    abr1 =  abr1 * kbr * kbrgain

    alp2 =  alp2 * klp * klpgain
    ahp2 =  ahp2 * khp * khpgain
    abp2 =  abp2 * kbp * kbpgain
    abr2 =  abr2 * kbr * kbrgain

    aout1   =   ahp1 + alp1 + abp1 + abr1
    aout2   =   ahp2 + alp2 + abp2 + abr2
else
    aout1    =   ain1
    aout2    =   ain2
endif</code>
  <comments>
DESCRIPTION:

A filter with the 4 different outputs of the statevar opcode,  as a plugin.
The oversampling is somewhat higher (10x) instead of the &quot;standard&quot; 3x, allowing for higher resonance settings for the filters.
The filters are: lowpass, highpass, bandreject and bandpass. The different filter outputs can be mixed by the XY controller.


CONTROLLERS:

ON/OFF              -       bypass
mixing              -       by moving the XY controller, the gain of lowpass, bandpass, highpass and bandreject can be set
Quality             -       the feedback (quality) amount of the filters
center frequency    -       set center frequency of filters

---

version 1.01, July 2020
- added BSB information comments

version 1.01, May 2020
- added comments on controllers

version 1.0, decembre 2018 
- initial version by Menno Knevel</comments>
  <opcodeList/>
  <graphicInterface editEnabled='false'>
    <gridSettings>
      <width>5</width>
      <height>5</height>
      <gridStyle>DOT</gridStyle>
      <snapGridEnabled>true</snapGridEnabled>
    </gridSettings>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBGroup'>
      <objectName></objectName>
      <x>0</x>
      <y>0</y>
      <groupName>Group</groupName>
      <backgroundColor>0x00000033</backgroundColor>
      <borderColor>0x000000ff</borderColor>
      <labelTextColor>0xffffffff</labelTextColor>
      <titleEnabled>true</titleEnabled>
      <width>20</width>
      <height>20</height>
      <bsbObject type='blue.orchestra.blueSynthBuilder.BSBGroup'>
        <objectName></objectName>
        <x>10</x>
        <y>10</y>
        <groupName>Group</groupName>
        <backgroundColor>0x4d8080ff</backgroundColor>
        <borderColor>0x000000ff</borderColor>
        <labelTextColor>0xffffffff</labelTextColor>
        <titleEnabled>false</titleEnabled>
        <width>384</width>
        <height>20</height>
        <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider' version='2'>
          <objectName>StateVar_frequency</objectName>
          <x>10</x>
          <y>120</y>
          <comment>set center frequency of filters</comment>
          <automationAllowed>true</automationAllowed>
          <minimum>20.0</minimum>
          <maximum>20000.0</maximum>
          <bdresolution>1</bdresolution>
          <value>1168.0</value>
          <sliderWidth>315</sliderWidth>
          <randomizable>true</randomizable>
          <valueDisplayEnabled>true</valueDisplayEnabled>
        </bsbObject>
        <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob' version='2'>
          <objectName>StateVar_Q</objectName>
          <x>315</x>
          <y>25</y>
          <comment>the feedback (quality) amount of the filters</comment>
          <automationAllowed>true</automationAllowed>
          <minimum>0.1</minimum>
          <maximum>3.0</maximum>
          <value>1.6660000000000001</value>
          <knobWidth>60</knobWidth>
          <randomizable>true</randomizable>
          <valueDisplayEnabled>false</valueDisplayEnabled>
          <label>Quality</label>
          <labelEnabled>true</labelEnabled>
          <font>
            <name>System Regular</name>
            <size>12.0</size>
          </font>
        </bsbObject>
        <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel' version='2'>
          <objectName></objectName>
          <x>10</x>
          <y>135</y>
          <label>centrer frequency</label>
          <font>
            <name>System Regular</name>
            <size>12.0</size>
          </font>
        </bsbObject>
        <bsbObject type='blue.orchestra.blueSynthBuilder.BSBGroup'>
          <objectName></objectName>
          <x>15</x>
          <y>10</y>
          <groupName>Group</groupName>
          <backgroundColor>0x00000033</backgroundColor>
          <borderColor>0x000000ff</borderColor>
          <labelTextColor>0xffffffff</labelTextColor>
          <titleEnabled>false</titleEnabled>
          <width>20</width>
          <height>20</height>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider' version='2'>
            <objectName>StateVar_bandpass</objectName>
            <x>0</x>
            <y>75</y>
            <comment>gain for bandpass filter</comment>
            <automationAllowed>true</automationAllowed>
            <minimum>0.0</minimum>
            <maximum>1.0</maximum>
            <bdresolution>0.1</bdresolution>
            <value>1.0</value>
            <sliderWidth>100</sliderWidth>
            <randomizable>true</randomizable>
            <valueDisplayEnabled>false</valueDisplayEnabled>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel' version='2'>
            <objectName></objectName>
            <x>190</x>
            <y>20</y>
            <label>highpass vol.</label>
            <font>
              <name>System Regular</name>
              <size>12.0</size>
            </font>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBXYController' version='2'>
            <objectName>StateVar_filter</objectName>
            <x>100</x>
            <y>15</y>
            <comment>by moving the XY controller, the gain of lowpass, bandpass, highpass and bandreject can be set</comment>
            <automationAllowed>true</automationAllowed>
            <width>80</width>
            <height>80</height>
            <xMin>0.0</xMin>
            <xMax>1.0</xMax>
            <yMin>0.0</yMin>
            <yMax>1.0</yMax>
            <xValue>0.5</xValue>
            <yValue>0.5</yValue>
            <randomizable>true</randomizable>
            <valueDisplayEnabled>false</valueDisplayEnabled>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel' version='2'>
            <objectName></objectName>
            <x>120</x>
            <y>0</y>
            <label>mixing</label>
            <font>
              <name>System Regular</name>
              <size>12.0</size>
            </font>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider' version='2'>
            <objectName>StateVar_lowpass</objectName>
            <x>0</x>
            <y>5</y>
            <comment>gain for lowpass filter</comment>
            <automationAllowed>true</automationAllowed>
            <minimum>0.0</minimum>
            <maximum>1.0</maximum>
            <bdresolution>0.1</bdresolution>
            <value>1.0</value>
            <sliderWidth>100</sliderWidth>
            <randomizable>true</randomizable>
            <valueDisplayEnabled>false</valueDisplayEnabled>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel' version='2'>
            <objectName></objectName>
            <x>190</x>
            <y>70</y>
            <label>bandreject vol.</label>
            <font>
              <name>System Regular</name>
              <size>12.0</size>
            </font>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider' version='2'>
            <objectName>StateVar_bandreject</objectName>
            <x>180</x>
            <y>75</y>
            <comment>gain for badreject filter</comment>
            <automationAllowed>true</automationAllowed>
            <minimum>0.0</minimum>
            <maximum>1.0</maximum>
            <bdresolution>0.1</bdresolution>
            <value>0.0</value>
            <sliderWidth>100</sliderWidth>
            <randomizable>true</randomizable>
            <valueDisplayEnabled>false</valueDisplayEnabled>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel' version='2'>
            <objectName></objectName>
            <x>5</x>
            <y>70</y>
            <label>bandpass vol.</label>
            <font>
              <name>System Regular</name>
              <size>12.0</size>
            </font>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel' version='2'>
            <objectName></objectName>
            <x>5</x>
            <y>20</y>
            <label>lowpass vol.</label>
            <font>
              <name>System Regular</name>
              <size>12.0</size>
            </font>
          </bsbObject>
          <bsbObject type='blue.orchestra.blueSynthBuilder.BSBHSlider' version='2'>
            <objectName>StateVar_highpass</objectName>
            <x>180</x>
            <y>5</y>
            <comment>gain for highpass filter</comment>
            <automationAllowed>true</automationAllowed>
            <minimum>0.0</minimum>
            <maximum>1.0</maximum>
            <bdresolution>0.1</bdresolution>
            <value>0.0</value>
            <sliderWidth>100</sliderWidth>
            <randomizable>true</randomizable>
            <valueDisplayEnabled>false</valueDisplayEnabled>
          </bsbObject>
        </bsbObject>
      </bsbObject>
      <bsbObject type='blue.orchestra.blueSynthBuilder.BSBCheckBox'>
        <objectName>StateVarON</objectName>
        <x>0</x>
        <y>0</y>
        <comment>bypass</comment>
        <automationAllowed>true</automationAllowed>
        <label/>
        <selected>true</selected>
        <randomizable>true</randomizable>
      </bsbObject>
    </bsbObject>
  </graphicInterface>
  <parameterList>
    <parameter uniqueId='-681225063' name='StateVar_frequency' label='' min='20.0' max='20000.0' bdresolution='1' automationEnabled='false' value='1168.0'>
      <line name='' version='2' max='20000.0' min='20.0' bdresolution='1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1168.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-681225055' name='StateVar_Q' label='' min='0.1' max='3.0' bdresolution='-1' automationEnabled='false' value='1.6660000000000001'>
      <line name='' version='2' max='3.0' min='0.1' bdresolution='-1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1.6660000000000001'/>
      </line>
    </parameter>
    <parameter uniqueId='-681224619' name='StateVar_bandreject' label='' min='0.0' max='1.0' bdresolution='0.1' automationEnabled='false' value='0.0'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='0.1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-681224617' name='StateVar_bandpass' label='' min='0.0' max='1.0' bdresolution='0.1' automationEnabled='false' value='1.0'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='0.1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-681224615' name='StateVar_lowpass' label='' min='0.0' max='1.0' bdresolution='0.1' automationEnabled='false' value='1.0'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='0.1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-681224613' name='StateVar_filterX' label='' min='0.0' max='1.0' bdresolution='-1' automationEnabled='false' value='0.5'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='-1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.5'/>
      </line>
    </parameter>
    <parameter uniqueId='-681224611' name='StateVar_filterY' label='' min='0.0' max='1.0' bdresolution='-1' automationEnabled='false' value='0.5'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='-1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.5'/>
      </line>
    </parameter>
    <parameter uniqueId='-681224609' name='StateVar_highpass' label='' min='0.0' max='1.0' bdresolution='0.1' automationEnabled='false' value='0.0'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='0.1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='0.0'/>
      </line>
    </parameter>
    <parameter uniqueId='-104104185' name='StateVarON' label='' min='0.0' max='1.0' bdresolution='1' automationEnabled='false' value='1.0'>
      <line name='' version='2' max='1.0' min='0.0' bdresolution='1' color='-8355712' rightBound='false' endPointsLinked='false'>
        <linePoint x='0.0' y='1.0'/>
      </line>
    </parameter>
  </parameterList>
</effect>