<instrument type='blue.orchestra.BlueSynthBuilder'>
  <name>Alpha v1- Orch</name>
  <comment>Alpha v1
by Steven Yi

A 3-Oscilator Subtractive Synthesizer

This instrument is designed to work with the author&apos;s python Orchestral Composition library, included with blue.  

This instrument uses the following pfields:

p4 	ipch 	
p5	ipch2

p6	amp in db
p7	pan (-1.0 to 1.0)
p8	articulation (see yiEnvelope UDO below)


This instrument uses the following UDO&apos;s:



	opcode yiEnvelope,k,ioooooo

ienvType, iattack, idecay, isus, irel, iOldAmp, iNewAmp	xin

itie	tival
idur = p3

iEndAmp = iNewAmp / iOldAmp


if (ienvType == 0) then
	kenv	adsr	iattack, idecay, isus, irel
elseif (ienvType == 1) then	
	kenv 	linseg	0, p3 * .5, 1, p3 * .5, 0

elseif (ienvType == 2) then	
	kenv	linseg 	0, p3 - .1, 1, .1, 0	

elseif (ienvType == 3) then

    if (itie == 0 &amp;&amp; p3 &lt; 0) then
        ; this is an initial note within a group of tied notes
        kenv	linseg	0, .2, 1,  .2, 1
       
    elseif (p3 &gt; 0 &amp;&amp; itie == 1) then
        ; this is an end note out of a group of tied notes
        kenv linseg	1, p3 - 1, 1, 1, 0
 
    elseif (p3 &gt; 0 &amp;&amp; itie == 0) then
        ; this is a stand alone note
        kenv adsr iattack, idecay, isus, irel
    else
        ; this is a middle note within a group of tied notes (p3 &lt; 0 &amp;&amp; itie == 1)
        kenv line 1, abs(p3), iEndAmp
    endif  

endif

	xout 	kenv


	endop


	opcode yiFilterEnvelope,k,ioooo

ienvType, iattack, idecay, isus, irel	xin

if (ienvType == 0) then
    kenv	linseg	0, iattack, 1, idecay, isus, .01, isus

elseif (ienvType == 1) then	
    kenv 	linseg	0, p3 * .5, 1, p3 * .5, 0

elseif (ienvType == 2) then
    kenv	linseg	0, p3 - .1, 1, .1, 1

elseif (ienvType == 3) then

    itie	tival

    if (itie == 0 &amp;&amp; p3 &lt; 0) then
        ; this is an initial note within a group of tied notes
        kenv	linseg	0, .2, 1,  .2, 1
       
    elseif (p3 &gt; 0 &amp;&amp; itie == 1) then
        ; this is an end note out of a group of tied notes
        kenv init 1

    elseif (p3 &gt; 0 &amp;&amp; itie == 0) then
        ; this is a single note

        ; TODO - Should Remove, use articulation from other places
        ;kenv adsr 	.2, 0, 1, 1
        kenv linseg 0, .2,1, .1, 1

    

    endif  

endif

	xout 	kenv


	endop


	opcode getFrequency,i,i

ipch 	xin

iout	= (ipch &lt; 15 ? cpspch(ipch) : ipch)
	
	xout	iout


	endop</comment>
  <globalOrc/>
  <globalSco/>
  <instrumentText>ipch 	getFrequency p4
ipch2 	getFrequency p5

kpchline 	line ipch, p3, ipch2

iamp 	= ampdb(p6)
iSpace	= p7
ienvType	= p8

kenv	yiEnvelope ienvType, &lt;attack&gt;, &lt;decay&gt;, &lt;sustain&gt;, &lt;release&gt;
kFilterEnv	 yiFilterEnvelope ienvType, &lt;attack&gt;, &lt;decay&gt;, &lt;sustain&gt;, &lt;release&gt;


iwaveform1		= &lt;waveform1&gt;
iwaveform2 	= &lt;waveform2&gt;
iwaveform3 	= &lt;waveform3&gt;


iamp1		= &lt;oscAmp1&gt;
iamp2		= &lt;oscAmp2&gt;
iamp3		= &lt;oscAmp3&gt;



/* SOUND GENERATION CODE */

;a1	vco2	1, kpchline + &lt;detune1&gt;, iwaveform1, &lt;pulsewidth1&gt;
;a2	vco2	1, kpchline + &lt;detune2&gt;, iwaveform2, &lt;pulsewidth2&gt;
;a3	vco2	1, kpchline + &lt;detune3&gt;, iwaveform3, &lt;pulsewidth3&gt;

a1	vco2	1, kpchline, iwaveform1, &lt;pulsewidth1&gt;
a2	vco2	1, kpchline, iwaveform2, &lt;pulsewidth2&gt;
a3	vco2	1, kpchline, iwaveform3, &lt;pulsewidth3&gt;


