diff options
author | rekado <rekado@elephly.net> | 2016-09-06 22:13:03 +0200 |
---|---|---|
committer | rekado <rekado@elephly.net> | 2016-09-06 23:31:22 +0200 |
commit | 8a4bca986c57062e96f1e58281b3eff52a856ee6 (patch) | |
tree | 11b125b567c212739a6585862628f0565f51ce35 /objects |
Initial commit.
Diffstat (limited to 'objects')
-rw-r--r-- | objects/env-bp.axs | 118 | ||||
-rw-r--r-- | objects/env/ad m.axo | 60 | ||||
-rw-r--r-- | objects/exp-xfade.axs | 226 | ||||
-rw-r--r-- | objects/faust/karplus.axo | 98 | ||||
-rw-r--r-- | objects/faust/moog_vcf.axo | 205 | ||||
-rw-r--r-- | objects/faust/phaser_mono.wip | 90 | ||||
-rw-r--r-- | objects/faust/phaser_mono_float.axo | 36 | ||||
-rw-r--r-- | objects/faust/phaser_mono_float.cpp | 129 | ||||
-rw-r--r-- | objects/faust/phaser_stereo_float.axo | 70 | ||||
-rw-r--r-- | objects/faust/phaser_stereo_float.cpp | 215 | ||||
-rw-r--r-- | objects/faust/phaser_stereo_optimised.axo | 180 | ||||
-rw-r--r-- | objects/limiter.axs | 126 | ||||
-rw-r--r-- | objects/murf.axs | 561 | ||||
-rw-r--r-- | objects/octaver.axs | 238 | ||||
-rw-r--r-- | objects/pattern-editor.axs | 278 | ||||
-rw-r--r-- | objects/read-interp-slow.axo | 76 | ||||
-rw-r--r-- | objects/sel b 32 pulse.axo | 29 | ||||
-rw-r--r-- | objects/sqrt-distortion.axs | 157 | ||||
-rw-r--r-- | objects/wip/pitch_detect_fft.axo | 179 | ||||
-rw-r--r-- | objects/xfade-env.axs | 167 |
20 files changed, 3238 insertions, 0 deletions
diff --git a/objects/env-bp.axs b/objects/env-bp.axs new file mode 100644 index 0000000..2d88679 --- /dev/null +++ b/objects/env-bp.axs @@ -0,0 +1,118 @@ +<patch-1.0> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="attack" x="84" y="14"> + <params/> + <attribs/> + </obj> + <obj type="filter/bp svf m" sha="24097930d951f375e0839b70f065d71a782d8b23" uuid="90abfee2793172fc193ec82288a454727134cb31" name="bp_2" x="224" y="14"> + <params> + <frac32.s.map name="pitch" onParent="true" value="-63.0"/> + <frac32.u.map name="reso" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="decay" x="84" y="70"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_1" x="336" y="98"> + <params/> + <attribs/> + </obj> + <obj type="mux/mux 2" sha="10c5b6d774e8c972b6bb863dad23e83034e0990f" uuid="539c246f4c360ac476e128cfbfa84348fb7f7e73" name="mux_1" x="406" y="98"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="out" x="490" y="98"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="gate" x="84" y="126"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="animate" x="84" y="168"> + <params/> + <attribs/> + </obj> + <obj type="env/ad m" sha="b5f72335c41e5dec8763a23bed395833a6694bab" uuid="41eb0117872a4d0579752cffdc0ec28182bd55cb" name="ad_1" x="224" y="168"> + <params> + <frac32.s.map name="a" value="0.0"/> + <frac32.u.map name="d" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/inlet a" sha="709c10aa648c6e5a3c00da4b5dd238899a7c109c" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="in" x="84" y="224"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet f" sha="c0c4ce40c7dec73dfbb009fd86c9b89c068b137a" uuid="d18a9a550bcaaebac94e25983bd0e27dbfd7233c" name="outlet_1" x="490" y="238"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="pitch" x="84" y="294"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="reso" x="84" y="350"> + <params/> + <attribs/> + </obj> + <nets> + <net> + <source obj="attack" outlet="inlet"/> + <dest obj="ad_1" inlet="a"/> + </net> + <net> + <source obj="decay" outlet="inlet"/> + <dest obj="ad_1" inlet="d"/> + </net> + <net> + <source obj="reso" outlet="inlet"/> + <dest obj="bp_2" inlet="reso"/> + </net> + <net> + <source obj="in" outlet="inlet"/> + <dest obj="bp_2" inlet="in"/> + </net> + <net> + <source obj="vca_1" outlet="o"/> + <dest obj="mux_1" inlet="i2"/> + </net> + <net> + <source obj="ad_1" outlet="env"/> + <dest obj="vca_1" inlet="v"/> + <dest obj="outlet_1" inlet="outlet"/> + </net> + <net> + <source obj="gate" outlet="inlet"/> + <dest obj="ad_1" inlet="trig"/> + </net> + <net> + <source obj="bp_2" outlet="out"/> + <dest obj="vca_1" inlet="a"/> + <dest obj="mux_1" inlet="i1"/> + </net> + <net> + <source obj="pitch" outlet="inlet"/> + <dest obj="bp_2" inlet="pitch"/> + </net> + <net> + <source obj="mux_1" outlet="o"/> + <dest obj="out" inlet="outlet"/> + </net> + <net> + <source obj="animate" outlet="inlet"/> + <dest obj="mux_1" inlet="s"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>0</x> + <y>31</y> + <width>1280</width> + <height>769</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/env/ad m.axo b/objects/env/ad m.axo new file mode 100644 index 0000000..9ae76f1 --- /dev/null +++ b/objects/env/ad m.axo @@ -0,0 +1,60 @@ +<objdefs> + <obj.normal id="ad m" uuid="9045d727a260ba66aa68c68f684eea2148aaf338" sha="b5f72335c41e5dec8763a23bed395833a6694bab"> + <sDescription>attack decay envelope with modulation inputs</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch>env.axh</helpPatch> + <inlets> + <frac32 name="a" description="attack time"/> + <frac32 name="d" description="decay time"/> + <bool32.rising name="trig" description="trigger"/> + </inlets> + <outlets> + <frac32.positive name="env" description="envelope output"/> + </outlets> + <displays/> + <params> + <frac32.s.map name="a"/> + <frac32.u.map.kdecaytime name="d"/> + </params> + <attribs/> + <code.declaration><![CDATA[ +int8_t stage; +int ntrig; +int32_t val; +]]></code.declaration> + <code.init><![CDATA[ +ntrig = 0; +val = 0; +]]></code.init> + <code.krate><![CDATA[ +if ((inlet_trig>0) && !ntrig) { + ntrig = 1; + stage = 1; +} else if (!(inlet_trig>0)) { + ntrig = 0; +} + +// decay +if (stage == 0) { + val = ___SMMLA(val,(-1<<26)+(param_d>>1)+(inlet_d>>1),val); + +// attack +} else { + int32_t a; + MTOF(- param_a - inlet_a,a); + + // shift to let val rise more slowly + a = a >> 4; + val = val + a; + + // switch to decay phase at max + if (val > 0x07FFFFFF) { + val = 0x07FFFFFF; + stage = 0; + } +} +outlet_env = val; +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/exp-xfade.axs b/objects/exp-xfade.axs new file mode 100644 index 0000000..926ddbb --- /dev/null +++ b/objects/exp-xfade.axs @@ -0,0 +1,226 @@ +<patch-1.0> + <obj type="mix/mix 2 g" sha="921aefdda41b92a27cc93c53b5154554d0ce6d3b" uuid="221f038da51943034a75e442c90624fcebfe6112" name="mix_1" x="434" y="28"> + <params> + <frac32.u.map name="gain1" value="32.0"/> + <frac32.u.map name="gain2" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="outlet_1" x="574" y="28"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_1" x="336" y="42"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet a" sha="709c10aa648c6e5a3c00da4b5dd238899a7c109c" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="i1" x="210" y="56"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="outlet_2" x="574" y="70"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet a" sha="709c10aa648c6e5a3c00da4b5dd238899a7c109c" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="i2" x="210" y="98"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_2" x="336" y="112"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="outlet_3" x="574" y="112"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="trigger" x="210" y="140"> + <params/> + <attribs/> + </obj> + <obj type="math/inv" sha="527f9ea38e810968a5d209b2913f846bcc5cbfea" uuid="565521d3699b36d8095aa1c79b9ad0046fb133ce" name="inv_2" x="462" y="182"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_4" x="518" y="182"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="math/inv" sha="527f9ea38e810968a5d209b2913f846bcc5cbfea" uuid="565521d3699b36d8095aa1c79b9ad0046fb133ce" name="abs_1" x="392" y="294"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_2" x="448" y="294"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="math/exp" sha="2ac6f1fe7b85cbd855f836a65df6a49bcd2c0f62" uuid="3f0e6db61bc98c04b42a940e7a93abbf8a178317" name="exp_2" x="504" y="294"> + <params/> + <attribs/> + </obj> + <obj type="math/inv" sha="527f9ea38e810968a5d209b2913f846bcc5cbfea" uuid="565521d3699b36d8095aa1c79b9ad0046fb133ce" name="inv_1" x="574" y="294"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_3" x="630" y="294"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet f" sha="c0c4ce40c7dec73dfbb009fd86c9b89c068b137a" uuid="d18a9a550bcaaebac94e25983bd0e27dbfd7233c" name="env" x="826" y="308"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet f" sha="c0c4ce40c7dec73dfbb009fd86c9b89c068b137a" uuid="d18a9a550bcaaebac94e25983bd0e27dbfd7233c" name="env_" x="854" y="364"> + <params/> + <attribs/> + </obj> + <obj type="mux/mux 2" sha="73ba55fbf61b80b78dd5cb4f0c4bd5cbbdd54ea0" uuid="3bcb8a666381ed18b8962eda50b1aa679136f618" name="mux_1" x="700" y="392"> + <params/> + <attribs/> + </obj> + <obj type="math/-c" sha="13ae165692448bd5e8159b2e283e45005ef14cdf" uuid="bc70bed87e5405985ade03f4806b9450609a9093" name="shift zero" x="168" y="406"> + <params> + <frac32.u.map name="c" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="math/>>" sha="79ac9605aac7bf23c0eba17a4a6d8b179ea37f34" uuid="d883beaf50b7aae4803ed9941e8f123e87e1e3aa" name="slope" x="238" y="406"> + <params/> + <attribs> + <spinner attributeName="shift" value="2"/> + </attribs> + </obj> + <obj type="filter/integrator" sha="6535fb81a607b8ddac63cb09ba808e9afa93e070" uuid="e4d9391b099e543aa867bc3ec9565dd4d6f7df60" name="smoothen" x="336" y="406"> + <params/> + <attribs/> + </obj> + <obj type="math/half" sha="b3b4af52a3096adbd7fa08352261fbe186ec45e7" uuid="d3aa9c64dbf1ec7871bbc3e2d8905f8e443c9823" name="half_1" x="448" y="406"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_1" x="532" y="406"> + <params> + <frac32.u.map name="c" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="math/exp" sha="2ac6f1fe7b85cbd855f836a65df6a49bcd2c0f62" uuid="3f0e6db61bc98c04b42a940e7a93abbf8a178317" name="exp_1" x="602" y="406"> + <params/> + <attribs/> + </obj> + <obj type="math/*c" sha="60143a29e35f452025e9edaa2dec6e660ecb9c6e" uuid="7d5ef61c3bcd571ee6bbd8437ef3612125dfb225" name="*c_1" x="266" y="504"> + <params> + <frac32.u.map name="amp" onParent="true" value="0.0"/> + </params> + <attribs/> + </obj> + <nets> + <net> + <source obj="+c_1" outlet="out"/> + <dest obj="abs_1" inlet="in"/> + <dest obj="exp_1" inlet="a"/> + </net> + <net> + <source obj="exp_1" outlet="result"/> + <dest obj="mux_1" inlet="i2"/> + </net> + <net> + <source obj="exp_2" outlet="result"/> + <dest obj="inv_1" inlet="in"/> + </net> + <net> + <source obj="+c_2" outlet="out"/> + <dest obj="exp_2" inlet="a"/> + </net> + <net> + <source obj="abs_1" outlet="out"/> + <dest obj="+c_2" inlet="in"/> + </net> + <net> + <source obj="inv_1" outlet="out"/> + <dest obj="+c_3" inlet="in"/> + </net> + <net> + <source obj="+c_3" outlet="out"/> + <dest obj="mux_1" inlet="i1"/> + </net> + <net> + <source obj="smoothen" outlet="out"/> + <dest obj="half_1" inlet="in"/> + </net> + <net> + <source obj="shift zero" outlet="out"/> + <dest obj="slope" inlet="a"/> + </net> + <net> + <source obj="half_1" outlet="out"/> + <dest obj="+c_1" inlet="in"/> + </net> + <net> + <source obj="trigger" outlet="inlet"/> + <dest obj="shift zero" inlet="in"/> + <dest obj="mux_1" inlet="s"/> + </net> + <net> + <source obj="mux_1" outlet="o"/> + <dest obj="env" inlet="outlet"/> + <dest obj="vca_2" inlet="v"/> + <dest obj="inv_2" inlet="in"/> + </net> + <net> + <source obj="i1" outlet="inlet"/> + <dest obj="vca_1" inlet="a"/> + </net> + <net> + <source obj="i2" outlet="inlet"/> + <dest obj="vca_2" inlet="a"/> + </net> + <net> + <source obj="vca_2" outlet="o"/> + <dest obj="mix_1" inlet="in2"/> + <dest obj="outlet_3" inlet="outlet"/> + </net> + <net> + <source obj="mix_1" outlet="out"/> + <dest obj="outlet_1" inlet="outlet"/> + </net> + <net> + <source obj="inv_2" outlet="out"/> + <dest obj="+c_4" inlet="in"/> + </net> + <net> + <source obj="+c_4" outlet="out"/> + <dest obj="vca_1" inlet="v"/> + <dest obj="env_" inlet="outlet"/> + </net> + <net> + <source obj="vca_1" outlet="o"/> + <dest obj="mix_1" inlet="in1"/> + <dest obj="outlet_2" inlet="outlet"/> + </net> + <net> + <source obj="*c_1" outlet="out"/> + <dest obj="smoothen" inlet="in"/> + </net> + <net> + <source obj="slope" outlet="result"/> + <dest obj="*c_1" inlet="in"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>0</x> + <y>31</y> + <width>1274</width> + <height>766</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/faust/karplus.axo b/objects/faust/karplus.axo new file mode 100644 index 0000000..60035a6 --- /dev/null +++ b/objects/faust/karplus.axo @@ -0,0 +1,98 @@ +<objdefs> + <obj.normal id="karplus" uuid="36d552a0297885559841ed95a25ec5e5589bf5c3" sha="39267e0b01468fb54a8799d8114d535c594a007b"> + <sDescription>Karplus (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch>filter.axh</helpPatch> + <outlets> + <frac32buffer.bipolar name="out" description="filter output"/> + </outlets> + <params> + <bool32.mom name="b" noLabel="true"/> + <frac32.s.map name="a"/> + </params> + <displays/> + <includes> + <include>arm_math.h</include> + </includes> + <attribs/> + <code.declaration><![CDATA[ + // convert float to fixed point notation + // * take absolute value + // * multiply with constant to keep precision; + // to get a fixed point at x:y we multiply by 2^y, + // e.g. for 24:8 (24 significant bits before decimal point) + // we multiply f by 2^8 (1<<8). + // * truncate and cast to int32_t + // * invert bits if negative + int32_t floatToFrac32(float f) { + // was 1 000 000 000 and then >> 2 + // now is 2^27 = 134 217 728 + // 2^32 = 4 294 967 296 + // 2^29 = 536 870 912 (3:29) + int32_t preout = int32_t(((f < 0) ? (-f) : f) * (1<<29)); + return ((f < 0) ? ~preout : preout); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float frac32ToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + float fslider0; + float fVec0[2]; + float fRec1[2]; + int iRec2[2]; + float fslider1; + float fslider2; + int IOTA; + float fVec1[512]; + float fslider3; + float fRec0[3]; +]]></code.declaration> + <code.init><![CDATA[ + fslider0 = 128.0f; // duration or excitation + for (int i=0; i<2; i++) fVec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) iRec2[i] = 0; + fslider1 = 0.5f; // level + fslider2 = 0.01f; // attenuation, was 0.1f + IOTA = 0; + for (int i=0; i<512; i++) fVec1[i] = 0; + fslider3 = 128.0f; // duration or excitation + for (int i=0; i<3; i++) fRec0[i] = 0; +]]></code.init> + <code.krate><![CDATA[ + float fSlow0 = (1.0f / float(fslider0)); + float fSlow1 = float(param_b); + float fSlow2 = (4.656612875245797e-10f * float(fslider1)); + float fSlow3 = (0.5f * (1.0f - float(fslider2))); + int iSlow4 = int((int((float(fslider3) - 1.5f)) & 4095)); + + int32_t* output0 = outlet_out; + for (int i=0; i<BUFSIZE; i++) { + fVec0[0] = fSlow1; + fRec1[0] = ((fRec1[1] + ((fSlow1 - fVec0[1]) > 0.0f)) - (fSlow0 * (fRec1[1] > 0.0f))); + iRec2[0] = (12345 + (1103515245 * iRec2[1])); + fVec1[IOTA&511] = ((fSlow3 * (fRec0[1] + fRec0[2])) + (fSlow2 * (iRec2[0] * (fRec1[0] > 0.0f)))); + fRec0[0] = fVec1[(IOTA-iSlow4)&511]; + +arm_float_to_q31(&fRec0[0], &output0[i], 0); +// output0[i] = floatToFrac32(fRec0[0]); + + // post processing + fRec0[2] = fRec0[1]; fRec0[1] = fRec0[0]; + IOTA = IOTA+1; + iRec2[1] = iRec2[0]; + fRec1[1] = fRec1[0]; + fVec0[1] = fVec0[0]; + } +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/moog_vcf.axo b/objects/faust/moog_vcf.axo new file mode 100644 index 0000000..8abb697 --- /dev/null +++ b/objects/faust/moog_vcf.axo @@ -0,0 +1,205 @@ +<objdefs> + <obj.normal id="moog_vcf" uuid="9329f089dced01ba64f7e22ac77fd78fbec47db9" sha="6b8d84e43d5934e94f32e1d50318f8feede69769"> + <sDescription>Moog VCF (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch>filter.axh</helpPatch> + <includes> + <include>math.h</include> + </includes> + <inlets> + <frac32buffer name="in" description="filter input"/> + </inlets> + <outlets> + <frac32buffer name="out" description="filter output"/> + </outlets> + <displays/> + <attribs/> + <code.declaration><![CDATA[ + // convert float to fixed point notation + // * take absolute value + // * multiply with constant to keep precision; + // to get a fixed point at x:y we multiply by 2^y, + // e.g. for 24:8 (24 significant bits before decimal point) + // we multiply f by 2^8 (1<<8). + // * truncate and cast to int32_t + // * invert bits if negative + int32_t floatToFrac32(float f) { + // was 1 000 000 000 and then >> 2 + // now is 2^27 = 134 217 728 + // 2^32 = 4 294 967 296 + // 2^29 = 536 870 912 (3:29) + int32_t preout = int32_t(((f < 0) ? (-f) : f) * (1<<29)); + return ((f < 0) ? ~preout : preout); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float frac32ToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + + float fslider0; + float fslider1; + float fslider2; + float fcheckbox0; + float fcheckbox1; + float fcheckbox2; + + float fRec0[2]; + float fRec1[2]; + float fRec2[2]; + float fRec3[2]; + float fRec4[2]; + float fRec5[2]; + float fRec6[3]; + float fRec7[3]; + float fRec8[2]; + float fRec10[2]; + float fRec11[2]; + float fRec13[2]; + float fRec14[2]; + + float fConst1; + float fConst2; + float fSqrtTwo; + inline float faustpower2(float x) { + return powf(x,2); + } + inline float faustpower4(float x) { + return powf(x,4); + } + + // template <int N> inline float faustpower(float x) { return powf(x,N); } + // template <int N> inline double faustpower(double x) { return pow(x,N); } + // template <int N> inline int faustpower(int x) { return faustpower<N/2>(x) * faustpower<N-N/2>(x); } + // template <> inline int faustpower<0>(int x) { return 1; } + // template <> inline int faustpower<1>(int x) { return x; } +]]></code.declaration> + <code.init><![CDATA[ + fConst1 = ((2 * PI_F) / float(SAMPLERATE)); + fConst2 = (PI_F / float(SAMPLERATE)); + fSqrtTwo = 1.4142135623730951f; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + fcheckbox2 = 0.0; + fslider0 = 25.0f; + fslider1 = 0.9f; + fslider2 = 5.0f; + + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<2; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec2[i] = 0; + for (int i=0; i<2; i++) fRec3[i] = 0; + for (int i=0; i<2; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<3; i++) fRec6[i] = 0; + for (int i=0; i<3; i++) fRec7[i] = 0; + for (int i=0; i<2; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec10[i] = 0; + for (int i=0; i<2; i++) fRec11[i] = 0; + for (int i=0; i<2; i++) fRec13[i] = 0; + for (int i=0; i<2; i++) fRec14[i] = 0; + +]]></code.init> + <code.krate><![CDATA[ + float fSlow0 = (0.4400000000000004f * powf(2.0f,(0.08333333333333333f * (float(fslider0) - 49.0f)))); + int iSlow1 = int(float(fcheckbox0)); + float fSlow2 = float(fslider1); + float fSlow3 = (0 - (4.0f * fmaxf((float)0, fminf(faustpower4(fSlow2), 0.999999f)))); + float fSlow4 = fminf(1.412799348810722f, (fSqrtTwo * fSlow2)); + float fSlow5 = (fSqrtTwo * fSlow4); + float fSlow6 = 2 - fSlow5; + float fSlow7 = 1 + (fSlow4 * (fSlow4 - fSqrtTwo)); + float fSlow8 = 2 + fSlow5; + float fSlow9 = 1 + (fSlow4 * (fSqrtTwo + fSlow4)); + float fSlow10 = 2 * fSlow2; + float fSlow11 = 2 - fSlow10; + float fSlow12 = faustpower2((1.412799348810722f * fSlow2)); + float fSlow13 = ((1 + fSlow12) - fSlow10); + float fSlow14 = (2 + fSlow10); + float fSlow15 = (1 + (fSlow10 + fSlow12)); + int iSlow16 = int(float(fcheckbox1)); + int iSlow17 = int(float(fcheckbox2)); + float fSlow18 = (0.001f * powf(10,(0.05f * float(fslider2)))); + //const int32_t* input0 = inlet_in; + int32_t* output0 = outlet_out; + for (int i=0; i<BUFSIZE; i++) { + fRec1[0] = (fSlow0 + (0.999f * fRec1[1])); + float fTemp0 = (fConst1 * fRec1[0]); + float fTemp1 = (1.0f - fTemp0); + float fTemp2 = frac32ToFloat(inlet_in[i]); + float fTemp3 = ((iSlow1)?0:fTemp2); + fRec5[0] = ((fSlow3 * fRec0[1]) + (fTemp3 + (fTemp1 * fRec5[1]))); + fRec4[0] = (fRec5[0] + (fTemp1 * fRec4[1])); + fRec3[0] = (fRec4[0] + (fTemp1 * fRec3[1])); + fRec2[0] = (fRec3[0] + (fRec2[1] * fTemp1)); + fRec0[0] = (fRec2[0] * powf(fTemp0,4.0f)); + float fTemp4 = tanf((fConst2 * fmaxf((float)20, fminf((float)10000, fRec1[0])))); + float fTemp5 = (1.0f / fTemp4); + float fTemp6 = (fSlow7 + ((fSlow6 + fTemp5) / fTemp4)); + float fTemp7 = (1.0f / faustpower2(fTemp4)); + float fTemp8 = (fSlow9 + ((fSlow8 + fTemp5) / fTemp4)); + fRec7[0] = (fTemp3 - (((fRec7[2] * (fSlow9 + ((fTemp5 - fSlow8) / fTemp4))) + (2 * (fRec7[1] * (fSlow9 - fTemp7)))) / fTemp8)); + fRec6[0] = (((fRec7[2] + (fRec7[0] + (2.0f * fRec7[1]))) / fTemp8) - (((fRec6[2] * (fSlow7 + ((fTemp5 - fSlow6) / fTemp4))) + (2 * (fRec6[1] * (fSlow7 - fTemp7)))) / fTemp6)); + float fTemp9 = tanf((fConst2 * fmaxf(fRec1[0], (float)20))); + float fTemp10 = (1.0f / fTemp9); + float fTemp11 = (fSlow13 + ((fSlow11 + fTemp10) / fTemp9)); + float fTemp12 = ((fSlow13 + ((fTemp10 - fSlow11) / fTemp9)) / fTemp11); + float fTemp13 = (1.0f / faustpower2(fTemp9)); + float fTemp14 = (fSlow13 - fTemp13); + float fTemp15 = fmaxf(-0.9999f, fminf(0.9999f, (2 * (fTemp14 / (fTemp11 * (1 + fTemp12)))))); + float fTemp16 = (1 - faustpower2(fTemp15)); + float fTemp17 = fmaxf(-0.9999f, fminf(0.9999f, fTemp12)); + float fTemp18 = (1 - faustpower2(fTemp17)); + float fTemp19 = sqrtf(fTemp18); + float fTemp20 = (2.0f - (2.0f * (fTemp14 / fTemp11))); + float fTemp21 = sqrtf(fmaxf((float)0, fTemp16)); + float fTemp22 = (fSlow15 + ((fSlow14 + fTemp10) / fTemp9)); + float fTemp23 = sqrtf(fmaxf((float)0, fTemp18)); + float fTemp24 = ((fSlow15 + ((fTemp10 - fSlow14) / fTemp9)) / fTemp22); + float fTemp25 = (fSlow15 - fTemp13); + float fTemp26 = fmaxf(-0.9999f, fminf(0.9999f, (2 * (fTemp25 / (fTemp22 * (1 + fTemp24)))))); + float fTemp27 = (1 - faustpower2(fTemp26)); + float fTemp28 = fmaxf(-0.9999f, fminf(0.9999f, fTemp24)); + float fTemp29 = (1 - faustpower2(fTemp28)); + float fTemp30 = sqrtf(fTemp29); + float fTemp31 = (2.0f - (2.0f * (fTemp25 / fTemp22))); + float fTemp32 = sqrtf(fmaxf((float)0, fTemp27)); + float fTemp33 = sqrtf(fmaxf((float)0, fTemp29)); + float fTemp34 = ((fRec11[1] * (0 - fTemp28)) + (fTemp3 * fTemp33)); + fRec13[0] = ((fRec13[1] * (0 - fTemp26)) + (fTemp34 * fTemp32)); + fRec11[0] = ((fTemp34 * fTemp26) + (fRec13[1] * fTemp32)); + float fRec12 = fRec13[0]; + float fTemp35 = ((((fTemp3 * fTemp28) + (fRec11[1] * fTemp33)) + ((fRec11[0] * fTemp31) / fTemp30)) + ((fRec12 * ((1.0f - fTemp24) - (fTemp26 * fTemp31))) / (fTemp30 * sqrtf(fTemp27)))); + float fTemp36 = ((fRec8[1] * (0 - fTemp17)) + ((fTemp35 * fTemp23) / fTemp22)); + fRec10[0] = ((fRec10[1] * (0 - fTemp15)) + (fTemp36 * fTemp21)); + fRec8[0] = ((fTemp36 * fTemp15) + (fRec10[1] * fTemp21)); + float fRec9 = fRec10[0]; + fRec14[0] = ((0.999f * fRec14[1]) + fSlow18); + float fTemp37 = ((iSlow1)?fTemp2:(fRec14[0] * ((iSlow17)?((iSlow16)?((((((fTemp35 * fTemp17) / fTemp22) + (fRec8[1] * fTemp23)) + ((fRec8[0] * fTemp20) / fTemp19)) + ((fRec9 * ((1.0f - fTemp12) - (fTemp15 * fTemp20))) / (fTemp19 * sqrtf(fTemp16)))) / fTemp11):((fRec6[2] + (fRec6[0] + (2.0f * fRec6[1]))) / fTemp6)):fRec0[0]))); + output0[i] = floatToFrac32(fTemp37); + // post processing + fRec14[1] = fRec14[0]; + fRec8[1] = fRec8[0]; + fRec10[1] = fRec10[0]; + fRec11[1] = fRec11[0]; + fRec13[1] = fRec13[0]; + fRec6[2] = fRec6[1]; fRec6[1] = fRec6[0]; + fRec7[2] = fRec7[1]; fRec7[1] = fRec7[0]; + fRec0[1] = fRec0[0]; + fRec2[1] = fRec2[0]; + fRec3[1] = fRec3[0]; + fRec4[1] = fRec4[0]; + fRec5[1] = fRec5[0]; + fRec1[1] = fRec1[0]; + } +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/phaser_mono.wip b/objects/faust/phaser_mono.wip new file mode 100644 index 0000000..9966c00 --- /dev/null +++ b/objects/faust/phaser_mono.wip @@ -0,0 +1,90 @@ + + virtual void instanceInit(int samplingFreq) { + } + virtual void compute (int count, FAUSTFLOAT** input, FAUSTFLOAT** output) { + // TODO: find replacements for: expf, cosf, sinf + // values must be scaled to fit into the range expected by arm_{cos,sin}_q31 + // they all take radians! + // cosf --> arm_cos_q31 + // sinf --> arm_sin_q31 + + int32_t fSlow0 = param_fcheckbox0 ? 0x00200000 /*"1"*/ : (param_fslider0>>1); + int32_t fSlow1 = param_fcheckbox1 ? __QSUB(0, fSlow0) : fSlow0; + // TODO: find replacement for expf + // e ^ -1 * const1 * pi * slider3 + // It's a value between 0.72 and 1.0, but for now we pretend it's just the value of fslider3. + // float fSlow4 = expf((fConst1 * (0 - (3.141592653589793f * float(fslider3))))); + int32_t fSlow4 = param_fslider3; + int32_t fSlow5 = __SMMUL(fSlow4, fSlow4); + int32_t fSlow6 = __SMMUL(fConst2, param_fslider4); + int32_t fSlow7 = arm_cos_q31(fSlow6); + int32_t fSlow8 = arm_sin_q31(fSlow6); + int32_t fSlow9 = __QSUB(0, fSlow8); + int32_t fSlow11 = ___SMMUL(TAU, param_fslider5); + int32_t fSlow12 = (__SMMUL(TAU, MAX(param_fslider5, param_fslider6)) - fSlow11) >>1; + int32_t fSlow15 = __QSUB(0, fSlow4<<1); + int32_t fSlow14 = __SMMUL(fConst1, param_fslider7); + int32_t fSlow16 = __SMMUL(fSlow14, param_fslider7); + int32_t fSlow17 = __SMMUL(fSlow16, param_fslider7); + int32_t fSlow18 = __SMMUL(fSlow17, param_fslider7); + int32_t fSlow19 = __QSUB(1, fSlow0); + + int32_t* input0 = input[0]; + int32_t* input1 = input[1]; + int32_t* output0 = output[0]; + int32_t* output1 = output[1]; + + for (int i=0; i<BUFSIZE; i++) { + iVec0[0] = 1; + fRec5[0] = fSlow8 * fRec6[1] + fSlow7 * fRec5[1]; + fRec6[0] = (1 + ((fSlow7 * fRec6[1]) + (fSlow9 * fRec5[1]))) - iVec0[1]; + + { + int32_t fTemp0 = input0[i]; + int32_t fTemp1 = fSlow11 + (fSlow12 * (1 - fRec5[0])); + int32_t fTemp2 = fRec4[1] * cosf((fSlow14 * fTemp1)); + fRec4[0] = __QSUB(0, ((__SMMUL(fSlow15, fTemp2) + __SMMUL(fSlow5, fRec4[2])) - (fTemp0 + __SMMUL(param_fslider1, fRec0[1])))); + int32_t fTemp3 = fRec3[1] * cosf((fSlow16 * fTemp1)); + fRec3[0] = (fSlow15 * (fTemp2 - fTemp3)) + (fRec4[2] + (fSlow5 * (fRec4[0] - fRec3[2]))); + int32_t fTemp4 = (fRec2[1] * cosf((fSlow17 * fTemp1))); + fRec2[0] = (fSlow15 * (fTemp3 - fTemp4)) + (fRec3[2] + (fSlow5 * (fRec3[0] - fRec2[2]))); + int32_t fTemp5 = fRec1[1] * cosf((fSlow18 * fTemp1)); + fRec1[0] = (fSlow15 * (fTemp4 - fTemp5)) + (fRec2[2] + (fSlow5 * (fRec2[0] - fRec1[2]))); + fRec0[0] = (fSlow5 * fRec1[0]) + ((fSlow15 * fTemp5) + fRec1[2]); + output0[i] = (fTemp0 * fSlow19) + (fRec0[0] * fSlow1); + } + + { + int32_t fTemp6 = input1[i]; + int32_t fTemp7 = fSlow11 + (fSlow12 * (1 - fRec6[0])); + int32_t fTemp8 = fRec11[1] * cosf(__SMMUL(fSlow14, fTemp7)); + fRec11[0] = __QSUB(0, (__SMMUL(fSlow15, fTemp8) + __SMMUL(fSlow5, fRec11[2]) - (fTemp6 + __SMMUL(param_fslider1, fRec7[1])))); + int32_t fTemp9 = fRec10[1] * cosf(__SMMUL(fSlow16, fTemp7)); + fRec10[0] = ((fSlow15 * (fTemp8 - fTemp9)) + (fRec11[2] + (fSlow5 * (fRec11[0] - fRec10[2])))); + int32_t fTemp10 = fRec9[1] * cosf(__SMMUL(fSlow17, fTemp7)); + fRec9[0] = ((fSlow15 * (fTemp9 - fTemp10)) + (fRec10[2] + (fSlow5 * (fRec10[0] - fRec9[2])))); + int32_t fTemp11 = fRec8[1] * cosf(__SMMUL(fSlow18, fTemp7)); + fRec8[0] = ((fSlow15 * (fTemp10 - fTemp11)) + (fRec9[2] + (fSlow5 * (fRec9[0] - fRec8[2])))); + fRec7[0] = ((fSlow5 * fRec8[0]) + ((fSlow15 * fTemp11) + fRec8[2])); + output1[i] = (fTemp6 * fSlow19) + (fRec7[0] * fSlow1); + } + + // post processing + fRec7[1] = fRec7[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; + fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } + } +}; + + diff --git a/objects/faust/phaser_mono_float.axo b/objects/faust/phaser_mono_float.axo new file mode 100644 index 0000000..f2d990c --- /dev/null +++ b/objects/faust/phaser_mono_float.axo @@ -0,0 +1,36 @@ +<objdefs> + <obj.normal id="phaser_mono_float" uuid="d2dad834546ee8864e74efad2a1e9b1d7e26ace8" sha="f3858c3689b98a6a07f4a083d6854e56fe5ba43b"> + <sDescription>Phaser Mono (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch/> + <inlets> + <frac32buffer name="in" description="in"/> + </inlets> + <outlets> + <frac32buffer.bipolar name="out" description="output"/> + </outlets> + <params> + <!-- values are given as: default, min, max, increment? --> + <!-- 0.5f, 0.0f, 1e+01f, 0.01f --> + <frac32.u.map description="Speed (Hz)" name="speed"/> + </params> + <displays/> + <attribs/> + <includes> + <include>./phaser_mono_float.cpp</include> + </includes> + <code.declaration><![CDATA[ +Dsp phaser; +]]></code.declaration> + <code.init><![CDATA[ + phaser.init(48000); + ]]></code.init> + <code.krate><![CDATA[ + phaser.compute(BUFSIZE, + &inlet_in, + &outlet_out[0], + param_speed); +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/phaser_mono_float.cpp b/objects/faust/phaser_mono_float.cpp new file mode 100644 index 0000000..d3cc774 --- /dev/null +++ b/objects/faust/phaser_mono_float.cpp @@ -0,0 +1,129 @@ +//----------------------------------------------------- +// name: "Phaser Mono" +// +// Code generated with Faust 0.9.67 (http://faust.grame.fr) +//----------------------------------------------------- +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#define faustpower4(x) ((x)*(x)*(x)*(x)) +#define faustpower3(x) ((x)*(x)*(x)) +#define faustpower2(x) ((x)*(x)) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif +//---------------------------------------------------------------------------- +// FAUST generated signal processor +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +#ifndef FAUSTCLASS +#define FAUSTCLASS mydsp +#endif + +class Dsp { + private: + int iVec0[2]; + int iConst0; + float fConst1; + float fConst2; + FAUSTFLOAT speed; //default: 0.5f; range: 0..10 + float fConst3; + float fRec5[2]; + float fRec6[2]; + float fConst4; + float fConst5; + float fRec4[3]; + float fConst6; + float fRec3[3]; + float fConst7; + float fRec2[3]; + float fConst8; + float fRec1[3]; + float fRec0[2]; + public: + static void classInit(int samplingFreq) { + } + virtual void instanceInit(int samplingFreq) { + int fSamplingFreq = samplingFreq; + for (int i=0; i<2; i++) iVec0[i] = 0; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = 0.9366460212365959; //expf((0 - (3141.592653589793f / float(iConst0)))); + fConst2 = faustpower2(fConst1); + speed = 0.5f; + fConst3 = (6.283185307179586f / float(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + fConst4 = (2.0f / float(iConst0)); + fConst5 = (0 - (2 * fConst1)); + for (int i=0; i<3; i++) fRec4[i] = 0; + fConst6 = (4.0f / float(iConst0)); + for (int i=0; i<3; i++) fRec3[i] = 0; + fConst7 = (8.0f / float(iConst0)); + for (int i=0; i<3; i++) fRec2[i] = 0; + fConst8 = (16.0f / float(iConst0)); + for (int i=0; i<3; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + } + virtual void init(int samplingFreq) { + classInit(samplingFreq); + instanceInit(samplingFreq); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float ConvertFracToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + virtual void compute (int count, + const int32_t** input, + int32_t* output, + int32_t speed) { + float fSlow0 = 100; + float fSlow1 = 0.01f * fSlow0; + float fSlow2 = (fConst3 * 10*ConvertFracToFloat(speed)); + float fSlow3 = cosf(fSlow2); + float fSlow4 = sinf(fSlow2); + float fSlow5 = (0 - fSlow4); + float fSlow6 = (1 - (0.01f * fSlow0)); + const int32_t* input0 = *input; + int32_t* output0 = output; + for (int i=0; i<count; i++) { + iVec0[0] = 1; + float fTemp0 = ConvertFracToFloat(input0[i]); + fRec5[0] = ((fSlow4 * fRec6[1]) + (fSlow3 * fRec5[1])); + fRec6[0] = ((1 + ((fSlow3 * fRec6[1]) + (fSlow5 * fRec5[1]))) - iVec0[1]); + float fTemp1 = (628.3185307179587f + (2199.1148575128555f * (1 - fRec5[0]))); + float fTemp2 = (fRec4[1] * cosf((fConst4 * fTemp1))); + fRec4[0] = (0 - (((fConst5 * fTemp2) + (fConst2 * fRec4[2])) - ((fSlow1 * fTemp0) + (0.5f * fRec0[1])))); + float fTemp3 = (fRec3[1] * cosf((fConst6 * fTemp1))); + fRec3[0] = ((fConst5 * (fTemp2 - fTemp3)) + (fRec4[2] + (fConst2 * (fRec4[0] - fRec3[2])))); + float fTemp4 = (fRec2[1] * cosf((fConst7 * fTemp1))); + fRec2[0] = ((fConst5 * (fTemp3 - fTemp4)) + (fRec3[2] + (fConst2 * (fRec3[0] - fRec2[2])))); + float fTemp5 = (fRec1[1] * cosf((fConst8 * fTemp1))); + fRec1[0] = ((fConst5 * (fTemp4 - fTemp5)) + (fRec2[2] + (fConst2 * (fRec2[0] - fRec1[2])))); + fRec0[0] = ((fConst2 * fRec1[0]) + ((fConst5 * fTemp5) + fRec1[2])); + output0[i] = ConvertFloatToFrac((fSlow6 * fTemp0) - fRec0[0]) <<7; + // post processing + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } + } +}; + + diff --git a/objects/faust/phaser_stereo_float.axo b/objects/faust/phaser_stereo_float.axo new file mode 100644 index 0000000..b5632bd --- /dev/null +++ b/objects/faust/phaser_stereo_float.axo @@ -0,0 +1,70 @@ +<objdefs> + <obj.normal id="phaser_stereo_float" uuid="c5fac2db26a58c24e984c8fc7ac529193898cad1" sha="2148880b2a099a2582ec29deabcc2fd80cba0195"> + <sDescription>Phaser Stereo (from Faust)</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch/> + <inlets> + <frac32buffer name="in" description="in"/> + </inlets> + <outlets> + <frac32buffer.bipolar name="left" description="left output"/> + <frac32buffer.bipolar name="right" description="right output"/> + </outlets> + <params> + <bool32.tgl name="fcheckbox0" description="VibratoMode: direct/vibrato"/> + <bool32.tgl name="fcheckbox1" description="linear/invert"/> + <!-- values are given as: default, min, max, increment? --> + <!-- They all need to be remapped to the -64.0..0..64.0 range --> + + <!-- 1.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="Depth" name="fslider0"/> + + <!-- 0.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="feedback gain" name="fslider1"/> + + <!-- 1e+03f, 1e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="Notch width (Hz)" name="fslider3"/> + + <!-- 0.5f, 0.0f, 1e+01f, 0.01f --> + <frac32.u.map description="Speed (Hz)" name="fslider4"/> + + <!-- 1e+02f, 2e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="MinNotch1Freq (Hz)" name="fslider5"/> + + <!-- 8e+02f, 2e+01f, 1e+04f, 1.0f --> + <frac32.s.map.pitch description="MaxNotch1Freq (Hz)" name="fslider6"/> + + <!-- 1.5f, 1.1f, 4.0f, 0.01f --> + <frac32.u.map description="NotchFreq (Hz)" name="fslider7"/> + </params> + <displays/> + <attribs/> + <includes> + <include>./phaser_stereo_float.cpp</include> + </includes> + + <code.declaration><![CDATA[ +Dsp phaser; +]]></code.declaration> + <code.init><![CDATA[ + + phaser.init(48000); + ]]></code.init> + <code.krate><![CDATA[ + phaser.compute(BUFSIZE, + &inlet_in, + &outlet_left[0], + &outlet_right[0], + param_fcheckbox0, + param_fcheckbox1, + param_fslider0, + param_fslider1, + param_fslider3, + param_fslider4, + param_fslider5, + param_fslider6, + param_fslider7); +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/faust/phaser_stereo_float.cpp b/objects/faust/phaser_stereo_float.cpp new file mode 100644 index 0000000..9e3e587 --- /dev/null +++ b/objects/faust/phaser_stereo_float.cpp @@ -0,0 +1,215 @@ +//----------------------------------------------------- +// name: "Phaser" +// +// Code generated with Faust 0.9.67 (http://faust.grame.fr) +//----------------------------------------------------- +/* link with */ +#ifndef FAUSTPOWER +#define FAUSTPOWER +#define faustpower4(x) ((x)*(x)*(x)*(x)) +#define faustpower3(x) ((x)*(x)*(x)) +#define faustpower2(x) ((x)*(x)) +#define max(a, b) ((a) > (b) ? (a) : (b)) +#define min(a, b) ((a) < (b) ? (a) : (b)) +#endif +/************************************************************************ + ************************************************************************ + FAUST Architecture File + Copyright (C) 2003-2011 GRAME, Centre National de Creation Musicale + --------------------------------------------------------------------- + + This is sample code. This file is provided as an example of minimal + FAUST architecture file. Redistribution and use in source and binary + forms, with or without modification, in part or in full are permitted. + In particular you can create a derived work of this FAUST architecture + and distribute that work under terms of your choice. + + This sample code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + ************************************************************************ + ************************************************************************/ + + +/****************************************************************************** +******************************************************************************* + + VECTOR INTRINSICS + +******************************************************************************* +*******************************************************************************/ + + +/****************************************************************************** +******************************************************************************* + + ABSTRACT USER INTERFACE + +******************************************************************************* +*******************************************************************************/ + +//---------------------------------------------------------------------------- +// FAUST generated signal processor +//---------------------------------------------------------------------------- + +#ifndef FAUSTFLOAT +#define FAUSTFLOAT float +#endif + +class Dsp { +public: + int fSamplingFreq; + FAUSTFLOAT fslider0; + FAUSTFLOAT fcheckbox0; + FAUSTFLOAT fcheckbox1; + int iVec0[2]; + FAUSTFLOAT fslider1; + FAUSTFLOAT fslider2; + FAUSTFLOAT fslider3; + int iConst0; + float fConst1; + FAUSTFLOAT fslider4; + float fConst2; + float fRec5[2]; + float fRec6[2]; + FAUSTFLOAT fslider5; + FAUSTFLOAT fslider6; + FAUSTFLOAT fslider7; + float fRec4[3]; + float fRec3[3]; + float fRec2[3]; + float fRec1[3]; + float fRec0[2]; + float fRec11[3]; + float fRec10[3]; + float fRec9[3]; + float fRec8[3]; + float fRec7[2]; + + void instanceInit(int samplingFreq) { + fSamplingFreq = samplingFreq; + fslider0 = 1.0f; + fcheckbox0 = 0.0; + fcheckbox1 = 0.0; + for (int i=0; i<2; i++) iVec0[i] = 0; + fslider1 = 0.0f; + fslider2 = 0.0f; + fslider3 = 1e+03f; + iConst0 = min(192000, max(1, fSamplingFreq)); + fConst1 = (1.0f / float(iConst0)); + fslider4 = 0.5f; + fConst2 = (6.283185307179586f / float(iConst0)); + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + fslider5 = 1e+02f; + fslider6 = 8e+02f; + fslider7 = 1.5f; + for (int i=0; i<3; i++) fRec4[i] = 0; + for (int i=0; i<3; i++) fRec3[i] = 0; + for (int i=0; i<3; i++) fRec2[i] = 0; + for (int i=0; i<3; i++) fRec1[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<3; i++) fRec11[i] = 0; + for (int i=0; i<3; i++) fRec10[i] = 0; + for (int i=0; i<3; i++) fRec9[i] = 0; + for (int i=0; i<3; i++) fRec8[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + } + void init(int samplingFreq) { + instanceInit(samplingFreq); + } + // convert fixed point to float + // * invert bits if sign bit is set (0x08000000, or (1<<27)) + // * cast int to float + // * divide by constant to shift decimal point + // * multiply by -1 if sign bit was set + float ConvertFracToFloat(int32_t frac) { + bool neg = (((1<<27) & frac) != 0); + float res = (float)(neg ? frac : ~frac); + res = res / (float(1<<29)); + return (neg ? (-1 * res) : res); + } + + void compute (int count, + const int32_t** input, + int32_t* left, + int32_t* right, + int param_fcheckbox0, + int param_fcheckbox1, + int param_fslider0, + int param_fslider1, + int param_fslider3, + int param_fslider4, + int param_fslider5, + int param_fslider6, + int param_fslider7) { + float fSlow0 = (0.5f * ((int(float(param_fcheckbox0)))?2:float(fslider0))); + float fSlow1 = ((int(float(param_fcheckbox1)))?(0 - fSlow0):fSlow0); + float fSlow2 = float(fslider1); + float fSlow3 = 10; //powf(10,(0.05f * float(fslider2))); + float fSlow4 = 0.8; //expf((fConst1 * (0 - (3.141592653589793f * float(fslider3))))); + float fSlow5 = faustpower2(fSlow4); + float fSlow6 = (fConst2 * 10*ConvertFracToFloat(param_fslider4)); + float fSlow7 = cosf(fSlow6); + float fSlow8 = sinf(fSlow6); + float fSlow9 = (0 - fSlow8); + float fSlow10 = float(fslider5); + float fSlow11 = (6.283185307179586f * fSlow10); + float fSlow12 = (0.5f * ((6.283185307179586f * max(fSlow10, float(fslider6))) - fSlow11)); + float fSlow13 = float(fslider7); + float fSlow14 = (fConst1 * fSlow13); + float fSlow15 = (0 - (2 * fSlow4)); + float fSlow16 = (fConst1 * faustpower2(fSlow13)); + float fSlow17 = (fConst1 * faustpower3(fSlow13)); + float fSlow18 = (fConst1 * faustpower4(fSlow13)); + float fSlow19 = (1 - fSlow0); + const int32_t* input0 = *input; + const int32_t* input1 = *input; + int32_t* output0 = left; + int32_t* output1 = right; + for (int i=0; i<count; i++) { + iVec0[0] = 1; + float fTemp0 = ConvertFracToFloat(input0[i]); + fRec5[0] = ((fSlow8 * fRec6[1]) + (fSlow7 * fRec5[1])); + fRec6[0] = ((1 + ((fSlow7 * fRec6[1]) + (fSlow9 * fRec5[1]))) - iVec0[1]); + float fTemp1 = (fSlow11 + (fSlow12 * (1 - fRec5[0]))); + float fTemp2 = (fRec4[1] * cosf((fSlow14 * fTemp1))); + fRec4[0] = (0 - (((fSlow15 * fTemp2) + (fSlow5 * fRec4[2])) - ((fSlow3 * fTemp0) + (fSlow2 * fRec0[1])))); + float fTemp3 = (fRec3[1] * cosf((fSlow16 * fTemp1))); + fRec3[0] = ((fSlow15 * (fTemp2 - fTemp3)) + (fRec4[2] + (fSlow5 * (fRec4[0] - fRec3[2])))); + float fTemp4 = (fRec2[1] * cosf((fSlow17 * fTemp1))); + fRec2[0] = ((fSlow15 * (fTemp3 - fTemp4)) + (fRec3[2] + (fSlow5 * (fRec3[0] - fRec2[2])))); + float fTemp5 = (fRec1[1] * cosf((fSlow18 * fTemp1))); + fRec1[0] = ((fSlow15 * (fTemp4 - fTemp5)) + (fRec2[2] + (fSlow5 * (fRec2[0] - fRec1[2])))); + fRec0[0] = ((fSlow5 * fRec1[0]) + ((fSlow15 * fTemp5) + fRec1[2])); + output0[i] = ConvertFloatToFrac((fSlow3 * (fTemp0 * fSlow19)) + (fRec0[0] * fSlow1)); + + float fTemp6 = ConvertFracToFloat(input1[i]); + float fTemp7 = (fSlow11 + (fSlow12 * (1 - fRec6[0]))); + float fTemp8 = (fRec11[1] * cosf((fSlow14 * fTemp7))); + fRec11[0] = (0 - (((fSlow15 * fTemp8) + (fSlow5 * fRec11[2])) - ((fSlow3 * fTemp6) + (fSlow2 * fRec7[1])))); + float fTemp9 = (fRec10[1] * cosf((fSlow16 * fTemp7))); + fRec10[0] = ((fSlow15 * (fTemp8 - fTemp9)) + (fRec11[2] + (fSlow5 * (fRec11[0] - fRec10[2])))); + float fTemp10 = (fRec9[1] * cosf((fSlow17 * fTemp7))); + fRec9[0] = ((fSlow15 * (fTemp9 - fTemp10)) + (fRec10[2] + (fSlow5 * (fRec10[0] - fRec9[2])))); + float fTemp11 = (fRec8[1] * cosf((fSlow18 * fTemp7))); + fRec8[0] = ((fSlow15 * (fTemp10 - fTemp11)) + (fRec9[2] + (fSlow5 * (fRec9[0] - fRec8[2])))); + fRec7[0] = ((fSlow5 * fRec8[0]) + ((fSlow15 * fTemp11) + fRec8[2])); + output1[i] = ConvertFloatToFrac((fSlow3 * (fTemp6 * fSlow19)) + (fRec7[0] * fSlow1)); + // post processing + fRec7[1] = fRec7[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; + fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } + } +}; diff --git a/objects/faust/phaser_stereo_optimised.axo b/objects/faust/phaser_stereo_optimised.axo new file mode 100644 index 0000000..c16ac7d --- /dev/null +++ b/objects/faust/phaser_stereo_optimised.axo @@ -0,0 +1,180 @@ +<objdefs> + <obj.normal id="phaser_stereo_optimised" uuid="38e0908ef72eddcefe1acb06ecfdeff201ddf1a9" sha="ae1df574629a5ec71ab34078f5084f686f786742"> + <sDescription>Phaser Stereo (from Faust) hand-optimised</sDescription> + <author>Ricardo Wurmus</author> + <license>GPL</license> + <helpPatch/> + <inlets> + <frac32buffer name="in" description="in"/> + </inlets> + <outlets> + <frac32buffer.bipolar name="left" description="left output"/> + <frac32buffer.bipolar name="right" description="right output"/> + </outlets> + <params> + <bool32.tgl name="fcheckbox0" description="VibratoMode: direct/vibrato"/> + <bool32.tgl name="fcheckbox1" description="linear/invert"/> + <!-- values are given as: default, min, max, increment? --> + <!-- They all need to be remapped to the -64.0..0..64.0 range --> + + <!-- 1.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="Depth" name="fslider0"/> + + <!-- 0.0f, 0.0f, 1.0f, 0.01f --> + <frac32.u.map description="feedback gain" name="fslider1"/> + + <!-- 1e+03f, 1e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="Notch width (Hz)" name="fslider3"/> + + <!-- 0.5f, 0.0f, 1e+01f, 0.01f --> + <frac32.u.map description="Speed (Hz)" name="fslider4"/> + + <!-- 1e+02f, 2e+01f, 5e+03f, 1.0f --> + <frac32.s.map.pitch description="MinNotch1Freq (Hz)" name="fslider5"/> + + <!-- 8e+02f, 2e+01f, 1e+04f, 1.0f --> + <frac32.s.map.pitch description="MaxNotch1Freq (Hz)" name="fslider6"/> + + <!-- 1.5f, 1.1f, 4.0f, 0.01f --> + <frac32.u.map description="NotchFreq (Hz)" name="fslider7"/> + </params> + <displays/> + <attribs/> + <code.declaration><![CDATA[ + int iVec0[2]; + int32_t fConst1; + int32_t fConst2; + int32_t fRec0[2]; + int32_t fRec1[3]; + int32_t fRec2[3]; + int32_t fRec3[3]; + int32_t fRec4[3]; + int32_t fRec5[2]; + int32_t fRec6[2]; + int32_t fRec7[2]; + int32_t fRec8[3]; + int32_t fRec9[3]; + int32_t fRec10[3]; + int32_t fRec11[3]; + // only valid for positive values! + #define MAX(a, b) ((a) > (b) ? (a) : (b)) + #define cosf arm_cos_q31 + #define intTAU 0x00c90fdb + /*"6.283185307179586f"*/ +]]></code.declaration> + <code.init><![CDATA[ + int32_t intPI = 0x006487ed /*"3.141592653589793f"*/; + + + // SAMPLERATE is 48000 + fConst1 = 0x0000002c /*"2.0833333333333333e-5"*/; //1.0f / SAMPLERATE; + fConst2 = 0x00000113 /*"1.308996938995747e-4"*/; // TAU / SAMPLERATE; + + for (int i=0; i<2; i++) iVec0[i] = 0; + for (int i=0; i<2; i++) fRec0[i] = 0; + for (int i=0; i<3; i++) fRec1[i] = 0; + for (int i=0; i<3; i++) fRec2[i] = 0; + for (int i=0; i<3; i++) fRec3[i] = 0; + for (int i=0; i<3; i++) fRec4[i] = 0; + for (int i=0; i<2; i++) fRec5[i] = 0; + for (int i=0; i<2; i++) fRec6[i] = 0; + for (int i=0; i<2; i++) fRec7[i] = 0; + for (int i=0; i<3; i++) fRec8[i] = 0; + for (int i=0; i<3; i++) fRec9[i] = 0; + for (int i=0; i<3; i++) fRec10[i] = 0; + for (int i=0; i<3; i++) fRec11[i] = 0; +]]></code.init> + <code.krate><![CDATA[ + // TODO: find replacements for: expf, cosf, sinf + // values must be scaled to fit into the range expected by arm_{cos,sin}_q31 + // they all take radians! + // cosf --> arm_cos_q31 + // sinf --> arm_sin_q31 + + int32_t fSlow0 = param_fcheckbox0 ? 0x00200000 /*"1"*/ : (param_fslider0>>1); + int32_t fSlow1 = param_fcheckbox1 ? __QSUB(0, fSlow0) : fSlow0; + // TODO: find replacement for expf + // e ^ -1 * const1 * pi * slider3 + // It's a value between 0.72 and 1.0, but for now we pretend it's just the value of fslider3. + // float fSlow4 = expf((fConst1 * (0 - (3.141592653589793f * float(fslider3))))); + int32_t fSlow4 = 0x00200000; //param_fslider3; + int32_t fSlow5 = ___SMMUL(fSlow4, fSlow4); + int32_t fSlow6 = ___SMMUL(fConst2, param_fslider4); + int32_t fSlow7 = arm_cos_q31(fSlow6); + int32_t fSlow8 = arm_sin_q31(fSlow6); + int32_t fSlow9 = __QSUB(0, fSlow8); + + int32_t minFreq; + MTOF(param_fslider5, minFreq); + int32_t maxFreq; + MTOF(param_fslider6, maxFreq); + + int32_t fSlow11 = ___SMMUL(intTAU, minFreq); + int32_t fSlow12 = __QSUB(___SMMUL(intTAU, MAX(minFreq, maxFreq)), fSlow11) >>1; + int32_t fSlow15 = __QSUB(0, fSlow4<<1); + int32_t fSlow14 = ___SMMUL(fConst1, param_fslider7); + int32_t fSlow16 = ___SMMUL(fSlow14, param_fslider7); + int32_t fSlow17 = ___SMMUL(fSlow16, param_fslider7); + int32_t fSlow18 = ___SMMUL(fSlow17, param_fslider7); + int32_t fSlow19 = __QSUB(0x00200000 /*"1.0"*/, fSlow0); + + const int32_t* input0 = inlet_in; + const int32_t* input1 = inlet_in; + int32_t* output0 = outlet_left; + int32_t* output1 = outlet_right; + + for (int i=0; i<BUFSIZE; i++) { + iVec0[0] = 0x00200000 /*"1.0"*/; + fRec5[0] = ___SMMUL(fSlow8, fRec6[1]) + ___SMMUL(fSlow7, fRec5[1]); + fRec6[0] = __QSUB((1 + (___SMMUL(fSlow7, fRec6[1]) + ___SMMUL(fSlow9, fRec5[1]))), iVec0[1]); + + { + int32_t fTemp0 = input0[i]; + int32_t fTemp1 = fSlow11 + ___SMMUL(fSlow12, __QSUB(0x00200000 /*"1.0"*/, fRec5[0])); + int32_t fTemp2 = ___SMMUL(fRec4[1], cosf(___SMMUL(fSlow14, fTemp1))); + fRec4[0] = __QSUB(0, __QSUB((___SMMUL(fSlow15, fTemp2) + ___SMMUL(fSlow5, fRec4[2])), (fTemp0 + ___SMMUL(param_fslider1, fRec0[1])))); + int32_t fTemp3 = ___SMMUL(fRec3[1], cosf(___SMMUL(fSlow16, fTemp1))); + fRec3[0] = ___SMMUL(fSlow15, __QSUB(fTemp2, fTemp3)) + (fRec4[2] + ___SMMUL(fSlow5, __QSUB(fRec4[0], fRec3[2]))); + int32_t fTemp4 = ___SMMUL(fRec2[1], cosf(___SMMUL(fSlow17, fTemp1))); + fRec2[0] = ___SMMUL(fSlow15, __QSUB(fTemp3, fTemp4)) + (fRec3[2] + ___SMMUL(fSlow5, __QSUB(fRec3[0], fRec2[2]))); + int32_t fTemp5 = ___SMMUL(fRec1[1], cosf(___SMMUL(fSlow18, fTemp1))); + fRec1[0] = ___SMMUL(fSlow15, __QSUB(fTemp4, fTemp5)) + (fRec2[2] + ___SMMUL(fSlow5, __QSUB(fRec2[0], fRec1[2]))); + fRec0[0] = ___SMMUL(fSlow5, fRec1[0]) + (___SMMUL(fSlow15, fTemp5) + fRec1[2]); + // TODO: add outlet to see if fRec0 is at all correct + output0[i] = ___SMMUL(fTemp0, fSlow19) + ___SMMUL(fRec0[0], fSlow1); + } + + { + int32_t fTemp6 = input1[i]; + int32_t fTemp7 = fSlow11 + ___SMMUL(fSlow12, __QSUB(0x00200000 /*"1.0"*/, fRec6[0])); + int32_t fTemp8 = ___SMMUL(fRec11[1], cosf(___SMMUL(fSlow14, fTemp7))); + fRec11[0] = __QSUB(0, (___SMMUL(fSlow15, fTemp8) + ___SMMUL(fSlow5, fRec11[2]) - (fTemp6 + ___SMMUL(param_fslider1, fRec7[1])))); + int32_t fTemp9 = ___SMMUL(fRec10[1], cosf(___SMMUL(fSlow16, fTemp7))); + fRec10[0] = (___SMMUL(fSlow15, __QSUB(fTemp8, fTemp9)) + (fRec11[2] + ___SMMUL(fSlow5, __QSUB(fRec11[0], fRec10[2])))); + int32_t fTemp10 = ___SMMUL(fRec9[1], cosf(___SMMUL(fSlow17, fTemp7))); + fRec9[0] = (___SMMUL(fSlow15, __QSUB(fTemp9, fTemp10)) + (fRec10[2] + ___SMMUL(fSlow5, __QSUB(fRec10[0], fRec9[2])))); + int32_t fTemp11 = ___SMMUL(fRec8[1], cosf(___SMMUL(fSlow18, fTemp7))); + fRec8[0] = (___SMMUL(fSlow15, __QSUB(fTemp10, fTemp11)) + (fRec9[2] + ___SMMUL(fSlow5, __QSUB(fRec9[0], fRec8[2])))); + fRec7[0] = (___SMMUL(fSlow5, fRec8[0]) + (___SMMUL(fSlow15, fTemp11) + fRec8[2])); + // TODO: add outlet to see if fRec7 is at all correct + output1[i] = ___SMMUL(fTemp6, fSlow19) + ___SMMUL(fRec7[0], fSlow1); + } + + // post processing + fRec7[1] = fRec7[0]; + fRec8[2] = fRec8[1]; fRec8[1] = fRec8[0]; + fRec9[2] = fRec9[1]; fRec9[1] = fRec9[0]; + fRec10[2] = fRec10[1]; fRec10[1] = fRec10[0]; + fRec11[2] = fRec11[1]; fRec11[1] = fRec11[0]; + fRec0[1] = fRec0[0]; + fRec1[2] = fRec1[1]; fRec1[1] = fRec1[0]; + fRec2[2] = fRec2[1]; fRec2[1] = fRec2[0]; + fRec3[2] = fRec3[1]; fRec3[1] = fRec3[0]; + fRec4[2] = fRec4[1]; fRec4[1] = fRec4[0]; + fRec6[1] = fRec6[0]; + fRec5[1] = fRec5[0]; + iVec0[1] = iVec0[0]; + } +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/limiter.axs b/objects/limiter.axs new file mode 100644 index 0000000..e724c2a --- /dev/null +++ b/objects/limiter.axs @@ -0,0 +1,126 @@ +<patch-1.0 appVersion="1.0.11"> + <obj type="math/abs" uuid="f4078fd9b2dff40d4f1551b79900c9ab360c99" name="abs_1" x="238" y="280"> + <params/> + <attribs/> + </obj> + <obj type="filter/lp" uuid="1427779cf086ab83c8b03eeeac69c2a97759c651" name="lp_2" x="308" y="280"> + <params> + <frac32.s.map name="pitch" value="-30.0"/> + <frac32.u.map name="reso" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="math/+c" uuid="8a7195df16f4695260af58e8072c656181925b4d" name="+c_1" x="420" y="280"> + <params> + <frac32.u.map name="c" value="1.0"/> + </params> + <attribs/> + </obj> + <obj type="math/reciprocal" uuid="4be823e668871835d067cbfe42407b06f927f91f" name="reciprocal_1" x="490" y="280"> + <params/> + <attribs/> + </obj> + <obj type="conv/to f" uuid="bdd08445689602ce174689ccb6be085f627d9892" name="to_1" x="588" y="280"> + <params/> + <attribs/> + </obj> + <obj type="math/smooth2" uuid="9ba3ddec912512e6b63211080e89cb25b6d84834" name="smooth2_1" x="658" y="280"> + <params> + <frac32.u.map name="risetime" onParent="true" value="33.0"/> + <frac32.u.map name="falltime" onParent="true" value="28.5"/> + </params> + <attribs/> + </obj> + <obj type="math/gain" uuid="6b4dd3da49f98e54900f6c20031f38f4624fa364" name="gain_2" x="756" y="280"> + <params> + <frac32.u.map name="amp" onParent="true" value="4.5"/> + </params> + <attribs/> + </obj> + <obj type="math/+c" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_2" x="868" y="280"> + <params> + <frac32.u.map name="c" onParent="true" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="gain/vca" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_1" x="938" y="280"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet a" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="audio out" x="1008" y="280"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet a" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="audio in" x="154" y="322"> + <params/> + <attribs/> + </obj> + <obj type="delay/echo" uuid="b7e4de60a644f6b30fdee9648ea62f446ecce38d" name="echo_1" x="238" y="434"> + <params/> + <attribs> + <spinner attributeName="delaylength" value="128"/> + </attribs> + </obj> + <obj type="patch/outlet f" uuid="d18a9a550bcaaebac94e25983bd0e27dbfd7233c" name="gain" x="938" y="434"> + <params/> + <attribs/> + </obj> + <nets> + <net> + <source obj="lp_2" outlet="out"/> + <dest obj="+c_1" inlet="in"/> + </net> + <net> + <source obj="+c_1" outlet="out"/> + <dest obj="reciprocal_1" inlet="in"/> + </net> + <net> + <source obj="reciprocal_1" outlet="out"/> + <dest obj="to_1" inlet="i"/> + </net> + <net> + <source obj="to_1" outlet="o"/> + <dest obj="smooth2_1" inlet="in"/> + </net> + <net> + <source obj="smooth2_1" outlet="out"/> + <dest obj="gain_2" inlet="in"/> + </net> + <net> + <source obj="gain_2" outlet="out"/> + <dest obj="+c_2" inlet="in"/> + </net> + <net> + <source obj="echo_1" outlet="out"/> + <dest obj="vca_1" inlet="a"/> + </net> + <net> + <source obj="+c_2" outlet="out"/> + <dest obj="vca_1" inlet="v"/> + <dest obj="gain" inlet="outlet"/> + </net> + <net> + <source obj="vca_1" outlet="o"/> + <dest obj="audio out" inlet="outlet"/> + </net> + <net> + <source obj="abs_1" outlet="out"/> + <dest obj="lp_2" inlet="in"/> + </net> + <net> + <source obj="audio in" outlet="inlet"/> + <dest obj="echo_1" inlet="in"/> + <dest obj="abs_1" inlet="in"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>-5</x> + <y>33</y> + <width>1290</width> + <height>772</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/murf.axs b/objects/murf.axs new file mode 100644 index 0000000..3c63eb2 --- /dev/null +++ b/objects/murf.axs @@ -0,0 +1,561 @@ +<patch-1.0> + <obj type="ctrl/toggle" sha="f5742cc9eee76fae90a4e570c34596dd327b6c28" uuid="42b8134fa729d54bfc8d62d6ef3fa99498c1de99" name="animate" x="56" y="28"> + <params> + <bool32.tgl name="b" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="logic/change" sha="837ce58b607d311bf1cf34a4ace8f7c43c5699c9" uuid="96e39ae624c3f3c952cec4a95e1986ee0104f718" name="change_1" x="196" y="28"> + <params/> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_1" x="280" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="-19.0"> + <presets> + <preset index="2"> + <f v="-8.649999999999999"/> + </preset> + <preset index="1"> + <f v="-19.000000000000068"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_2" x="406" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="-12.509999752044678"> + <presets> + <preset index="2"> + <f v="-1.6300000000000006"/> + </preset> + <preset index="1"> + <f v="-12.509999999999998"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_3" x="532" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="-5.49399995803833"> + <presets> + <preset index="2"> + <f v="5.389999999999993"/> + </preset> + <preset index="1"> + <f v="-5.49399995803833"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_4" x="658" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="1.0399999618530273"> + <presets> + <preset index="2"> + <f v="12.409000396728516"/> + </preset> + <preset index="1"> + <f v="1.0399999618530273"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_5" x="784" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="8.059000015258789"> + <presets> + <preset index="2"> + <f v="19.220000762939453"/> + </preset> + <preset index="1"> + <f v="8.059000015258789"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_6" x="910" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="14.800000190734863"> + <presets> + <preset index="2"> + <f v="26.23000000000002"/> + </preset> + <preset index="1"> + <f v="14.800000190734863"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_7" x="1036" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="22.3700008392334"> + <presets> + <preset index="2"> + <f v="32.86"/> + </preset> + <preset index="1"> + <f v="22.3700008392334"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="./env-bp" uuid="d096215e893865856120e4c05f64b05f61278b02" name="env-bp_8" x="1162" y="56"> + <params> + <frac32.s.map name="bp_2:pitch" value="29.389999866485596"> + <presets> + <preset index="2"> + <f v="40.400000000000034"/> + </preset> + <preset index="1"> + <f v="29.389999999999997"/> + </preset> + </presets> + </frac32.s.map> + </params> + <attribs/> + </obj> + <obj type="ctrl/toggle" sha="f5742cc9eee76fae90a4e570c34596dd327b6c28" uuid="42b8134fa729d54bfc8d62d6ef3fa99498c1de99" name="bass/mid" x="56" y="84"> + <params> + <bool32.tgl name="b" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="math/+1" sha="2e8219f3e40a6f1b07008f9f6233b252761e8f09" uuid="13c1a4574bb81783beb8839e81782b9a34e3fc17" name="+1_1" x="126" y="84"> + <params/> + <attribs/> + </obj> + <obj type="patch/preset" sha="9c8ff28c68afe4bd71bf0c853e95d51447cd628e" uuid="f7916cc01d45a5b1bbd444216031e0a02cc0b94c" name="preset_1" x="196" y="84"> + <params/> + <attribs/> + </obj> + <obj type="ctrl/dial p" sha="501c30e07dedf3d701e8d0b33c3c234908c3388e" uuid="cc5d2846c3d50e425f450c4b9851371b54f4d674" name="attack" x="56" y="154"> + <params> + <frac32.u.map name="value" onParent="true" value="42.5"/> + </params> + <attribs/> + </obj> + <obj type="ctrl/dial p" sha="501c30e07dedf3d701e8d0b33c3c234908c3388e" uuid="cc5d2846c3d50e425f450c4b9851371b54f4d674" name="decay" x="126" y="154"> + <params> + <frac32.u.map name="value" onParent="true" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="ctrl/dial p" sha="501c30e07dedf3d701e8d0b33c3c234908c3388e" uuid="cc5d2846c3d50e425f450c4b9851371b54f4d674" name="reso" x="196" y="154"> + <params> + <frac32.u.map name="value" onParent="true" value="16.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="lfo" x="168" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_1" x="336" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_2" x="434" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_3" x="560" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_4" x="672" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_5" x="798" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_6" x="896" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_7" x="1022" y="252"> + <params/> + <attribs/> + </obj> + <obj type="gain/vca" sha="c904cdd24d65968df2f5796e107db3747dd691a6" uuid="a9f2dcd18043e2f47364e45cb8814f63c2a37c0d" name="vca_8" x="1148" y="252"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet a" sha="709c10aa648c6e5a3c00da4b5dd238899a7c109c" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="in" x="168" y="322"> + <params/> + <attribs/> + </obj> + <obj type="mix/mix 4 g" sha="1026b0e524ad2b22e6faac72bbba11b763ed0c34" uuid="36f472cd81da2e17bd4b4ee11b53b4c82527220c" name="mix_2" x="504" y="378"> + <params> + <frac32.u.map name="gain1" value="32.0"/> + <frac32.u.map name="gain2" value="32.0"/> + <frac32.u.map name="gain3" value="32.0"/> + <frac32.u.map name="gain4" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="left" x="616" y="378"> + <params/> + <attribs/> + </obj> + <obj type="mix/mix 4 g" sha="1026b0e524ad2b22e6faac72bbba11b763ed0c34" uuid="36f472cd81da2e17bd4b4ee11b53b4c82527220c" name="mix_3" x="770" y="378"> + <params> + <frac32.u.map name="gain1" value="32.0"/> + <frac32.u.map name="gain2" value="32.0"/> + <frac32.u.map name="gain3" value="32.0"/> + <frac32.u.map name="gain4" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="right" x="882" y="378"> + <params/> + <attribs/> + </obj> + <obj type="mix/mix 2 g" sha="921aefdda41b92a27cc93c53b5154554d0ce6d3b" uuid="221f038da51943034a75e442c90624fcebfe6112" name="mix_1" x="966" y="378"> + <params> + <frac32.u.map name="gain1" value="32.0"/> + <frac32.u.map name="gain2" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="mono" x="1078" y="378"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp1" x="168" y="392"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp2" x="168" y="434"> + <params/> + <attribs/> + </obj> + <obj type="math/*c" sha="60143a29e35f452025e9edaa2dec6e660ecb9c6e" uuid="7d5ef61c3bcd571ee6bbd8437ef3612125dfb225" name="lfo depth" x="364" y="448"> + <params> + <frac32.u.map name="amp" onParent="true" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="math/div 16" sha="153e55f554960498908693663e38bb762eb480d8" uuid="19cf8d3358046cb69c1139e51a3e1555742492e0" name="div_1" x="280" y="462"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp3" x="168" y="476"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp4" x="168" y="518"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp5" x="168" y="560"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp6" x="168" y="602"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp7" x="168" y="644"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="bp8" x="168" y="686"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol1" x="168" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol2" x="252" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol3" x="350" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol4" x="434" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol5" x="518" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol6" x="602" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol7" x="700" y="742"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="vol8" x="784" y="742"> + <params/> + <attribs/> + </obj> + <nets> + <net> + <source obj="in" outlet="inlet"/> + <dest obj="env-bp_1" inlet="in"/> + <dest obj="env-bp_5" inlet="in"/> + <dest obj="env-bp_2" inlet="in"/> + <dest obj="env-bp_3" inlet="in"/> + <dest obj="env-bp_6" inlet="in"/> + <dest obj="env-bp_7" inlet="in"/> + <dest obj="env-bp_8" inlet="in"/> + <dest obj="env-bp_4" inlet="in"/> + </net> + <net> + <source obj="decay" outlet="out"/> + <dest obj="env-bp_1" inlet="decay"/> + <dest obj="env-bp_4" inlet="decay"/> + <dest obj="env-bp_5" inlet="decay"/> + <dest obj="env-bp_2" inlet="decay"/> + <dest obj="env-bp_8" inlet="decay"/> + <dest obj="env-bp_6" inlet="decay"/> + <dest obj="env-bp_7" inlet="decay"/> + <dest obj="env-bp_3" inlet="decay"/> + </net> + <net> + <source obj="reso" outlet="out"/> + <dest obj="env-bp_1" inlet="reso"/> + <dest obj="env-bp_4" inlet="reso"/> + <dest obj="env-bp_5" inlet="reso"/> + <dest obj="env-bp_6" inlet="reso"/> + <dest obj="env-bp_7" inlet="reso"/> + <dest obj="env-bp_2" inlet="reso"/> + <dest obj="env-bp_3" inlet="reso"/> + <dest obj="env-bp_8" inlet="reso"/> + </net> + <net> + <source obj="attack" outlet="out"/> + <dest obj="env-bp_1" inlet="attack"/> + <dest obj="env-bp_4" inlet="attack"/> + <dest obj="env-bp_5" inlet="attack"/> + <dest obj="env-bp_2" inlet="attack"/> + <dest obj="env-bp_8" inlet="attack"/> + <dest obj="env-bp_7" inlet="attack"/> + <dest obj="env-bp_3" inlet="attack"/> + <dest obj="env-bp_6" inlet="attack"/> + </net> + <net> + <source obj="env-bp_1" outlet="out"/> + <dest obj="vca_1" inlet="a"/> + </net> + <net> + <source obj="env-bp_2" outlet="out"/> + <dest obj="vca_2" inlet="a"/> + </net> + <net> + <source obj="env-bp_3" outlet="out"/> + <dest obj="vca_3" inlet="a"/> + </net> + <net> + <source obj="env-bp_5" outlet="out"/> + <dest obj="vca_5" inlet="a"/> + </net> + <net> + <source obj="env-bp_6" outlet="out"/> + <dest obj="vca_6" inlet="a"/> + </net> + <net> + <source obj="env-bp_7" outlet="out"/> + <dest obj="vca_7" inlet="a"/> + </net> + <net> + <source obj="lfo depth" outlet="out"/> + <dest obj="env-bp_1" inlet="pitch"/> + <dest obj="env-bp_2" inlet="pitch"/> + <dest obj="env-bp_3" inlet="pitch"/> + <dest obj="env-bp_4" inlet="pitch"/> + <dest obj="env-bp_5" inlet="pitch"/> + <dest obj="env-bp_6" inlet="pitch"/> + <dest obj="env-bp_7" inlet="pitch"/> + <dest obj="env-bp_8" inlet="pitch"/> + </net> + <net> + <source obj="mix_2" outlet="out"/> + <dest obj="left" inlet="outlet"/> + <dest obj="mix_1" inlet="in2"/> + </net> + <net> + <source obj="mix_3" outlet="out"/> + <dest obj="right" inlet="outlet"/> + <dest obj="mix_1" inlet="in1"/> + </net> + <net> + <source obj="animate" outlet="o"/> + <dest obj="env-bp_1" inlet="animate"/> + <dest obj="env-bp_2" inlet="animate"/> + <dest obj="env-bp_3" inlet="animate"/> + <dest obj="env-bp_4" inlet="animate"/> + <dest obj="env-bp_5" inlet="animate"/> + <dest obj="env-bp_6" inlet="animate"/> + <dest obj="env-bp_7" inlet="animate"/> + <dest obj="env-bp_8" inlet="animate"/> + </net> + <net> + <source obj="bass/mid" outlet="o"/> + <dest obj="+1_1" inlet="a"/> + </net> + <net> + <source obj="+1_1" outlet="result"/> + <dest obj="preset_1" inlet="preset"/> + <dest obj="change_1" inlet="in"/> + </net> + <net> + <source obj="lfo" outlet="inlet"/> + <dest obj="div_1" inlet="in"/> + </net> + <net> + <source obj="change_1" outlet="trig"/> + <dest obj="preset_1" inlet="trig"/> + </net> + <net> + <source obj="bp1" outlet="inlet"/> + <dest obj="env-bp_1" inlet="gate"/> + </net> + <net> + <source obj="bp2" outlet="inlet"/> + <dest obj="env-bp_2" inlet="gate"/> + </net> + <net> + <source obj="bp3" outlet="inlet"/> + <dest obj="env-bp_3" inlet="gate"/> + </net> + <net> + <source obj="bp4" outlet="inlet"/> + <dest obj="env-bp_4" inlet="gate"/> + </net> + <net> + <source obj="bp5" outlet="inlet"/> + <dest obj="env-bp_5" inlet="gate"/> + </net> + <net> + <source obj="bp6" outlet="inlet"/> + <dest obj="env-bp_6" inlet="gate"/> + </net> + <net> + <source obj="bp7" outlet="inlet"/> + <dest obj="env-bp_7" inlet="gate"/> + </net> + <net> + <source obj="bp8" outlet="inlet"/> + <dest obj="env-bp_8" inlet="gate"/> + </net> + <net> + <source obj="mix_1" outlet="out"/> + <dest obj="mono" inlet="outlet"/> + </net> + <net> + <source obj="vca_1" outlet="o"/> + <dest obj="mix_2" inlet="in1"/> + </net> + <net> + <source obj="vca_3" outlet="o"/> + <dest obj="mix_2" inlet="in2"/> + </net> + <net> + <source obj="vca_5" outlet="o"/> + <dest obj="mix_2" inlet="in3"/> + </net> + <net> + <source obj="vca_7" outlet="o"/> + <dest obj="mix_2" inlet="in4"/> + </net> + <net> + <source obj="vca_2" outlet="o"/> + <dest obj="mix_3" inlet="in1"/> + </net> + <net> + <source obj="vca_4" outlet="o"/> + <dest obj="mix_3" inlet="in2"/> + </net> + <net> + <source obj="env-bp_4" outlet="out"/> + <dest obj="vca_4" inlet="a"/> + </net> + <net> + <source obj="vca_6" outlet="o"/> + <dest obj="mix_3" inlet="in3"/> + </net> + <net> + <source obj="vca_8" outlet="o"/> + <dest obj="mix_3" inlet="in4"/> + </net> + <net> + <source obj="env-bp_8" outlet="out"/> + <dest obj="vca_8" inlet="a"/> + </net> + <net> + <source obj="vol1" outlet="inlet"/> + <dest obj="vca_1" inlet="v"/> + </net> + <net> + <source obj="vol2" outlet="inlet"/> + <dest obj="vca_2" inlet="v"/> + </net> + <net> + <source obj="vol3" outlet="inlet"/> + <dest obj="vca_3" inlet="v"/> + </net> + <net> + <source obj="vol4" outlet="inlet"/> + <dest obj="vca_4" inlet="v"/> + </net> + <net> + <source obj="vol5" outlet="inlet"/> + <dest obj="vca_5" inlet="v"/> + </net> + <net> + <source obj="vol6" outlet="inlet"/> + <dest obj="vca_6" inlet="v"/> + </net> + <net> + <source obj="vol7" outlet="inlet"/> + <dest obj="vca_7" inlet="v"/> + </net> + <net> + <source obj="vol8" outlet="inlet"/> + <dest obj="vca_8" inlet="v"/> + </net> + <net> + <source obj="div_1" outlet="out"/> + <dest obj="lfo depth" inlet="in"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + <MidiChannel>1</MidiChannel> + <NPresets>8</NPresets> + <NPresetEntries>32</NPresetEntries> + <NModulationSources>8</NModulationSources> + <NModulationTargetsPerSource>8</NModulationTargetsPerSource> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>0</x> + <y>31</y> + <width>1280</width> + <height>769</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/octaver.axs b/objects/octaver.axs new file mode 100644 index 0000000..492038e --- /dev/null +++ b/objects/octaver.axs @@ -0,0 +1,238 @@ +<patch-1.0> + <comment type="patch/comment" x="854" y="56" text="write to delayline"/> + <obj type="patch/inlet a" sha="709c10aa648c6e5a3c00da4b5dd238899a7c109c" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="audio in" x="756" y="70"> + <params/> + <attribs/> + </obj> + <obj type="delay/write" sha="c573b27a5ebc2efb2d1e8ec173ff4793a2acbae2" name="d1" x="854" y="70"> + <params/> + <attribs> + <combo attributeName="size" selection="8192 (170ms)"/> + </attribs> + </obj> + <comment type="patch/comment" x="168" y="98" text="direction of pitch change"/> + <comment type="patch/comment" x="420" y="98" text="intervals"/> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="up/down" x="168" y="112"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet i" sha="525f64aba3d51dde5253cccedd116ec84bf5d5d1" uuid="f11927f00c59219df0c50f73056aa19f125540b7" name="interval" x="322" y="112"> + <params/> + <attribs/> + </obj> + <obj type="sel/sel dial 4" sha="7b1dd698ae4ee24b56779ec6463575f325706bc0" uuid="2bf0aa0779d8476013c6151d55fa9452b204d852" name="sel_1" x="420" y="112"> + <params> + <frac32.u.map name="v0" value="16.0"/> + <frac32.u.map name="v1" value="32.0"/> + <frac32.u.map name="v2" value="48.0"/> + <frac32.u.map name="v3" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="ctrl/dial b" sha="b26f881dfa1451f0269e068eb6b3d824b43b41d3" uuid="862e7d7f29093cb1ce4aed72244d118ad4d46692" name="dial_1" x="28" y="182"> + <params> + <frac32.s.map name="value" value="-5.859999656677246"/> + </params> + <attribs/> + </obj> + <comment type="patch/comment" x="28" y="294" text="mod frequency tuned to length of delay line"/> + <obj type="osc/phasor compl" sha="c95d1332c224aad738fb4504cb00706af8221028" name="phasor3_1" x="28" y="322"> + <params> + <frac32.s.map name="pitch" value="-64.0"/> + </params> + <attribs/> + </obj> + <obj type="math/inv" sha="3e213fdc5d4220476cf173e433160725802df77f" uuid="7f4c6cf4dcf79f9b0aa81c2eaf540405875714a3" name="inv_2" x="196" y="322"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="f19b3c5f68040d780d0d778288eae0022b8f5954" uuid="8a7195df16f4695260af58e8072c656181925b4d" name="+c_1" x="266" y="322"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="mux/mux 2" sha="10c5b6d774e8c972b6bb863dad23e83034e0990f" uuid="539c246f4c360ac476e128cfbfa84348fb7f7e73" name="mux_1" x="336" y="322"> + <params/> + <attribs/> + </obj> + <obj type="math/*" sha="c47ceb7366785e0103cf880ce3450321491949f1" name="*c1" x="420" y="322"> + <params/> + <attribs/> + </obj> + <obj type="delay/read interp" sha="6fda3a4b04cc8fc49e63240c2fff115695ec7a7" name="delread2__1" x="490" y="322"> + <params> + <frac32.u.map name="time" value="0.0"/> + </params> + <attribs> + <objref attributeName="delayname" obj="d1"/> + </attribs> + </obj> + <obj type="math/*" sha="d67b6c172dd96232df67e96baf19e3062e880e68" name="*1" x="658" y="322"> + <params/> + <attribs/> + </obj> + <obj type="mix/mix 2" sha="67c325bf12e5b73ad58df89daf7899831777003c" name="mix21" x="784" y="378"> + <params> + <frac32.u.map name="gain1" value="32.0"/> + <frac32.u.map name="gain2" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet a" sha="9e7e04867e1d37837b0924c9bf18c44ac68602e6" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="audio out" x="882" y="392"> + <params/> + <attribs/> + </obj> + <obj type="math/window" sha="279fd6991b5a8cf4c66e33feefccb9c9deb02f1d" name="window_1" x="490" y="420"> + <params/> + <attribs/> + </obj> + <obj type="math/inv" sha="3e213fdc5d4220476cf173e433160725802df77f" uuid="7f4c6cf4dcf79f9b0aa81c2eaf540405875714a3" name="inv_3" x="196" y="490"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="f19b3c5f68040d780d0d778288eae0022b8f5954" uuid="8a7195df16f4695260af58e8072c656181925b4d" name="+c_2" x="266" y="490"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="mux/mux 2" sha="10c5b6d774e8c972b6bb863dad23e83034e0990f" uuid="539c246f4c360ac476e128cfbfa84348fb7f7e73" name="mux_2" x="336" y="490"> + <params/> + <attribs/> + </obj> + <obj type="math/*" sha="c47ceb7366785e0103cf880ce3450321491949f1" name="*c1_" x="420" y="490"> + <params/> + <attribs/> + </obj> + <obj type="delay/read interp" sha="6fda3a4b04cc8fc49e63240c2fff115695ec7a7" name="delread2__1_" x="490" y="490"> + <params> + <frac32.u.map name="time" value="0.0"/> + </params> + <attribs> + <objref attributeName="delayname" obj="d1"/> + </attribs> + </obj> + <obj type="math/*" sha="d67b6c172dd96232df67e96baf19e3062e880e68" name="*1_" x="658" y="490"> + <params/> + <attribs/> + </obj> + <obj type="math/window" sha="279fd6991b5a8cf4c66e33feefccb9c9deb02f1d" name="window_1_" x="490" y="588"> + <params/> + <attribs/> + </obj> + <nets> + <net> + <source obj="window_1" outlet="win"/> + <dest obj="*1" inlet="b"/> + </net> + <net> + <source obj="delread2__1" outlet="out"/> + <dest obj="*1" inlet="a"/> + </net> + <net> + <source obj="mix21" outlet="out"/> + <dest obj="audio out" inlet="outlet"/> + </net> + <net> + <source obj="*c1" outlet="result"/> + <dest obj="delread2__1" inlet="time"/> + </net> + <net> + <source obj="delread2__1_" outlet="out"/> + <dest obj="*1_" inlet="a"/> + </net> + <net> + <source obj="*1" outlet="result"/> + <dest obj="mix21" inlet="in1"/> + </net> + <net> + <source obj="*1_" outlet="result"/> + <dest obj="mix21" inlet="in2"/> + </net> + <net> + <source obj="window_1_" outlet="win"/> + <dest obj="*1_" inlet="b"/> + </net> + <net> + <source obj="phasor3_1" outlet="phasor180"/> + <dest obj="inv_3" inlet="in"/> + <dest obj="mux_2" inlet="i1"/> + </net> + <net> + <source obj="inv_3" outlet="out"/> + <dest obj="+c_2" inlet="in"/> + </net> + <net> + <source obj="*c1_" outlet="result"/> + <dest obj="delread2__1_" inlet="time"/> + </net> + <net> + <source obj="+c_1" outlet="out"/> + <dest obj="mux_1" inlet="i2"/> + </net> + <net> + <source obj="inv_2" outlet="out"/> + <dest obj="+c_1" inlet="in"/> + </net> + <net> + <source obj="+c_2" outlet="out"/> + <dest obj="mux_2" inlet="i2"/> + </net> + <net> + <source obj="audio in" outlet="inlet"/> + <dest obj="d1" inlet="in"/> + </net> + <net> + <source obj="up/down" outlet="inlet"/> + <dest obj="mux_1" inlet="s"/> + <dest obj="mux_2" inlet="s"/> + </net> + <net> + <source obj="phasor3_1" outlet="phasor0"/> + <dest obj="mux_1" inlet="i1"/> + <dest obj="inv_2" inlet="in"/> + </net> + <net> + <source obj="mux_1" outlet="o"/> + <dest obj="*c1" inlet="a"/> + <dest obj="window_1" inlet="phase"/> + </net> + <net> + <source obj="mux_2" outlet="o"/> + <dest obj="*c1_" inlet="a"/> + <dest obj="window_1_" inlet="phase"/> + </net> + <net> + <source obj="sel_1" outlet="o"/> + <dest obj="*c1" inlet="b"/> + <dest obj="*c1_" inlet="b"/> + </net> + <net> + <source obj="interval" outlet="inlet"/> + <dest obj="sel_1" inlet="s"/> + </net> + <net> + <source obj="dial_1" outlet="out"/> + <dest obj="phasor3_1" inlet="pitch"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + <MidiChannel>1</MidiChannel> + <NPresets>8</NPresets> + <NPresetEntries>32</NPresetEntries> + <NModulationSources>8</NModulationSources> + <NModulationTargetsPerSource>8</NModulationTargetsPerSource> + <Author>Ricardo</Author> + <License>GPL</License> + <Attributions></Attributions> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>85</x> + <y>33</y> + <width>1276</width> + <height>771</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/pattern-editor.axs b/objects/pattern-editor.axs new file mode 100644 index 0000000..1b582c7 --- /dev/null +++ b/objects/pattern-editor.axs @@ -0,0 +1,278 @@ +<patch-1.0> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_1" x="182" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_2" x="252" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_3" x="322" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_4" x="392" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_5" x="462" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_6" x="532" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_7" x="602" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="logic/counter" sha="519c79f42a7c84352830b08e68696ecbf5d0bd52" uuid="7a141ba82230e54e5f5cd12da5dbe5a74ba854a5" name="counter_8" x="672" y="14"> + <params> + <int32 name="maximum" onParent="true" value="8"/> + </params> + <attribs/> + </obj> + <obj type="patch/inlet f" sha="8e69e1ab7ccd8afaefdc23146c50149809b64955" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="lfo" x="56" y="28"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_1" x="966" y="28"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos1" x="1036" y="28"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="reset" x="42" y="98"> + <params/> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_1" x="322" y="98"> + <params> + <bin32 name="b32" onParent="true" value="0"> + <presets/> + </bin32> + </params> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_2" x="966" y="112"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos2" x="1036" y="112"> + <params/> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_2" x="322" y="168"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_3" x="966" y="168"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos3" x="1036" y="168"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_4" x="966" y="224"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos4" x="1036" y="224"> + <params/> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_3" x="322" y="238"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_4" x="322" y="308"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_5" x="966" y="308"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos5" x="1036" y="308"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_6" x="966" y="364"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos6" x="1036" y="364"> + <params/> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_5" x="322" y="378"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_6" x="322" y="448"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_7" x="966" y="448"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos7" x="1036" y="448"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet b" sha="d53edf73b9c33108cbb6e5487759ac27b809cfcc" uuid="191792f616d4835dba0b55375474a12942e5bcbd" name="outlet_8" x="966" y="504"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet i" sha="9c18b5ec0ea721bb98852ab326891478ca87a360" uuid="aae2176b26209e34e4fdeba5edb1ace82d178655" name="pos8" x="1036" y="504"> + <params/> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_7" x="322" y="518"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <obj type="rekado/sel b 32 pulse" sha="42339346cf951f33849d48f4292fa61903ccf4c8" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" name="sel_8" x="322" y="588"> + <params> + <bin32 name="b32" onParent="true" value="0"/> + </params> + <attribs/> + </obj> + <nets> + <net> + <source obj="lfo" outlet="inlet"/> + <dest obj="counter_1" inlet="trig"/> + <dest obj="counter_2" inlet="trig"/> + <dest obj="counter_3" inlet="trig"/> + <dest obj="counter_4" inlet="trig"/> + <dest obj="counter_5" inlet="trig"/> + <dest obj="counter_6" inlet="trig"/> + <dest obj="counter_7" inlet="trig"/> + <dest obj="counter_8" inlet="trig"/> + </net> + <net> + <source obj="counter_1" outlet="o"/> + <dest obj="pos1" inlet="outlet"/> + <dest obj="sel_1" inlet="in"/> + </net> + <net> + <source obj="counter_2" outlet="o"/> + <dest obj="pos2" inlet="outlet"/> + <dest obj="sel_2" inlet="in"/> + </net> + <net> + <source obj="counter_3" outlet="o"/> + <dest obj="pos3" inlet="outlet"/> + <dest obj="sel_3" inlet="in"/> + </net> + <net> + <source obj="counter_4" outlet="o"/> + <dest obj="pos4" inlet="outlet"/> + <dest obj="sel_4" inlet="in"/> + </net> + <net> + <source obj="counter_5" outlet="o"/> + <dest obj="pos5" inlet="outlet"/> + <dest obj="sel_5" inlet="in"/> + </net> + <net> + <source obj="counter_7" outlet="o"/> + <dest obj="pos7" inlet="outlet"/> + <dest obj="sel_7" inlet="in"/> + </net> + <net> + <source obj="counter_8" outlet="o"/> + <dest obj="pos8" inlet="outlet"/> + <dest obj="sel_8" inlet="in"/> + </net> + <net> + <source obj="reset" outlet="inlet"/> + <dest obj="counter_1" inlet="r"/> + <dest obj="counter_2" inlet="r"/> + <dest obj="counter_3" inlet="r"/> + <dest obj="counter_4" inlet="r"/> + <dest obj="counter_5" inlet="r"/> + <dest obj="counter_6" inlet="r"/> + <dest obj="counter_7" inlet="r"/> + <dest obj="counter_8" inlet="r"/> + </net> + <net> + <source obj="counter_6" outlet="o"/> + <dest obj="pos6" inlet="outlet"/> + <dest obj="sel_6" inlet="in"/> + </net> + <net> + <source obj="sel_1" outlet="o"/> + <dest obj="outlet_1" inlet="outlet"/> + </net> + <net> + <source obj="sel_2" outlet="o"/> + <dest obj="outlet_2" inlet="outlet"/> + </net> + <net> + <source obj="sel_3" outlet="o"/> + <dest obj="outlet_3" inlet="outlet"/> + </net> + <net> + <source obj="sel_4" outlet="o"/> + <dest obj="outlet_4" inlet="outlet"/> + </net> + <net> + <source obj="sel_5" outlet="o"/> + <dest obj="outlet_5" inlet="outlet"/> + </net> + <net> + <source obj="sel_6" outlet="o"/> + <dest obj="outlet_6" inlet="outlet"/> + </net> + <net> + <source obj="sel_7" outlet="o"/> + <dest obj="outlet_7" inlet="outlet"/> + </net> + <net> + <source obj="sel_8" outlet="o"/> + <dest obj="outlet_8" inlet="outlet"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>0</x> + <y>33</y> + <width>1280</width> + <height>767</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/read-interp-slow.axo b/objects/read-interp-slow.axo new file mode 100644 index 0000000..2919a1f --- /dev/null +++ b/objects/read-interp-slow.axo @@ -0,0 +1,76 @@ +<objdefs> + <obj.normal id="read interp slow" uuid="2c605953453ac59b4f0c9fb67024ec9e61ee3376" sha="4f975ff0db958aff6c52f01f837ad750a823625c"> + <sDescription>delay read slow, linear interpolated</sDescription> + <author>Johannes Taelman</author> + <license>BSD</license> + <helpPatch>delay.axh</helpPatch> + <inlets> + <frac32buffer name="time" description="delay time (fraction of total delayline size)"/> + </inlets> + <outlets> + <frac32buffer name="out" description="wave"/> + </outlets> + <displays/> + <params> + <frac32.u.map name="time" noLabel="true"/> + </params> + <attribs> + <objref name="delayname"/> + </attribs> + <code.srate><![CDATA[ + // delay + // saturate the delay sum to bit 27 + // max is 0x07FFFFF + +//(ash (- (ash 1 23) 1) (* -1 (- 27 15))) + uint32_t tmp_d = __USAT(param_time + inlet_time,27); + + // index for delayed input, strictly less than the write position in the delay line. + // What happens when writepos is 0? Is the delay line really a circular buffer? + + /* LENGTHPOW => + 256 (5.33ms) = 8 + 512 (10.66ms) = 9 + 1024 (21.33ms) = 10 + 2048 (42.66ms) = 11 + 4096 (85.33ms) = 12 + 8192 (170ms) = 13 + 16384 (341ms) = 14 + 32768 (682ms) = 15 +(/ 32768.0 48000) +48000 = 1000ms + + ,*/ + // Example: set LENGTHPOW to 12 + // shift tmp_d right by (- 27 12) = 15 + // This is supposed to give a number of samples in the past, before writepos + // As this runs in a loop over the input buffer we have BUFSIZE samples to process. + // Hence (- BUFSIZE + buffer_index -1) starts at -BUFSIZE and is the last sample at the end of the srate loop. + uint32_t tmp_di = attr_delayname.writepos - (tmp_d>>(27-attr_delayname.LENGTHPOW+1)) - BUFSIZE + buffer_index -1; + + // get delayed value from delay line + int32_t tmp_a1 = attr_delayname.array[tmp_di&attr_delayname.LENGTHMASK]<<16; + // get next delayed value from delay line + int32_t tmp_a2 = attr_delayname.array[(tmp_di+1)&attr_delayname.LENGTHMASK]<<16; + + // ? what does this value represent? + // shift tmp_d left by 18, then mask with max value. + uint32_t tmp_w1 = (tmp_d<<(attr_delayname.LENGTHPOW+3)) & 0x3FFFFFFF; + + // ? opposite of w1 + uint32_t tmp_w2 = (1<<30) - tmp_w1; + + // is this what's happening? + // out = (tmp_a2 * tmp_w2) + (tmp_a1 * tmp_w1) + + // multiply value with ...? + int32_t tmp_r = ___SMMUL(tmp_a1,tmp_w1); + + // ? + // multiply the values from tmp_a2 and tmp_w2, then add the value of + // tmp_r to the most significant 32 bits of the product + tmp_r = ___SMMLA(tmp_a2,tmp_w2,tmp_r); + outlet_out= tmp_a1;//tmp_r; +]]></code.srate> + </obj.normal> +</objdefs> diff --git a/objects/sel b 32 pulse.axo b/objects/sel b 32 pulse.axo new file mode 100644 index 0000000..33f52f0 --- /dev/null +++ b/objects/sel b 32 pulse.axo @@ -0,0 +1,29 @@ +<objdefs> + <obj.normal id="sel b 32 pulse" uuid="8ad8a3dea3cedd0c5f731045ab90188e437c1260" sha="42339346cf951f33849d48f4292fa61903ccf4c8"> + <sDescription>select one out of 32 booleans, chainable. Pulse output.</sDescription> + <author>Johannes Taelman</author> + <license>BSD</license> + <inlets> + <int32 name="in" description="in"/> + <bool32 name="def" description="default value"/> + </inlets> + <outlets> + <int32 name="chain" description="chain out (in-32)"/> + <bool32.pulse name="o" description="output"/> + </outlets> + <displays/> + <params> + <bin32 name="b32" noLabel="true"/> + </params> + <attribs/> + <code.declaration><![CDATA[int in_prev; +]]></code.declaration> + <code.init><![CDATA[in_prev = 0; +]]></code.init> + <code.krate><![CDATA[if ((inlet_in>=0)&&(inlet_in<32)) outlet_o=(in_prev!=inlet_in)&&(param_b32&(1<<inlet_in)); +else outlet_o = inlet_def; +outlet_chain = inlet_in-32; +in_prev = inlet_in; +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/sqrt-distortion.axs b/objects/sqrt-distortion.axs new file mode 100644 index 0000000..0853a04 --- /dev/null +++ b/objects/sqrt-distortion.axs @@ -0,0 +1,157 @@ +<patch-1.0 appVersion="1.0.11"> + <obj type="delay/read interp" uuid="e3d8b8823ab551c588659520bf6cc25c630466c7" name="phase1" x="378" y="0"> + <params> + <frac32.u.map name="time" onParent="true" value="11.5"/> + </params> + <attribs> + <objref attributeName="delayname" obj="write_1"/> + </attribs> + </obj> + <obj type="mix/mix 2 g" uuid="221f038da51943034a75e442c90624fcebfe6112" name="mix_2" x="532" y="28"> + <params> + <frac32.u.map name="gain1" value="64.0"/> + <frac32.u.map name="gain2" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="math/inv" uuid="7f4c6cf4dcf79f9b0aa81c2eaf540405875714a3" name="inv_1" x="644" y="28"> + <params/> + <attribs/> + </obj> + <obj type="math/+" uuid="faedbea4612d9bd3644d6d3bf31946d848a70e19" name="+_1" x="714" y="28"> + <params/> + <attribs/> + </obj> + <obj type="filter/lp m" uuid="1aa1bc51da479ed92429af700591f9d7b9f45f22" name="lp_1" x="798" y="28"> + <params> + <frac32.s.map name="pitch" value="27.0"/> + <frac32.u.map name="reso" value="29.5"/> + </params> + <attribs/> + </obj> + <obj type="delay/read interp" uuid="e3d8b8823ab551c588659520bf6cc25c630466c7" name="phase2" x="378" y="112"> + <params> + <frac32.u.map name="time" onParent="true" value="29.5"/> + </params> + <attribs> + <objref attributeName="delayname" obj="write_1"/> + </attribs> + </obj> + <obj type="mix/mix 2 g" uuid="221f038da51943034a75e442c90624fcebfe6112" name="mix_1" x="924" y="140"> + <params> + <frac32.u.map name="gain1" value="64.0"/> + <frac32.u.map name="gain2" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="filter/bp m" uuid="f26437572c3a1f6be883bb219c773a9906ff8296" name="bp_1" x="798" y="196"> + <params> + <frac32.s.map name="pitch" value="32.0"/> + <frac32.u.map name="reso" value="47.5"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet a" uuid="abd8c5fd3b0524a6630f65cad6dc27f6c58e2a3e" name="audio out" x="1064" y="196"> + <params/> + <attribs/> + </obj> + <obj type="delay/write" uuid="bd73958e3830021807ee97a8cff4500a72a5710d" name="write_1" x="378" y="224"> + <params/> + <attribs> + <combo attributeName="size" selection="512 (10.66ms)"/> + </attribs> + </obj> + <obj type="math/sqrt" uuid="1b69138b600d63436014c7927b9fc1d60a413331" name="sqrt_1" x="308" y="252"> + <params/> + <attribs/> + </obj> + <obj type="patch/inlet f" uuid="5c585d2dcd9c05631e345ac09626a22a639d7c13" name="filter" x="672" y="266"> + <params/> + <attribs/> + </obj> + <comment type="patch/comment" x="182" y="280" text="cut off the low end"/> + <obj type="filter/hp" uuid="7829b56456e975f1d89bda2ad1c7ad678080a73b" name="hp_1" x="182" y="308"> + <params> + <frac32.s.map name="pitch" value="-24.0"/> + <frac32.u.map name="reso" value="0.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/inlet a" uuid="b577fe41e0a6bc7b5502ce33cb8a3129e2e28ee5" name="audio in" x="56" y="476"> + <params/> + <attribs/> + </obj> + <obj type="math/gain" uuid="62b1c1a6337c7c8f6aec96408a432477b113cfa0" name="input gain" x="154" y="476"> + <params> + <frac32.u.map name="amp" onParent="true" value="4.0"/> + </params> + <attribs/> + </obj> + <nets> + <net> + <source obj="lp_1" outlet="out"/> + <dest obj="mix_1" inlet="in1"/> + </net> + <net> + <source obj="mix_2" outlet="out"/> + <dest obj="bp_1" inlet="in"/> + <dest obj="inv_1" inlet="in"/> + </net> + <net> + <source obj="phase1" outlet="out"/> + <dest obj="mix_2" inlet="in1"/> + </net> + <net> + <source obj="phase2" outlet="out"/> + <dest obj="mix_2" inlet="in2"/> + </net> + <net> + <source obj="bp_1" outlet="out"/> + <dest obj="mix_1" inlet="in2"/> + </net> + <net> + <source obj="input gain" outlet="out"/> + <dest obj="hp_1" inlet="in"/> + </net> + <net> + <source obj="inv_1" outlet="out"/> + <dest obj="+_1" inlet="in1"/> + </net> + <net> + <source obj="+_1" outlet="out"/> + <dest obj="lp_1" inlet="in"/> + </net> + <net> + <source obj="filter" outlet="inlet"/> + <dest obj="bp_1" inlet="pitch"/> + <dest obj="lp_1" inlet="pitch"/> + </net> + <net> + <source obj="hp_1" outlet="out"/> + <dest obj="sqrt_1" inlet="in"/> + </net> + <net> + <source obj="sqrt_1" outlet="out"/> + <dest obj="write_1" inlet="in"/> + <dest obj="+_1" inlet="in2"/> + </net> + <net> + <source obj="audio in" outlet="inlet"/> + <dest obj="input gain" inlet="in"/> + </net> + <net> + <source obj="mix_1" outlet="out"/> + <dest obj="audio out" inlet="outlet"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>-5</x> + <y>33</y> + <width>1280</width> + <height>767</height> + </windowPos> +</patch-1.0>
\ No newline at end of file diff --git a/objects/wip/pitch_detect_fft.axo b/objects/wip/pitch_detect_fft.axo new file mode 100644 index 0000000..7692628 --- /dev/null +++ b/objects/wip/pitch_detect_fft.axo @@ -0,0 +1,179 @@ +<objdefs> + <obj.normal id="pitch detect 128" uuid="89eda14ecd003f22288812e9843218f2d020b7ad" sha="e1ec4fbea98f37a5be48b1f7d3522ed1f7fe3229"> + <sDescription>spectral analyzer display using 128 input points fft</sDescription> + <author>Johannes Taelman, Ricardo Wurmus</author> + <license>BSD</license> + <inlets> + <frac32buffer name="in" description="input"/> + <bool32 name="hold" description="hold"/> + </inlets> + <outlets> + <int32 name="pitch" description="pitch"/> + </outlets> + <params/> + <attribs/> + <code.declaration><![CDATA[ +#define N 128 +int32_t inbuf[N]; +int32_t outbuf[N]; +// must be twice as wide because the result is +// stored like {real[0], imag[0], real[1], imag[1]...} +int32_t fftbuf[2*N]; +arm_rfft_instance_q31 rfft; +arm_cfft_radix4_instance_q31 cfft; +int32_t state; +int32_t max_val = 0; +uint32_t max_a = 0; + +/** + * @brief Maximum value of a Q31 vector. + * @param[in] *pSrc points to the input vector + * @param[in] blockSize length of the input vector + * @param[out] *pResult maximum value returned here + * @param[out] *pIndex index of maximum value returned here + * @return none. + */ + +void arm_max_q31( + q31_t * pSrc, + uint32_t blockSize, + q31_t * pResult, + uint32_t * pIndex) +{ +#ifndef ARM_MATH_CM0_FAMILY + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + q31_t maxVal1, maxVal2, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex, count; /* loop counter */ + + /* Initialise the count value. */ + count = 0u; + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + /* Loop unrolling */ + blkCnt = (blockSize - 1u) >> 2u; + + /* Run the below code for Cortex-M4 and Cortex-M3 */ + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 1u; + } + + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 2u; + } + + maxVal2 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and its index */ + out = maxVal1; + outIndex = count + 3u; + } + + /* compare for the maximum value */ + if(out < maxVal2) + { + /* Update the maximum value and its index */ + out = maxVal2; + outIndex = count + 4u; + } + + count += 4u; + + /* Decrement the loop counter */ + blkCnt--; + } + + /* if (blockSize - 1u) is not multiple of 4 */ + blkCnt = (blockSize - 1u) % 4u; + +#else + + /* Run the below code for Cortex-M0 */ + q31_t maxVal1, out; /* Temporary variables to store the output value. */ + uint32_t blkCnt, outIndex; /* loop counter */ + + /* Initialise the index value to zero. */ + outIndex = 0u; + /* Load first input value that act as reference value for comparision */ + out = *pSrc++; + + blkCnt = (blockSize - 1u); + +#endif /* #ifndef ARM_MATH_CM0_FAMILY */ + + while(blkCnt > 0u) + { + /* Initialize maxVal to the next consecutive values one by one */ + maxVal1 = *pSrc++; + + /* compare for the maximum value */ + if(out < maxVal1) + { + /* Update the maximum value and it's index */ + out = maxVal1; + outIndex = blockSize - blkCnt; + } + + /* Decrement the loop counter */ + blkCnt--; + + } + + /* Store the maximum value and its index into destination pointers */ + *pResult = out; + *pIndex = outIndex; +} + +]]></code.declaration> + <code.init><![CDATA[ +int i; +for(i=0;i<N;i++) inbuf[i]=0; +for(i=0;i<N;i++) outbuf[i]=0; +state = 0; +arm_rfft_init_q31(&rfft, &cfft, N,0,1); +]]></code.init> + <code.krate><![CDATA[ +if (state<N){ + // fill buffer + int i; + for(i=0;i<BUFSIZE;i++) { + inbuf[state++] = inlet_in[i]; + } +} else { + // compute FFT + arm_rfft_q31(&rfft, (q31_t *)inbuf, (q31_t *)fftbuf); + // compute magnitude + arm_cmplx_mag_q31(fftbuf, outbuf, N); + + // second half is conjugates, so we only look at N/2 + arm_max_q31(outbuf, N/2, &max_val, &max_a); + + outlet_pitch = max_a; + state = 0; +} +]]></code.krate> + </obj.normal> +</objdefs> diff --git a/objects/xfade-env.axs b/objects/xfade-env.axs new file mode 100644 index 0000000..faccc3b --- /dev/null +++ b/objects/xfade-env.axs @@ -0,0 +1,167 @@ +<patch-1.0> + <obj type="math/inv" sha="527f9ea38e810968a5d209b2913f846bcc5cbfea" uuid="565521d3699b36d8095aa1c79b9ad0046fb133ce" name="inv_2" x="462" y="182"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_4" x="518" y="182"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/outlet f" sha="c0c4ce40c7dec73dfbb009fd86c9b89c068b137a" uuid="d18a9a550bcaaebac94e25983bd0e27dbfd7233c" name="env_" x="854" y="182"> + <params/> + <attribs/> + </obj> + <obj type="patch/outlet f" sha="c0c4ce40c7dec73dfbb009fd86c9b89c068b137a" uuid="d18a9a550bcaaebac94e25983bd0e27dbfd7233c" name="env" x="854" y="238"> + <params/> + <attribs/> + </obj> + <obj type="math/inv" sha="527f9ea38e810968a5d209b2913f846bcc5cbfea" uuid="565521d3699b36d8095aa1c79b9ad0046fb133ce" name="abs_1" x="392" y="294"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_2" x="448" y="294"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="math/exp" sha="2ac6f1fe7b85cbd855f836a65df6a49bcd2c0f62" uuid="3f0e6db61bc98c04b42a940e7a93abbf8a178317" name="exp_2" x="504" y="294"> + <params/> + <attribs/> + </obj> + <obj type="math/inv" sha="527f9ea38e810968a5d209b2913f846bcc5cbfea" uuid="565521d3699b36d8095aa1c79b9ad0046fb133ce" name="inv_1" x="574" y="294"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_3" x="630" y="294"> + <params> + <frac32.u.map name="c" value="64.0"/> + </params> + <attribs/> + </obj> + <obj type="patch/inlet b" sha="17c8e188371661163bfa55cea9974eecb785fb06" uuid="3b0d3eacb5bb978cb05d1372aa2714d5a4790844" name="trigger" x="126" y="322"> + <params/> + <attribs/> + </obj> + <obj type="mux/mux 2" sha="73ba55fbf61b80b78dd5cb4f0c4bd5cbbdd54ea0" uuid="3bcb8a666381ed18b8962eda50b1aa679136f618" name="mux_1" x="700" y="392"> + <params/> + <attribs/> + </obj> + <obj type="math/-c" sha="13ae165692448bd5e8159b2e283e45005ef14cdf" uuid="bc70bed87e5405985ade03f4806b9450609a9093" name="shift zero" x="168" y="406"> + <params> + <frac32.u.map name="c" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="math/>>" sha="79ac9605aac7bf23c0eba17a4a6d8b179ea37f34" uuid="d883beaf50b7aae4803ed9941e8f123e87e1e3aa" name="slope" x="238" y="406"> + <params/> + <attribs> + <spinner attributeName="shift" value="2"/> + </attribs> + </obj> + <obj type="filter/integrator" sha="6535fb81a607b8ddac63cb09ba808e9afa93e070" uuid="e4d9391b099e543aa867bc3ec9565dd4d6f7df60" name="smoothen" x="336" y="406"> + <params/> + <attribs/> + </obj> + <obj type="math/half" sha="b3b4af52a3096adbd7fa08352261fbe186ec45e7" uuid="d3aa9c64dbf1ec7871bbc3e2d8905f8e443c9823" name="half_1" x="448" y="406"> + <params/> + <attribs/> + </obj> + <obj type="math/+c" sha="d0aea6063c88e27c97acf08b33a056fec3e150f1" uuid="13eec32bd8ad57dd0bb18a02566cc0a117d320e3" name="+c_1" x="532" y="406"> + <params> + <frac32.u.map name="c" value="32.0"/> + </params> + <attribs/> + </obj> + <obj type="math/exp" sha="2ac6f1fe7b85cbd855f836a65df6a49bcd2c0f62" uuid="3f0e6db61bc98c04b42a940e7a93abbf8a178317" name="exp_1" x="602" y="406"> + <params/> + <attribs/> + </obj> + <obj type="math/*c" sha="60143a29e35f452025e9edaa2dec6e660ecb9c6e" uuid="7d5ef61c3bcd571ee6bbd8437ef3612125dfb225" name="*c_1" x="266" y="504"> + <params> + <frac32.u.map name="amp" onParent="true" value="0.0"/> + </params> + <attribs/> + </obj> + <nets> + <net> + <source obj="+c_1" outlet="out"/> + <dest obj="abs_1" inlet="in"/> + <dest obj="exp_1" inlet="a"/> + </net> + <net> + <source obj="exp_1" outlet="result"/> + <dest obj="mux_1" inlet="i2"/> + </net> + <net> + <source obj="exp_2" outlet="result"/> + <dest obj="inv_1" inlet="in"/> + </net> + <net> + <source obj="+c_2" outlet="out"/> + <dest obj="exp_2" inlet="a"/> + </net> + <net> + <source obj="abs_1" outlet="out"/> + <dest obj="+c_2" inlet="in"/> + </net> + <net> + <source obj="inv_1" outlet="out"/> + <dest obj="+c_3" inlet="in"/> + </net> + <net> + <source obj="+c_3" outlet="out"/> + <dest obj="mux_1" inlet="i1"/> + </net> + <net> + <source obj="smoothen" outlet="out"/> + <dest obj="half_1" inlet="in"/> + </net> + <net> + <source obj="shift zero" outlet="out"/> + <dest obj="slope" inlet="a"/> + </net> + <net> + <source obj="half_1" outlet="out"/> + <dest obj="+c_1" inlet="in"/> + </net> + <net> + <source obj="trigger" outlet="inlet"/> + <dest obj="shift zero" inlet="in"/> + <dest obj="mux_1" inlet="s"/> + </net> + <net> + <source obj="mux_1" outlet="o"/> + <dest obj="env" inlet="outlet"/> + <dest obj="inv_2" inlet="in"/> + </net> + <net> + <source obj="inv_2" outlet="out"/> + <dest obj="+c_4" inlet="in"/> + </net> + <net> + <source obj="+c_4" outlet="out"/> + <dest obj="env_" inlet="outlet"/> + </net> + <net> + <source obj="*c_1" outlet="out"/> + <dest obj="smoothen" inlet="in"/> + </net> + <net> + <source obj="slope" outlet="result"/> + <dest obj="*c_1" inlet="in"/> + </net> + </nets> + <settings> + <subpatchmode>no</subpatchmode> + </settings> + <notes><![CDATA[]]></notes> + <windowPos> + <x>0</x> + <y>31</y> + <width>1274</width> + <height>766</height> + </windowPos> +</patch-1.0>
\ No newline at end of file |