aout	= (a1 * iamp1) + (a2 * iamp2) + (a3 * iamp3)

;aout	moogladder		aout, kpchline + ( (&lt;cutoff&gt;  - kpchline) * kFilterEnv), &lt;resonance&gt;
aout	moogvcf		aout, kpchline + ( (&lt;cutoff&gt;  - kpchline) * kFilterEnv), &lt;resonance&gt;
;aout	butterlp	aout, &lt;cutoff&gt;

aout	balance 	aout, a1

aout	= aout * iamp * kenv

krtl     	= sqrt(2) / 2 * cos(iSpace) + sin(iSpace) ; CONSTANT POWER PANNING
krtr     	= sqrt(2) / 2 * cos(iSpace) - sin(iSpace)	; FROM C.ROADS &quot;CM TUTORIAL&quot; pp460

aLeft 	= aout * krtl
aRight	= aout * krtr

;	outs aLeft, aRight

ga1 = ga1 + aLeft
ga2 = ga2 + aRight 
</instrumentText>
  <graphicInterface>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>decay</objectName>
      <x>519</x>
      <y>45</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.15</value>
      <knobWidth>50</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>sustain</objectName>
      <x>572</x>
      <y>45</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.89667374</value>
      <knobWidth>50</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>release</objectName>
      <x>625</x>
      <y>45</y>
      <minimum>0.0</minimum>
      <maximum>10.0</maximum>
      <value>0.014612231</value>
      <knobWidth>50</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>attack</objectName>
      <x>466</x>
      <y>45</y>
      <minimum>0.0</minimum>
      <maximum>10.0</maximum>
      <value>0.0050</value>
      <knobWidth>50</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>470</x>
      <y>26</y>
      <label>Attack</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>523</x>
      <y>26</y>
      <label>Decay</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>573</x>
      <y>26</y>
      <label>Sustain</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>626</x>
      <y>26</y>
      <label>Release</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>379</x>
      <y>57</y>
      <label>&lt;html&gt;&lt;font size=&quot;+1&quot;&gt;Amp Env&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>424</x>
      <y>161</y>
      <label>&lt;html&gt;&lt;font size=&quot;+1&quot;&gt;VCF&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>511</x>
      <y>131</y>
      <label>Resonance</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>471</x>
      <y>131</y>
      <label>Cutoff</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>oscAmp1</objectName>
      <x>90</x>
      <y>86</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>1.0</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>cutoff</objectName>
      <x>466</x>
      <y>151</y>
      <minimum>0.0</minimum>
      <maximum>20000.0</maximum>
      <value>0.22474794</value>
      <knobWidth>50</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>resonance</objectName>
      <x>519</x>
      <y>151</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.44528311</value>
      <knobWidth>50</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>pulsewidth1</objectName>
      <x>26</x>
      <y>86</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.7503816</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>9</x>
      <y>39</y>
      <label>Waveform</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>25</x>
      <y>65</y>
      <label>PulseWidth</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>12</x>
      <y>6</y>
      <label>&lt;html&gt;&lt;font size=&quot;+1&quot;&gt;OSC 1&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBDropdown'>
      <objectName>waveform1</objectName>
      <x>75</x>
      <y>35</y>
      <bsbDropdownItemList>
        <bsbDropdownItem>
          <name>Sawtooth</name>
          <value>0</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Square/PWM</name>
          <value>2</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Saw/Tri/Ramp</name>
          <value>4</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Pulse (not normalized)</name>
          <value>6</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Integrated Sawtooth    </name>
          <value>8</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Square Wave (no PWM)</name>
          <value>10</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Triangle (no ramp)</name>
          <value>12</value>
        </bsbDropdownItem>
      </bsbDropdownItemList>
      <selectedIndex>1</selectedIndex>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>110</x>
      <y>65</y>
      <label>Mix</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>163</x>
      <y>65</y>
      <label>Detune</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>detune1</objectName>
      <x>153</x>
      <y>86</y>
      <minimum>-10.0</minimum>
      <maximum>10.0</maximum>
      <value>0.5</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>oscAmp2</objectName>
      <x>86</x>
      <y>272</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.16735752</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>pulsewidth2</objectName>
      <x>22</x>
      <y>272</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.93469685</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>5</x>
      <y>225</y>
      <label>Waveform</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>21</x>
      <y>251</y>
      <label>PulseWidth</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>8</x>
      <y>192</y>
      <label>&lt;html&gt;&lt;font size=&quot;+1&quot;&gt;OSC 2&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBDropdown'>
      <objectName>waveform2</objectName>
      <x>71</x>
      <y>221</y>
      <bsbDropdownItemList>
        <bsbDropdownItem>
          <name>Sawtooth</name>
          <value>0</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Square/PWM</name>
          <value>2</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Saw/Tri/Ramp</name>
          <value>4</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Pulse (not normalized)</name>
          <value>6</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Integrated Sawtooth    </name>
          <value>8</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Square Wave (no PWM)</name>
          <value>10</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Triangle (no ramp)</name>
          <value>12</value>
        </bsbDropdownItem>
      </bsbDropdownItemList>
      <selectedIndex>4</selectedIndex>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>106</x>
      <y>251</y>
      <label>Mix</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>159</x>
      <y>251</y>
      <label>Detune</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>detune2</objectName>
      <x>149</x>
      <y>272</y>
      <minimum>-10.0</minimum>
      <maximum>10.0</maximum>
      <value>0.5</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>oscAmp3</objectName>
      <x>88</x>
      <y>452</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.8104157</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>pulsewidth3</objectName>
      <x>24</x>
      <y>452</y>
      <minimum>0.0</minimum>
      <maximum>1.0</maximum>
      <value>0.93469685</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>7</x>
      <y>405</y>
      <label>Waveform</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>23</x>
      <y>431</y>
      <label>PulseWidth</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>10</x>
      <y>372</y>
      <label>&lt;html&gt;&lt;font size=&quot;+1&quot;&gt;OSC 3&lt;/font&gt;&lt;/html&gt;</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBDropdown'>
      <objectName>waveform3</objectName>
      <x>73</x>
      <y>401</y>
      <bsbDropdownItemList>
        <bsbDropdownItem>
          <name>Sawtooth</name>
          <value>0</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Square/PWM</name>
          <value>2</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Saw/Tri/Ramp</name>
          <value>4</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Pulse (not normalized)</name>
          <value>6</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Integrated Sawtooth    </name>
          <value>8</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Square Wave (no PWM)</name>
          <value>10</value>
        </bsbDropdownItem>
        <bsbDropdownItem>
          <name>Triangle (no ramp)</name>
          <value>12</value>
        </bsbDropdownItem>
      </bsbDropdownItemList>
      <selectedIndex>6</selectedIndex>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>108</x>
      <y>431</y>
      <label>Mix</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBLabel'>
      <objectName/>
      <x>161</x>
      <y>431</y>
      <label>Detune</label>
    </bsbObject>
    <bsbObject type='blue.orchestra.blueSynthBuilder.BSBKnob'>
      <objectName>detune3</objectName>
      <x>151</x>
      <y>452</y>
      <minimum>-10.0</minimum>
      <maximum>10.0</maximum>
      <value>0.5</value>
      <knobWidth>60</knobWidth>
    </bsbObject>
  </graphicInterface>
  <presetGroup name=''>
    <presetGroup name='Snapshots'>
      <preset name='Snapshot1'>
        <setting name='decay'>0.014572331</setting>
        <setting name='waveform3'>6</setting>
        <setting name='sustain'>0.89667374</setting>
        <setting name='resonance'>0.065000884</setting>
        <setting name='oscAmp1'>1.0</setting>
        <setting name='attack'>0.01</setting>
        <setting name='release'>0.014612231</setting>
        <setting name='pulsewidth3'>0.93469685</setting>
        <setting name='waveform2'>1</setting>
        <setting name='detune2'>0.5</setting>
        <setting name='cutoff'>0.049524926</setting>
        <setting name='detune1'>0.5</setting>
        <setting name='detune3'>0.5</setting>
        <setting name='waveform1'>0</setting>
        <setting name='pulsewidth1'>0.93469685</setting>
        <setting name='oscAmp3'>0.8104157</setting>
        <setting name='oscAmp2'>0.559624</setting>
        <setting name='pulsewidth2'>0.93469685</setting>
      </preset>
      <preset name='Snapshot2'>
        <setting name='decay'>0.014572331</setting>
        <setting name='waveform3'>6</setting>
        <setting name='sustain'>0.89667374</setting>
        <setting name='resonance'>0.019781437</setting>
        <setting name='oscAmp1'>1.0</setting>
        <setting name='attack'>0.01</setting>
        <setting name='release'>0.014612231</setting>
        <setting name='pulsewidth3'>0.93469685</setting>
        <setting name='waveform2'>1</setting>
        <setting name='detune2'>0.5</setting>
        <setting name='cutoff'>0.05</setting>
        <setting name='detune1'>0.5</setting>
        <setting name='detune3'>0.5</setting>
        <setting name='waveform1'>6</setting>
        <setting name='pulsewidth1'>0.7503816</setting>
        <setting name='oscAmp3'>0.8104157</setting>
        <setting name='oscAmp2'>0.559624</setting>
        <setting name='pulsewidth2'>0.93469685</setting>
      </preset>
    </presetGroup>
  </presetGroup>
</instrument>