From e90c186aaa89649c0248b5d63ae31a58a320e222 Mon Sep 17 00:00:00 2001 From: "U-ACTIVED\\danielez" Date: Tue, 13 Mar 2018 22:42:25 +0100 Subject: [PATCH] removed AS submodule --- repos/AS/.gitattributes | 2 - repos/AS/AS.JPG | Bin 362849 -> 0 bytes repos/AS/LICENSE.txt | 288 --- repos/AS/Makefile | 27 - repos/AS/README.md | 169 -- repos/AS/_config.yml | 1 - repos/AS/freeverb/allpass.hpp | 80 - repos/AS/freeverb/comb.hpp | 92 - repos/AS/freeverb/denormals.h | 15 - repos/AS/freeverb/readme.txt | 67 - repos/AS/freeverb/revmodel.cpp | 233 -- repos/AS/freeverb/revmodel.hpp | 99 - repos/AS/freeverb/tuning.h | 62 - repos/AS/res/8chMixer.svg | 626 ------ repos/AS/res/ADSR.svg | 452 ---- repos/AS/res/BPMClock.svg | 582 ----- repos/AS/res/BlankPanel4.svg | 145 -- repos/AS/res/BlankPanel6.svg | 146 -- repos/AS/res/BlankPanel8.svg | 149 -- repos/AS/res/DelayPlus.svg | 678 ------ repos/AS/res/Flow.svg | 505 ----- repos/AS/res/KillGate.svg | 544 ----- repos/AS/res/LaunchGate.svg | 556 ----- repos/AS/res/Merge2_5.svg | 404 ---- repos/AS/res/Multiple2_5 copy.svg | 395 ---- repos/AS/res/Multiple2_5.svg | 399 ---- repos/AS/res/OFL.txt | 98 - repos/AS/res/Phaser.svg | 561 ----- repos/AS/res/QuadVCA.svg | 700 ------ repos/AS/res/Reverb.svg | 503 ----- repos/AS/res/SEQ16.svg | 3342 ---------------------------- repos/AS/res/SawOSC.svg | 358 --- repos/AS/res/Segment7Standard.ttf | Bin 16624 -> 0 bytes repos/AS/res/SignalDelay.svg | 528 ----- repos/AS/res/SineOSC.svg | 322 --- repos/AS/res/Steps.svg | 703 ------ repos/AS/res/SuperDrive.svg | 547 ----- repos/AS/res/Tremolo.svg | 555 ----- repos/AS/res/Triggers.svg | 328 --- repos/AS/res/TriggersMKI.svg | 422 ---- repos/AS/res/TriggersMKII.svg | 405 ---- repos/AS/res/VCA.svg | 418 ---- repos/AS/res/WaveShaper.svg | 624 ------ repos/AS/res/as-FaderPot.svg | 139 -- repos/AS/res/as-FxKnobBlack.svg | 268 --- repos/AS/res/as-FxKnobWhite.svg | 268 --- repos/AS/res/as-PJ301M.svg | 305 --- repos/AS/res/as-SlidePot.svg | 139 -- repos/AS/res/as-SlidePotHandle.svg | 92 - repos/AS/res/as-hexscrew.svg | 86 - repos/AS/res/as-knob.svg | 225 -- repos/AS/res/as-knobBlack.svg | 228 -- repos/AS/res/as-knobMG.svg | 361 --- repos/AS/res/as-knobMGbig.svg | 365 --- repos/AS/res/as_CKSSH_0.svg | 104 - repos/AS/res/as_CKSSH_1.svg | 103 - repos/AS/res/as_CKSSThree_0.svg | 309 --- repos/AS/res/as_CKSSThree_1.svg | 309 --- repos/AS/res/as_CKSSThree_2.svg | 309 --- repos/AS/res/as_CKSS_0.svg | 100 - repos/AS/res/as_CKSS_1.svg | 99 - repos/AS/res/as_LFO.svg | 786 ------- repos/AS/res/as_bigLEDBezel.svg | 76 - repos/AS/res/monoVUmeter.svg | 370 --- repos/AS/res/saxmono.ttf | Bin 99032 -> 0 bytes repos/AS/res/stereoVUmeter.svg | 428 ---- repos/AS/src/ADSR.cpp | 154 -- repos/AS/src/AS.cpp | 43 - repos/AS/src/AS.hpp | 207 -- repos/AS/src/BPMClock.cpp | 380 ---- repos/AS/src/BlankPanel4.cpp | 48 - repos/AS/src/BlankPanel6.cpp | 47 - repos/AS/src/BlankPanel8.cpp | 47 - repos/AS/src/DelayPlus.cpp | 272 --- repos/AS/src/Flow.cpp | 152 -- repos/AS/src/KillGate.cpp | 280 --- repos/AS/src/LaunchGate.cpp | 279 --- repos/AS/src/Merge2_5.cpp | 98 - repos/AS/src/Mixer8ch.cpp | 434 ---- repos/AS/src/MonoVUmeter.cpp | 96 - repos/AS/src/Multiple2_5.cpp | 134 -- repos/AS/src/Phaser.cpp | 238 -- repos/AS/src/QuadVCA.cpp | 176 -- repos/AS/src/Reverb.cpp | 176 -- repos/AS/src/SEQ16.cpp | 473 ---- repos/AS/src/SawOSC.cpp | 110 - repos/AS/src/SignalDelay.cpp | 248 --- repos/AS/src/SineOSC.cpp | 91 - repos/AS/src/Steps.cpp | 323 --- repos/AS/src/SuperDrive.cpp | 173 -- repos/AS/src/Tremolo.cpp | 228 -- repos/AS/src/TriLFO.cpp | 254 --- repos/AS/src/TriggersMKI.cpp | 196 -- repos/AS/src/TriggersMKII.cpp | 248 --- repos/AS/src/VCA.cpp | 101 - repos/AS/src/WaveShaper.cpp | 130 -- repos/AS/src/stereoVUmeter.cpp | 124 -- 97 files changed, 28559 deletions(-) delete mode 100644 repos/AS/.gitattributes delete mode 100644 repos/AS/AS.JPG delete mode 100644 repos/AS/LICENSE.txt delete mode 100644 repos/AS/Makefile delete mode 100644 repos/AS/README.md delete mode 100644 repos/AS/_config.yml delete mode 100644 repos/AS/freeverb/allpass.hpp delete mode 100644 repos/AS/freeverb/comb.hpp delete mode 100644 repos/AS/freeverb/denormals.h delete mode 100644 repos/AS/freeverb/readme.txt delete mode 100644 repos/AS/freeverb/revmodel.cpp delete mode 100644 repos/AS/freeverb/revmodel.hpp delete mode 100644 repos/AS/freeverb/tuning.h delete mode 100644 repos/AS/res/8chMixer.svg delete mode 100644 repos/AS/res/ADSR.svg delete mode 100644 repos/AS/res/BPMClock.svg delete mode 100644 repos/AS/res/BlankPanel4.svg delete mode 100644 repos/AS/res/BlankPanel6.svg delete mode 100644 repos/AS/res/BlankPanel8.svg delete mode 100644 repos/AS/res/DelayPlus.svg delete mode 100644 repos/AS/res/Flow.svg delete mode 100644 repos/AS/res/KillGate.svg delete mode 100644 repos/AS/res/LaunchGate.svg delete mode 100644 repos/AS/res/Merge2_5.svg delete mode 100644 repos/AS/res/Multiple2_5 copy.svg delete mode 100644 repos/AS/res/Multiple2_5.svg delete mode 100644 repos/AS/res/OFL.txt delete mode 100644 repos/AS/res/Phaser.svg delete mode 100644 repos/AS/res/QuadVCA.svg delete mode 100644 repos/AS/res/Reverb.svg delete mode 100644 repos/AS/res/SEQ16.svg delete mode 100644 repos/AS/res/SawOSC.svg delete mode 100644 repos/AS/res/Segment7Standard.ttf delete mode 100644 repos/AS/res/SignalDelay.svg delete mode 100644 repos/AS/res/SineOSC.svg delete mode 100644 repos/AS/res/Steps.svg delete mode 100644 repos/AS/res/SuperDrive.svg delete mode 100644 repos/AS/res/Tremolo.svg delete mode 100644 repos/AS/res/Triggers.svg delete mode 100644 repos/AS/res/TriggersMKI.svg delete mode 100644 repos/AS/res/TriggersMKII.svg delete mode 100644 repos/AS/res/VCA.svg delete mode 100644 repos/AS/res/WaveShaper.svg delete mode 100644 repos/AS/res/as-FaderPot.svg delete mode 100644 repos/AS/res/as-FxKnobBlack.svg delete mode 100644 repos/AS/res/as-FxKnobWhite.svg delete mode 100644 repos/AS/res/as-PJ301M.svg delete mode 100644 repos/AS/res/as-SlidePot.svg delete mode 100644 repos/AS/res/as-SlidePotHandle.svg delete mode 100644 repos/AS/res/as-hexscrew.svg delete mode 100644 repos/AS/res/as-knob.svg delete mode 100644 repos/AS/res/as-knobBlack.svg delete mode 100644 repos/AS/res/as-knobMG.svg delete mode 100644 repos/AS/res/as-knobMGbig.svg delete mode 100644 repos/AS/res/as_CKSSH_0.svg delete mode 100644 repos/AS/res/as_CKSSH_1.svg delete mode 100644 repos/AS/res/as_CKSSThree_0.svg delete mode 100644 repos/AS/res/as_CKSSThree_1.svg delete mode 100644 repos/AS/res/as_CKSSThree_2.svg delete mode 100644 repos/AS/res/as_CKSS_0.svg delete mode 100644 repos/AS/res/as_CKSS_1.svg delete mode 100644 repos/AS/res/as_LFO.svg delete mode 100644 repos/AS/res/as_bigLEDBezel.svg delete mode 100644 repos/AS/res/monoVUmeter.svg delete mode 100644 repos/AS/res/saxmono.ttf delete mode 100644 repos/AS/res/stereoVUmeter.svg delete mode 100644 repos/AS/src/ADSR.cpp delete mode 100644 repos/AS/src/AS.cpp delete mode 100644 repos/AS/src/AS.hpp delete mode 100644 repos/AS/src/BPMClock.cpp delete mode 100644 repos/AS/src/BlankPanel4.cpp delete mode 100644 repos/AS/src/BlankPanel6.cpp delete mode 100644 repos/AS/src/BlankPanel8.cpp delete mode 100644 repos/AS/src/DelayPlus.cpp delete mode 100644 repos/AS/src/Flow.cpp delete mode 100644 repos/AS/src/KillGate.cpp delete mode 100644 repos/AS/src/LaunchGate.cpp delete mode 100644 repos/AS/src/Merge2_5.cpp delete mode 100644 repos/AS/src/Mixer8ch.cpp delete mode 100644 repos/AS/src/MonoVUmeter.cpp delete mode 100644 repos/AS/src/Multiple2_5.cpp delete mode 100644 repos/AS/src/Phaser.cpp delete mode 100644 repos/AS/src/QuadVCA.cpp delete mode 100644 repos/AS/src/Reverb.cpp delete mode 100644 repos/AS/src/SEQ16.cpp delete mode 100644 repos/AS/src/SawOSC.cpp delete mode 100644 repos/AS/src/SignalDelay.cpp delete mode 100644 repos/AS/src/SineOSC.cpp delete mode 100644 repos/AS/src/Steps.cpp delete mode 100644 repos/AS/src/SuperDrive.cpp delete mode 100644 repos/AS/src/Tremolo.cpp delete mode 100644 repos/AS/src/TriLFO.cpp delete mode 100644 repos/AS/src/TriggersMKI.cpp delete mode 100644 repos/AS/src/TriggersMKII.cpp delete mode 100644 repos/AS/src/VCA.cpp delete mode 100644 repos/AS/src/WaveShaper.cpp delete mode 100644 repos/AS/src/stereoVUmeter.cpp diff --git a/repos/AS/.gitattributes b/repos/AS/.gitattributes deleted file mode 100644 index dfe07704..00000000 --- a/repos/AS/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto diff --git a/repos/AS/AS.JPG b/repos/AS/AS.JPG deleted file mode 100644 index 901b2080f2a580e673bf3b588dbb3d97d60495f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 362849 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

5YbINCUK?npSNE$65&O*%{ zY#^y0kR3<%d&TcQ^@B5tnTn*+w0XL;rm7m}6y5DjtF{kQZ2Yk7ndM$Uo?=GU(B3No z`ZiW9s`tBF^$Fi2G|Q>j{%YFTu;r~6R-|YUTMVrqO!0`X6SBjecAE4zrOME zjUqU&9N$J`DBS=ssR;6JW%%;&L)f21ZkLIt3OXTvR9LuPG^8V?p=qt%mV84+sp))t z6Aq#m%~&VwLcsN;{x$K}{>Q|hy!ETMkrH>fH=489*C~smrR;ZJYAp7Zo9EhG%^J^n zt!z(?_`F|ki{Ik*KxInveY(NQ-g@ILI{~HRhof2{vP7Jo^oa;QQr>v;2$&1sT0{nn zu(NGtfG)7l$7n#whr7ePbhL80;e^_5E(Z{Jx}RMWmzASzW|+)$BE&hU=6v0Y3z(E0 zKl5Om`?YG)T4@4=wC@>PT%M~vIrIB_SyAOJqc=1_eOmt#PtB`+yg>+hl3L~q z5$%+n4_CN;rTtZn6Tmop=;`%GL4sI4L*~ii)@7RL@$a8DUKRjybm7(_Lui@1k&Vvg zW%W)4A0WKSvWVVC3@YdiGzF=>>&K$P6|jFDOpSN%-7!&3b-L>tU$U#ttsc72{YljzM!T+!< z6V_Y+=RW68UU<6Y4}pcCcBoUJF~N$K0${k$PFVFz)`^RJOnj7{1WzK|C6kt zMG0PXOB+9b{Q*52=i1B-k`= zL~g)Ci=GspfwW{@P~6?7yK>5>CZMJBqsA<8b$2F0fMjLYEz=-}>Xfi0(|?=fID9q% z?alRO6vLb=^=w)VpjHYp02wKd%Z6UDmONedQ2~40fQWnM~PA2!9RLe8_39J_xKGx7D(1^+V_3 zB667L`fav7`b?MD6qT}dR+j5^bbaF)II#|nfUl<2lT@K+KK1Dm7@8h)NYKHFnH4e_ zG9Z}nNZH#I(_b;R)v6F#KYDtqw~*-J@w z{nS)I6I8*0bUI0u)>Sz&b(Ro3FkwygkmrkPAEOCP>icnEPbf7j%)#sQY^TXbBh5X= z*STZSH5}HgnZ{tQ$>1%sR*(}+h36AwgLwbPpx3V2a^@O4SvWn3iBbxx5fPNQC?fJ& zgIaDY2buu1ajrE*{HDw0j|UD?VAC}tzF;SqK3F-?Ar%*y)YH;jH6_77FiLP^Bvo^j ziw3Y#&NzA`dT`wGO;%acgVl6Ghn<`uVshX;`iDYUS!bDGSO`1J$ZL&+N)lKu59!kl zd-&KG4#IK!FZ&T7dxHu!m(1bHa;2*))eV_U=CawD0qg5y>!j#U=X(~mzS27G99u_q z)cQgH#y}~gt4MZ}%~0U@~OP@t_b*UA>SZG+NqrxONnM@5F?7g%79q10Gk_XHd*Mb&&i&<$=|Ya z5jg8l$O_@OIX-aIaH=cA`kAt&V?fIH38L}DDVcwiFe^5gv8o1#yfH4zE$s&6JP=0d zCmG>O?UHF#kuv^oqH}MnFxi)Ct#eA9er6;M!-?5`7$~bcMAutLP&(x@D^~Mvr9)Nm zSgMYa#lnbfCqv!;gGH1y&+;oxN=<#(?f3g?D@_Ciwe3r*VndV5Wl$3=&WX_T-x7?r z%sc38Xp|$uvHOxhKfEW)jQT+c{+nTbnio(dqgIi=iV-SoG12bH5gxP|(GDhO>|rBm(mWhHQ5OO*sO zqw7Hw1y>Nune5VSUX=Lmu)$O1$Cw|xuuR>9v*yuDNHMJx05uGz;)?|t!UX9cX}Kx# zS1hy6cH~=lSA`{FB-px(_3TinNckDdL{R16C=CM{n%e6kZqOGolQ_c4v5aPUW9Loy zYOUIz!+u1%o~*^jFY6hmQ-IT;v2Bc>XvTQ54ZTbU(e_~OkRMF?YzcV!FKPcEk<=RK zEir8}@P<9QQ#V5Wuv0Nwm5ojb_I4gy5DIGI0RpSv+<)r?CvDtBBH z0eH6Jxf&N&BEdd^^~~4Mnnz!zjp{b0whWSHUij^YfHp-pK3uZ-FIQb)9ka%sQh8{a}G!s(>aeNdyQ~d_M9|>JZd}pQr{d%U_2(e z-YBN=)0RE)YR#v|h;U^QYRCRmS0SS{nx5rF!qBvXayrcn!)`e?ixk)GWrc-dmbT++ z>^w(@aUM^L2-&@rc&vySQnL8O9$sdLm+^?7I~aU#`@!w;NXh+$#fQ#|RFZDIs6@O~ z#j`Mp4u)`1d79*5aW}Ok7E(ikW_|WnU-^u^>_QidUrR$*LeIQt(oH<<_rI-jiX0v6 z9WRFYfAs9WC3Z=TBr-(t119zNB&AmTkpdo+>k9z~8f#=$-=b*?oZ-Cq20B-hq21FB zBVD1)CA;Rgir;u$sb9%{ZUzqekuTN!xsBXL&=6KEttra>BroVEAB=IJ2Tz7C5>D5^ z52S<0q|5zda>9zs5kO|u4+>)6*xEjC=weU4r;JpdoZQ3E9ZXInlkZt&=}#8sk-x| zxv8GBo}=9LZ~8VM4eI^hDNT`>$*|_6)Jw`I5K}bb!<&y#9!^uhMzKSRNC{l$L;cwh zf}Z2#VsV=uMA_zi>fWH+GQ}vISOLZ-s=UsHc3;MB;t+N^2o8xKA#)WEuPjhC_pCqs_!Vx?gJ&PWePk$DksFD`95nY4a9 zS#cOGrsQ-gjHM1sfdomL%6>Ag7Z2=Jbw}ufx2em2{PPMSjpg0m#V$VjY7ehKlIguI z$=SZ^si{R$`V+yDhh>}8xItkTue-q+2uGPqT>Jd=3HzYS2OAd@uam1n* zR>ZHT$k1H%^rtgQZ=8#hj+q^nY?$SRa_Y6Ew2+S8+X&|S^&T&jBKQ{U85riWiLYoA zlDq01cyjy<6utTc?>i>bTL^Vs*m+Ad)4wq38&blBhjk3?sN&u95mDdBKLaNg{CSFg zmPL$=Wbghw`jm1RzvmY!nM?60WA##vVy|nFj@`h}`tu+Op`gT4-|=PME{P2g|MfP> zTF}Zmm@tXj8MWZU8}u3^%zkC$Yk5@<+XRu%ODN&0+!e1J%Thi85Tb>X!|ZK z5eL;yf^-MI?t&x{60&F+mb$*Wo>;J^f`}DFd{yPA%`o$iIMd~^cM0-bfomc;72Zh0 z7Z{Nz?Y*T%mrV;mrwpT)AaCY&pIH`Bl`zZ&f_2Ek#m@TYogOi ztGB9GmV9F_x9;*=`Z5T$KYT=sTWz>{nNCO|dIJyA8Z391gC7yA!eHP@lmA^!`EmPYIy}_K6wAh;ZJH30fs=A*tZl zdo=KmOjwA9vogMfz?}-*cci2pUdz5|V<&gR`hnhoOzGqarxqDc#SIt85SJ69dLLoL z^V?7--;&?xNi$h|jxR@urrmg!Nvst3%eC5&sintH7^}+g6eGMV(`T&fa97dZ`#+#kr{e;Wmr+@8TCd9rU4wgB@ z1WjZ<$oOw+*Zld#ddGfj&A+N*Gj4%&^ZjGqez9HQy!`~5kKk5?K@V|%+mO_Wn9G%x zk+(Sgey81~#0BTFNzr&Of3HJ#80YuY;O%vm9Xqu>_b;Y_hx^0Jcb<(Nzxq{TcjpFE zZ$!r^?@DJV?E(?ZiuvEdi1j`Iv)s{=zimo;R5n6u>$QCv@qy~$F&`D<+RcLRax1iP z=b<(FQ5avTlYMP@widf-tMNnAv~le+u;$~@M9#70SJs@uy{jZTRr?neZQHKuJjVD9-hjE=Lx9`)P~%6TB4VUqANeSCE)zUk8ILG6vV zX+p8uXl`^^{DmJCadnY&Wrhk=ICp$0s~7=~6mk)hG9ZQ-8xGO7ay%Nj0Ho%omcY_T zNY2z~d_daKvj3{`d3C@+#nz_t)TOGHh-)lpdv168bNcmy2{lH`QlTB;^S4HP_g+Vy zU%T8qpQL-+658npO&5O*2ShTY!T`v?>vZ=U2i@DhkNoxeW^irK-45IJ!v;h~!umXW zeW`PIt|`@zFZ!9G2O?H%y?GL+r?hIN{b8hU{Cl~ow9Ozr|70xf@SEwqPE-9K%9F4| z%Cs4sWwU0*$L7k7qi@Y8mlfLa%@<&7iChn@iook5szK%qBFEPCsm1V&d|?%_sMdiM zA38th9R(#X)C?5!Q0i%CG&XVnx!f+<4tZPcit*p~J^kn6~ZZ|bljlvRO^{X;wGe9${_Ex(CnYn*5c~=GGsI0E^gA20eeyxn%wPa0mI~L z>Zp4kS(e!}^3eSP%1tS2`Z$benTSA-kC=z`x%zwZv)&%+y^Zt4A3w6yuDiaZnNT7V z1~X$#{lsN_{%(uOuZF?Fl!i>a#E>KK!|Qf71$_c5NnESmC2BvN4?e1JNsg$}gE*ku3;Ylai1 zF%V)hHt~qs04@7k4>eO6?-&RcKV#HGi{&h_5e_{`wNqNUn=I2*w!m4RNaN9wp@BSb zj0U<0M^kawIZy-oUZ7h-u41kIEv6J)1>281VJAP?w2z%m@C#++Pbm!TZ`;R7P9qDI zdhmKIdJo!kwsOV-jgtHO+~ug;H+F0^-qIIvC?-0bzD9{j;del zKY942>4;&G)XlGn4DYR`34Xe+lnEQO7-K47_l(_qHT@4#?ymMiVwQ0c4wUP2sz#*m z$MdFGA+C}|FP&|ah*b~%)9VVN8#aZ3-<9tX$P}i1Y-mYb3q^5HP_xOPw8Am^>yv1( zK0PsBL$-p!7t$?A8c~SD5FrqY?zH*#fnhs>N@gJ&s1wce&N7X`R=Ej%-I+D~K3PNW zP`meQk)H>q(=muA-@WWcW{=F2mVX1H?=!9Z_@koyP&cL*ebbK06e7hKhKAh5w8+6S zaOKKa_qG_mp=E!lKS=Epq**5t~(C8T3 zaQ^Ktg}kVQ!LUPHQQ_PGUx$^MZfJr9dla0;BQCr}hq!;Q_?MN|+>9fGr;&ZBDhf>S z%7XmXrlRc+ngKy)SL;>Rax!0dB*E01Ov`hP;@|2XdsY4mmBzlrGB57SjWZ?mcVe^XRno*IWoy-5ea1NVKA584Q zkg0cN9;wsPtC-z{sb$4)9VL?`W!D@|u0ex1qS3Xynze*hA4Y)+vpJt}zi;TgzM?B> zoUM)&l50MM{9bfr5C?nhe&o6BoC~u z;yc_ErqXdGe@RLx)1z>&>xw;Q0lD@ov%CgFn*cTtB22nU+aaZ7=x;Ke1|ghm-9(BV zu5Qy3dgZbY17hrj#k`Y{n250E92T&8_ggo$vTx$k79~&+!v#|=B8#?$CvB#f$l|h` z8bR@~B9?}j`;YXO$qf*QMXRa+b5m`Y4fkwqGI!u~-xq8#k+c*GWF3d8<%Y=RqnB+B zoo|ZA=qn)eqw&+cFGYL9Ah#l%ZUm7g1hLo~_v~%BFf97m?hrCds*&V&pNL2_&7d=K zh{{TZ09wmxc*@HmCEU%gE~i09>1w;#(w#^mf))1$@0)j1SlgcGzOHT&ObqidNGXMV z)5zd#wHz`mCEAJ>PH4ex(?b}KeCKpb>1^8&LATqNBRkyap^bf0+P#Y`((MtKtXSyO z$0^9+o8k(dYAThAjrB&j<=9V#?-7@yRxn4sTHZeQ(=7Ipp%2r{Y}#{r9_knsNnx02fTzS&Y4> zDUa^y4MvjI*mxu`YvXcIr71}8>McSLBqm)zBL2RRs)p_a@e>E7xGTZTVh zznFD#sg2U@Cq8ztTsu5H6q-69ZDX`7WZBveTFdosU2N8pCS@BQ09>`zrcv}h#zNAi z6H(8x7%nSBq!^<8J~F)}tU6pz*kh1KPAYK zZva5O2HA1L5Ic7Cl=Y&q**EqDG&}Xqm+b4(U_;4kV|ld19?=LGH}>WE43xLwfh2jT zil_n+IZ4{Gh$Ejs0(9}>*?e{pKX@YA5sc4F7}M@mqM?0N=f?CsZ$^ua@8|OgDWa@^ z7iBoVF?rAJ;WKt{HO{EE$uiZ!gu_sd4$Tz?KJJ@kY5lkvC-!&qsbinE%ipKXNY7$W z32gh0n}deAwYLKAs1MYy!aqv|iH=(smYm{u8a>VWPa%vF^)=HI4b9bz{(>DW--7?hU(O~kZbK#CN#_b>OqpDNR0&MYFn`i^)~V6&r)W6fg8Vb z5rsk-GULO)$ZvT4t=j94-7Ht7w|Z@W;v3aC3P5%Jn6$CU(D#UjomYNr#BX5Es$KzD zfXSo+`eCDB$&)SrS=toOy+5l4ADP$f>@D*9E#Gfs5u~eu1Hq91rb|uCG8?fT1Tv5G z`AV!p#(`yIU|`osTKeNDZwZOR@<(gs$73`%la}guZEe=I{PmUP+x?gw%!cia!d7f; zuJHqRM1FgM4J!6i!+0G|yKBEW%^<;k2LO9G4g1JCi5|wR>L+p|GG*BZ-2AfL#eRZn zsU}20=c_t%8dve&&kF-SVrK)L5!pL}(!tlSvxC8ALPm)Uck_;Y0;n64C_kKuGw6BH znnfyxlVpm|X6clWLMv>S{+-TO(-3|!uBQ{EZ zL)X2@T>d>g-RVnSWNA=}s*M>%NU`p^?C7nu@5azN9YVh8;%d8#n@p{70`1mg?7N#JWJaqU_u(jK-bl^SUpfkMz&1Pq|2z$l5BpC_C*nR3}J$6!g<3#9p4*A-J;$XCW#^TKOE+Db)>#k?0js zK+oNL@)a|t19z$5rD^~&7c&?Q$_B*b1?6K?pQ#oiCZ+&RZ1zax>_B?Rc$SGtQCj06U3Y)%&UV1c5;qPPb1hxsW?Hw?i&9&JX+6g4-Tc^-6AX$ zw)eJ3Lvc)cnAQ{-s$8E0I=Y~>kSx)pG8d;N6+>}rFgN5~h|!{T$IO>><|re#2K6D@ zI{b?2K$KEh28(!s!XV zAsg%OL@|xHn)(faq?Hdj!C5L<>jbA$bM9i#%Tz!XnIY4rmD?U;?!*bDVtwN*N01h&>fWqGD<3TEj-hGs!h z-27czDr>wM(!_Yi(uJF-82-q)rmlFIOJ+bf-o}qQp4aEY!`SsdLa?+zRPdtfK|0Z4O2ed(~?WsM0pCyOiWRf(?Xy$I?jVeo(!KrmQRj!{dOG z+l+frx|3p-atc)Ug($v+;;SnN9ds$utu3=hjJQwUT{1q!^f(H?oaPmocqYWd*ZjhJ zjx||C=EHo1cjuQR?O}6|xURQ7-fr~A+bN$cuESFg&bzw0hxctoYSeK61+a7!F~GxG zXnU2E)5;27;NF13uC6#}tZ-UcOzd_8w`fr3m$RyqWUW4K2b_ECy$YZ=P6AYqxGoj259r9$4liZD?2t`H2*EpqStc+&-LhaAXG1@$)O~KNpWI ze`JkP8i2yT#$4i*zO$b;Y_O!3%pni-!p;jk?j8f}%|+*+6CKHN7QIZrn$(7%(z1 z7hz)n=GRgrxapDMY}@ zyQ?Gscv6p%D7;)>!ET@um!(Ha-&(o@QW1YYJ=2eNK&Z_}8$oEVEw!PkiW<7h6kIvq zpgsQu+@MRRbsLDZw*(#`O&JmngAKkN<1d{}P1&)>=d=0t2SNr<#7I&K4K@8k_W7gX z7%H?@nWX#h1`7Em21zNt^PGwCL$hk(vE19?j$9VbcA-@eZGGRjc(Jd&D6QvI3D|{| z9fz8=kPeyDd8RA^A?f6yWE^JozbamxFSK4Mml`&i$S`l*zJZ}ni&nN>&QB)CHT#iR zF=|E>Vj}8ng^>P|W~;fr?U#tPU~cMWZ@rh5VdVSx?w9bsRu+3i$$*}fqU0LwClqW| zTTM)es)xlakIYWae;P2fK(v;DS6SDUe-A-G)zq<(b|P=yj|!Kl2@<$QL>3cBNPMvh>S!HTTbv_X!7I%a>|%@r0#e93c-un=kgIlI;XL^BV6UsX3Y>9R zn$xb@3eot=VOs{RzHK(z(k5DXJ0$SK@37oCEVGh54K%I2D7MCl;Fgt2A^dYZGGPf> zOi8#GcknsN!_=0-8c{uNBS@O#cpsqZ5i7GQrD4AH62*5&rKuVzxOjbFW4-TvqnypK z<$td#1<VkVKrKVzL$2sE)E+9g|G!M} zvOBhTzm(Id>$1P`tgV)QZw7?5wQ=nG5Qs(L$Itm(m>RLRLTZQX%nAT7R%h@@rBFO} z`Y)S%_VAq1zH$3^qXWH3Kdn3|hqeTy7Ap>#wxlUMFe)ZO8c1C?^rPN~TgU4$*IT2R zzkWP;>i0KmG9_iE_OcX@@6Oj`<0v58^ujZ6YJJRXNeUa0Hh_+f!2ywwaI_)=)xysJ z;Cm?85g%At;Rm()K42Tj@(#p9QpE#V8~VnAg&XZkNVpx0B$y=RN?|XU?V`Z|D*xXx zLjf_YqKrnaytD6Gny_ZvGY;9q#pz(AclK9l0tXN*Pwq!KMeBFcX#8;59%+PU+sN${ zJ6SKunOR8ySjk!5G9k`(|6cFC6&+)+n=)xTTWqePB?~0#=@S+STz*{Rw);mD&fKw? zrjO5GsB8Gm$+g+om-v`0%l_R=gFbqL<5EQc8n$s!WhSvnZp+swAr}($S4j-7&v%Vb zaXtk3$v$mgDPxi-J%3H)$)AyA95k=5+D^$|Rn#36u6{$qt>6i+{RC1@E6&$q+5a_c zQ2b3VHh_R{xK#!g$YX_h@rF_gR{HkXJUYzEnCod^%k}MRoaTt6>oy>%B3sxOKPp?M z5c!TJ{V7oHSF&%~D>i_4)vY`PE9wqKwNG@E@rn9+s@R= zYyRc@+^_&?>9Y!$nuC|6DERjBMb(LwYW?t@?WH^~_cy}!n3+)f>yBD4 zbo$(+d2hX1=`R*Z0HyrYrd#01!>s>T;)A8HzD6vHozi*K6=>$aDOeja9UmwcA4RJj zsHR1Hyz$=T)hgwm5JJSRdTP$s+}Ryx*nQuAK}Es+xg%@giYCcx9dy0)uoZ|v4y>tK z&otMo)b!3{qsVyg_M@?e1PVuBxJ;%76SA@9^-ryKM)+|puiV6aukJaj6+v@o7!c-x zrG>RaYuaN1=ny-=hK==`d)4`T^}D<*fA^E=igt&!@}(!B`&EF4eD&h(>_|?FN+j31 zx3@u%o8@`ty_q|Oe<^)E=a=~~s_8t`(mAbGL!Gq;37?dX;|r@{W0Fn{yX!x9#!4IG zvWo4cEa>=4s!ht*%UbZ}>+-4S=Oa~6qKl&q#%isH9(^AAJ?ClfNeAh>5jXpqj|f&= z<}d!k!5c?hn{fgR)}d`~!RQ3@%PFc*p(1N~kb|;d{$bfG9hz84-DaKNtPhALV*ZBl zbDr**fBT1<>hZKT@+;Ahp=z4`xg`~=?={F90nJIty}zs2cFthLo_xOo2FO$u4p_CJ zU8kt$m)X65)_L{ahiwgg^fBcykC3(+$rtiT_KkTxKHXqkV-& zrC&(`%J95$a0{)W^)zrkx(Uj#Q(wO&|FIge&IqwD3h<&B%&v#6Wpy45@X>Bx_^|a2 zT>Q;URQY<)=u*UAYN(UNf;xWy8qWZ@)M(pq@|2hdwRg9$H3hv}Uo`Zb6(qDrBg= zoa$S?NQAK**eh|n@b(!IlDRTLpdLm{rW3jIiJwd5I{gdFUPF<#RB4#e>n;lUT@~8f zA|5gF+F29(s^VgxVQI`^g(!#WGyoRL;yfhmB|5x-*3Q~Trij%z6%F@3$XAfV?H2K{ z+S&U|>1q59;{~S!v6Jjhm+ltT1q>3EGnA<%JpQ|;@z4$vg65a4aDKB+-NK2K{jrro zZ1D|5x@5*LZ%swXQ*p3#J>KO`u))TFQFWwMi@D$*q*w)#%RI*KhKU;GZ))|R|LOr0 zek=QHt+gdO{U*iF)c;FE)7dJ&3Otrh!0KO_!si^7 zS;R#jlv@_fy+$8Fp&t%2>L{6@^6c)lMK0m!WlF@_-6Df`z_BC1!f_Jo+s{C8=L%8* z#Kj!)|Knng`s-HyLFZl=#r_r=7gsbc+i&>TL^GxKKk;J2T0LVo2xu2+nbmZR{-Cu(efBcw$H@ zoU?Rb$k+P}k?%p%tOsC%-@-)8r0|`&Xa&7;H8=p31vl74Z_NrF`QhNz2>V|7*slk!4+2e*M+IMpU$1s2A;q+>6l84kgJfm%fW0<}=!Etvs(J0$uB!7MbXwBVLk z69}RfkcTGJj7=T|UpQnyx#_4>QMtSy55NpkZ^<++z|KyjHHfwcz%q`5GzqH%3!V&& zt0zk#L-aKt4qC%${fBf}MExTwKwbY$D*nG=mA+{vv5I#YJYV!F35)SXN|JLm$t2=M z3~$f{#xA!eHyct^F8T%KhR;&Z!j~a)J>_E6f_agY9D*#?t46GcKtds=*&EgDV9CGN zM1H=be+grzh%J1fSjWEWp4m*l4)Fg}EW(vLlATH?+sfJ=?``hCU@c;ost=PP3bkT{$b}i+n>IB^9D+isg$ZUqZ*vUlDDS0@ ze!UiihU?xFAy;IGf;Hi&v;aHx21pW!;TB0~_KUG6L*`kJBI0>e%PS*0yh-Pa350G#?|L|C)9b%`q-JnS6gbB@+p}l$CU^Xly#2e?bveLxJ(N9S1vTSDn)8lfNblwT%n(&f15XV1gy3|Nk@Ys*d20+-9pmKrF& zTAZZSs;3&I&saPRQlx%cIGLtk#k#YdTdi(p;|f86!D<&7EegilJ|6++@0|2j+`z|* z1HoQ+B3i8i%OU!`01wd($s2XBo6n^TB zK1_nx`FMLdP7hFu_*s0^h`zDhFBVJligW@2(&hiWhhl%dui3E%4T(qO_-e#>3~cj8 zkb%?2Xq%8yONW>-@37Fo{D`jjyx=>BCaomsKS;cVO^9NT)Ni<5*wxV=aYygKU1|Aw zKmxWZBR~!CEe%_(xqOc&dYvarHswc+ML!O@PL zp~k}HO>yc+g{mSUZ7CZgbO>mEpF@=%j`ba>T+ntsE+&h7QU=QK)e>JZgEd=X($A>L z1Os9|GJ9d~_A47KkL1hrBn8C(Rex>1%;OxO>(labXm^!y6>o9JD_1=x?UJ2pkH97~ zB_X}naqf3MXaCEv>ozkJInc`S10r24m@=%dX`kfBfpv+!k{F%O`N~ev5Koh(vn8Lf zq}Wh4GnL6CiKQ+?LI$BU5U@MS^wG|{sthJAXF-P`RF;7anrsfeUpD&)#>Tcfgh3{S5dLpT!Mx!DgIRP|?!VQ1J zR^Wmo<85y)wMu;YY>nemN4~j5@dl$xY=+X}c?!Si6L>O-E85VzP|3o)Ae@$Tatj$7 z)On^;p{?=wQD|6z;V$QVLvVfv$C(8lT`eayP+xz(*zeSZJh3c1!|oQROmL_M=}Amm-KJQ zWS1QHRjXWv!R&!+v^{nCp4CPpE2dA9%UXPFD+P?BxCZHY4Q+n#+!o%NpB;wNTu~Hr zxTIHx3n~&}d!uc-)i?$Hj{K9eThn28WnqaCA^7?(2$#88Q`>zQ>sCRCpECNOZ-+9n z<>HFg+DUu;qfr(W!SL?cLPT6RgS_c5Dxj$xU`yMOTB_D2dL){$sXaQU7&3X+NFhp_ z8pPSUvqfuOY`$SPWV&Xv&BVAeQB*dT+|z_Bz@y2)TGyy2$VF z9Z!cv*vBjou-eQ0&XI2CBe+hI<;PA_D=%qxUqVc6&us;QH3S39OArPcgmiawW?D2G zV^jI@aA789$jE(S+b0J5dRVg(bp;YX>m7$ zte?}*seU-WsTM5XhJ2Fg;jZR(fMP22GAR(!>!fNvA?KUgMBc38GOU8#L z9S`FZ-2zkz%_>Y_nw#B04{kmAG*2vj`Q6Vg=@};+>DkFCb)A}Xm+zXkG?R*xipx;a zUO7wcNY#oJ{o+rfK~Y6MVr}1UN-$*QOfNClkcCe53s7N*uV&qGa{$@AG-r8pd?gYc z=X^xdjy8JAV5b52cFSzGCjAdF3)&jilWNX*+vaEQPvm{zWZWsR4XIN#xB`XQ)#tdT zg36~kxlwsBfhP+D5V(qaOB>Q6=$E%-0qLS!#-!Vh5{>sM{q??anBKwgc1*cjy2H=0 zwDI7VBGJgPn3=IK>i5_~D;y7y2gxB4Bx0qTpxTy}?m09c3S*&dr4VXqL3JlplCuDa zH_$04)*#hB$u#7tf>@J$-pE-(g2_hNP%~Vh*XUoy$o+`QVOo+B9t=W z03_v-K{OphJkC%MYQD^xDBzR`jGfbSs!%m)YHu{4RtWN}HT6DOP42p@6jSaR&35tL zbymuFjzyK1-8Pd@!<3&8(K^S%3$nj`ys1DO4{Cs^jZHN z__md1fuG8)K+AL0mdK&l+BYe#6E>HNK8YyXD0z0o6lJuXp5M;xr}aFU)Dxocd@?l8LRrA6 zFnhJ`K#N9-fcWa@Jb65+Z`C4d6<<>pEqAN-O|aem_81zK-X6C=xz-6*jK+Y5M`MGI zAt2&?tDpWVY>8#Z0g4ztdVRNR9x}a!Hq83cNj}A~F?(XP4EB&8nTku#x zSdE|1fNK>x+{(VL(6B(g4ED>V^^@gal>z`lCRTL-&hPoNEA6yWZ8P)im3Nf=(SBGt zA+yJB8?b>q1)aBle_UZxhG}<{{V}0ZG;e?#^3DDgSW#^#7awh5j_XN(SsMx$iGg+j zk(s6~t>FsY;!~#!xjEDrC1cOj)6X9tt9+k4e&2mP1TXvPy?<-mnvXB)0`+fS2W?P3sUit#GOQ1zcYe;T+T?&`Q;n{2lPUIya6!6Q-csQT z%J0Eg>BlOyj~YAHer_8aQoLJ*)U5lxaTTn}BkL1LNzlV1=e^XVu(WPtRegPr8*iG? z(#hvX)nb11P9&q>ulYQvE)Lg~S~By|+CgdHel_!?I`ngAQr^CD7b>iIuozyk3QY|u z(yli8N}tnu%CfTU!`|>r^UQjydR%Ga2k3#n#>L{aB1y8|U6a&|{MtgTkSHs#gXS?G zZ=X2UF>%M_7N`^0KShbNGyb>u_gbaj;MZ}8rCbi>P~$t9sG5)rG7sU&;=E6xs@~Mt zLB6V|_X*3@Z729<18kqt>u(3R>cI3Yy`PTE>rr!;^!@pXEXxE@3a!ZIdN%k-3l? z+VEaaM)xxS4#xTiiIOIP@o72%L}kqP@T=IDLwveo-mt+VkV^3`pK0x`d2G|hWZ^{U z=)*fpfY=jT9+KZySKL*cPNMB{cDEK21oOQn<_QQRvp}S@KFF>OM2609e3@FVnEX&B zu72g^8%^=fM?R(oqo8Qu3Ewi%?S{Hw8iCM5Be+=j2WhO^_EELq`sKdm^7J|JmRf3I zpXuNHH%0!+cQcpF@V1{o4@>&*$R@A=nj)(IS`38FB+-AnrCM0#*>Y6uBRJ17!T(~2P1I@YgpmiSfRs(omP+GaHDV8c6)N74m?ceC^lPMmD6`+ys+(&JX7_>jYhKz7S~E`z99t$MGP=xcXmjF=a+x!Xbma zi?aB?6ec(kI}p^$qE?UU6%(T1m(Pf85+sn#s-8B2Mnez0YLyXTVd}nBPHeR zF^f&gV^*%pg;gbB!`o$ma*4)i7h%zlBnn8CvX&NmSW<;l#Lk4(j>Eo7?appTf+~oP z97?Hy%&a#3%2Jk}WV1J%Rg3$h)hfRmKmW0z?(pcli44`B-jV*|@iGSohckA!`Uw>l zspgVO)Tl8%^xbbYCXl7y0F9;z+?Ya6R8-E>QOVrT|3UNz8z z%furXh9n8ZEf=64)oxIAfq>^*NJ=Tx4PpU``th@x%EJs-jN$Q?)@hS>Aoh=yS8t#8;9 zMWvV1ZumgWB`2j+B=Vguyp5kn1<7vHNTA%i*EO$mNQMUs<&{A{2#*3 zva8K*ZP!4d#VHgi?rtr`wKxeL+)HtH*WxZAxYHoP-K|huixzixE&l9uy=$%gj{Rki z!4Jr|?-?@ZHP7=n8bDH9y+WL+Lm}Vk6OwtbN?>T<$9UwDb2^lg-?Mn~U*$BYm=G?I zRZt)DL-Tid!@vPp7r;_&X$q=CpTEVg7vcTp?j zPZRgYqk!{_yLrRHc%<*BV*xQ*Hvw2Gbqp2)CNHJAF*6}7dAz%|3r*+Py@}wIQvng~ zf4zPZm3*k{aFi{3Z>R)N&Nee_bocdIbR03Uk%eo$r)XOT7D?pv^lZ`maRUhmcYl`& z{WwQ4cj6y}3IppX+*77E=YOem7w{!*`YBx0UtsE1P;YV-1gAKkvL{1wc>n7=63PTa0_F-kL;G2(x|7_VfGhRrNGq75Z{)8n{+>H4Y5 zUUKwubkGW!Wmz*_7)?yA(#X!GG1HJKy`rQwi-c+C)(;k8G(>A&9x3o|FoE3v($RSx z=ikL~H{cU!=Ud%?H|0S1!Z4NBkx6(=Imc|#L&*tXN1s5xNq57*ZDPAWOicI*Ui(Iz zVU5WqOl~xF80fzwxCG3(aHpydKfbp-sSnSRE!D?DEM0@xGNakkcZ8!Vz%J)SL9ZNI zA@x5^$pOY8PCyQU%xs{@i@1*AkRl zbw7ZzBODw<53U0NH=6u<-x|uiS9mag%oa0gQj24=&o@coH=guX^+b)hECZYIlN+-= zv}o-aDlmRV`oC%(YrJxz?TsnX7WSIQ4VTXGI>MdR4ZufGO7L7>zSXd^kI0xWd#@=I zV&Q#ZdUrP(Nv)W6Wek2}5MU zO_s3f3}wKxc!w#U^;dHGH%5Uu7v z%FG%Z25@vaho2 z0Lb0hlsaDxdQQGwPG~8`rJ;iDP)ajzIt*{$B7WAb(ca$rN)K1($m)%dmx)aZppVt| zmtR{HnvmOtB)2A0cYhlbM@Rm))9}`eU(Q5MGH``&qfhwp2Z5za{+lT9VirahtG3f| zfv))LTP}84C;NIa?RxgQvWU9C;Dw!Xu8sRhhFh!Wf#QSJ{G{5!OI3yw`Dr7J+1cmT zeeNY(ef3lZ2rfDM^^)#4L?FwXUtJ#%_VgBVtW^wZ6@#ewJ##S=M6NX0G@){uT)g`e zAH*iotRfO;FY$_chA5o#19CsY;oY(YR^ zricNw6i~#r5*co$#IOol8_au*-rf;nf#CXKnR$q&|5mTYDp8W;B90} zvpfhV-dDV^XM?fv-N&}(C7xmvWH)gd#MFM&%ev*l=sA|l8a7ZimcVO5S57!+P$Y!v zeJyOe;=<*mPGyz{XQVkbuOCWA#DwW#vv-FgWm~hz0cgWXoyrzQsM(SEW9B4zs2wkr zZlL+8Q1P74c<;SGS$q0dBLMMn3jtc#d}P+pY$VA7mu9lfq#`AmR}o1ICABKhl9xmR zo8xr+mAEf{E071?7r(F85@wb8EjMojkt`7~ur-k3TNwD?D;LTE`S8T3&&gP~+aJ_< z==g_&rkxf!5@nze;p7uO&+YfPTrRkYA?Y7?n(%Cxz&)6~r@*>K-mI(94oW6yiXZ8>+afDp4tp4)ho5Rg zb#d{=V8bTWKmIs@X495Is=qWU z>;5=sm+rx@VAjQP)>n*oDyZRr5^W8B5d97fEpqXge9Ey?OEyRO8-s_~t@a3Ap zxK04`wRC$W^W^Am!j+t3AuA%Djvh7!6K)?i6KGabWl-~5&H}uU_Z?jwQ^L5Et~f2F zaZe(apO4|aw%Kk-2phE}Hp?*ijoy}~^N?1Mt+KUVD;vFxR9e;G;dsKFrh?q1vqBq$ zFr}!FKa@Y{vx!PGW>(M!#(8BW19i9 zI8<8eH*So>BV1alQ6nWqsjux-j5d;M7;8ydGyK$0K3ZBG>{)C|AFv6l7+biHCP#q^N>P$f1`{n-)TS&WqNM|8r?=?4r z*~{0|d`wd+EPnV|$T+B|)mYGQv#(WG(6M(P0Pi|3rHKlgu9mK|&%f{cn&voQ*+90h zRtcj>L@|s4WjYH>m;JI=E&yVYdbqw{Q3(4~M*I<-D6y~k5Gw1;HJ36HOT+<%p@ZD$ zrItxo^ZBs=ziKAeY^XU&%lNYnxNeOqQH#Xh=8qD>@gnpbKsY%p{?GQx5ufHheN7IefOIT4@!k z9g(Nb3T!Dx#@kv0`AN1GPU5oFaxo;}kQW!$DqWmnR-rnx!NrnDCi9QP%lel!*#3mp z^z_nY1aC;Fak%`bf6Ps9!%%Eg8u(tqO5`$E*X&zg!8QTg_l?*{tT&pe?UBivVQ~!wT zl3k`h|5ynyYZ*$-W#CuX>L(={4rtc7cB7f=I8o=&U-i<7_+8P58;X{W!h$U!1YlwD ztA_#LNm5`~DBZpAtc^9a!qrjU1UDn$N_9FOf`2*nTjY&&)S%*B@rbsirGN2>UtR1{ zrVCMU7?`FzW*RGx6i1rsU2pqErG>Q6JKB%|V~R2>ik%n1*2y43ACbtV_vys#%kdcS z)I;UD-9W@#UPxdVsG%hJEdo#x2pY6USGlcWWDz~`FPstwFH|n)o62#cv8Vi zjyAI?B#uZ-geOERa)Dm?-*J}vl;-E-6P|UxH%Hq0r|aU3)C?RVkt*sbSEQk{`RVeT zwBi=3$X<9MsaP#wn|;UWoh|t?G5Q;hgFhl;<+n<#$41bso3WwD3yY^!ld;3CMD+pO z4;ME*(u?E|=*sSui!I$odD~_R1M+wjc+P3aG_J(!mRwY=fjbZ(o<`gJ-&H&^K(=}} z3oWx1y@m<>hW(o>162ZOfx6(guY<8%gn|6QQ7NRqspLwd9zj|7|Ts+X0zrM|mjgWT}UodoB+o&A= zrM2jLA&h_$SWOnHkAm3O)$y8vP;0?=2wQu+Pk6Msf1Y+~vc`X;P^NaYDCV|F z<7tudZI4nqrct^R(KEH7!dT)%W-*!OMfgLUPA>9ZEtSg!JlJ9w+hj3%duXMx&9x*K z8y62*o=PBpAJ+3V@A3khVaL!B_0_mdQ$tnjvF|{YdB8_wJ$lZ?e-I`mvnNomUydOqCbabaexB~LmE zAtibI2s3QZ3iN8x{W6VfQxP7$d>c>Oz7?yt+j8fpE#%7FQ*cgdGUT0WkPvInm=clY zv-0#~UuILq@lC8>$wR;+oX*2)NA|M5qIX374v`*rF*rigU`CR|O%EQtYV3$?@C}Z00Yq6*=hno3x+6oBho`+7s2s59IMBaeSxIQbZ1eq)Cfky>UKi?_A57(hpCHxRwQf zZcJ5CJ2$*xHNXI!rfBMYznHy~59N~5>arr9t*sijlV;qk5}n9@h<7jqXg^Z^j(=I+ z?5eto^>@1Ayytm=c=0}sJSw%shfX5y$sR?l<7~$F8i@d9@{`VV6P%6CsIwBoZgm9G zhM7D#X+(LX97PxbPCrfyYm@e>pbsucL#rBH8%k?!H#rU^EAtp}t&~)Ka`Fg^!+dW> z*^SC`8SI-0i8j69!kyrXu(fijbMxN!-sbCmoTpEB>e=zelv@8a?L>Q@2#~M_WN;0g?m6(2q{rq=* zJKyQQ{p}$3e{C``QrH@Bm|=96f$1;sP%xap!3dYP`E4*B{H>oz{~c4IBl?6eTQhGf z0vNborHMJqJq(MQp_<2wu>^v?Ha6E$#%wf(>R{#m0)0=dbbt+S&r->Z4 zG7M$KxC0`;QS`Y#HDP7iy2B&_wbC-*(WYdJA`@OD(6u+wY^8T8h5@cgi5L?ao|^Kg z1Pj76Yq~GrOiZljVWO)St%38uZ1$+_e*Om`tYl=y59d!a{FBCKv7qtp_+O>|m1|)- zO{t;#>O@D)%*eW7my#u@_x?bCQ}nl#szv*ig#-d%U8L9x&CU$==J?&aE+q|9s*AGP zT}pIov^{s5M?;z;r2WS8{^(tqne7Pg!Af-#E!!s|8{^xDG$$qIV@YN1CW+Ac^46n3 zs0(4~T;go49xH+K>>f@yuGSZw^))#zPXcjV?~_Vo0ofQ}Mq0tc^?s zSFbnehqfNn-!+YAmpS;u=Y6?N(VWkPCFNzXs*3O0JBQ9CuD(Uu%Hs6;gtmm211HDo zXax0R$$#Mq7X zEooMJ>VrVJsWrgdagtBwY85zXwt!{OnH;C{=)exMa295q@&hZ6DXEYO>>B-BJ%vi{ z9|STVaZ8^RoeEqTDHzMAen+P+R(qpmUAv1}TOj#=F#Qrg1oC2H8Yp#?s+Nghuh|6O z`!z+&dGh8JjO4)@ey;%osSt#X8#DI7NgE)rTQu1!eT3c9YJX-IkE!oaUG0!CS270g6#Dg?nRA^PId@J40? z%8!6(JY0%-l~wZ(f`)RxH9%r6^N?j3%wKZPgw}F=ZT0BqnbsVE<~>IL$)x%mT$%BW zu|%JVZfWY;npKNSqmIpeGnUByW26rb3fJ3tfLcm#kBX|QU~A|YNgHQTT%|ccA%ed0 zDYUIb0b?Pp*}jGutNt)Z|C;i%TNj`&j#(H>O_U%bi`4C^Ec{RAZT85?WqDLXodKtz z#$$S`z1@AyEV+|$eezr2@3^omLcaC<{+18kZjLJkM)d6!?(@rVT|>F)sZ+cAKosnz zNN{e^t3aPZ`I+&aTPxqBPx5`b)Yoja;b0;vO>p4oHhX^`9C;%#>2Nwr0v?p;*MT|^ z)mjiBD#BPOEtrcjxmT()L);|VJG%tyeQN037`M&8Q_~Ge@lWD`-fe79E7o$~1~!y0 z-(Hl!hhrwK|9ZQ=ym_@F-T!^Nww72vT^y@`WBG`_AA!W6%4LQuJ8W;u_39=fe}fcQ zL0loR*|6E-5H+d;!7DPAf`Vpt{>5Y`8>WhR4ir_UL%G`W*Tnzrs>jJ^q(YsQ2PFD) zz79kP_aSCtQHvHxi0|Sd+?AHsN|q$LGHiQWtP>=e!|=SV_@=~Z(_Y_}fS2V?X=YtV zGpGqOC5FKvp}GACug>PeWa|+>BL|`hhYKQ+`TE9yR~0N@s0Pdy?4w`hhrO%l%e=Veph$MLhb9e&jC#2P5Sva`eQ(hzl~}^u(F~wwLv1XjyWf>kQmc`K;{Lyy<7i{Z zre-A%!*2fT9dg_=NSMc(yap?f-x808fP=CXkI9%}cJ+x_!NRyX9M+e7pxgyJ1THV(yc$Uk$?N06nC3K)`qfco{h}UeC zEOmtvo0RQ|*GUpZgLj5HBH*tfZa{CZeM^dvOVwp3yxh? z9&90J2EH@yMi2b(h{LNMf@xb}&%cCKoVPP`G={QumO$mQDWD!~ zf+@y)ThMQ(4DhnDOVLA-*PXM4K(XnP230Vf^-P?Nv)Ik5uc%t_7KiBuoC@$RN9>YH zu+defa;`KqmCdP$8u@4)wUS(Lc=&g7)V0jgPG2WH5KXIDYi6RLJRno{Z;WT9Oi}41 zeG`1Al}@m~Rle=hx|kq%aZK(o^=e8cA12&)H=Cr8Xdw5#*kNy;gly((5etQQ_fIq$ zp$=wj@MlT+X|s|9TRiLb)JVEzis|M1%ChDxwu73 z+6;dDDeKCJ&tR3V(PU)?c6`CfGK2;%B8`OBgiH!Iu)rDd>SlBOKJ$Od17?2xd$!|@ z{Yw|OrND-l;}d-&;AK`0*%wX2AQ=W)b~0xroCM#5{q+~F79SB1NDpG|}cd}#&x*JbP` zDb+{}W;UB4!2we95(<0uB*Ok{{~$P(J$tR)6MS@dCt!%&{@MgFc11g;y&a%Q@^0VV z6mKt@13Bpc;T)*0_Cp-~TEm9ob-}ECg%Y$ViM@tz{5AK%nFU=}YqnVt=2b#Ncs3$YnkQSny4cd^Pz>yyaen$;KwGxk-Fnza1a|ePu|sa z^Xx2mUjxQy=NDhsD1^<|_z|}z$|ok>QmMtEtU+1M5jKx@raLBCSHn!_Z}#{lo`kc( zVEd<#r|C{1KJssqP}z;>qWlS@40gIXX=s$;Pux0 z$FNWjE4ovp^*!d096;xiUL5(JMM$r7l~VP$sYYAbp^Ash^7+8=a&RXu?y}pcp|qu5 zqJBKJpTu-%JxmUy4gl6C*gGs32CMjyI9tMx{y*Jnn&;bn(;tY_KSKD^YBmdhHdhmF zs%SPq=o}RT<ZkWBr)=I;@t??D9ppUecPfTb!2?^_}>2ZsZNX? zOT^&zy+CK*Y`Z;mYL~Z_ zMz+L`#`z)Vdm_CoUB30_&Cjg~^;erd(uQyVduON^T6io5-Dp4kcXl{yhw4Yj(l%^6 zGq1In)Rvl=7u1q8GNR65u+7!ZA%xqMa3S!1L{pY(%eqD~jvgS_ysfUOoThP75EQM& zpkP+3nrjWDA7nMQa-%Knq(?_5?*xwHy4-}@m~YxEHbqW|YdbT@&~oX5Jfryo%Y3rR za+Xp^XT>+1*dL^gDfAW-P)|*1=`LJ!+fx}bsCs>&66*o;Z%rEv#d={Z@en-4^Fzl0M^Rlss@R{(qD$8DZky%3n<*Pn1 zjtNZ@Rz58~yikqZ(+Pee3IcP#_yDKZ5sXYcpoqT^^F6o=9M@%yC|oWJ7(jMquezQO_7`SCuiA}8?s=8ozl?Sg$1SF zm!Q~)orC^p?;npn8m_L4TW?mvTd!k&c^9dRq;-2Q4ucNC(RtAx><(~H`lg#JNb zZ+3QW46k)hA2O#YuSs9Q6E}SKwyPfilDhzfo4Ut-doD;CZk;vJ^gZ&!ouuZW;eJ1= z05J!eL20CBso9CLBtEN!qF$?&Jm{)*Ynlz7jjKhmOK*A+iJ@rD$uDB_JnwMX8vCVp zq3y(zruj7==Uu3x3C{U-vnGA=)wAf@=l8epQbr$n7M# zb*wuf)AuamzG1dpx>KqjDDDiJkANJ4zig!tS4TfbfJ<*`)?dI%y%#SYaAnpA8nGh8{1$2cS-0UcPCicY+M7T_t4mjL{L$*=z)EX=Fd zZEav~^aRJnM0oCx_J*xIIBoHU=_-A9DMUr2*a|ebz09Vmp zFJ~7L&)Hw0oKdRfR9Thc{{m8Y_~M~HrT1= z97H~3wo~@~H7R3UQ?@YYrAj8uAgD`QRKYHH#LiQ@?z8CqJ06bvp^xcs* zZ>{$O4wVSc%g5t97FT3}lMcEjY$gtXYhlWgGM>JZCQudvW??r|Us}L}?8mn_YM<4d zr;RF}ev$h6kv64B4~WyldjHrma^<}G55k!F%dOw4;6-Uw5PbfU_eh3E!wcfiO!hi6 zP}e1}Ab&YuYu*%1gbNTOudDu2|8j2(4t)nY0 zzHpP0lUiPSOp-F8#xvl$pJwuV!N+@8C9l)kFmr?%QzOjhPG?w%nGQdS`NUtB-1n5| z+kqc@w5C|MO5pv#f5n6Tpn_)91~b44mj4L|z4nq_Ar^4gx|{WNeO&~#7StNOzgUa19JRBO|W?@Wcd8i(F?xxvM^KKMFH;4H4yi0QmLpCM9UsUatA!)7~F1gsX znurMRB3Qzjbd5i{S(6;sH)|Q+b;e4Y%lY6r4ld=6sHz*n0di6=RnUI{-trSmx<>dPG@vr{bW)`IBW=+pj0NSn8ND%xQeP1=jMY77I3)dmK( zn#M!idtVb|e|ugy*@Uz?!FkB61BRIa&%RxL0r$$^{To87EBjBCW?n;=iimZ;Z3O7fa_8iy2nV-W0qpo?oiTh%ZhU>5mSi#=r++z_|2ZpV zK9r}LjX+1@P8I8m7c2qNZK^dv3?97}P98dN>XwX0u4b#s>-B2qN?axrWmc7z1xE9R z+C<);Yi$q^G!ouFTVR(sS;<{{9Wch~PLmMmfp<~As(q&@)_9|JNI*x;iT|Q44idj2 z3DJfu%!K4zNE98fQPy?uZTvm^sUiUdRVZK0G4YA|<4b)M&XtkOb40X8z+ShJ_(o>! z#jJ&&8HD2&i^wZL9~QX@!~^_6F}IX)N%F-3`NbnW4I&<)1{14 z=^b68S*-OW7rRI{3YmFNw^WK@CQ?phos%j03I>vuI%sP7MA!8w|62F2WR6K)0sV~V z$A5_Ds_-m$d#w>*ga_9t)t*Lk4T_8~J;JO~_eGWX>XkwM)9-WdmW=B|mcnwPqv_T< zONvVfX20=qbY@wyoSY9eW_k{{~%ZjoTPtxgDr~6)gDC{O!i@3p?Z)a zL;qU3lHW?C-G_BsgtFo6<6hkmONZI%Q7E#`xI0uB6{hOZ|^XpJhYv&5QnT#8FYu!RGy58xu z1Cr>Kc~X+Ia-2Wmg^23JQj7&b_QT1W2YKl(nC` ziT>?Kv}yb19SD-3wiXWd)*IXPjsW+}OpgjDQ`OgJ;^UL*e7@BTRd~%Fh*Rb=@~r_e zOGf}xuz_BBuzjXy><4+PGAX=a%AROi$0bNt?Z&;{eD4clPdVYsEmt z6E~&>stg+7p>w(gA~U;QTXFA(hJ1)r-8;xoUdT$G4}wkCXlXWb9ryUC5%86V$hS(q zE9+9BS!M@Gea~9c)V6@Klaq2KP~W-SatH%w`~I6^L27N>4v2? zkQ|S5ab-B2UZ3!FLJl)dYZD$$y3EWgHqNu+D}sxtFdd?H0XP!5*6LK!VogIOMMedM z1^M?|duzn$n$A`D{y6{kyj%>;p(l}sbetKWGhmV#I1H}flZ;do-!6CF3_=G~dVJ&Q zI-uX)j_o`|00;&mI9+N1wCVGWe;ObMuL=aKh)+(RXwl3me}u#%=5!jgOG@J*(dXB1 zOig)G-_C*c4_0qmIeTjEfq1tsbVH1^C;qmhhLR*76{?p9EQT(qJ^UKRhZz}gXC~1s znW-@xz;~?Q2r%#ka;KcQ}`kSJ3tT{ex(MB#{wnIwAA%)|^um)ie5Vx>qngsXf zRcovvWRsNHR9~;Nf$HGGueu8*!lAd9&U{gcJiV42a+Hv5;?NvAfY~?oiq%Mwy06gU zqW)XSyilKrZvfsDXYvVdgFL%&4RBynhENlU+ro@PvP5bD1H4t{N?l!u(wqm`r-*H{ z9-)jrqT{9R_1hzbLlb#w#Ca8;*@x_euUlMBNoar{c69OCyv9oB*7~;06i50sZRiO( zq~G%{`F1Wd530p97e~F~V?tB?Y|yQ8(u`kGc&vb0@Namce$b0o#$b!$M1phN(so`z z(BA=#@=~Tw`!;5g33W<*$d8Rt&7BFz(%DO=_gomMywhYuwgFE`>71Oh-?xeiET$AZ z)?oyuK#4#)6pY{B7CBA&E5%Lz2calfGV)zy*9|a0ai^FYGOxrQr=OX;tLG#yU%_8w zU?$#gs9YY7XAkDoZD4SD6@K}?J$fh`qEIes$2{4d^GVfi=3c^H`UM!?rQMpT*^fG8 z{Ba8TuE^Yn8*&iON(;km@c&hU;RR+YB@YEAGS3?%QBNJiFgQ9l2xsb+g%A)Bgix#@ z@0%Fra%Wtt(zmVU_$CAMxCdQ;uGkj286n?`0z5?iL7-fiXz-OWqFT4X64Lxcx4{b} zN&b>bur1L8xHPOA(t#C{eY(L#myZNaN+jf=tMdopSXOZ#^0d*11z6SufcZ0!X!hDS zrpeoIAeH_%sw?c@^j9CFC`K0-L}s%Cq_iDfu!vadbrS&p}B) z-+C>3XwmRnhblHChQx*O>Pm6;g|c_O9TtwD3#IeokacsPZmCtd5wZ0<0Y@`)O@mY7 zaT3x}*2{tuzcg(m)GQb3mk!ipfSzYFrX`#`=4@6}xb0A_>g%T@NIs)U;ISnnb|auT zQ3%azn%asZ>r)_;1cF@N(@D9>108V9_l@8^CyfB{DrG_qGaQ$LHl+hIl^4!AdczOU zLn|qY>r5^2RZBhR%$q4P3RRP{D8$BhcrD`$l4G#uAwIz_(!q>g4h;(E`^3sxPU%F=#j5W3R z2AMaPMi%`Hh)=+9LfN5pW6^16mV3EYef`Y&1RshD5?omvZ==+ToX^Vkz}J=CCnVS2X4+@wNbiB8Qb z;M3iF#i#P;;vKC4TlXz9ELX;gfjw5BxTF|k*M#=sGp>ZFgFw@*J^ON_zllnIEx3@q z51~-6hBlocUz5i??P7^O*}AZ91IN~XmflBsdDF&9?frW`8)9Pp>vw&9IFQoKF@OKw z>v*|ivHJ3*t;T;4nhX9@>>e@rb-e(;P#buNv&wlqqrC}-lR`(H6fS%M;K&rvWecKX zwFDRn#!tqkf^VIK4zD3Q@Be5N0R?q{Chkpf>vr|^ms?|~>!Bm2>_48rNIxH*8B8C> zgNOEca-GlH2b1b_gohKdvf{ogW-H3rQ8(hr(n4KmN3_i+Y?$`FJ97{C9hZ{+R7|-) z#uEJWWBOx$y4*Oh-2D72#HCn_VqI5yP(DJKaIxa96hH;{Bn*u$uUGoor!3?az6?FX z;7iy>Tc+5Ufx5gFFEQb#V0AjCfIY3^UC~oSC1hzKH{*{%;iJz**V?A5S`6()?DJw% z$F5TbwBMQ*Bbh@&J7$u_X^$u$?NuaQ5}+$hlDK zNX;6VYvJUx3W{t~svo>G%Q)k0@#XNvY`(^SdZ#`UN=fhBG0{*4iEj>QyMUj$jH9kv zu3~*TXDD;J3Mqvg#=7eFFL#Pqy(`?xg5K>^r8U4`0weW@GA;FZDx}$o@t;2qYZKNa zY8L#X6L+ZAeFN&WQo0SY_Y&S$5_+J=VOS~yjI@3 zwe5{D=OyRKI*Znom(>4~cw9C9l7F+fTGiBjuiR($55k6_Xn@n%EqRjiu8}gzqtZpx zNcWiZyN{>g#B*Dw`qt=XecWY%ir+w3Z385CWX~PvOR+N|VgzFKf2_P$fDEfGV{f#J zd1RPQB;wmW=QSDgHQ~8Rk_JY~aAsZ+jVFx<&Z(}ynAU(r<)wFU^o<11038$L&J_YkB* zBq<5|{Dq#pPt5#xYW%~-*sL{D-iCKIFmS=1<6TM$5-nYc6TLLB3H);kAh!&69ihpg z$!#N4Cmh&uKO_Z$}n(^9Q-&Y3!GeV5=R_RC$;0_g`W-(gcQY* zI*!6!h*=32cYi>PK!NJaibFs)D9#+dcl)EY<#yP|;SKUWYHR^9%1SWI+|2#**}CR9jfS@-|xN6n`&qMMB=PHm)~70LM8o7y`ZXRgLwS0_sfcq zIfwGV*0rmA4*sY^-*2X9S3f&LV7T3vkb0WVJw-ARlWz53dokowC04L%!hkd?3&7g8 z|GS_qr)$2i+*bFDkhrnTSdUPOx$aVSeE5_T8jWw`CbJgu3blVVIaH%^y+U!EwrF#S zo`p$O2}%y&w*HN7ij27)usS!VJ8HJj}Ai{H%>7XM9&DFxdOzfHfK@p^;rPm;i7RtN+y ziO4Leji4S1S1$orcw1*Y>1pdTg5=uj(04hM1RBP_u?@nXD6!p;1RFH|f1arIc9_u6 zmzAHc`ub0<;|13tTf2PhfF{xs+Jwtl4QNdz6c!zgl~>kO?PZCw4F(8L2!ds_vp%Ie zpDDSb`myspN~k&USa-py<{Fxpk~Ny?RGX?RmB-Dfi(F9;W3)VWM{bvM2nK49mL&NESLFK>-jqbXhSBhW(I8@q$*|aw=-wHuw5#c zE={vEsQj=d=VxCeX`ds`VC;uhB}1c};CxqSaSA4Tp!DQ(6=G4vF| z8A;|zQdW=m`M0N*bIl%m%Ov%6mV{g`dvmGAl;RZ85%!g4M_vK%n3iInEIKd>Ujh;g zW9VN--4$*?iK+4I+c8pi-;s&{fjgo1s8PRakbc;#YYZeyI?A<*V(ob({SFxqB$H78 z{t>kFHZ~J|9nO*TX@6pwJ{>ZIKBb6w4#}`=%RurHD(e}O=yT<(*~vJBq$QlSe~~9q z-+m8m{N)D!dZmzB3C317P@ui4&p;AA>S>8ijkR;hljkfCEa6&$Ky(0<3;4?Ho}031f^&0Btk3uNGg|C}lMj zqM@q*S)`E4*pMFsem1w2PATNZ>efaGN?J@t!cSV!Z-jm-Z3N>#MZ}U1pLa^_ev;`wh^^tLn}kv5s6yAGyZ)d=kMz`24wM&!2Iv0y9=w#%czio*Mc7*!O84 zE6r+rYxPm!hJb6Qm*`14ZsKEUJ&+6!KzAj4Som`xWy#<4HKkG`emaJlX*RtakWG$! zp2s@5x=(b1k(nCMn-|1^qtPh~$B`R;x)~n|xDmUvgQLm(SRRaK7L%jlZlT<#o@G6( zpTom3J%Wm!?kPo6O4)w0c#4t2w(N$z&d~d2tNIb{e=T|qNhZ={B$=&@@F+-FLbshD z1W6*Zr5f3Vr{H%P;T_W&-Ae|1U=BdpGlv1Yx$p}ru-ikD@e1%#QIYmqOGao0-hZP9 zd%eNE3KeGN&u-2sL)1GT@bixWYcGjGcLYU z+~V_vm^ArVVQ%r6w39&I{lL9+f5r#wicxIE0#NukBZj^>J3HQc?s5QW>P34ZG$Ii{ zhtk364R4_(j#R6GL5)*~7}ndK!ONDIjmL@PaFm*>4kvHU4h6EWh904e*QNrJGS`vT z^G6kUFa9&Y4AFX$qX4VQ+l|Tldy%A6bjbdn&wQl~+&2A6aceXKDXF!|dKz6dgF98| zyMX&qxx+ziuL-QYqIvNysHZp2`p$hBij!`Z&1oelS7Ung*`wAk%t(D`?e=+KY{V>+ zruXthE<;y~@AMINXG4P9IIybZr~h<4|4aMHx{ZizgPwomH%;*tkEE0;oZ8*hva8&u zB~3i}9QVjJ;G^)UZ^{S=`yv(_H4!QcIvirZwoy4~`9V(Iy$|RjD9$!XrG?@_vijym zl$wV-%;%sK`crbpbnYH=JM!+Y!kDYZjmCLoTTCUEvE69aE+nSjv|C2{ymfD+?&xj( z;Nv&1-m7C9BJ2~Nhr(Px;)j_`M}Z7wStrTlS4@_M(+=wH{3l%A?|-1{V&Ih^*$HMA z)C_H6-XE50vn`3AMbWR%aVH6fT17o2Sfi&9{h7Xxy6dwXlHS4&7`-%kv4ay->7!P? z!gZ6mT$3fcf2i6^j%9Onp6@PMT!3z%n*!Nhu$LuSu1)s7mzX*>U}=Tqv>LG>(*BP{+@fZ8tu)mjONC*t>mskEB3_)omyYwjK^Y3~<`uH}&-@+Lju#X%>7rHRCSc_+Qd6OrB%; z{g4YmoSzD1SjRwyo#0Nv1GVg%>QE-$#2tf)l!lNPv%0}4$7wnq%x=TQVKEn!TL@X$ zWzxd_ze&SNG1k$qSN&$U6Gl^d)xNeCLF=)m2yq=jKA=1auumCbeg-2G-~)IW?3J*0 zJwwQXisAH=YYPA9)X^?wN^>(lkr_E-aAJLzs95FXVT9S+Po zgxDg10K#v|bZN@%8qCkyxv~fC7>!~jjKtC_Y!kb4HyD`VK=XkuEh=3oaPyG@p4fk-8nSKm1R^o7(!+jJ+*fAlk+pab z4spH) ztPcB6_5WOWd=e3Qh5tI=EWLH-!{mC(3fWvpym~xvnSY)`U-8IbtSss0Lz{z-;Vqz< zmcbNj2@ce6k({6}mffRwr)mEabp@-njBX8R7pr;BCGYEKrroB`!;8?~+B8%p&x!5+ zV*^}w$j2U{eD`Q~dzE|JC4xJQ&1e17u*9>zbjSMGX_KG816!g4(=*wxnCEP8+pQ+u z$KkYGYgTrgXY)@$n&--&{*DmFWSB*>Bf)T-ZUrWbJPP8+HVDJ>tQt|v0To7$I#tAG zYsgxZG6uzAO|8mjmv<<=CA@l!xr)-Xt2=sZa|TMof4ppFF4`54-xe%5#u-Sci=3)^ zl|Mv#c-hTlz~@|SZ>U(`C9IJ>NO{a~rFYsw!m86)GvgI&Ad{odD*OCp@i$-iIKQ$xs&<>YZdYq~A6-BPdDhB|(neF&k z%D7r4j_jUX_%oNi;~_!MJ$|+9p>B=0X5!xAx3^*Hi>BBiX>$eBWe&krgKlp1PCc#k zk;w$cBq@n#Zi{+j|D7nUpQ(Gsia}W7=1*Sgl$I3SsFmctU6p*(@zZxhM{854 zR^aDa(zEQR<<|@4ks{!~c?kB4PyO9n1V#x7nP6o*n>U}Fx0%Ebm7&5nSnsq-={4U# zzcyGYJ|9A$g(rQ098OM1kD>#8c*Zqmu*}I&%w~pTfDRqWn#t%8a77xD?Lzc?VSVpRt1qnrw zqP;cYp^JdWlMkWj5n zg1#|t4TRb$EHG>7Ez+Z({Dl_;=JwM?C!^KP*9l*%r z`&+G4H|IUOv{+&LV)E#jNdHSo772g!+Zyi)uSki(tqG$!r=_}H3yzY|@Y{fz#_c3l z#K35*^8hU>X#1tCr_)r!t6iQw4@20B2Md>}ou_T*woQCvU%c+D+>0dcPHpoQvAu$Y zbhg>{8&d6#WB9&7Hm7}2cg96?+CVd05>WDW`StQoyXMm9sF-PL8z=kLuqC^`8#28- zrhMjRnOcZZ!iIs!yhmzt6Kmt`;g)IZU4N&!XN?v~RDQ!z9G1-cRJOwER%$a*1cfaATB8!)5t!4HJ+^kd6R1y_QUk(mM z{rpUhDg*k zAKCoM3Y5?J*#QAqE%+~B^}l6`*BP(qN6ZUl5Wp{4Pzt>?w{iTOuK&MKCMf@}M{nqR zY2Q3##7SL+%RxVU#Pf0{!w!zFEaR3cjx2yK0I*EyFngFqbVf+E2sQzP!)aO=lUj1( zisyrYtZ|fnVK^lS;uXFR(ntnj#E4 zMowz-Hz5qTwD%RHgw7)|Ok7mS$ctHkPS%(#-LNHl2k);DBruky(I`iy_pLWsY#~4B ztSq-nd#PX@tn~{Fl zp`%mvtR`Iv_laKBh!rOO=Rss}SuZu4kcvO74fBK|tXE$(k4;(N58ad^aG6UX_-!u= zjgG3SHSmAHq#;yxc@UcKR1%`)m=p$4f&J0fqz|h5`<>f$3+>&C*Yt1K-8!1;rsO7N zhn!^!nP8$6?5Ay9SS$7}0DMt`R0a7mg+K??W%pfC68>3&m6=R06O$|eO@K_R@dQj| zfCz#(cHqQHyk=~eBNgJMQOhLR=G#6&_J~fcAi@ZSV7AJK2a$Q=?we|pZ?iHXkfmQL zuaLJA%(Ef2VnhdqMHY95`y=*FosNIK*<@=1ol0yF%@sB*QmvLDu6q#k9gN=? zO$)hnFBfQsN|Z$B+B3OuItXEcz?gs{Xz2~ZczaI zur09OK(d}-Qy{U`Xnx?k7#$5;UVituGtpL-=Y=Tr}>WHeEqKPakungv{ zSVF_K&R1QCLkZc|nP|_F-)1A^LW)+?Fg>-thENh*3LYZz=jwoO(GWG%VK894@5sJ4LnjC zUQ4-a6=dS z*sy_^l*~JL=n&B7t;jgH2&s>O2{dzzt4v)JSGzxP%)%_s2`l8C;9T!W*r(eNPDna< z3o8l+rCHTc)=`@6X#Yo##*d;ggK8tNZ2asuB2y!nV2BfuF{nl}t2U6Sn>Fn)&K;K% z7g{=32^(O=FDY@7!HA`sBLQqTA__WVNpYW8=$U{Az?{TR`mbTqY(Qr=I@8N?dlwaS zTx^lvzbDipo$=#{+h;iTBv%Ewq1>nCkP7GC1HRKSssTO9;-`HtF@cank@c_IWa%gDij8rNW5}`A$t&* zf?TAJi1n;*KA405@A}V?9fsR>tH~#i1cR3)p~82+GZ%7h`9~Wkh1nr5V=060g+Hr_ z5)LO0h+0RzI2wbvH>!PR-rij7JZERAPe(d)h|+fQKm1iS7SGV0L-1@u4qjF7P#g1O zW8Bn9$67zL>a_KBswG$?#WqjXh7gxHL0Vb=LDI$hZZuC}JRCPi>CBR&IXwK}C=0P( zAvuh-Z-fsMWe63a92hlF1&)@YK5bwKxBV&b38i@va@}fWLZcWCAU>$^*HSKFzbArW z%Y9uQ$f)r@eHJR==()RHur1@bf({fWdfT&uA~TGbhvT&ZgXSGF8cC1sel6Ai()?XL zsw|(#(V{x8YK*V-mONuwo*-Bl?_&|%@|xp^o=wJWN_?eJrfHD`XnJRZ>+0*--?l>Y zEtym5>oV3!M%;v#^B0VNkmmIxni9}|I+n)#{bit`mT|BfC{{Ij@*Zb)_m7g32X33* zgKP;z(OEwi-~*q>iw-CHkkOc#N>VHAY1lWa)%!xx#Wo7{#8`*Zi4*}Kfuo(9-`m0j zQBhh0;CtsL>m>pfsl=kU>4U7&GLm_5{~$$FTh6oWE_vT!%K_Pqbz@L4`0z`VX-sq( zChB6AX7GRO{S3KUdET1m*^`ZC`~Sx;;a@rC823?xknelVHgOP@mDG{$eP9pdpHyz! z`#0riUbQUgzm}2_l@TsXEf>qOZ1l`X3FEnUhHrmx=@{I+^(|%|Gnh#BZ9o$;{V1%oTr4R}qX2e1%!wBsd_e)h=di5f5S&f5f(b ze}`|@AY8jKGU_q~y8Njp==!ByYUY4gWGnttua+Og|Dac^asE6QJanj53S*%fPfvG5 zPSgER;fD)a95l}~s0U~LRnNd25HY*fH6-AE&UL3&Mf_{?hPv}sEi@iHEcx=IoH8+; z2NH93h39fqjqox|vZ*ok`iP3g7FKf?E#q4B81JJA$hXF;e+aV7=_-V*aW`uu$!}B{ z{#}}Fb(Z{6fyu76M@Uq?z}tlgEh|(l+=1$2T~k~&eh(3^CV(?0|3PYdt*qG%t*cJ) zSQZk^+VwDB*1oI$d^H+BQY2wZKMvr&G@jKCxi)DFOKHz$IjU(=k$T(GuoHNp_R>YL zki1LejoiNVt1IjnUoccyK<`mOCK3Kl_2D=7vvEOw87o6UNi-9uS(VmSN)C!6Bbd>p zyUo2}`}=-t2VV`F_5LZ2O2S*r1%LM@jI9(SGoAN%>xz__OZh#bf}Dd>))ZMV)OIdA zdu@{D5s_I*=2=ZUaP7KomhoGQ9PR7`S`QLb(-xJaZ&N(^hV_+{*h0sk+TrfCYDwKp zV-X6eJ?;KbA~)jjj@HV9CnH)1|+#Tp;bw1dZMvjZ4i~!Kos?N#)U&RC;ywAs^pQ2?>8u%$9(UL;@iY~L7 zFdh8L!zgvKmHq?4tJn?+oQ(7}XMGJX8{;JH6MC+8?6Nx)IWDpBuO164V|uPkgBH${ z)r~A3<<}ka#lL4TzBpFU40F97Xobgp8k=27vEMwM!LKxA#RGGdh)*I*MJYE?&3WO< z6&FR8t7G!XVok<;=tWLK-b8e}@ruG$sUk&?NU%0#F*E2`u}Aa^6gh4cXhjwi)A$-t0;vG0HY!#M_Oep-mU2?*5zC6sbNiRa1Xh2?QxTm`qkEuGY-#2$X zOF{sVbsboZU{CJJfblxNGcaFqe9^lJ#rC!Nd_uf^{^$Zw3$otMrXMh;PqmTs{+n!F z+fF8H76>J2VVZo+-U!d8z{^g0-z}^4<@Pp?e5Gcahu>=3{jPQ}C+ZzNr6`wf22?5H zyLwK_a7(nbTuH}oHwUpWrPPVs8u#}E&Dl~@(UiqFEv3$HypFrp{K;Ft4oG&0r4aSv z)f2ZmCNFf0E_j0ohzHu73NbOXfsjsn&8&`7tdP^yxxLQv|AZaZSG~oa`5lQ2^x%WE zh!QX&?(hcjeV{T!*l-ERk9-u8g?!h-$p+m{Zd*&2#s7C z!O{FX?g0*|_iWF_3X+08XN_N^oX1y;aB=nCqhY&D>eu9D{vtokH{5$_Ka%7|JoDIT zuW<_XMyUIHuo$oFHV@IeIwy$Ghy2rx*7m=)+Fn+oAf#a4!dU7{{<1X292I55IWz7+ z4~aQaL$JPAp$eKrc*pisn^I<;OHpkgZmAeEmg44ymCFa7<|eBs?ja zR04Bp?{Bsc*x?n}+oT1LxvdK(x-u%rd0i;5ssX*D{J1Ppvy*6UEY4H3UaK%*Z9vya zCTst>z=yr6cfwc28~Sdk1fm{S3E@ufs3k6aqNqHq`?Aph7_o3uf8=@8q)xV(h==a{ zWV2*!dsuOXe|r-p1!vU}a-GMt35YVB?c~1P>}BW;YMm8)oYDgaKs&IykCOKgqjs?5 zju*QIJ2%TivSTMsv*_DjOw$F9&3C!m^FtJm_(d(eSg)7|7bLDtoa~d-)0h`)@MN)- znho#vyJrc>)eOf6I7fe=c8vS_@qB??DSJnXmj)Qja8 zA6E!NpO+HF4`SZAGG)<8t3j*~v%KXrli1ESi!H5;FKru!Hs7qz1hS@qJz08sMSZpY z!Tl;7&MkY5w){C9;wY-8J92IL>+Q9adqU3m4wh9icX27J6RW8 z2eV&nCZ2-DeP(%7nk&ig2vf!_e_(NNgjgIoYPv|60XG?lOw+t)v{pVPM?z-oU4$|# z=^cP1*NU0qk3Q?B6JC&v(Wcnb%Fca@fN!^W4ZZ#6~ z(97(6;JL)%4mR3flq>Y!Z5Fq0NuTsrK?NCcBf6DvQUXRn>OGSFxZg#eQ!^^lZ1(GY z8$Yvq82N0MpLt|F7guShog9eVWs-}o&slUV{0>liJ^hiIoW+Xn+G0B!2Y1*43#2P6 z2Nl|eVEwR?+oLLXSSh1i~L7(_Zi=iUTY-8i`-M=ea`I>p)8_j8%sf|68pHjJ4sB% z_*CmiQp{Hkgwj^BD*uaerMvu(Q`YXo`?>qmQ!Rob&(8@jyuaCA)6GGMP)9~)la%tl zutkuQ@7TG^HRs$qsIV}ekbY@N$(80RVICr}^H&i>vU?&5Tn#>Wo zV}&4ZR0@j!g<2N<8)`{{2oAwy2i|V5q6W6}W{pln_C(974GwGnWs^IR(DDXAAgz?{ z)R}@R_(SQJqKReT#3Du09U)M@8XWgOq*n(xQ=6W(5et$?QsUg|8Vx!>PB>Dv{*jr1GRtY9U)j=+RIyY;4yKKspJS`KAs}}7W@vR}2 zmP(_fAoGsD!=lQGHaVxN@mxER?p7Q-IF5~tc?aSTalj^^xAq`gRJ~hH=?_+!sjw1j z(+B%4!T&`HRZIuGC*;p^^sQ&*BZyY9P%)i(jF3TVDB^OM^K;u9`%EOG0gEFKj24ci` z%T}2%V5SRm?M`Q{PW}0~OYtGIDQ>nXBZE_R04mmsqZ<5sP`G=V^2CJXXAJCC$c$+M zrgABCj(YCd76KAv`!l@*6!(fL1oEQe1`>FJj}&Gp-NMvM!+2YqWDnLtut z2XKVCvVIhrF9ie}S2aQ8LX>RuZW1fu06|+37TO-&)(b1l8&Up-T3VXqV|5r$@BVLFH3mwnuY}#)hL{sslq+xjb+nS+VJh#zu7kPlI@W(BE;C@PYYyG1_3sO$sG^>ICHz*&m$x1U^$0$&iN59m{cXZTji3Edzp%p3W`MB zTUrNQrED45W-=P>%gIuMvIzK^6 zQ13iVRL=lJ7g`Hgq&o&R5}9?0Xu z(KR2m5CD~BLZZwmNL@`7!vk^yrmX8QhyaP^A0%g+j~okC_|0PdYw_8u*W1WdMx^W}njA4Etx@@AbwLN@to@aC2Erw3p-oh7 z`_d*43w}ttkxPX7a76GR{}I8qjmnxn{?CCu3ME)=Wv= zwjKwoCt!iwZ7Q|h(0*Nw6FNErE-}RXk}bj-s;-DMJ0RU#Q@>zg687r(4TGek#kJ-ATblN@k3;9n zRtce8YLMDQC-~iKxLS0q_FhZ3K#7cI`MvD=_NW1?%3))mV_z;{ z27f&Zj(yfRquc5M^1mOw(86szOGg)Rcqm}ei9gkTBF?vsBlwFsQLgGEF+aUtNf+G! zE`#_}K-63U|Gr5r%Z&1+KrV8P9Znk=)Eu&VtEa(X(+tLc{46CzsS*+td8Vb%i^#qa z8=fD%`Z8Zjl)L_|RlJexChZ2m;lfU|cQUm@T)GcLO|oD`Y<-ol7r)-lclr@+Z&@41 zbYVCC#HrEWmosA!P1drUu)CmFe_&T>ZN;T~EJJvPdHbu)L|YA^>lP{o0+p;0co{Ur z32VzvR{0ASr8smQmnlN4>d6l7A3;i8>g*kDL%U?+M$;H1?BwbLKP~nzcQeX3bSuLT zxg*f-m^UCjpWEFMy=_}vVwZ)cFW+#4$Pp1`h^G#-ohX1OAuu#1Tsm_|SnH#Ms9&-a zdfR!z_dVj*or}raXm?=sx@{~v_jVi=3A~O#hiomgWL15-6%wr?na|UA-nl+>UPEg3 zh7&d3qu*4Gf;dxkuMFl~V5rGVs1If-MEN%~6#6T2K!@HRulnT<;#AhPl+{}%J^0y1 zkwik~RTe9Q%J=;pW_m!=X@Y&|AIjgx+7E0#gx{wFP-t>~Bf2K%KdR$1>VjgN6>7@f zI?PWrR*^g3Rom3 zbzUc070gmlpnH!8BKR3LI)d_R4^V$EXGB5wJ0R;^y0+rOEoE{@+?|!pNE;e;M`HDCJq+~A zG5A{2+`6zj>PaueX!y0dN{5dkSXKGRzJ;|GAvA#cJL__JG0rEo@AUCD4NQ(hY~91rk$5e5<#EqTS2E5;eQ-oc`%SY>I-eJ)~4pBQ#j~qg;KSJMIry0Ek^7@tKPVl zLt^pH%2)Y2*me|}#3X@q?@Cu3~CKmF|ujSQdk7h(czF&Rxdqn8euh{-| zIcq@O05o7lv6eBZW1bVzy8ex=76NcqUl>}aY&0~2uR0)Aa2T3L&%*4m7ai@{u4H>n z&U!@`{HDqi;z*j?+KCGGE+&F>D||_smIq5=Y+A-TH4#gsB$`my5qJ2WVeX7v4!Pou zXWwUArsKPAN4gUiY~^%5Bnz28Ic{MwL^!=@#7LPQ!kc>jb{S(4etpO~sW#iz@2~=K z6^i=j=3=Ky+74almQ{>(kx^+rEW}M!Rx3^jtxdU@mbp^~(!8iL>=7v?M>G*=3eu?1 z=uzq#k5w4~g&Wt--mQ(V44H{pYXnlqv624$a#85z-;ef%VmEjmhlH7Zy>Fd;6?ZPN z^XQwE@Y@pI<|I#(65NfvewABxg`%36qyqm1gb!f}GP|7mgVj5mK&yq-6AM%$L)@7` zrbTK%?4$_r9YPGQlKwTgx-HJ>jRgG>MF|_loNFk$)EcppUc&4oJ)tq)^Wm>bH!hDV z1Szxh#3w7sQ&1%)vnY4&_1D$NQ>@qkJ7)!oWY^eLc>BU@=TPf@BjK^@r3nU5v_MyW zyX}6@RIyscJ>|p{`hyU}{6u?S1`d8EUPQD{Ts2k(X}a-D5rY^<@@k>{Thj$+h-Hg6 zaiH5#%{?JHBCK@|L`{~D&$K|#;K43XDibN@bjZbM(t3^6&Nx&fL-W-Gp@sg@L>!b4 zKS@M{;nDve5s1pQbTa~DTKL9K+i5ls8ZsZFFKW?G(|hvO)mn0d(@x%l>JTvYr>BF* zgi2Ize#(-v@mrJA>m%Z(29hgo`ez>T zHKi${ByAUM6aR|;86aGCBCpf`DsZe5{Fr7SP<2798&)DTtWhB`U$_yYh$h71^-PIt z+nFxbv_eEy#nb+_zjk6Pg1;v6f~3{agxK!Sz*@$; zr`F^ELqqx+Xhj-w6ye<@lfC;OO9#B=)3UkI@-xetb;7Q9*~|N12-CRE(B#3=Ak{HlpUy2oRMx<8Ei4-eH?TOv@IKuavgjBv1KuRP@(M$Js9CC^Hvk2S4H%`R)n0b%-x$+({zQ3yqn(mg`HUG(vK*6w|WbMUHdH-LE6S@CS zij(~Rmi?pA)-{V>u91OzVs?GoG$;S&==am>XQBTfak&12v_M;B00$^f?kkp0niCsV z3**10yAVKC9%aqz*R(=V7ocf%s;8Ld%Js=5pX4-Sr^;mWOQV<-FYRgVNs`XBYC0dbFw3QX9Wen zn*w{)j@AtQ!)%nQ3~vthYJ80;+q_UmaU_fL8V;|t?PZ&}aWSGICYyQYgC|$nvercp z@@RgcnbjIAso|k)F@?SsRj#}70~Y-+b%pPXU=$11nT-Tc+_Pn$5=HN9p1b{>OjhN* z@j3~Jjw7IS4jVV9s;+rXx!PiPbx5fon^%iZQVG8Vek^j3W?h6ibLfN7R_iSZDqk)z zHwg#Inlf3uCIPv)e!#iI9g7$`GLs=&oO?`Vu$F~r|0r5nw=?}ziHbn{#{|oPm0J_L z?KU*6U&g{d&t>8@>;8-;a9L9C7b|_AeSJS)z8=Ru7tBqUn7;wU-I&<_{s7R7NYAV(&vJh1jT^yj+#)0kK3mPU*$DX^x zD<>~U&ygbLurU`C+7x5ToLlw5Bo%4ULM`3OjkI3WKAHkV7@Zn~B_Bn3`KkhJ+lL z7p5PY$HS76q;l~W(MTDDN2}$wcATXk2wFLi?RZRSps`E&$a@u(RDiv#vg6b?L+yh8 z{UPA5p{ff9AlY(Xg%nDhuDNoSo3eHo}iR!`%RFHGiF+@T{-K0q#owM0I)sjyt7%1pTp048lV zz=|R|13?{4b3e-dBSvlm0Kg5dQ|K)`?3DZNi(frCgvw0c3xoqEY&}VZRBWj-x_)cG z7{*i(e41I5RP@vCQZbpU>91_Bg?2-&k{+r;_`%B4ACK)HKkIg!QQ2q8Cw8WE+<8m$ zttPcOWl?%Nh!tp}mdtb7Xc<~RaU4Wp_Gb$HaZa%$d-rzTYR>nO)C^A|c|*%0Z9UK&4u3o=GQZfVuDSNP z1u1rqGNASK_6@E{(wk>8$(4lh837$Jtz_gb(0%lStuLqKs(WmV?_o zuo$lt!{%9(@9UsyhbLzJyJYX~JnxB$6;3Duci%Rj?1f!kmNlEvhDT@87RAyK4`*t& zkuREC@5Gsd6H)}|_OH|t&9P{$fQjA_aoU3+c*Sl1Bj7wzXxm3HX8wu_f%DoqnRbom z|0UoYnsjbW8xT21hECbB78!u`GyXw})X`BN`7)^KJ5X@Cnq~sZ=B$a$=WI!+bthVg zE_juz>M)1rQ>q`BX+nHlH$GYCA~R5Fxe`a8t1A53xY%CVxpV`@0S({jvyov@b;sqK zT8;z!gH$Yty!$T10*e#%*E&Mq5&QYbGev0FCa6~E-S--Gg%)%%e7%}du@}9l=Z9Bp z1R&!FC)le6Ed=cc{01CJ2Z@9ME`dlvx~PBu_jM)nW=)#z)5r{Vfi#+W4T^Yd2OKa6 z1Sw`9W!xfLoN2vrQ(U%#29;l`zamk4E=b`o{wb~BxU3dU@4|*MV;Fjy<62>YOKH60 ziPdg*>!|yC6wbsbPM)on)9vw!Uy~MJS2s2AYM+>YNB*q=mx~g^+FHWkJqQd&Yz|+~ z;bs5=%D0cJ+L<5`KaBE-d#VZ@S+*EEJ_DLzPG6RrW@?2xE-&cL1OqY}dl61OuWJ6t zPwA;eV85pFU9F}sVtot+>V%g%7uu01(I2*AM0n94-5v+5VY(7o?ZJPK2q-Pzxw%f& zCpXzvW_J2-hkQ;+T-29LcIuARFH04GB7BoLZQLGxK3Yrp2>`Xe5k`wQadr`g zs!d37C29y%{-qvh6Rf;y zF4N>>>_Tf@@=}d7vQtUCAcYc1misogbBD5uf-GgOGMzB=j(k3=49er3e`g*FGzLxLj+P7?IS3a*r;h2PQZHP|x zk-o*oMoT=$;xkFgCRfS^@@5qxt*bXhFVq#|vTbXo+y1eb*gp!tB$+YbpZ#?c-si#p z+k38NZIRY)RM}*buU_>!E;%3nr`3~ju_ti4Qc#Feu&xa>RYX$;~^ol)MzjPGf%iTleDKH71*&J*Us$* z7%(P(j26Byp^dzkKBOhnrzg8O!#2z3`w0wmx{c1?AI?=VJk94v$Oa&OuSn zn?qf2RTJxvrlQS;kvK!%AgD+}+4Sj{&i9F4Q)msK*_V>ueeN-cpdlZ>+P#r3A^Cg%m-gAm-Hn^2OW5FhH9snU_p|2ua6;1d zW+RvvPsg$-;&4gMYhLg_)g(XN=$BzygQ3i^^_fl z57y132g!zmWjJol8((nBnqlvv*sz;&v^Wu6X*K+M>fZr%UhB~f6ApT?F-R8(bYaufwUfEiAz=7 zSYqDkNn_u-)zNE@z<7}J^0#9P90GD zae@G|zEQpR?f$lRnQya-f0AbN`t1+CzHB~fyzI@zbI-cW`13}Db&h>SEokg{*Vxnu zAIc`tW}5uq-*NyVksL&FIGl(+xUN?Br?8XhVmWmRW{`5LHt>`ves#m2cS0C+gJ7pW zsP>60nyeS;lM0x9bC#(@1f0VMl`=hd#d+*Gykm#Evqt-ec%bz67v%A?>tZILU+$dH z${QrTfkh1WOp9U1-m1cu3$PXBL7cxY(C+2f?K%6XChQl8aMzT`hly};LdNQdCSu9nqRSYJSr*Qe=k>&7?H?NS~l3NEMsV%B^n zI#Y;05{B5b3jZ9;=CFz5>>2W?F{*ez)0V6^;?of{;QgBJmKbWjR=XgsIOH$>vQbBU zc$=AcvNnCZ_sM9&w8pXOHz8+cvxj(VctEd>%SWe<3rAI!Bg?!_trDq;8`h@ae2ZCs zfT*jtZJ)?P_7kGi2a*_j^0_HQxxN?*4?s~vJ;?f%ni<$%uW*V#rF6XQLAocsst|f7 zVR&N8=ltp0#q5LoOx=|uXhF#y@bf4z2^WJ>a0yVr4Zu@U=h zyE}WdtfRffxcz-Rg+jt6{pb8Fy{d88{2>xD)#E!^7fobVvg6=^B^>ydvNK4L+M6Oa z@I+(_9QnOqTPqTX6ebNbm7$tEaQK}7MErbUVP?jPre%d##qRO4!w|-Tx5$o59!;{o zCPB$+IO@%QpL2-jHHMAZYFCgh;<$JEq*-%yG|fdUUW>hWY1{Ksi);ol5#kTfMgYj~s$Sb3ycz@mnOM?FBr$>Cq|zrq zN)vE^iL`ZVX0`S$1|)1K%wF=Qf|2B>Sl=W)gZM2;)9hij&?$*w6_h-Mix_~09Hw-? z_7UTz65}dLnR(~SS>{#z-2pN=Oom{qoY{@#2m=6yzu2M`ygW_dx$am4$lZ zn^_Ckm&{(8;wWvg`e_4fJ;(7H0{v=PZ1mrb%WFxcKfYH>)NbI9>UgBTwo+Yzm^I3F zbvain4Bnf;%}iTk-`rqJP35lO2wgOP4}g90LhXNKA8-(&X!UNfzc9NB>hub0WB*DZ zO*PHd!PV_v|51+YK-l;)ZtOtI>L}y8u1l`+&zcb}vs#1R4&&x_;4FGX@yAplHIZfH zFE1+&vKvYfWEME~oJ;`L&MhLGQ)e-UMV}Wkwpjkuv4zv91w+uB;eiSKXXnpqO&t9_ zmlcTmqmwhg==2`3b$a4HP1<*6F{pPPXZ1j8AxZD?&`s59w(L;O*$vOHl#x_V^N}d5 zzao*}9}R2Tkg!w?6jx3IX${78gtlivL(qb*n_0dp#W~$;3*AUN(GUGL-p>1LN{G;h zrZYP)oFi(4MKSnELYXQf{Fe}^>+MUU{)sgEz6#O!WEyq1>5j&Oc1ODWx2H9z0? z4H)5b=`IXCN6*8as;wz_Vt1Fdq3D6s6(5(ahibDs@AY5IGXq0_LuEbr?kl5Ks|hTF z!vqlUOO&98k;hAXokDdp&V@PEPCd3CsC_HtUDsd&je)7beddb`SM!ae7xj1VHfF`( zxdZ!(eD{HsTUipKQmd)odduOnWiHQ|QR_xdbNDrhz-8^s=s#h&x zcxIqUWJI(ZznE_THp{$n8bYji2V+hINMi#jLiXjk?o zKQ!(fHP?vG{~GbEtW*eCkP0X_j`+SG+V$_rL^!&4=$-X|@32?#i~xpY0^(huhya<( zMr#C|e`y$gwzR`-v$dq#R5NtO^sk8so&F>BtMqM2ceGWM`A@xwg23(>rES7Up-E6Q zab^8G-cHB_vxIK?{673t75>#;1|ua{r(-lLqrmGvF5lqoCe8M!?MwF3Q|lv1u~wJfU(8tvJL{@vxwD!= zAl_u_3nhWeS}Vu}$v;Rj$|fgvi4l|vcTB2M$*pdhQWDkkJy%izP+EJ)kF+=Hwv0Sh zRi-}6apXeIpI1SUjJ0!cjU-d`tahhBS%i^#uboz5`&a$V4?r2ZVK3rTWh6M2lgL@s zs^!SO=<-qp!4Nn4^b6&i%7RZLnAyC$NJNJPSBz2l)|3Fxt~kL=o%L+S-FN?`OPT?UhpN93vNS)JoEW`jQh@AyESpeOCp(c#{G6wXQ~UV= z_`~)J=I~0P^M{oz2-6dDWNL@@Y?-LY z$+&RJU@{B>QS(tm48ceh*;t57O*SRHVAg>Am_N^0tDoD}cNyOf{V?ai^WG{t^6?Q> zcTFZRwNXevC}S(mXXrOa`o7`qEHXOu4R4aMDlU7jJ4Mh+)N9+C`VCL1%us4f-l496 zpbQ{EdL26-x%<_s-illtcqo19Hw`hKrAAA=oj8Nf4!Kmyasw&#-E^(i4+cw_5#SX( zn_weJp^#P9^aGUnxN>#2&NbUQ4id%U8RKIt^wWji*uz!1DaQuT&sowEv87YB`4wi5 z-v5lyWc31w^AMCdGNq5QXwOyyb1FcUAHjt#N6hmnk_9aWw7UDexSwaDV7x0XvZe=2 z<}Hd9lx(*93m7#b22!AICx^WTrS?*9Fw1^ZtCiZmO@&yJhMdGCol(XT<@Py zyIJl5_G~hT>GLO5cQ%tf;dam3O}+N>VUismz%!hT9%u(j<6WGVk5F+0MTga~(!}7W zI;z>jA#HGVhIx3p998|1d*8o2Jj!gEJ4{=iwn3b1ZgfJ2Tp^QxGLTsfeElS&TdF^a z1Nqcyn_#tf=}jiyuI#3#%U>x4sdu`r5~ z%rd9PBzju;DPOyKm?3l@qEI>`Og2pFuM~rMB~wkLiA)Aa9jTmOZ}LBFhy%4P*_uV3 z%E(?U<)ir;6?5(U(G?u+6K^M0yg2e;BkviBS! zGfq3s*~QK0e9Px%$_=C!l>ryYkSL+jW42`=B%_-W4s9N0RoK>e-A%=a#zxI}LL~~q z+MdLB&|0`YA{-jZC_A1I0#B)!YVia-fV0#X&wSjlQrK;Q6$1}Z#lU#cTDA((6a z1uuChrN-nC>+L3-^Xcs>bJ7e!CkZgiqJbp=hZY9ik@+@30!1q&IIO0+5oDnkJ! zQByj>xt~9uC-(xa^_=(VC=EGQ(+mr}AIW!b5$)J?B*hV?zxnnu{~A;CYpY%^C}ZtK zhn@xtz;m#YmK6fNAixKiYFljNk+D(9g7djGUFsw=C%n?ma)B4_m+AEL-8aURxhcWc zaHrly=ib-aTLiz2&?M@ROSo5~u?hLVE!qx;ZJ$|vxs5vrtKe#J+ZWoSL=IeO&k;R} zmBYgUf)xX)_dTCavmaVDS$>Zx<+8XQKbfieSe)rxzF{Fx4aQL^CW9lIX)HhH>2V_A z@~BblKhUI$NGn_Os_jwJ-AuNQBzyTn6cSrhRu%kw499nPbIF}XgAF4wblA&Ee#-ag zljG2<^nFIS>T1jsAt?b~kE-Wp{YmjdjlfKa6Il*oVk3@GZsPqvuQ>%8T?4vIBI0P3 zLp_fhQ#@Dl?`?J%G|bqk4ilLoZlGchvr7ht#!dk+x$qjk<)NXDg^ES;Up9Vm{=)4- zKk{BCH#8nJZO)OAb3xSUr8Qmv=uIY+yVJ6h_(4*;x$@Fpv^P?l7Fp=o216}gdMOTo>WEU#iXgdT_bSU9EZ_y6AuSql!!%g;uKZ0qp{2EA;O;i ze)_HyfAPj#?U#mbZeG?pm;REugvvl&+9;KM++aGYCfk#$Z#;cwAfQ1}q=d_7^H=Qj$I3VNrny5ob480s>|1@TTl57Xvg(~g0Rr7 z+yNaON1`x9l+IW^qkMI^!C>~oH;U%=_G1Fm`cD0{OdIAAB!ddw0DzwLd*293wv&cx ze3AY?J51jw+@3)l^n0%vE)0=fmIq4olQ5N;*-mxw+N_SF2=3?q5GUOSv^fve2Q^U z{(-S~k(ldYb*|tNWLVF*QuRc++_PG0cX+ey&-8G6!fMCgySpR+6HY^9MYcc6&b+@0 z`ht}x$F)t!$oXpt*S$U)S7XH*c>lYe;-+HTz)wUI729`scAYE|LTehpu%oBQ;-h(L zk^`Z%!C~SLD}I@X)P&GjJI2@CClUiE+Y0BS9dCtkD>GexC-!swN?kS6*MC75LKpCV&0AsxXfw@#9zv>+te0)7D zDrptdzF87%P1b%Gr?H2l5!^3JEhkiL}()yKHhkGw#ZvhJ+p7)mWx zW8$@zN|f|H;yvquznkT&gX>n)dJdv;Yc610J`?`)S<^T%vDQYWOd^pe<3&_|oFxDC zVdoS{8i`E(+ICG_$AId}rVO(ijfHiyRo{|0HqTkA*=)W}dkpwY;-?P;A^^fbdX)aB zzyry5KizJw?hPH_3U$Sw>sR~>e|e@f4gwu+%s3v|ogR5sDbXpcjw?B@2{6DqU%6D{ zU&XOAwtb1tff(C`gs$EC2PSxo>|JwP(lRn^5tp8U{SD7*gAWR990MLjmd$>+pU6#q za~wzw;LlT*kIr0@jj9K)G|e3xKNjS0jwQd-KJ#sv{^;*&o1c4xt9soyhuy%8Y~Axs z0AIASdIzWrnR zr;EcQ5(p9?A9)~M%W2JF$gS3JLF{Q*Ct!b5oEzJw-{xF8Seg!s+K9=s`lHK=qTY6Is`x`JEfHlog*&&LFaCRdb*0 zee6+L(Y(QM@nej?w2j3lznY%Yw+(ao#El9MTF}%cl%)-wt=;9Vt2SG35vxx7dMJ$8 zM~c7a`c3Ydn!)$myFy!4`(P}mGmPxi8w2pAL{oFdY6s3V<`d1|q2W7K=gzPIS#?W z-T)}g;U!$-wa9c^qUibE)6cS{%a=%Wx417_l2@Lw|Gu2ScfM}4 z-DV$zHXuS91_LX#i|TmUzUaSzCOj7@6_n`_E0!@(`tKyFIHm$E9kZk`86glvAt@Za zPtE}kO_cmt{mUw>vax{MY9)2;sZCo&hxeGAZNFtv3y>-Z1R1^BAm!Hs2xBZ44e%1s z9jh3@)!`MwM1$6b&L3d16cloA=VW&DqaTWFu%4<9qz*bC+p1ehY1`q~X8Cd3-|KGX z_H767{XTt-zps?!>!mOIKJM5+D}Rs2w$l`CIIjoT*;soy8Vct7!uCwMPm2Ik&|p*r z=}CF57kkw2BdEGH#JAO+-)&Ho6QvLHgVI+G{ts1e9n@Cah5Z6W3KWX-6nB@R#kE){ z7CcyScPZK;#S4TG+$DJM;Lze$ptu)zEAI5+MzecrFn3p!4Eh zuGDz$zafwLOdso@WsGMnccriFkWmzGI{xc8$t-Ks%eXFIl({_+>in{HYNEV86taA-~j;m!$2D~gX1p7D-xe3BZZBghlMDA>4Oll|^n z4yr+Ry47rqm#FE1Z&bF7ks}>+OaEnsq|Ibhe3Fh+u3WKK0Big>AF08XM&MFs?nhFFK+9_!& z(iKmrpf_Q}TPnkr6ra=+2z0HA@abVoo23CnvAr*e>yq9KSX#F51cuvL2(WXyJJbp* zQ{CduI`{8{(IakN@QS4W)569@PIP)Ogsshujf)-|0;{9ar@`LT8uA4Xi8^6=qBUlY zZWdY2-UAkhjI{kHxr5&AI>z2;8A?Wl<+#|pDvTp0rmVXuLWA{LlU?H*%Jg_2K(>#o zdpNZ(ByqZ?h>^c6b zeMLY{S)`-t^47WK1;tSc7)r0|3JTT>c5?DNs|tKNd4l zQqwtHQyg7OjdiZ&A=*$r7%(y)l}VhFbG7i(OAE*{obo-YObto!Ua&oOs>n#`|6OLN z7+xUwMmrE#&;)-wZ`{JNhR(kTffRn>fJp3Azx}8gp{Po9{;H`&&PLK%1^tXJN2ox+ z#+LUjQ)0mykt8Zm)_vj6@8po-E2KW4BrOP&9KX}6; zWd$80POUS~Dez`nud2_W{@6bE;!7S!?`xlc6Jk#7Ri0o(8`l#9wv~V#6m184uOLzKBt;kriiJ zptYg9Ak_ZimH{bl4JJVs<(%$dgnSl*XcY&up(GO!sj!pRum*n@$04$z@#C0H)gv$E z)dYr2i*nrT@Q&qCzQ5atM3<%9W~{V&gjF1}ELXN2&^*z<2#ih=c=JZoDG7F0m#uxC zs|ip|5OIMKfH8(PoY-pRUKahwf`4sEL=0Er7xAYyPfx@?`c1w z2>H;V6V!e8`+2YX=*<*cG~~bu@S8!;XL$7WD3Gm#F@ElshjBGD5s0#(pg!>k`LZ)+ z32#Os6L-8?C9P=C&4!+Y^kP}WkZ>l_s)8$8U1@4rM#U-rLYu3yL-tH5xdMwteC{^y zT*G>`)f%MZGHBd80WGuR-dieiGKjeKinDdCDmFlpqoewoTP1$&9f=n?u=E_>TNevc zx==w06xy}C$|7@{s!qSk9{)xC%;hqT;1_!2(0*W+Nmi9#YlcGEh*FI->map12~8J0 z%caFS-{~D%!bX&exNH+~8!9W&5n$?Ot zIrRG-zO~M;HbaQN0hH)Aq>v;Ac@A%nd>MhRqH+iLPvOE-Ld_wCZmg9BjY8Mm8QlL! z+<#w6wM)NZa}AM^cbJPPc@jXmNuVDEsy_r+kn~drqS5tqOpYW82%-(;)+g?G-rM2$ zk*l@!+1YrltRAbgY%YemDuxTaR_psv6lwa_i0PHLsc8Bw8yDify)h zFtrgogG}LSr{#1McIt#D^Phr7ruw^A5Gfx5J2$k$a({wtJ|w+ujQEg>#9#cHT*NKs zm<*Xu3_x806%;-Klm`T>`bd|SwaV-ElKy{YhU7ER$H4je0u-zFW?F14T^~b}>2gL@ zm~+p(jLz~D`L!7^KqN+r*WkeLziO>;21anaDfO>lC_^BX57p-gKpU#Sd+j> zPguP5kNdZ`=S|t*d)_>_DlnzZY=XSz)~;fMIy@cwbi0m-A4oi9w1v6QaqmoL__F!< zMf7=+QIY4u5Jgd`=bE49o4R4WJTAd_)^Oy^e*DzaY?Gi#+pz_S-xy}WPP!+Ru~rR! z`H1T(JHqpmkV}S_Q2&**d{5naHpi2tWzEG6o?iuP^sf&VM!bJi>K-(!FcF|5Y!Y<8 z3yV#2mBCSWuAZpL)u5S7X6{A^j3_Wz2gXGUepqt*B6Ldiyt7%tE%l+XYlqUiTT@zb z=0I0Y#A!PP{b?%dzTmTaHDl}TIB(nSTun@4Ryqd{A1vitU#Y}_8Z?4Jy$MIdoM8y7 z?xuWgU~Dn@*u7%O1RN>a8pci158mN*RdRQyQwWAe6OoLz#!Pp!eR7qu{HeDiu{$)SF6}5v?zepjlz<8_iDs-=KveynKzUsgjyl~Sm=vGMNJeHH z|I7JSRjc)zZ8eN3#~(*0^9I!Z`;Z6@a~j8O>#wjkk!Kef80g$kOD<7nOq=O$IkU`U z$VT{WsbpO_*gdmrodTn8;ilzfmmZEdO(Zb(3lxs6SAW_*dAQjAH0g-WPJ?7RI-q~D zW*2L5z+=|?o)X;Bbi});&8~Xa9;ntZz<;tn*xfge|D_^mZMUT$c>a>NKF3sIJUWR_ z*>1eQZG%Bf2J=`1m@Q*E*TiRP1L{k^2$~VuvZoM`zPEdFm%j3zSh^B_lD5(uW z#PBiHhEH(CA)0-mS!DZ)`R#Fpepvq?A(c6FWZXv3o0`KA8=#pP2LQ%HS*~9+qd6*W zzSm-(iQ=Pd)V=`zreqaACieL0lxW}2%;vryPRG=U_{>|$+kK^A10q;uvrtZW;jwA- zs&6>?9goNw6rjv8jb&58#yMiSs_o68T$MqX4*c!jNcmJ)u4?zVo%#CfEIw>}rXw;s zyv~OO*U3_oD9xP$a2e0xZI1&=fF_v+Wb$uENGNd2-WltTvPnedv~ud2*=xD{`MLXN zzKGND<6O@82R}Y~Mb1~f)-GuN=PN9G<~2NZU>#p(hMk6T4G&7vqmIz*4j#qbW$pO2 z>oACnD|4)4dMU`0HN?T$e!@vkGcfw;rg8dZz;}!`x+3P~23rOV zb}}3vdJKfwcR)-~7f9=pIalInwPX3d;xCGDA@7f|Q;okU3^^0??`n{uRvFkHR#Q-) z7C&h=x^1fSfrDx-!VtZvI)Ph{6Vz5IigQzAX|UIBco$jz$>+qgBWQ6ib$>(0_&0ZS zIOn)k%B}9VYw&yw>1X@+ApQiNnhGBuy}EIJLT5`>1}{THY<8Jtk+)&ov#$?!WDRhe zPcg7cW6z~Lbw=Z?3pG5OYEF(9cl69~SNzCG0A%QtVZAhGW`cX4D_EDmujs#^B|MrD z9epuiTO{^SWt5A za4y4DX2K$L^QB~GZC->0EWWMWL&6IR%5^SnjpG=@j<}s#vACT}iRfK}e$Zm&ki# zeaK>NPiMI+@2dzCzr3o)5*%~ zB5Ox>9`K)9>2`*JLM;i++(lfwa!1HHvT>WnK|?x0osD<7R?j|r38655E8$ka); z<(V$?rJQcQ2__-VPuBQ;uh>Lp*;CLZTpBV%H_cUz@@T~L;F9}7>Nf|*cjfzWfep`d z&k<>o0@PFs=U+nRT<0-@x3Eyn82s1$(eTyc3(dC@RK6Qsd|9ik(?^1c53`b>0Ui(4 zZ!U*#D=syPI$z~X`_h!1>D*2I-&DijaAd0Cf!8Nvpx*p6N-e2J#Gn&AWzY<*FyNCW zksU@tZ(w@?^Z>~qxcK$@tupsEpEAofzacs@VlqFhR#90eMfN{xN^VQyf87}dr0%Ot zxsQEurbH~GUP^})R7v^LHiyS&v|9%<-~X!?<&>eQW5HP?L4rnS3B;PRb^i*lM8*?V zsfOHiAVJF4M1If*A&loic;3~WS8OTn_bXRm6T=d2(^L{6beYqtRMmyaYJk17s2emG zSg_o@2Y}xeUF$V254Vx16_nBbd zwqj{8)7rR6pT8(5q>h2i`n}SXcxn@0{QvWup`KX#vy4c>`cO}&zp~`BI2W2$ZH20# zhNB?=9)v(IFL6mm10W}(yv6ZS^55OAQ2VMD*`s-{CV_(r4w|}T-PWvlSQOIKYJfyI zvLQ(ZCH0kUchxd<<9(l97>o^uX748j8LnFZp>WTgf>%`nk>i7^Beq2MQ`B`2z3kNr zHAO`gF%Q!iMiBN_ckC9}sX6U;vlkx{Xmf4E ztVOXMG~*F=fbJ!2D`IP-&`y;LJ-upXj45vA)lM4B0OHsGM4T;wQIq5oh}Q8MiN-=l zobsvPNgH@I3f;$C`b}*gWF5T+zjL`5KEYL%z=IiVOh6na%qe z&izTNrUDp~-y-UB(6_asa)W2-Sx=EN+xhsHTC)@yLb_qE`7_rBC3+=49&kS($lLwhZo4f2bg%!rvlHdb_^mYu#K7+$pX!mXnJK3iyMASpp#dUE?r+{90zn zW%;^nH)b(Xgq*TTjU5LF0=Zg<9p z`x1yIs|-*;8s1?*+2}W>=D+qVsYRlWQ%$h7WtbZXu%D{U8I!5)XLy@ihZ5QJz687t zWfo6~==FQ`J5SOdnoMCPjg( zwQxYKO2<|P01i^5AlMaq;)2ULy0}&n$#sZVNTqS&3__V@XpaNc-w9neVDmQgn`p-T zkz$c!c)K+%vA_)<0BGW59N5j~;lPmw9TNn4ez6>WcPueuqo9(WBW2Wwsg{h4&FsKM ze-}x-hHx(`n_+FXU)c&Ovm}1H#Es7Zeq_IP;|fb_a>iDLTy*+_SMWKCM-uSx1&6mp zA|OZM5r(p$P;U{08$jU%MkANs%+%paYXfm@U>Gs-(>b#YltMJ2?)QY4YYn!!B_A~2 zJ$=+KuFcz5*ADuN@_MRFjD#p03pWs_i(O1vvsrje2~7e~2K2PUD`E=h^e3>E@k+1_ z@U;4%VtO#F_#n?pOvhKd>{iSp-ZS79oiq(ryDGvo&?u@lcxKak!|f7Pr>xpBQKv=h zQesUCFX{z<%RGO1=BnaiRH`~o=jK>C5BN2Ir76?$PRQS5F7Z`KbMOX^hAXe6olJWu zM0STmg*(&JL8wJ|%zR!$QE@Aphr&XL$IF*pN69F#J&&n*QBMvs$Jl+949D{&#z^&x z3#;&5cWbWnVi)mqH(a{=$HS`gsL{XgbtZh5!eDCO1e*o`6SZ4fPQ{W2$Pp3c$ThLK z#y(8ZDko&Iy=)=z=AWEem^FEvD`U!c9awQ8qEMm7=VCT>VOhm6B(;^OApK`8$33gk zS}35*9OngsW6ci#$1Ds+%PtehP%rqVCU{X!$yTg_rKkI3jwXa(; zU>i{)l`NanUDSgSxb7e-)+K=_D}5!!k(c8Wx9qW#wPJr!D11IUf1d~nD?cBvWq)&f zTZZWwdPMsgcKhFdbQ*rxi>R}$j$c8kV)1&Xqj8AXDTDG^&3bx`z3BCzw|{m`Xyxn%=dOC97;_LwESc z`){kNw#A%V#ZGTNo0uHcZf(18exg#-(#?P-!$pM}7hhtyz}eKs>4PK=1E2cb1v7kH z3xIx|se3JL_rI??C3Ff^mYAFMOlQ<-T2;QLo}Z-7V^LtRR`4#Y*Iz8aF@EKV;8kZ@{K4dt1yn~0o<}tdFa$pcOd>$`Rwh$curP~`3K)Y`HTtgCFHK_I~q!}aMk5Z zd1a&R;7(7VsB`>Z6jI8H>ylSZYtPrwcLO^aZ(>r7X)dfby_LOL}HC;0(tvbqskHJCCn4-FHsr6m1;OS*3m>4o%oar`>tP^ ziz9It=pZUDehP3oyfBwW9 zkqW(W67y}nu*ddJJWl~Dvr`v=R%T1R|1cYPewFdW|Mdt1f2nk2Z7IMT-=p%WB8!N9 z*lBe?^4wl7D^mb)NFvHY;9848D){uA5+Mv*0SG)5_69WZSKKBnlSw0*RL;A*?;&`N z)<79enu|P^hE+APN6X${N!Hi`);EO`%V{U`g8-9C4d71COJE}0V`4mRnL z-m|$-ZUx?>ZuC$^%SyFA_~DaR%agIqWZis!9|(aa6D0neQwjM3^xEWmN##t6^a&&& zeFEvf10Cm;obAFh28MhW!oBI6>xWo?$iVD5fcDAsbt7P6!>G0s?hD213kig-uedkg zad}qXS}B7JT|OA%lLL+1tr$T%FtlVscSnz^*}NO=B=y%X=&K3i083wZp#X-L6U(aW zQBOJ|n^o|-qOd&_=)rf&Odkl-{_%E6*XW2IjpvzB9F3Id05asMHP#B=ho-4;nY=Xa zzjd^PXc+x3l5U~gl$=Ck+qi`Ad!a-TL%DFr^bc1YTWZXoZhQqzb zn^shx0_`}$Ud_^A=60>pFM8e7$5z;O{8Nes=Q;Dv_sfaE~{k=`w#qif3&&Z z(X&rC&PGDwpJOI#Bv+6HnnKA#yfPp&;1KhSG9+#M{UBwEQ4-BIwpZ-F+#~|`n$oPX z+PVw`eN-e}Rs;xZFkMhEG^cJ3#6JK{A&0g=f<;5%5l(Px@<*%=9WIjLFHG|C2G8?sL-{254;ZXdXcceu3)c*? zh48Xm7Fw*D(m`x~477i`t>c>#w?Dp)(n+EGY!xh8Bx=R*{8^|9quKW7lECRFsq()l zqj3JmSI3usQO?($U5%RIF-SqR&OJ1ov@84W5m3yP^;Den1 z#|8MhDc3x@G6&A2-|z4&#to3((7Js2WHQCbdo+gP-NW%7i#nEFRZANtYb{gu9-@NP z*!E}3m?SsX|2J*&$_g`fkC}t`3ju?GV7=tWWH+Hn#QYiF2{XXiUhduzs4Sm?Gg-hz zYWZXS41qfO`S*2M-4pdxgloW>(QfvVTGX8m-DiQ@CVkilz71!|1*dYwk{o2>!}Zd! zy!DBOrQhlHa=n1npb>#dsJDQyc$F9g_-HFf?JUD=+KOSGEjBT9bT9laskO)}^@edH zEw_X3GU~3oeeon=g8%XL{Fr-=dgb%`FaMcV(OnkyL)J3&Dh92a-aP1IH485}U}v&p zCzH?)uqn$0Ul>X~`AgPk2nK$t-1HtFfu$aBEL6V#HY>XfefQ>l>QUJrD~V;>v_KRp zGCyS;S%!U}Yfs1~C`Z(G!JwhQ7&9~IwOmj0vpl0D=2_2JJ{w+sAX+FewoE?!&W*f6 z*FkSw?(Irj`0F7(0d8R`Q6d`fv=5WmBoU2U)jco|^<7IfuYme-?x+2gCMr@jhrcNH z$g!ats+IF|QRk_q3sJ0{pFZM51#i^h+xv3RR5ZYl@P?=^pCjA))iO>NS89w@7gKj~ z^&_a6cXSn`)e{j|GpYc>$<)vSsmP(e&}u^U{9)GFi1EexWL|vJ1(6X)J?L^p6A9@X zY>EmO;~3HC_gNOAmrq+$fQnEcQpw~z9LKB-m(nUL_hVm1l5vigAqNA9LLGBvBH20| zjwX%jkwF{uOh0pZ%*ps^+z&r_lj%MQCEg1;_A##oeL2!3J~|}8B9i+-J1cZIH=VmR zcdxapztPmNR|nb?105@qUnKT-S`1TBP&nkV;W&LeS&wbYi9b|*Hn28Fh%g?azm#Iy z2lCX_wZS9=-KGvf9j!ji+>6Dz57pz(&r*X4O;rQLL*5YS$c1g`5;;XqkJE^=GVL^> zcR8Mn{}eMt#43A|v*U~Ba{{158@Sd52wEc*x)&y^^Vf*Z)EnOp?OZ>(T+8%?Wt)0y z$MxASSog9B_^0J_Ab5nBUj|`hEes3 zm|3+?U7K|PP$ z@YAlqzW&)Xq>D07=utyCS!rD;ewyotdn37-PI;7o1kk-f2mM>(J9?#(d(aNU;Rn5j%gC*j(tWJLO!L?{?znP_8MW%VueH3=` z9VeW?g7W>Mg5i}nNfquK&MB03dkJ%PTWaEHtIy!NJUw zk&v=^-@FZiIWT6B6!n3AGpDJLqH*PDjY*hzCA^7#`)5MGA~~J1Z;|Iq&<~LAN@*!A zt5`htk*H7$w?IKT`67nD#aGfY06NLn`ycTiL%EcKtTDg(0WD?i%fw?;CnPjZ($c3o-(UfQ=)K@r;lJ|xSeJJ=IoWKYhhRX0Ltc$UF3TFNX(QtwL?(W{ zne5yS=;&cRT9~`w&0}$~OWZl{dMe@z$6_98-(Q zxHpu4O1(5JbQhO%@z}KO!4Q&E6m178SwMIfjsM`UBu%v7uVpX2Q%eR@_~zLTxT`*5 z^R#cMK~oTDXtL|2VV;9Nvxs8I&y`jN_VME$>f#m8clfBFR2t7=-~IzJBAj4%4%f+- zYELv>+N2Cl>iCkR*PA2muj}cV2L%=>jQp_4fjS~zEAfS?UT%mh=*@)AG-Q| zgyiLX^shx$%S$!|(MpWn*ozIEI(X#n-RChEQxtAYi77iFxc0DZuy)V;XkEfP5s~N-MH-e?lleK(8hB(pog3c&3mD@tdkD) zV7gB^lQ?ws+k+NNBogUr*}^`?rN1mPE{dn;d=VFkCKCUP)1k{@QA4kc$m*ZB(1>L@ zvAXTHzUJfq@B4z&kYzT+)6cnX+=Oo~Z7`o*TY$A!yDOWePbNZ6%Q4v5p zO!MWJT|-uK+Ba0g@=UOs=^_L*C)K2}KEJq}9DGS%*QugTk$3ar?Gmr@*Hi-y(kkL^ z6=iA|g=XQCPDW~6xR-ONk@wd@d)fXKa=A$t9Eb2YTnfGXWi@Oe4EPXsBx&++T7K!< znJVHD;B)~I^iIbC=oB%@TtS$t%<;!b)P=bimap+S27(Nlh}6GxD*37SmTaj*9S7;; z%-^BHz!$Fa0cvnwf4bIlmi2>J%LsKo@MUP9Rtiu0mEQTHaQ8y|P=T*96Vk!Khi?g{ z02{d!_m-9MPpCYEPmUB5mNtPCaMyoVyj5X2LfSS1_+p{mN~Rb8CQk8rZWLir4<8o6MgGEj#HnHL;37-pFA?!TrO609W3 zsl>GUQT3|dj?-xunT)#@ zVP+#|tAWa)akRASc%8JWiEITB34j#qL~?aL;pAHY)#7B?APdxpOfiQck#F5K^jggM zE|w$(jiycx+6u-1K!C#ST-bqB#zm*sZEH306)o&Dyu@7N_~Gks(ToMh{!ePY-c#m1 z58rVjhT=E2C4v+|av`i^c_`K7v_&^$ZgZp?G)J7f$5PANWCI|ZoRUKzU$a3c2MRmr6xY(1lj859UqohI zJ@)2Wq>gC;2~m@65&CCofyGu8NApj5V1O}rBkTjSeA;Z4mCx5O5YvLN zm4bsj`^I|cUXaR*hCCRK^bBT6EF(l>2?wxyD2tiv=15#pYdSZwQEgfy()xDg5;SzY@{HyFR!yh?CgrSrx9-`39dX=Ya!wBr@ zn$5&(nw%=`dmrlUvpkn^wmaasMEg&Dw#}Cpr+hcRlYg&u#kN&hCz0xLJa$rnwiaDe z>Q)ep%GO%v>Ti{S8E!?1BNJ6WMWt+*onf@x2idVlZS5Uxft|Y9w*7d&ju^Md#_9U9 zIPW+>O1M71Yfj8pDVi?quUY(`zn;%w1vt1TfM<$*5CBv!iWsl; z=HP5h{>$8!2D^8;%hjn=$utk|@4O|ysF=Wm$Qe)W9xFbPnjN3*jx{ftk!6`bSS5hX zi?yhoNXclNn&(XrA*J!c>p%7N9aH9f^y78iHZ6CbJf~`WM#$7x7BqB)Xh0f3y8aTF{qA^steNegO<%o>()z4S<9bD-@h?Q z&)B$Kjtb*p?FmR?)_W}XVf%*q!Ukbzk=Gzid7=eJ_*ld+Njv&HkgO!Ni68zBU+%WD z!4x2vbXQSZaSCkX@Ab>r6(Uv!S6Z1&WPkjU`*wxo?CN@!6asO6@S%5SZz(z~U ze~*6u9-OV!V4xJ=c)97F$Pudqf;qpNIMD*%w`X{ta($;VsQ&SdXd7?0AH{zqA+OZ% z(4X~dZA6%L(dDj-pK;@zFo4O8i{gDG4$3(OvBPM&R5+xS)P;Jx^^@Fb&ZycD;}#&u zg#l@IRL>2C>nqgaHwHvGEKiuFjDDjO%c!#lA58oTb$vln)kP}xTxcroeU>8~__TdQ z|I@l@ve8t=NSzh%tLiPo4-bIn|P(O#?e%;Mu_by!T~{Q|nrSGWqQQ~*WhC(c`~cc(f5&eX|_wW)xw}XoXEX_J6@gMM2E75 za)egCU}1+!$K*kRweS~ZMSdwq(xCZyPf4t z25P{K-I3YD^;YqVy@?L9msk5Ju#h3iXaC{3z2Fi*S4qUtlI!3yWjv5^z?!LXLK^Nj z-X}-=6XIYm^VupuYjxqZ-BKH4tA}Z9l76wEhs&F9@py&HRF8-y-IpPHKOa`c%fDYZ zq<_ZzEkVJ<`pB0+RyZkalkV7&y?3!F6g2C7QTu%6%WQOfeYvN z*X~ZAdv+w{C(mvi%-XEyZotXZ-G5P{^nUkM*-8^nYpOk5dYziA{?`6+mwI{Q&Np0p z{k&oE5A^Ztham}C$UJ-el>PpIIR_bigZqXOTH(N`vEf5%l3L+;q5?B1;pEv!!4FF9Nhai6jeiK5 zA>BWlIy0qNeR0CJNt+Ti{ph%th<6#@Z~?#pglztZIo-HX+Hn?K&k5tFuTyUv*ro;)ElZKjC*SVMR zO(f#Mcz+s5)ulQEoFy`GBzGIzAMgA+Ijue??saB8d~jt^I9)9X{d0Yr74zT3mde9c z$yeWzku5npQ%*Z7O6ic(j?&pX+V(M*vD!FkdTo~u3OOc4?++^0pbS6EVE{63Slkh0 zGN{wT#?7tbbouH23a3kK5nJ)qm<=xXx@W zJdv#BCbEa9Q%uTK8-N3v}L)Hir- zh$t#n*OSFwCVrz=q-5pJ*Byz5couoo`LpAg#J%orl&ih>oO5iQalp}dadFMKZe7a$ zK4yqbY3ldn)`RvuCB;*&g{gk|ylL*(^ktW7E}MCOq<<(nO^^kl593| zoAmuJ3Y!Uf!qyy*-(QrCxGyV6lRJVN8Qt*x9C`SQl7c)bTYMq6!6&F_!)A*x-t(Vl zG5xSa(gAIHG3X=>0K5Ur3{6hxBNMvlgze8B)o}>JIczN_j@!aB>Y%btnc(PnB%8$r zUC9c@!-iHsvH^h>54E&#szs)>A6O!e%A0J}D$8LIWp-vJgZSZ}HMy+x_{}Ma10?|! z!vUPRjH&2_aSv_})s+9bsZO6ExBLNGYxgC6+PlsRHyqFDx%XXWzD*K}noLo>_$^IC zk_e9oC(JO*LT4KF`xn-zgj?M_D^s?w#m&|cD64qpsr~5ZXCD?<7Q^MSKK{3R&dI;U z^b8NdFJo?kgjGdK4$VK9Prm4L{1n(NBK;%hIp~L#uue@OEMNv;ZOhpH0fs%ibjWw zwG0X7{4h48OQIE7&n_Z3|34OeFD6yN-0euMX|591G(uY`yqJIRnezu~?9dv`uw!rI z-7`k5BMi6bcg-1yD{Pn)^@=B`@k)#6>6r{--6e)Ld}matv8>y-mXpu`DC(~NY_=#K zTfyzTktTnM5O?;L(|3{xe;42qQRC)V#P7^LV1fBnKWp?ff~3qeKsY1DoBMO5)YukF zZ)`$1={ABw$7WZ>9YK;#MBADIOFXobu27c1%$3wh%vl_^qIF=pNhz_lJSVj1h1BV6 z%tNRS_;q~C*ng3LgG?o_*dk1~1XnL!)NnuB?3jwp=JvJDBVCz&z40`ldeb|dr^(zl z56{hxw4t{fnS-LzM;rHQSr+^hxY)8gIb|$c?)1Xj{uRr0^VP@uQ!M4`9F`*iG|lHs zpKBFlBMTc!G|#cGbV$J1R9&^DOnc|nLwe$bP)%t&=_rWlDRXdmqeg3?t0d@w0kHzU z5o>2Sn@Cso5auOl`IWATBez9IPjAf{+JHeGG$!7fFN2xC^X~ypSth8k2krT0&w%6hemXZY=38cfxDS~EDs)}Vz9KiAo1Ww8xD0N8R^7ij zp?vLkhLJFTlGB|Nb1qXiGc8N{; zGP9Zcr-4?=pASGOO7OgAINcwLz$^4`*R$Gm4_d742yt;*a4Z>9GNgp87rd(lDeO~G z4=xHjI6EzS&ws|kspKI_wz?BLq6D0}Z8Ac=dhPw+^@jZbQ}x-}9SGoqnD@N{dwf~w zyUY~nwGt#F3LBLKsts<)IS*gyw{Ti~Zz}naQ6^HBz5=ht>V|a8U_i zMqz#T&3(Dhr%tayY?FR6N2VFNe3O~8*zu0tIr^5N$^1QNh~ri9)`c(`)=K4@Cb{v% zr!3kEWFeAHO{96l;A{7Y>zE&*=0=be>=P%_P>f+TqOHpnE27})ZAV(LxVA2r-eSLLzu^d+3+X5}!<|~=43NF?OD0a8v_lVx@bl?STsGE~#`3;W zn-LwP`D$=HGS+QTVB2M+3C+M<44TUy4bT8*AV}((++xOdmb=b2S+4X^U7GtjNqQp0 z6-syIvb~irqc|>s(51u;ZhaR33^T5+^_5Gp{F|9?X&K~+ea#0&N*?^PDI;;@JVj+V zKyRibH&_3!YeLN1jhSKKBsA%l0C`Vy##%h(X_AmFz@*pB3zy+4g;yD(?{EK0)2`=1 zW>u_n?vtMV!YOK$L&Pf~0i5|zwZi5)k%4-G+L6TgI8x75KMLIfPTr^yx8nQCRJ;Uy zsyp}cwxYE(MwQ;5{TfLLLxKkBczt~Ip|b4m_13tdvb84_tYYAwr81h7nynFWoE9S? z3lFIt?|ob-$fM$?!oMbqO>y}BiO;wG+S-ts_42Yon54q5&(e{(rL`7nlG?(AWZFkW z#72kKY@YJ>n2YMo9?8L)8$zZ5q>j1to9fCra@6DTgU*kYmG~cozkOxC+@?>>1Vfue z3ylCkm!vMa$Ja0PE7SmNNA$pI&_9juhMKDIg@4ysG9?5~Lpim6`to~HW`JIl^)xJ6 z2>T`wYzUG1{h)g-3NI^25>WDg*&yfVhnm!jOrS%?Zl~H4eM*&)}>=>$+)4G8mfRuKO#eAD)#h7N>|aQ63=!R z2ec=0gCa?P7iR%oPZqD@ngoq79XRUndIsnfaMHPp0Rw_X;iQS%*qAedz`iVcnuF20 zABm*QgAbqn_uwl3{~z2_&;qoa@Z%>!-sY1xJeze|OU7Rn4_g?xQWjK<;-IZMMb$DK zDmb+WxUM?3gKARQx2y(W86L=Pv;&a&bb+Wt z^e|6B0IF!Zdcz`7B||m{g<7}qy3pk}=1fmgBVy?b|BzIM?3GC>{Q9X=Z06e671?>G z&QV7~S)8T11tJ3K$eG=?$f>kI-*u`SZaAyb4gnn8kgy-8;+5I60lPzIR`vDQ_0v`U zl-|W_onPC*sa(Ui!LrBaF|ii#3|Idnb^Hq+3abGn(h<{lrtCu2w}oDYM1?h$Z809I z)+RF4_7m2iWx+(_yEd0kJ5>i8f?-RSrzR%VP7h9Le7l9;MZR-$4uisGAMD z4j2`l^b($=Fa#(Jtq0`TG<1bnXz1H4H;&QjUa5Y%DO@+!9WW(@*~aNK6^*Ra84d#g zyi1I}o~VeGT?%K8QOK##Ii#;Sq3>xnd??_&B(%e(C%Hoe<|&x3nP zeea=1*V`h)i`Ll=9B%d;z`o!Yxz7I8c2YP-9`~sq$X5xaB_5}AnZb3VctkEd;jkY; zzg*wTl#5cvzhX)EE51==hbg^Md4kTzsE0G1k>hA!7%bDe%|4_ZaYol|*NaFJyR=R> zaB4fGbK`f}%Pg}o2`5+Ln{(*rTu~WHfX7rP_|7(tOM!t-$sgXgPp`QoOHSiXe4f

buqGh`z%>X{Kmor}X`#uz`6E#g$qjiCSCpAB$I&K;tg&lw{{(12~N*oKaV zs^Qh-ai6#-0Y;Xrao{C@9~32}X9z@w4Uj>ujm_)>-#StHte4KtAIFT|PHAPwEG~9` zTrkreb#VvI7WM(O8WHm-;=yPzwi)p9UR+wFiK!5^wS%{d*x@i0bTgJi>%w?eczLny zA0+U3aZ{=Y8U3s-{dH%krO-yUf9uASmNqSp!-nI15rdU+P`eSFhMC)ey*0tROESyZ z_{NzPbIAOVxJCM}Io(E}7_zG8-O`E=KVPyJ4thm`O~C@^1lz+N_{ z(9%7vIkCir#Ux!UC|(+~AMSt^#rcvRphe|8=;!FG>M81K=~yqkFZ-bH_{!?7oW2y! z5{EfJm|C0qeM!PdQ8nr-!_>Z(Na&KJ77Gc~J8uL9ztCb12ML5~?r6Cvb--3v76Nu5 z#R#V!^mm_9FhCo58H7>r&(*?Ft&sfLm-V!~gnk{p_x@odL(C~!KMzoXoo|QDUcasA zR$#90lWc^M%@3`0cE7HG(XwLLY12;)acFaBe|k)g0a#EFZ@Hhl3uF(d(z^(wE%~7h zdc*E3ls8@U7;9!gp+iG60!tbeiq|%?+B7M~E6y8k3)nBs?*M5_Em*UWIYIc;!7`_Q>Kh%KS|K z&bqHoO1UobR_-qfo)^!?i04E}>6TH^xX}*8{N`6E|c5xcBi&b;>#N z?isIYz+dB4lxs-GmRt;bcuq`+@ZJ>C@oHb(kK1><-TXmdCsdd!|);jX7=XF-uqhL zwLYu-cKNNHukUXyo0=s=`qN4*sr&MZOB_rhm)FFyxR5mOBD2Y-SuVoagfBDm1@Zx^ z454-y?keawJ4$E^zQxywtI9^}`oud8vA6&aWSXbLQ6fhIC{4mWPk!8i#=eY8iUpUX$)o>7Bl=pUz0rl9@PBO&NV03=V+ie z9<1QyFw=itQL%G8kRbFX8x$$4O~IY{T{qyE`Gf1O!K}oZcJ6N%uRTcX8$=`jayFfo z-#7Da@4d_G4uizsnyEpZ)eQ>tA79wC%{QBVtO~q!GnL-$iaHIt8bn#f>8-}E(;K;e zbVX~TnD6dCJaChz6Hkzmzn4EPal@WCH(YeBH(r;T2Ut}9#uHyC`GpOt(}uzCGwc41 ziYZ_4_WFy8Nu~J%Sofo^5Ic`|42sUY`YU)?lZxkxw?7eYq*R}q*U4p-EL*8tm|l(HwY0ve1y1d1{|9ZOjmpBr#S4MNSGPVnuAwQ zW!7z$U0CvW_*%w84^S1;+S@?O9HI{<3tZlk61R_7FX}Bl^se6h{?=K3CpXj?kYHF>HwWscT)OS z=bYMd6HNaA@C4_+czyo^coB4G6O9sU0=6x&FR_2&-|FmECwxT-d2rjdVH2$Rb?Ud^ zeM??=T|DuG$as{;md*S3SR={Vsr05Le)GgMDsr#NzS-d$Bq|S0T`Rr1wc~a+HW;mr zbIIeFCT%SJyxIUqi2okS_POD2Chh}9re|53{StVuTl6U7m0DCFSP95v8H_o47oS`VIe&kf zrn9ns+ifiwq<4>sU^)(3JzV|MKzfHU#H-WuU^raXr=3lTu`)ntn2h)XxH}G-3R=)T zX!q{k@{;)j7>oS_=<}+5gEq>GTYEik)l!yG5wOWVAV0mFmgaF>Da#Rn70lXYc}Qa^ z(lG$u9#On=8TAir*=#JddiZq8qzvphclWqi!hglgL}#J21EP#kr|ZDIGyP?HXQwcZSMJsSZJsHygnj8-Vplk9SrPjh|Z&>>tGc% zs7;7B>t*tz95HY+kU^6V3(w)k2dmMJZtZ~p-gW1c-1p?s-?nFdh(EVzvN&1)m}kX* zxlPLkx>~=s5c!5UH9QCc2mA#o2mS>qcl{Tn+<|KU6`MUcX(_6#EkUye?Ghv{nQ|v} zVJTmo1g4)4fPC9kou<7`3g#{R>jIj?2&FdOB8u0x5?N`&oAE z1%e*LN&eqeD@3J?{XsW!OJ-y?)IuX70Rn9}J>=ZZ7YxQm8_h=JJ)LFnn9Ro-zEnLCLUI*SBGUC(-#DpdZP|uxd4T~ABOOQa zEk%iX9ceibGX~#euVoF>XqpJ^C07!=!EkOdf?hGS==w!fbq9~0nF6XnB4{p-{96#D z?3|covUi}J&Q%J25En{&5Pa$j3dWOn>w|iSvvsG#UYaWK+OaD>ti~qGDU%Hwt6MaR zeiir6Nn~Q0cWpqbLdlb~NW$H_?VO+1YFe;lJX>rrCe9rJNlb4Y8t|gUwZYR306g3f z5X(=h9QU7em!#arPbD75Q4%V;w;gEe>~~lfv6yqDl9I!*M>Lc2K9i+$+fECHJW^%} zSWUN8Hhb-tiKFIc#v^MX8BbR>DF+so)ZW5j9_cq|Gu3-p#wgIZ9K1Z0X7-qeR%q+Qs50e2V~@ z!}Nyq$`=t^HsIJN)Z&&)OJj&SIUU zHD%wn0bzBcsmH*g(!NfAkfa|0ayodhM3EhyZF z%s1Pla9#(eQ8&}30_t)H`r$*59&T%%!XJdHZbo?r0nlISDr@i~yp;HiiHMOQ+1XCq zR)tcnZPG(jaX>SVK9ZX{wGQ5OGIu)cU^5s0Wjl+CNdma=ENM(3#YtC94ywCI(eGJ) z`jd0mD#5CPE1||OE@Fq^^=l%lVs%js5-_OoA~w4urBtOO>pe)h0!H{enzCh6$qr-M z!)(40g=qVwSE%t~skALWiGiK8#GJ(lx&-Ql{Xl!RHZF3e_ax zcF&Uo8)6aOWvvO>+RpNMNocwl(+NG^JT1pIT&`@{x_E1dvF5|CqOiE7`rtDJ=uy{~gPH=LNni=6;%{aS8Q9=Uhe8i~um(z%6mv0j z6X-C$7KWEIy|hXWWgJeRFvlI0ypGcgi$(H>giOo+;+TH=tFUgjB1<_*cDO$=8-5%$ zmiR<~5!a0~d>DTy`NNzE4hQQ{42>M7pJ>d2np51RBCBt^Hnj==*t_rnQI!~b>I4~9 z2vk1Qe-%1clq7|Dem3iI%9j4l%B9RDT+=6%?zw|fD6#dZ;tN;Ekae10LJweHud}F8 z4}bT0U+tF7ONi)knrL$P7#I3jJn@T}uvjy;NvM9WLf2kZRvqa7r+-5ITp6|c=b_ys z6d&mkYF≠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 diff --git a/repos/AS/LICENSE.txt b/repos/AS/LICENSE.txt deleted file mode 100644 index d582ae10..00000000 --- a/repos/AS/LICENSE.txt +++ /dev/null @@ -1,288 +0,0 @@ -### AS### - -AS Logo/Monogram Copyright (c) 2017 Alfredo Santamaria , All rights reserved. - -Panel graphics in res/ are © 2017 - -Derivative works may not use the AS logo or panel graphics including custom component graphics (knobs, switches, screws, caps,etc.). - -### AS Modules License ### -MIT License - -Copyright (c) 2017 Alfredo Santamaria, Copyright (c) 2017 AS Custom Works - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -### FUNDAMENTAL ### - -Copyright (c) 2016 Andrew Belt (Source code licensed under BSD-3-Clause by Andrew Belt) - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -### HetrickCV ### - -Creative Commons Legal Code - -CC0 1.0 Universal - - CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE - LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN - ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS - INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES - REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS - PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM - THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED - HEREUNDER. - -Statement of Purpose - -The laws of most jurisdictions throughout the world automatically confer -exclusive Copyright and Related Rights (defined below) upon the creator -and subsequent owner(s) (each and all, an "owner") of an original work of -authorship and/or a database (each, a "Work"). - -Certain owners wish to permanently relinquish those rights to a Work for -the purpose of contributing to a commons of creative, cultural and -scientific works ("Commons") that the public can reliably and without fear -of later claims of infringement build upon, modify, incorporate in other -works, reuse and redistribute as freely as possible in any form whatsoever -and for any purposes, including without limitation commercial purposes. -These owners may contribute to the Commons to promote the ideal of a free -culture and the further production of creative, cultural and scientific -works, or to gain reputation or greater distribution for their Work in -part through the use and efforts of others. - -For these and/or other purposes and motivations, and without any -expectation of additional consideration or compensation, the person -associating CC0 with a Work (the "Affirmer"), to the extent that he or she -is an owner of Copyright and Related Rights in the Work, voluntarily -elects to apply CC0 to the Work and publicly distribute the Work under its -terms, with knowledge of his or her Copyright and Related Rights in the -Work and the meaning and intended legal effect of CC0 on those rights. - -1. Copyright and Related Rights. A Work made available under CC0 may be -protected by copyright and related or neighboring rights ("Copyright and -Related Rights"). Copyright and Related Rights include, but are not -limited to, the following: - - i. the right to reproduce, adapt, distribute, perform, display, - communicate, and translate a Work; - ii. moral rights retained by the original author(s) and/or performer(s); -iii. publicity and privacy rights pertaining to a person's image or - likeness depicted in a Work; - iv. rights protecting against unfair competition in regards to a Work, - subject to the limitations in paragraph 4(a), below; - v. rights protecting the extraction, dissemination, use and reuse of data - in a Work; - vi. database rights (such as those arising under Directive 96/9/EC of the - European Parliament and of the Council of 11 March 1996 on the legal - protection of databases, and under any national implementation - thereof, including any amended or successor version of such - directive); and -vii. other similar, equivalent or corresponding rights throughout the - world based on applicable law or treaty, and any national - implementations thereof. - -2. Waiver. To the greatest extent permitted by, but not in contravention -of, applicable law, Affirmer hereby overtly, fully, permanently, -irrevocably and unconditionally waives, abandons, and surrenders all of -Affirmer's Copyright and Related Rights and associated claims and causes -of action, whether now known or unknown (including existing as well as -future claims and causes of action), in the Work (i) in all territories -worldwide, (ii) for the maximum duration provided by applicable law or -treaty (including future time extensions), (iii) in any current or future -medium and for any number of copies, and (iv) for any purpose whatsoever, -including without limitation commercial, advertising or promotional -purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each -member of the public at large and to the detriment of Affirmer's heirs and -successors, fully intending that such Waiver shall not be subject to -revocation, rescission, cancellation, termination, or any other legal or -equitable action to disrupt the quiet enjoyment of the Work by the public -as contemplated by Affirmer's express Statement of Purpose. - -3. Public License Fallback. Should any part of the Waiver for any reason -be judged legally invalid or ineffective under applicable law, then the -Waiver shall be preserved to the maximum extent permitted taking into -account Affirmer's express Statement of Purpose. In addition, to the -extent the Waiver is so judged Affirmer hereby grants to each affected -person a royalty-free, non transferable, non sublicensable, non exclusive, -irrevocable and unconditional license to exercise Affirmer's Copyright and -Related Rights in the Work (i) in all territories worldwide, (ii) for the -maximum duration provided by applicable law or treaty (including future -time extensions), (iii) in any current or future medium and for any number -of copies, and (iv) for any purpose whatsoever, including without -limitation commercial, advertising or promotional purposes (the -"License"). The License shall be deemed effective as of the date CC0 was -applied by Affirmer to the Work. Should any part of the License for any -reason be judged legally invalid or ineffective under applicable law, such -partial invalidity or ineffectiveness shall not invalidate the remainder -of the License, and in such case Affirmer hereby affirms that he or she -will not (i) exercise any of his or her remaining Copyright and Related -Rights in the Work or (ii) assert any associated claims and causes of -action with respect to the Work, in either case contrary to Affirmer's -express Statement of Purpose. - -4. Limitations and Disclaimers. - - a. No trademark or patent rights held by Affirmer are waived, abandoned, - surrendered, licensed or otherwise affected by this document. - b. Affirmer offers the Work as-is and makes no representations or - warranties of any kind concerning the Work, express, implied, - statutory or otherwise, including without limitation warranties of - title, merchantability, fitness for a particular purpose, non - infringement, or the absence of latent or other defects, accuracy, or - the present or absence of errors, whether or not discoverable, all to - the greatest extent permissible under applicable law. - c. Affirmer disclaims responsibility for clearing rights of other persons - that may apply to the Work or any use thereof, including without - limitation any person's Copyright and Related Rights in the Work. - Further, Affirmer disclaims responsibility for obtaining any necessary - consents, permissions or other rights required for any use of the - Work. - d. Affirmer understands and acknowledges that Creative Commons is not a - party to this document and has no duty or obligation with respect to - this CC0 or use of the Work. - - -### Mental ### - -Copyright (c) 2017 Strum strum@softhome.net , All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - -2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - -3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -### Autodafe ### - -Copyright (c) 2016 Antonio Grazioli (AUtodafe) is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -### martin-lueders/ML_modules ### - -BSD 3-Clause License - -Copyright (c) 2017, Martin Lueders -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -* Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. - -* Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -* Neither the name of the copyright holder nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE -FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR -SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, -OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -### Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain ### ------------------------------------------------------------------------ - -Written by Jezar at Dreampoint - http://www.dreampoint.co.uk - - -Introduction ------------- - -Hello. - -I'll try to keep this "readme" reasonably small. There are few things in the world that I hate more than long "readme" files. Except "coding conventions" - but more on that later... - -In this zip file you will find two folders of C++ source code: - -"Components" - Contains files that should clean-compile ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary to make ANY changes to these files to get them to compile, except to make up for inadequacies of certain compilers. These files create three classes - a comb filter, an allpass filter, and a reverb model made up of a number of instances of the filters, with some features to control the filters at a macro level. You will need to link these classes into another program that interfaces with them. The files in the components drawer are completely independant, and can be built without dependancies on anything else. Because of the simple interface, it should be possible to interface these files to any system - VST, DirectX, anything - without changing them AT ALL. - -"FreeverbVST" - Contains a Steinberg VST implementation of this version of Freeverb, using the components in (surprise) the components folder. It was built on a PC but may compile properly for the Macintosh with no problems. I don't know - I don't have a Macintosh. If you've figured out how to compile the examples in the Steinberg VST Development Kit, then you should easilly figure out how to bring the files into a project and get it working in a few minutes. It should be very simple. - -Note that this version of Freeverb doesn't contain predelay, or any EQ. I thought that might make it difficult to understand the "reverb" part of the code. Once you figure out how Freeverb works, you should find it trivial to add such features with little CPU overhead. - -Also, the code in this version of Freeverb has been optimised. This has changed the sound *slightly*, but not significantly compared to how much processing power it saves. - -Finally, note that there is also a built copy of this version of Freeverb called "Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for the Mac or anything else, then you'll need to build it yourself from the code. - - -Technical Explanation ---------------------- - -Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model. I guess the only reason why it sounds better than other reverbs, is simply because I spent a long while doing listening tests in order to create the values found in "tuning.h". It uses 8 comb filters on both the left and right channels), and you might possibly be able to get away with less if CPU power is a serious constraint for you. It then feeds the result of the reverb through 4 allpass filters on both the left and right channels. These "smooth" the sound. Adding more than four allpasses doesn't seem to add anything significant to the sound, and if you use less, the sound gets a bit "grainy". The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect. - -Hopefully, you should find the code in the components drawer a model of brevity and clarity. Notice that I don't use any "coding conventions". Personally, I think that coding conventions suck. They are meant to make the code "clearer", but they inevitably do the complete opposite, making the code completely unfathomable. Anyone whose done Windows programming with its - frankly stupid - "Hungarian notation" will know exactly what I mean. Coding conventions typically promote issues that are irrelevant up to the status of appearing supremely important. It may have helped back people in the days when compilers where somewhat feeble in their type-safety, but not in the new millenium with advanced C++ compilers. - -Imagine if we rewrote the English language to conform to coding conventions. After all, The arguments should be just as valid for the English language as they are for a computer language. For example, we could put a lower-case "n" in front of every noun, a lower-case "p" in front of a persons name, a lower-case "v" in front of every verb, and a lower-case "a" in front of every adjective. Can you imagine what the English language would look like? All in the name of "clarity". It's just as stupid to do this for computer code as it would be to do it for the English language. I hope that the code for Freeverb in the components drawer demonstrates this, and helps start a movement back towards sanity in coding practices. - - -Background ----------- - -Why is the Freeverb code now public domain? Simple. I only intended to create Freeverb to provide me and my friends with studio-quality reverb for free. I never intended to make any money out of it. However, I simply do not have the time to develop it any further. I'm working on a "concept album" at the moment, and I'll never finish it if I spend any more time programming. - -In any case, I make more far money as a contract programmer - making Mobile Internet products - than I ever could writing plugins, so it simply doesn't make financial sense for me to spend any more time on it. - -Rather than give Freeverb to any particular individual or organisation to profit from it, I've decided to give it away to the internet community at large, so that quality, FREE (or at the very least, low-cost) reverbs can be developed for all platforms. - -Feel free to use the source code for Freeverb in any of your own products, whether they are also available for free, or even if they are commercial - I really don't mind. You may do with the code whatever you wish. If you use it in a product (whether commercial or not), it would be very nice of you, if you were to send me a copy of your product - although I appreciate that this isn't always possible in all circumstances. - -HOWEVER, please don't bug me with questions about how to use this code. I gave away Freeverb because I don't have time to maintain it. That means I *certainly* don't have time to answer questions about the source code, so please don't email questions to me. I *will* ignore them. If you can't figure the code for Freeverb out - then find somebody who can. I hope that either way, you enjoy experimenting with it. - - -Disclaimer ----------- - -This software and source code is given away for free, without any warranties of any kind. It has been given away to the internet community as a free gift, so please treat it in the same spirit. - - -I hope this code is useful and interesting to you all! -I hope you have lots of fun experimenting with it and make good products! - -Very best regards, -Jezar. -Technology Consultant -Dreampoint Design and Engineering -http://www.dreampoint.co.uk - - -//ends \ No newline at end of file diff --git a/repos/AS/Makefile b/repos/AS/Makefile deleted file mode 100644 index b4a47860..00000000 --- a/repos/AS/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -# Must follow the format in the Naming section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html -SLUG = AS - -# Must follow the format in the Versioning section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html -VERSION = 0.6dev - -# FLAGS will be passed to both the C and C++ compiler -FLAGS += -CFLAGS += -CXXFLAGS += - -# Careful about linking to shared libraries, since you can't assume much about the user's environment and library search path. -# Static libraries are fine. -LDFLAGS += - -# Add .cpp and .c files to the build -SOURCES += $(wildcard src/*.cpp freeverb/*.cpp) - -# Add files to the ZIP package when running `make dist` -# The compiled plugin is automatically added. -DISTRIBUTABLES += $(wildcard LICENSE*) res - -# If RACK_DIR is not defined when calling the Makefile, default to two levels above -RACK_DIR ?= ../.. - -# Include the VCV Rack plugin Makefile framework -include $(RACK_DIR)/plugin.mk \ No newline at end of file diff --git a/repos/AS/README.md b/repos/AS/README.md deleted file mode 100644 index 253e787c..00000000 --- a/repos/AS/README.md +++ /dev/null @@ -1,169 +0,0 @@ - -# AS modules for VCV Rack - -AS is a collection of modules for [VCV Rack](https://vcvrack.com/) by Alfredo Santamaria, Need a custom work?, you can find me at [Hakken.com.mx](http://www.hakken.com.mx/). - -AS Logo/Monogram Copyright (c) 2017 Alfredo Santamaria , All rights reserved. -Panel graphics in res/ are © 2017 -Derivative works may not use the AS logo or panel graphics including custom component graphics (knobs, switches, screws, caps,etc.). - -### Releases - -AS is compatible with VCV Rack 0.5.X. releases for Mac, Win and Linux are found on the [Release Page](https://github.com/AScustomWorks/as/releases) - -If you enjoy those modules you can support the development by making a donation, it will be appreciated!. Here's the link: [DONATE](https://www.paypal.me/frederius/) - - -![AS](https://github.com/AScustomWorks/AS/blob/master/AS.JPG) - -# AS modules - -### ADSR -Fundamental ADSR module. Mods: graphics, sliders instead of knobs to provide faster visual input. - -### VCA -Fundamental VCA module. Mods: graphics, sliders instead of knobs to provide faster visual input, one input + lin/exp switch instead of two separate inputs. - -V 0.5.3: Code fix, now the VCA module works ok when there's no envelope input present. - -### QuadVCA/Mixer -AS VCA module x 4, plus mixer functionality (user request). - -V 0.5.5: First relase of this module. - -### BPM Clock -Strum's Mental VCV Master Clock. Mods: graphics, reset trigger input and output. - -V 0.5.2: all the trigger signals are 10v now, it seems that some other modules don't work fine with the correct voltages. - -V 0.5.4: Fixed a reset signal issue. - -V 0.5.5: 16th clock output now sends unipolar signal, just as the other outputs. - -### 8 Channel Mixer -Fundamental/Autodafe mixer module. Mods: graphics, sliders for channel volume, stereo or mono output(L channel outputs L+R signal if R channel is not active). Now with main mix mute button. Beware,the default setting for each channel volume is at 70% in stead of 0%. - -V 0.5.2: added MIX L & R input to chain mixers without giving up 2 mixer channels. - -### Multi 2x5 -2x5 Signal multiplier. - -V 0.5.7 Module size reduced to 5HP - -### Merge 2x5 -2x5 CV Signal merger. - -V 0.5.7: First relase of this module. - -### Mono VU Meter -V 0.5.4, New module added, Mono VU Meter made to match the 8CH Mixer. - -### Stereo VU Meter -V 0.5.3, New module added, Stereo VU Meter made to match the 8CH Mixer. - -### 16-step Sequencer -Fundamental/Autodafe SEQ module. Mods: graphics, digital display to show the number of steps selected. - -V 0.5.2: added digital display to show current sequence step so you can run/stop the sequence and tune in the current step. - -V 0.5.3: added edit mode: manual trigger with current step selector buttons and blinking led light to highlight the current step. Send a row output to a NYSTHI Hot Tuna and enjoy precise step tuning! - -V 0.5.4: Exposed the trigger mode settings into the panel (contextual menu is still there but it won't change the mode) - -### TinySawish -RODENTMODULES MuO. Mods: graphics, smaller panel size. - -V 0.5.4 Added dc blocker code, modified a bit the internal parameters. - -V 0.5.5 Extendend the freq range 1 octave below. - -V 0.5.7 Module size reduced to 4HP - -### TinySine -VCV tutorial module. Mods: graphics, proper sine wave. - -V 0.5.7 Module size reduced to 4HP - -### TriLFO -Fundamental LFO module. Mods:graphics, controls stripped to the basics but you get 3 LFOS on the same space. - -### Triggers -A couple of manual trigger buttons, one ON/OFF, one temporary, both with 4 trigger outputs, trigger volts knob going from 1 to 10 v output. - -(NOTICE: Triggers MKI will supersede Triggers, so Triggers will be removed from the plugin by v0.6 but you have time now to replace it on your current patches and keep everything working fine). - -### Triggers MKI -A manual CV signal trigger module with latch and temporary triggers, volts knob lets you adjust from 0 to 10 v output. - -V 0.5.7: First relase of this module. - -### Triggers MKII -A manual CV signal temporary trigger module with labeling integrated, so you remember where the signal is going. - -The labels list includes: - "------", "MUTE"," SOLO"," RESET"," DRUMS"," KICK"," SNARE"," HIHAT"," CLAP"," PERC","BASS 1","BASS 2"," GTR 1", - " GTR 2","LEAD 1","LEAD 2"," PAD 1"," PAD 2","CHORDS"," FX 1"," FX 2"," SEQ 1"," SEQ 2"," MIX 1"," MIX 2", - " AUX 1"," AUX 2"," ON"," OFF"," START"," STOP"," PAUSE"," UP"," DOWN"," LEFT"," RIGHT", - -V 0.5.7: First relase of this module. - -### Steps -Strum's Mental VCV Counters module. Mods: graphics, 3 counters, up to 64 steps each, added reset lights to the buttons. - -V 0.5.4: First relase of this module. - -V 0.5.5: code tweaks. - -### Launch Gate -Delay the start of a flow of signals by a set number of clock ticks (TAOS request). - -V 0.5.5: First relase of this module. - -### Kill Gate -Cut the flow of signals after a set number of clock ticks (TAOS request). - -V 0.5.6: First relase of this module. - -### Signal Delay -Delay the incomming CV signal by set milliseconds, with signal thru and delayed output. You can chain several Signal Delay modules together for unlimited length of delays. (TAOS request). - -V 0.5.5: First relase of this module. - -### Delay Plus -Fundamental Delay module. Mods: graphics, digital display to show delay time in MS , wet signal send & return, bypass switch. - -V 0.5.4: Updated look. - -V 0.5.5 CHanged the time knob reading from exponential to linear, now you can set any value precisely at the whole 1 to 10k ms range. - -### Phaser -Autodafe's Phaser Fx module. Mods: graphics, bypass switch. - -V 0.5.4: Added CV inputs for each parameter, updated look. - -### SuperDrive -Overdrive/clipping Fx module with DRIVE, TONE and GAIN parameters, to get those acid bass lines we all love!. - -V 0.5.4: First relase of this module. - -### Reverb -Reverb Fx module based on ML_modules reverb and Freeverb code, with DECAY, DAMP and BLEND parameters, a little bit tamed Reverb with mixed output signal. - -0.5.4: First relase of this module. - -### Tremolo -Tremolo Fx module with SHAPE, SPEED and BLEND parameters, and a phase switch (set your effect, duplicate the module and invert the phase for stereo tremolo setup)your Tremolo to go!. - -0.5.6: First relase of this module. - -### WaveShaper -HetrickCV Wave Shaper module. Mods: graphics, bypass switch. - -V 0.5.2: added back the voltage range switch. - -V 0.5.4: Updated look. - -### Blank Panel -Blank panels in 4,6 & 8 HP. - -### Have fun! diff --git a/repos/AS/_config.yml b/repos/AS/_config.yml deleted file mode 100644 index 18854876..00000000 --- a/repos/AS/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-midnight \ No newline at end of file diff --git a/repos/AS/freeverb/allpass.hpp b/repos/AS/freeverb/allpass.hpp deleted file mode 100644 index 9d1ba6ec..00000000 --- a/repos/AS/freeverb/allpass.hpp +++ /dev/null @@ -1,80 +0,0 @@ -// Allpass filter declaration -// -// Written by Jezar at Dreampoint, June 2000 -// http://www.dreampoint.co.uk -// This code is public domain - -// adapted for use in VCV Rack by Martin Lueders - -#ifndef _allpass_ -#define _allpass_ -#include "denormals.h" - -class allpass -{ -public: - allpass() - { - bufidx = 0; - buffer = 0; - }; - - ~allpass() - { - if (buffer) delete buffer; - }; - - void makebuffer(float *buf, int size) - { - if (buffer) delete buffer; - buffer = new float[size]; - bufsize = size; - bufidx = 0; - } - - void deletebuffer() - { - if(buffer) delete buffer; - bufsize = 0; - }; - - void setbuffer(float *buf, int size) - { - buffer = buf; - bufsize = size; - }; - - inline float process(float inp, float feedback); - void mute() - { - for (int i=0; i=bufsize) bufidx = 0; - - return output; -} - -#endif//_allpass - -//ends diff --git a/repos/AS/freeverb/comb.hpp b/repos/AS/freeverb/comb.hpp deleted file mode 100644 index a0a8bbf0..00000000 --- a/repos/AS/freeverb/comb.hpp +++ /dev/null @@ -1,92 +0,0 @@ -// Comb filter class declaration -// -// Written by Jezar at Dreampoint, June 2000 -// http://www.dreampoint.co.uk -// This code is public domain - -// adapted for use in VCV Rack by Martin Lueders - -#ifndef _comb_ -#define _comb_ - -#include "denormals.h" - -class comb -{ -public: - comb() - { - buffer = 0; - filterstore = 0; - bufidx = 0; - }; - - ~comb() - { - if (buffer) delete buffer; - }; - - void makebuffer(float *buf, int size) - { - if (buffer) {delete buffer;} - buffer = new float[size]; - bufsize = size; - bufidx = 0; - } - - void deletebuffer() - { - if(buffer) delete buffer; - bufsize = 0; - }; - - void setbuffer(float *buf, int size) - { - buffer = buf; - bufsize = size; - }; - - inline float process(float inp, float damp1, float damp2, float feedback); - void mute() - { - for( int i=0; i=bufsize) bufidx = 0; - - return output; -} - -#endif //_comb_ - -//ends diff --git a/repos/AS/freeverb/denormals.h b/repos/AS/freeverb/denormals.h deleted file mode 100644 index f8714127..00000000 --- a/repos/AS/freeverb/denormals.h +++ /dev/null @@ -1,15 +0,0 @@ -// Macro for killing denormalled numbers -// -// Written by Jezar at Dreampoint, June 2000 -// http://www.dreampoint.co.uk -// Based on IS_DENORMAL macro by Jon Watte -// This code is public domain - -#ifndef _denormals_ -#define _denormals_ - -#define undenormalise(sample) if(((*(unsigned int*)&sample)&0x7f800000)==0) sample=0.0f - -#endif//_denormals_ - -//ends diff --git a/repos/AS/freeverb/readme.txt b/repos/AS/freeverb/readme.txt deleted file mode 100644 index 36361f4b..00000000 --- a/repos/AS/freeverb/readme.txt +++ /dev/null @@ -1,67 +0,0 @@ -Freeverb - Free, studio-quality reverb SOURCE CODE in the public domain ------------------------------------------------------------------------ - -Written by Jezar at Dreampoint - http://www.dreampoint.co.uk - - -Introduction ------------- - -Hello. - -I'll try to keep this "readme" reasonably small. There are few things in the world that I hate more than long "readme" files. Except "coding conventions" - but more on that later... - -In this zip file you will find two folders of C++ source code: - -"Components" - Contains files that should clean-compile ON ANY TYPE OF COMPUTER OR SYSTEM WHATSOEVER. It should not be necessary to make ANY changes to these files to get them to compile, except to make up for inadequacies of certain compilers. These files create three classes - a comb filter, an allpass filter, and a reverb model made up of a number of instances of the filters, with some features to control the filters at a macro level. You will need to link these classes into another program that interfaces with them. The files in the components drawer are completely independant, and can be built without dependancies on anything else. Because of the simple interface, it should be possible to interface these files to any system - VST, DirectX, anything - without changing them AT ALL. - -"FreeverbVST" - Contains a Steinberg VST implementation of this version of Freeverb, using the components in (surprise) the components folder. It was built on a PC but may compile properly for the Macintosh with no problems. I don't know - I don't have a Macintosh. If you've figured out how to compile the examples in the Steinberg VST Development Kit, then you should easilly figure out how to bring the files into a project and get it working in a few minutes. It should be very simple. - -Note that this version of Freeverb doesn't contain predelay, or any EQ. I thought that might make it difficult to understand the "reverb" part of the code. Once you figure out how Freeverb works, you should find it trivial to add such features with little CPU overhead. - -Also, the code in this version of Freeverb has been optimised. This has changed the sound *slightly*, but not significantly compared to how much processing power it saves. - -Finally, note that there is also a built copy of this version of Freeverb called "Freeverb3.dll" - this is a VST plugin for the PC. If you want a version for the Mac or anything else, then you'll need to build it yourself from the code. - - -Technical Explanation ---------------------- - -Freeverb is a simple implementation of the standard Schroeder/Moorer reverb model. I guess the only reason why it sounds better than other reverbs, is simply because I spent a long while doing listening tests in order to create the values found in "tuning.h". It uses 8 comb filters on both the left and right channels), and you might possibly be able to get away with less if CPU power is a serious constraint for you. It then feeds the result of the reverb through 4 allpass filters on both the left and right channels. These "smooth" the sound. Adding more than four allpasses doesn't seem to add anything significant to the sound, and if you use less, the sound gets a bit "grainy". The filters on the right channel are slightly detuned compared to the left channel in order to create a stereo effect. - -Hopefully, you should find the code in the components drawer a model of brevity and clarity. Notice that I don't use any "coding conventions". Personally, I think that coding conventions suck. They are meant to make the code "clearer", but they inevitably do the complete opposite, making the code completely unfathomable. Anyone whose done Windows programming with its - frankly stupid - "Hungarian notation" will know exactly what I mean. Coding conventions typically promote issues that are irrelevant up to the status of appearing supremely important. It may have helped back people in the days when compilers where somewhat feeble in their type-safety, but not in the new millenium with advanced C++ compilers. - -Imagine if we rewrote the English language to conform to coding conventions. After all, The arguments should be just as valid for the English language as they are for a computer language. For example, we could put a lower-case "n" in front of every noun, a lower-case "p" in front of a persons name, a lower-case "v" in front of every verb, and a lower-case "a" in front of every adjective. Can you imagine what the English language would look like? All in the name of "clarity". It's just as stupid to do this for computer code as it would be to do it for the English language. I hope that the code for Freeverb in the components drawer demonstrates this, and helps start a movement back towards sanity in coding practices. - - -Background ----------- - -Why is the Freeverb code now public domain? Simple. I only intended to create Freeverb to provide me and my friends with studio-quality reverb for free. I never intended to make any money out of it. However, I simply do not have the time to develop it any further. I'm working on a "concept album" at the moment, and I'll never finish it if I spend any more time programming. - -In any case, I make more far money as a contract programmer - making Mobile Internet products - than I ever could writing plugins, so it simply doesn't make financial sense for me to spend any more time on it. - -Rather than give Freeverb to any particular individual or organisation to profit from it, I've decided to give it away to the internet community at large, so that quality, FREE (or at the very least, low-cost) reverbs can be developed for all platforms. - -Feel free to use the source code for Freeverb in any of your own products, whether they are also available for free, or even if they are commercial - I really don't mind. You may do with the code whatever you wish. If you use it in a product (whether commercial or not), it would be very nice of you, if you were to send me a copy of your product - although I appreciate that this isn't always possible in all circumstances. - -HOWEVER, please don't bug me with questions about how to use this code. I gave away Freeverb because I don't have time to maintain it. That means I *certainly* don't have time to answer questions about the source code, so please don't email questions to me. I *will* ignore them. If you can't figure the code for Freeverb out - then find somebody who can. I hope that either way, you enjoy experimenting with it. - - -Disclaimer ----------- - -This software and source code is given away for free, without any warranties of any kind. It has been given away to the internet community as a free gift, so please treat it in the same spirit. - - -I hope this code is useful and interesting to you all! -I hope you have lots of fun experimenting with it and make good products! - -Very best regards, -Jezar. -Technology Consultant -Dreampoint Design and Engineering -http://www.dreampoint.co.uk - - -//ends diff --git a/repos/AS/freeverb/revmodel.cpp b/repos/AS/freeverb/revmodel.cpp deleted file mode 100644 index 3fa13906..00000000 --- a/repos/AS/freeverb/revmodel.cpp +++ /dev/null @@ -1,233 +0,0 @@ -// Reverb model implementation -// -// Written by Jezar at Dreampoint, June 2000 -// http://www.dreampoint.co.uk -// This code is public domain - -// adapted for use in VCV Rack by Martin Lueders - -#include "revmodel.hpp" - -revmodel::revmodel() -{ -}; - - -void revmodel::init(const float sampleRate) -{ - - conversion = sampleRate/44100.0; - - int ccombtuningL1 = round(conversion * combtuningL1); - int ccombtuningR1 = round(conversion * combtuningR1); - int ccombtuningL2 = round(conversion * combtuningL2); - int ccombtuningR2 = round(conversion * combtuningR2); - int ccombtuningL3 = round(conversion * combtuningL3); - int ccombtuningR3 = round(conversion * combtuningR3); - int ccombtuningL4 = round(conversion * combtuningL4); - int ccombtuningR4 = round(conversion * combtuningR4); - int ccombtuningL5 = round(conversion * combtuningL5); - int ccombtuningR5 = round(conversion * combtuningR5); - int ccombtuningL6 = round(conversion * combtuningL6); - int ccombtuningR6 = round(conversion * combtuningR6); - int ccombtuningL7 = round(conversion * combtuningL7); - int ccombtuningR7 = round(conversion * combtuningR7); - int ccombtuningL8 = round(conversion * combtuningL8); - int ccombtuningR8 = round(conversion * combtuningR8); - - int callpasstuningL1 = round(conversion * allpasstuningL1); - int callpasstuningR1 = round(conversion * allpasstuningR1); - int callpasstuningL2 = round(conversion * allpasstuningL2); - int callpasstuningR2 = round(conversion * allpasstuningR2); - int callpasstuningL3 = round(conversion * allpasstuningL3); - int callpasstuningR3 = round(conversion * allpasstuningR3); - int callpasstuningL4 = round(conversion * allpasstuningL4); - int callpasstuningR4 = round(conversion * allpasstuningR4); - - // Tie the components to their buffers - combL[0].makebuffer(bufcombL1,ccombtuningL1); - combR[0].makebuffer(bufcombR1,ccombtuningR1); - combL[1].makebuffer(bufcombL2,ccombtuningL2); - combR[1].makebuffer(bufcombR2,ccombtuningR2); - combL[2].makebuffer(bufcombL3,ccombtuningL3); - combR[2].makebuffer(bufcombR3,ccombtuningR3); - combL[3].makebuffer(bufcombL4,ccombtuningL4); - combR[3].makebuffer(bufcombR4,ccombtuningR4); - combL[4].makebuffer(bufcombL5,ccombtuningL5); - combR[4].makebuffer(bufcombR5,ccombtuningR5); - combL[5].makebuffer(bufcombL6,ccombtuningL6); - combR[5].makebuffer(bufcombR6,ccombtuningR6); - combL[6].makebuffer(bufcombL7,ccombtuningL7); - combR[6].makebuffer(bufcombR7,ccombtuningR7); - combL[7].makebuffer(bufcombL8,ccombtuningL8); - combR[7].makebuffer(bufcombR8,ccombtuningR8); - - allpassL[0].makebuffer(bufallpassL1,callpasstuningL1); - allpassR[0].makebuffer(bufallpassR1,callpasstuningR1); - allpassL[1].makebuffer(bufallpassL2,callpasstuningL2); - allpassR[1].makebuffer(bufallpassR2,callpasstuningR2); - allpassL[2].makebuffer(bufallpassL3,callpasstuningL3); - allpassR[2].makebuffer(bufallpassR3,callpasstuningR3); - allpassL[3].makebuffer(bufallpassL4,callpasstuningL4); - allpassR[3].makebuffer(bufallpassR4,callpasstuningR4); - - feedback_allpass = 0.5; - - setwet(initialwet); - setroomsize(initialroom); - setdry(initialdry); - setdamp(initialdamp); - setwidth(initialwidth); - setmode(initialmode); - - - // Buffer will be full of rubbish - so we MUST mute them - mute(); -} - - -void revmodel::mute() -{ - if (getmode() >= freezemode) - return; - - for (int i=0;i= freezemode) - { - roomsize1 = 1; - damp1 = 0; - gain = muted; - } - else - { - roomsize1 = roomsize; - damp1 = damp; - gain = fixedgain; - } - - damp2 = 1.0 - damp1; -} - -// The following get/set functions are not inlined, because -// speed is never an issue when calling them, and also -// because as you develop the reverb model, you may -// wish to take dynamic action when they are called. - -void revmodel::setroomsize(float value) -{ - roomsize = ((value*scaleroom) + offsetroom); // * conversion; - update(); -} - -float revmodel::getroomsize() -{ -// return (roomsize/conversion-offsetroom)/scaleroom; - return (roomsize-offsetroom)/scaleroom; -} - -void revmodel::setdamp(float value) -{ - damp = value*scaledamp/conversion; - damp = value*scaledamp * sqrt(conversion) ; - update(); -} - -float revmodel::getdamp() -{ -// return conversion * damp/scaledamp; - return damp/scaledamp; -} - -void revmodel::setwet(float value) -{ - wet = value*scalewet; - update(); -} - -float revmodel::getwet() -{ - return wet/scalewet; -} - -void revmodel::setdry(float value) -{ - dry = value*scaledry; -} - -float revmodel::getdry() -{ - return dry/scaledry; -} - -void revmodel::setwidth(float value) -{ - width = value; - update(); -} - -float revmodel::getwidth() -{ - return width; -} - -void revmodel::setmode(float value) -{ - mode = value; - update(); -} - -float revmodel::getmode() -{ - if (mode >= freezemode) - return 1; - else - return 0; -} - -//ends diff --git a/repos/AS/freeverb/revmodel.hpp b/repos/AS/freeverb/revmodel.hpp deleted file mode 100644 index 139548de..00000000 --- a/repos/AS/freeverb/revmodel.hpp +++ /dev/null @@ -1,99 +0,0 @@ -// Reverb model declaration -// -// Written by Jezar at Dreampoint, June 2000 -// http://www.dreampoint.co.uk -// This code is public domain - -// adapted for use in VCV Rack by Martin Lueders - -#ifndef _revmodel_ -#define _revmodel_ - -#include - -#include "comb.hpp" -#include "allpass.hpp" -#include "tuning.h" - -class revmodel -{ -public: - revmodel(); - - void init(const float sampleRate); - - void mute(); - - void process(const float input, float &outputL, float &outputR); - - void setroomsize(float value); - float getroomsize(); - void setdamp(float value); - float getdamp(); - void setwet(float value); - float getwet(); - void setdry(float value); - float getdry(); - void setwidth(float value); - float getwidth(); - void setmode(float value); - float getmode(); -private: - void update(); -private: - float gain; - float roomsize,roomsize1; - float damp,damp1, damp2; - float feedback_allpass; - float wet,wet1,wet2; - float dry; - float width; - float mode; - - float conversion; - float math_e = 2.71828; - - // The following are all declared inline - // to remove the need for dynamic allocation - // with its subsequent error-checking messiness - - // Comb filters - comb combL[numcombs]; - comb combR[numcombs]; - - // Allpass filters - allpass allpassL[numallpasses]; - allpass allpassR[numallpasses]; - - // Buffers for the combs - float *bufcombL1; - float *bufcombR1; - float *bufcombL2; - float *bufcombR2; - float *bufcombL3; - float *bufcombR3; - float *bufcombL4; - float *bufcombR4; - float *bufcombL5; - float *bufcombR5; - float *bufcombL6; - float *bufcombR6; - float *bufcombL7; - float *bufcombR7; - float *bufcombL8; - float *bufcombR8; - - // Buffers for the allpasses - float *bufallpassL1; - float *bufallpassR1; - float *bufallpassL2; - float *bufallpassR2; - float *bufallpassL3; - float *bufallpassR3; - float *bufallpassL4; - float *bufallpassR4; -}; - -#endif//_revmodel_ - -//ends diff --git a/repos/AS/freeverb/tuning.h b/repos/AS/freeverb/tuning.h deleted file mode 100644 index 709e0457..00000000 --- a/repos/AS/freeverb/tuning.h +++ /dev/null @@ -1,62 +0,0 @@ -// Reverb model tuning values -// -// Written by Jezar at Dreampoint, June 2000 -// http://www.dreampoint.co.uk -// This code is public domain - -#ifndef _tuning_ -#define _tuning_ - -const int numcombs = 8; -const int numallpasses = 4; -const float muted = 0; -//const float fixedgain = 0.015f; -const float fixedgain = 0.025f; -const float scalewet = 3; -const float scaledry = 2; -const float scaledamp = 0.4f; -//const float scaleroom = 0.28f; -const float scaleroom = 0.30f; -const float offsetroom = 0.7f; -const float initialroom = 0.5f; -const float initialdamp = 0.5f; -const float initialwet = 1/scalewet; -const float initialdry = 0; -const float initialwidth = 1; -const float initialmode = 0; -const float freezemode = 0.5f; -const int stereospread = 23; - -// These values assume 44.1KHz sample rate -// they will probably be OK for 48KHz sample rate -// but would need scaling for 96KHz (or other) sample rates. -// The values were obtained by listening tests. -const int combtuningL1 = 1116; -const int combtuningR1 = 1116+stereospread; -const int combtuningL2 = 1188; -const int combtuningR2 = 1188+stereospread; -const int combtuningL3 = 1277; -const int combtuningR3 = 1277+stereospread; -const int combtuningL4 = 1356; -const int combtuningR4 = 1356+stereospread; -const int combtuningL5 = 1422; -const int combtuningR5 = 1422+stereospread; -const int combtuningL6 = 1491; -const int combtuningR6 = 1491+stereospread; -const int combtuningL7 = 1557; -const int combtuningR7 = 1557+stereospread; -const int combtuningL8 = 1617; -const int combtuningR8 = 1617+stereospread; -const int allpasstuningL1 = 556; -const int allpasstuningR1 = 556+stereospread; -const int allpasstuningL2 = 441; -const int allpasstuningR2 = 441+stereospread; -const int allpasstuningL3 = 341; -const int allpasstuningR3 = 341+stereospread; -const int allpasstuningL4 = 225; -const int allpasstuningR4 = 225+stereospread; - -#endif//_tuning_ - -//ends - diff --git a/repos/AS/res/8chMixer.svg b/repos/AS/res/8chMixer.svg deleted file mode 100644 index dc30fab8..00000000 --- a/repos/AS/res/8chMixer.svg +++ /dev/null @@ -1,626 +0,0 @@ - - - -image/svg+xml  \ No newline at end of file diff --git a/repos/AS/res/ADSR.svg b/repos/AS/res/ADSR.svg deleted file mode 100644 index d64f8200..00000000 --- a/repos/AS/res/ADSR.svg +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/BPMClock.svg b/repos/AS/res/BPMClock.svg deleted file mode 100644 index c6df8726..00000000 --- a/repos/AS/res/BPMClock.svg +++ /dev/null @@ -1,582 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/BlankPanel4.svg b/repos/AS/res/BlankPanel4.svg deleted file mode 100644 index 37465fb9..00000000 --- a/repos/AS/res/BlankPanel4.svg +++ /dev/null @@ -1,145 +0,0 @@ - - - - - - image/svg+xml - - BlankPanel8 - - - - - - - - BlankPanel8 - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/BlankPanel6.svg b/repos/AS/res/BlankPanel6.svg deleted file mode 100644 index 2daf64a0..00000000 --- a/repos/AS/res/BlankPanel6.svg +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - image/svg+xml - - - - - - - MyModule - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/BlankPanel8.svg b/repos/AS/res/BlankPanel8.svg deleted file mode 100644 index b235d843..00000000 --- a/repos/AS/res/BlankPanel8.svg +++ /dev/null @@ -1,149 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - BlankPanel8 - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/DelayPlus.svg b/repos/AS/res/DelayPlus.svg deleted file mode 100644 index c7c4846b..00000000 --- a/repos/AS/res/DelayPlus.svg +++ /dev/null @@ -1,678 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Flow.svg b/repos/AS/res/Flow.svg deleted file mode 100644 index 032dd91e..00000000 --- a/repos/AS/res/Flow.svg +++ /dev/null @@ -1,505 +0,0 @@ - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/KillGate.svg b/repos/AS/res/KillGate.svg deleted file mode 100644 index 9eb339b1..00000000 --- a/repos/AS/res/KillGate.svg +++ /dev/null @@ -1,544 +0,0 @@ - - - - - - image/svg+xml - - BlankPanel8 - - - - - - - - BlankPanel8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/LaunchGate.svg b/repos/AS/res/LaunchGate.svg deleted file mode 100644 index 3031f5dc..00000000 --- a/repos/AS/res/LaunchGate.svg +++ /dev/null @@ -1,556 +0,0 @@ - - - - - - image/svg+xml - - BlankPanel8 - - - - - - - - BlankPanel8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Merge2_5.svg b/repos/AS/res/Merge2_5.svg deleted file mode 100644 index 3e069821..00000000 --- a/repos/AS/res/Merge2_5.svg +++ /dev/null @@ -1,404 +0,0 @@ - - - - - - image/svg+xml - - MyModule - - - - - - - - MyModule - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Multiple2_5 copy.svg b/repos/AS/res/Multiple2_5 copy.svg deleted file mode 100644 index 60560816..00000000 --- a/repos/AS/res/Multiple2_5 copy.svg +++ /dev/null @@ -1,395 +0,0 @@ - - - - - - image/svg+xml - - MyModule - - - - - - MyModule - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Multiple2_5.svg b/repos/AS/res/Multiple2_5.svg deleted file mode 100644 index 399ea9b6..00000000 --- a/repos/AS/res/Multiple2_5.svg +++ /dev/null @@ -1,399 +0,0 @@ - - - - - - image/svg+xml - - MyModule - - - - - - MyModule - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/OFL.txt b/repos/AS/res/OFL.txt deleted file mode 100644 index 5ccca47e..00000000 --- a/repos/AS/res/OFL.txt +++ /dev/null @@ -1,98 +0,0 @@ -Copyright (c) 2014, Cedric Knight , -with Reserved Font Name "Segment7". - -Copyright (c) 2009, Paul Flo Williams (paul@frixxon.co.uk)., -with Reserved Font Name "Segment14”. - - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/repos/AS/res/Phaser.svg b/repos/AS/res/Phaser.svg deleted file mode 100644 index f7d64e77..00000000 --- a/repos/AS/res/Phaser.svg +++ /dev/null @@ -1,561 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/QuadVCA.svg b/repos/AS/res/QuadVCA.svg deleted file mode 100644 index 701eec17..00000000 --- a/repos/AS/res/QuadVCA.svg +++ /dev/null @@ -1,700 +0,0 @@ - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Reverb.svg b/repos/AS/res/Reverb.svg deleted file mode 100644 index 39519f96..00000000 --- a/repos/AS/res/Reverb.svg +++ /dev/null @@ -1,503 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/SEQ16.svg b/repos/AS/res/SEQ16.svg deleted file mode 100644 index 1e17c294..00000000 --- a/repos/AS/res/SEQ16.svg +++ /dev/null @@ -1,3342 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/SawOSC.svg b/repos/AS/res/SawOSC.svg deleted file mode 100644 index f6efc98e..00000000 --- a/repos/AS/res/SawOSC.svg +++ /dev/null @@ -1,358 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Segment7Standard.ttf b/repos/AS/res/Segment7Standard.ttf deleted file mode 100644 index bdd6e2afaac772036989d564d58ec3f420a870ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16624 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 z - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/SineOSC.svg b/repos/AS/res/SineOSC.svg deleted file mode 100644 index 6fcf932f..00000000 --- a/repos/AS/res/SineOSC.svg +++ /dev/null @@ -1,322 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Steps.svg b/repos/AS/res/Steps.svg deleted file mode 100644 index 187cda89..00000000 --- a/repos/AS/res/Steps.svg +++ /dev/null @@ -1,703 +0,0 @@ - - - - - - image/svg+xml - - BlankPanel8 - - - - - - - - - - - - - BlankPanel8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/SuperDrive.svg b/repos/AS/res/SuperDrive.svg deleted file mode 100644 index d18a0c13..00000000 --- a/repos/AS/res/SuperDrive.svg +++ /dev/null @@ -1,547 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Tremolo.svg b/repos/AS/res/Tremolo.svg deleted file mode 100644 index 0f2e3063..00000000 --- a/repos/AS/res/Tremolo.svg +++ /dev/null @@ -1,555 +0,0 @@ - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/Triggers.svg b/repos/AS/res/Triggers.svg deleted file mode 100644 index c09187c0..00000000 --- a/repos/AS/res/Triggers.svg +++ /dev/null @@ -1,328 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/TriggersMKI.svg b/repos/AS/res/TriggersMKI.svg deleted file mode 100644 index 51f0919e..00000000 --- a/repos/AS/res/TriggersMKI.svg +++ /dev/null @@ -1,422 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/TriggersMKII.svg b/repos/AS/res/TriggersMKII.svg deleted file mode 100644 index 78e3c918..00000000 --- a/repos/AS/res/TriggersMKII.svg +++ /dev/null @@ -1,405 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/VCA.svg b/repos/AS/res/VCA.svg deleted file mode 100644 index acf668b6..00000000 --- a/repos/AS/res/VCA.svg +++ /dev/null @@ -1,418 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/WaveShaper.svg b/repos/AS/res/WaveShaper.svg deleted file mode 100644 index a2ec0f07..00000000 --- a/repos/AS/res/WaveShaper.svg +++ /dev/null @@ -1,624 +0,0 @@ - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-FaderPot.svg b/repos/AS/res/as-FaderPot.svg deleted file mode 100644 index 271e92bf..00000000 --- a/repos/AS/res/as-FaderPot.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-FxKnobBlack.svg b/repos/AS/res/as-FxKnobBlack.svg deleted file mode 100644 index f7e5ab06..00000000 --- a/repos/AS/res/as-FxKnobBlack.svg +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-FxKnobWhite.svg b/repos/AS/res/as-FxKnobWhite.svg deleted file mode 100644 index af3dc0d0..00000000 --- a/repos/AS/res/as-FxKnobWhite.svg +++ /dev/null @@ -1,268 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-PJ301M.svg b/repos/AS/res/as-PJ301M.svg deleted file mode 100644 index 38c41d93..00000000 --- a/repos/AS/res/as-PJ301M.svg +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-SlidePot.svg b/repos/AS/res/as-SlidePot.svg deleted file mode 100644 index f8fbbf0d..00000000 --- a/repos/AS/res/as-SlidePot.svg +++ /dev/null @@ -1,139 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-SlidePotHandle.svg b/repos/AS/res/as-SlidePotHandle.svg deleted file mode 100644 index 9f3db6d6..00000000 --- a/repos/AS/res/as-SlidePotHandle.svg +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-hexscrew.svg b/repos/AS/res/as-hexscrew.svg deleted file mode 100644 index 7450c8dc..00000000 --- a/repos/AS/res/as-hexscrew.svg +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - diff --git a/repos/AS/res/as-knob.svg b/repos/AS/res/as-knob.svg deleted file mode 100644 index 1c97c236..00000000 --- a/repos/AS/res/as-knob.svg +++ /dev/null @@ -1,225 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-knobBlack.svg b/repos/AS/res/as-knobBlack.svg deleted file mode 100644 index 7bd5eee0..00000000 --- a/repos/AS/res/as-knobBlack.svg +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-knobMG.svg b/repos/AS/res/as-knobMG.svg deleted file mode 100644 index 7da04444..00000000 --- a/repos/AS/res/as-knobMG.svg +++ /dev/null @@ -1,361 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as-knobMGbig.svg b/repos/AS/res/as-knobMGbig.svg deleted file mode 100644 index 409a7f50..00000000 --- a/repos/AS/res/as-knobMGbig.svg +++ /dev/null @@ -1,365 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSSH_0.svg b/repos/AS/res/as_CKSSH_0.svg deleted file mode 100644 index 91a2e72d..00000000 --- a/repos/AS/res/as_CKSSH_0.svg +++ /dev/null @@ -1,104 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSSH_1.svg b/repos/AS/res/as_CKSSH_1.svg deleted file mode 100644 index 7c56e7d1..00000000 --- a/repos/AS/res/as_CKSSH_1.svg +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSSThree_0.svg b/repos/AS/res/as_CKSSThree_0.svg deleted file mode 100644 index 978d12cb..00000000 --- a/repos/AS/res/as_CKSSThree_0.svg +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSSThree_1.svg b/repos/AS/res/as_CKSSThree_1.svg deleted file mode 100644 index 385b0a59..00000000 --- a/repos/AS/res/as_CKSSThree_1.svg +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSSThree_2.svg b/repos/AS/res/as_CKSSThree_2.svg deleted file mode 100644 index 0356da4d..00000000 --- a/repos/AS/res/as_CKSSThree_2.svg +++ /dev/null @@ -1,309 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSS_0.svg b/repos/AS/res/as_CKSS_0.svg deleted file mode 100644 index 35ca574c..00000000 --- a/repos/AS/res/as_CKSS_0.svg +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_CKSS_1.svg b/repos/AS/res/as_CKSS_1.svg deleted file mode 100644 index 25fa89bf..00000000 --- a/repos/AS/res/as_CKSS_1.svg +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_LFO.svg b/repos/AS/res/as_LFO.svg deleted file mode 100644 index 7b40ec49..00000000 --- a/repos/AS/res/as_LFO.svg +++ /dev/null @@ -1,786 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/as_bigLEDBezel.svg b/repos/AS/res/as_bigLEDBezel.svg deleted file mode 100644 index bfc522ff..00000000 --- a/repos/AS/res/as_bigLEDBezel.svg +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - image/svg+xml - - as_bigLEDButton - - - - - - - - - - as_bigLEDButton - - - - diff --git a/repos/AS/res/monoVUmeter.svg b/repos/AS/res/monoVUmeter.svg deleted file mode 100644 index 8e10bb84..00000000 --- a/repos/AS/res/monoVUmeter.svg +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/res/saxmono.ttf b/repos/AS/res/saxmono.ttf deleted file mode 100644 index 3fe7d397d1ffa6a5e1484660e5cb308f759b9967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 99032 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

KQ5T(60Hx1&`HRJW=g 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 Z=#)HLXRrR@vU!lO$kK3&EKbmI699#!49x%l diff --git a/repos/AS/res/stereoVUmeter.svg b/repos/AS/res/stereoVUmeter.svg deleted file mode 100644 index ccbdc4cf..00000000 --- a/repos/AS/res/stereoVUmeter.svg +++ /dev/null @@ -1,428 +0,0 @@ - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/repos/AS/src/ADSR.cpp b/repos/AS/src/ADSR.cpp deleted file mode 100644 index 5515d632..00000000 --- a/repos/AS/src/ADSR.cpp +++ /dev/null @@ -1,154 +0,0 @@ -//************************************************************************************** -//ADSR module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** -#include "AS.hpp" -#include "dsp/digital.hpp" - -struct ADSR : Module { - enum ParamIds { - ATTACK_PARAM, - DECAY_PARAM, - SUSTAIN_PARAM, - RELEASE_PARAM, - NUM_PARAMS - }; - enum InputIds { - ATTACK_INPUT, - DECAY_INPUT, - SUSTAIN_INPUT, - RELEASE_INPUT, - GATE_INPUT, - TRIG_INPUT, - NUM_INPUTS - }; - enum OutputIds { - ENVELOPE_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - ATTACK_LIGHT, - DECAY_LIGHT, - SUSTAIN_LIGHT, - RELEASE_LIGHT, - NUM_LIGHTS - }; - - bool decaying = false; - float env = 0.0f; - SchmittTrigger trigger; - - ADSR() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - - } - void step() override; -}; - - -void ADSR::step() { - float attack = clamp(params[ATTACK_INPUT].value + inputs[ATTACK_INPUT].value / 10.0f, 0.0f, 1.0f); - float decay = clamp(params[DECAY_PARAM].value + inputs[DECAY_INPUT].value / 10.0f, 0.0f, 1.0f); - float sustain = clamp(params[SUSTAIN_PARAM].value + inputs[SUSTAIN_INPUT].value / 10.0f, 0.0f, 1.0f); - float release = clamp(params[RELEASE_PARAM].value + inputs[RELEASE_PARAM].value / 10.0f, 0.0f, 1.0f); - // Gate and trigger - bool gated = inputs[GATE_INPUT].value >= 1.0f; - if (trigger.process(inputs[TRIG_INPUT].value)) - decaying = false; - - const float base = 20000.0f; - const float maxTime = 10.0f; - if (gated) { - if (decaying) { - // Decay - if (decay < 1e-4) { - env = sustain; - } - else { - env += powf(base, 1 - decay) / maxTime * (sustain - env) / engineGetSampleRate(); - } - } - else { - // Attack - // Skip ahead if attack is all the way down (infinitely fast) - if (attack < 1e-4) { - env = 1.0f; - } - else { - env += powf(base, 1 - attack) / maxTime * (1.01 - env) / engineGetSampleRate(); - } - if (env >= 1.0f) { - env = 1.0f; - decaying = true; - } - } - } - else { - // Release - if (release < 1e-4) { - env = 0.0f; - } - else { - env += powf(base, 1 - release) / maxTime * (0.0 - env) / engineGetSampleRate(); - } - decaying = false; - } - - bool sustaining = isNear(env, sustain, 1e-3); - bool resting = isNear(env, 0.0, 1e-3); - - outputs[ENVELOPE_OUTPUT].value = 10.0f * env; - - // Lights - lights[ATTACK_LIGHT].value = (gated && !decaying) ? 1.0f : 0.0f; - lights[DECAY_LIGHT].value = (gated && decaying && !sustaining) ? 1.0f : 0.0f; - lights[SUSTAIN_LIGHT].value = (gated && decaying && sustaining) ? 1.0f : 0.0f; - lights[RELEASE_LIGHT].value = (!gated && !resting) ? 1.0f : 0.0f; -} - - - -struct ADSRWidget : ModuleWidget -{ - ADSRWidget(ADSR *module); -}; - - -ADSRWidget::ADSRWidget(ADSR *module) : ModuleWidget(module) { - box.size = Vec(RACK_GRID_WIDTH*8, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/ADSR.svg"))); - addChild(panel); - } - - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - static const float posX[4] = {13.0f,39.0f,65.0f,91.0f}; - addChild(ModuleLightWidget::create>(Vec(posX[0]+6, 74), module, ADSR::ATTACK_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(posX[1]+6, 74), module, ADSR::DECAY_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(posX[2]+6, 74), module, ADSR::SUSTAIN_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(posX[3]+6, 74), module, ADSR::RELEASE_LIGHT)); - - addParam(ParamWidget::create(Vec(posX[0]-3, 90), module, ADSR::ATTACK_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(posX[1]-3, 90), module, ADSR::DECAY_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(posX[2]-3, 90), module, ADSR::SUSTAIN_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(posX[3]-3, 90), module, ADSR::RELEASE_PARAM, 0.0f, 1.0f, 0.5f)); - - addInput(Port::create(Vec(posX[0]-4, 217), Port::INPUT, module, ADSR::ATTACK_INPUT)); - addInput(Port::create(Vec(posX[1]-4, 217), Port::INPUT, module, ADSR::DECAY_INPUT)); - addInput(Port::create(Vec(posX[2]-4, 217), Port::INPUT, module, ADSR::SUSTAIN_INPUT)); - addInput(Port::create(Vec(posX[3]-4, 217), Port::INPUT, module, ADSR::RELEASE_INPUT)); - - addInput(Port::create(Vec(posX[0]-4, 310), Port::INPUT, module, ADSR::GATE_INPUT)); - addInput(Port::create(Vec(48, 310), Port::INPUT, module, ADSR::TRIG_INPUT)); - - addOutput(Port::create(Vec(posX[3]-4, 310), Port::OUTPUT, module, ADSR::ENVELOPE_OUTPUT)); -} - -Model *modelADSR = Model::create("AS", "ADSR", "ADSR", ENVELOPE_GENERATOR_TAG); \ No newline at end of file diff --git a/repos/AS/src/AS.cpp b/repos/AS/src/AS.cpp deleted file mode 100644 index 837ac922..00000000 --- a/repos/AS/src/AS.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#include "AS.hpp" - -Plugin *plugin; - -void init(rack::Plugin *p) { - plugin = p; - p->slug = TOSTRING(SLUG); - p->version = TOSTRING(VERSION); - //OSCILLATORS - p->addModel(modelSineOsc); - p->addModel(modelSawOsc); - //TOOLS - p->addModel(modelADSR); - p->addModel(modelVCA); - p->addModel(modelQuadVCA); - p->addModel(modelTriLFO); - p->addModel(modelBPMClock); - p->addModel(modelSEQ16); - p->addModel(modelMixer8ch); - p->addModel(modelMonoVUmeter); - p->addModel(modelStereoVUmeter); - p->addModel(modelSteps); - p->addModel(modelLaunchGate); - p->addModel(modelKillGate); - p->addModel(modelFlow); - p->addModel(modelSignalDelay); - p->addModel(modelMultiple2_5); - p->addModel(modelMerge2_5); - p->addModel(modelTriggersMKI); - p->addModel(modelTriggersMKII); - //EFFECTS - p->addModel(modelDelayPlusFx); - p->addModel(modelPhaserFx); - p->addModel(modelReverbFx); - p->addModel(modelSuperDriveFx); - p->addModel(modelTremoloFx); - p->addModel(modelWaveShaper); - //BLANK PANELS - p->addModel(modelBlankPanel4); - p->addModel(modelBlankPanel6); - p->addModel(modelBlankPanel8); - -} diff --git a/repos/AS/src/AS.hpp b/repos/AS/src/AS.hpp deleted file mode 100644 index 192c268c..00000000 --- a/repos/AS/src/AS.hpp +++ /dev/null @@ -1,207 +0,0 @@ -#include "rack.hpp" - -using namespace rack; - -extern Plugin *plugin; - -//////////////////// -// module widgets -//////////////////// - -extern Model *modelSineOsc; -extern Model *modelSawOsc; - -extern Model *modelADSR; -extern Model *modelVCA; -extern Model *modelQuadVCA; -extern Model *modelTriLFO; -extern Model *modelBPMClock; -extern Model *modelSEQ16; -extern Model *modelMixer8ch; -extern Model *modelMonoVUmeter; -extern Model *modelStereoVUmeter; -extern Model *modelMultiple2_5; -extern Model *modelMerge2_5; -extern Model *modelSteps; -extern Model *modelTriggersMKI; -extern Model *modelTriggersMKII; -extern Model *modelLaunchGate; -extern Model *modelKillGate; -extern Model *modelFlow; -extern Model *modelSignalDelay; - -extern Model *modelDelayPlusFx; -extern Model *modelPhaserFx; -extern Model *modelReverbFx; -extern Model *modelSuperDriveFx; -extern Model *modelTremoloFx; -extern Model *modelWaveShaper; - -extern Model *modelBlankPanel4; -extern Model *modelBlankPanel6; -extern Model *modelBlankPanel8; - -////////////////////////////////////// -//MODULE COMPONENTS -///////////////////////////////////// -struct as_HexScrew : SVGScrew { - as_HexScrew() { - sw->svg = SVG::load(assetPlugin(plugin, "res/as-hexscrew.svg")); - sw->wrap(); - box.size = sw->box.size; - } -}; - -struct as_Knob : SVGKnob { - as_Knob() { - minAngle = -0.83 * M_PI; - maxAngle = 0.83 * M_PI; - sw->svg = SVG::load(assetPlugin(plugin, "res/as-knob.svg")); - sw->wrap(); - box.size = sw->box.size; - } -}; -struct as_KnobBlack : SVGKnob { - as_KnobBlack() { - minAngle = -0.83 * M_PI; - maxAngle = 0.83 * M_PI; - sw->svg = SVG::load(assetPlugin(plugin, "res/as-knobBlack.svg")); - sw->wrap(); - box.size = sw->box.size; - } -}; - -struct as_FxKnobWhite : SVGKnob { - as_FxKnobWhite() { - minAngle = -0.83 * M_PI; - maxAngle = 0.83 * M_PI; - sw->svg = SVG::load(assetPlugin(plugin, "res/as-FxKnobWhite.svg")); - sw->wrap(); - box.size = sw->box.size; - } -}; -struct as_FxKnobBlack : SVGKnob { - as_FxKnobBlack() { - minAngle = -0.83 * M_PI; - maxAngle = 0.83 * M_PI; - sw->svg = SVG::load(assetPlugin(plugin, "res/as-FxKnobBlack.svg")); - sw->wrap(); - box.size = sw->box.size; - } -}; - -struct BigLEDBezel : SVGSwitch, MomentarySwitch { - BigLEDBezel() { - addFrame(SVG::load(assetPlugin(plugin, "res/as_bigLEDBezel.svg"))); - } -}; - -struct as_CKSS : SVGSwitch, ToggleSwitch { - as_CKSS() { - addFrame(SVG::load(assetPlugin(plugin,"res/as_CKSS_0.svg"))); - addFrame(SVG::load(assetPlugin(plugin,"res/as_CKSS_1.svg"))); - } -}; - -struct as_CKSSH : SVGSwitch, ToggleSwitch { - as_CKSSH() { - addFrame(SVG::load(assetPlugin(plugin, "res/as_CKSSH_0.svg"))); - addFrame(SVG::load(assetPlugin(plugin, "res/as_CKSSH_1.svg"))); - sw->wrap(); - box.size = sw->box.size; - } -}; - -struct as_CKSSThree : SVGSwitch, ToggleSwitch { - as_CKSSThree() { - addFrame(SVG::load(assetPlugin(plugin,"res/as_CKSSThree_2.svg"))); - addFrame(SVG::load(assetPlugin(plugin,"res/as_CKSSThree_1.svg"))); - addFrame(SVG::load(assetPlugin(plugin,"res/as_CKSSThree_0.svg"))); - } -}; - -struct as_MuteBtn : SVGSwitch, ToggleSwitch { - as_MuteBtn() { - addFrame(SVG::load(assetPlugin(plugin,"res/as_mute-off.svg"))); - addFrame(SVG::load(assetPlugin(plugin,"res/as_mute-on.svg"))); - } -}; - -struct as_SoloBtn : SVGSwitch, ToggleSwitch { - as_SoloBtn() { - addFrame(SVG::load(assetPlugin(plugin,"res/as_solo-off.svg"))); - addFrame(SVG::load(assetPlugin(plugin,"res/as_solo-on.svg"))); - } -}; - -template -struct GiantLight : BASE { - GiantLight() { - this->box.size = mm2px(Vec(18.0, 18.0)); - } -}; - -template - struct MeterLight : BASE { - MeterLight() { - this->box.size = Vec(8, 8); - } - }; - - struct OrangeLight : GrayModuleLightWidget { - OrangeLight() { - addBaseColor(COLOR_ORANGE); - } -}; - -template -struct LedLight : BASE { - LedLight() { - //this->box.size = Vec(20.0, 20.0); - this->box.size = mm2px(Vec(6.0, 6.0)); - } -}; - -/** Reads two adjacent lightIds, so `lightId` and `lightId + 1` must be defined */ -struct YellowRedLight : GrayModuleLightWidget { - YellowRedLight() { - addBaseColor(COLOR_YELLOW); - addBaseColor(COLOR_RED); - } -}; - -struct as_PJ301MPort : SVGPort { - as_PJ301MPort() { - background->svg = SVG::load(assetPlugin(plugin,"res/as-PJ301M.svg")); - background->wrap(); - box.size = background->box.size; - } -}; - -struct as_SlidePot : SVGFader { - as_SlidePot() { - Vec margin = Vec(4, 4); - maxHandlePos = Vec(-1.5, -8).plus(margin); - minHandlePos = Vec(-1.5, 87).plus(margin); - background->svg = SVG::load(assetPlugin(plugin,"res/as-SlidePot.svg")); - background->wrap(); - background->box.pos = margin; - box.size = background->box.size.plus(margin.mult(2)); - handle->svg = SVG::load(assetPlugin(plugin,"res/as-SlidePotHandle.svg")); - handle->wrap(); - } -}; - -struct as_FaderPot : SVGFader { - as_FaderPot() { - Vec margin = Vec(4, 4); - maxHandlePos = Vec(-1.5, -8).plus(margin); - minHandlePos = Vec(-1.5, 57).plus(margin); - background->svg = SVG::load(assetPlugin(plugin,"res/as-FaderPot.svg")); - background->wrap(); - background->box.pos = margin; - box.size = background->box.size.plus(margin.mult(2)); - handle->svg = SVG::load(assetPlugin(plugin,"res/as-SlidePotHandle.svg")); - handle->wrap(); - } -}; diff --git a/repos/AS/src/BPMClock.cpp b/repos/AS/src/BPMClock.cpp deleted file mode 100644 index f984ff36..00000000 --- a/repos/AS/src/BPMClock.cpp +++ /dev/null @@ -1,380 +0,0 @@ -//************************************************************************************** -// -//BPM Clock module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Based on code taken from Master Clock Module VCV Module Strum 2017 https://github.com/Strum/Strums_Mental_VCV_Modules -//************************************************************************************** - -#include "AS.hpp" -#include "dsp/digital.hpp" - -#include -#include - -struct LFOGenerator { - float phase = 0.0f; - float pw = 0.5f; - float freq = 1.0f; - void setFreq(float freq_to_set) - { - freq = freq_to_set; - } - void step(float dt) { - float deltaPhase = fminf(freq * dt, 0.5f); - phase += deltaPhase; - if (phase >= 1.0f) - phase -= 1.0f; - } - float sqr() { - float sqr = phase < pw ? 1.0f : -1.0f; - return sqr; - } -}; - -struct BPMClock : Module { - enum ParamIds { - TEMPO_PARAM, - TIMESIGTOP_PARAM, - TIMESIGBOTTOM_PARAM, - RESET_SWITCH, - RUN_SWITCH, - NUM_PARAMS - }; - enum InputIds { - RESET_INPUT, - NUM_INPUTS - }; - enum OutputIds { - BEAT_OUT, - EIGHTHS_OUT, - SIXTEENTHS_OUT, - BAR_OUT, - RESET_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - RESET_LED, - RUN_LED, - NUM_LIGHTS - }; - - LFOGenerator clock; - - SchmittTrigger eighths_trig; - SchmittTrigger quarters_trig; - SchmittTrigger bars_trig; - SchmittTrigger run_button_trig; - SchmittTrigger reset_btn_trig; - SchmittTrigger reset_ext_trig; - - const float lightLambda = 0.075f; - float resetLight = 0.0f; - - bool running = true; - - int eighths_count = 0; - int quarters_count = 0; - int bars_count = 0; - - int tempo, time_sig_top, time_sig_bottom = 0; - float frequency = 2.0f; - int quarters_count_limit = 4; - int eighths_count_limit = 2; - int bars_count_limit = 16; - - BPMClock() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - /* - params.resize(NUM_PARAMS); - inputs.resize(NUM_INPUTS); - outputs.resize(NUM_OUTPUTS); - lights.resize(NUM_LIGHTS); - eighths_trig.setThresholds(0.0, 1.0); - quarters_trig.setThresholds(0.0, 1.0); - bars_trig.setThresholds(0.0, 1.0); -*/ - } - void step() override; - - json_t *toJson() override - { - json_t *rootJ = json_object(); - json_t *button_statesJ = json_array(); - json_t *button_stateJ = json_integer((int)running); - json_array_append_new(button_statesJ, button_stateJ); - json_object_set_new(rootJ, "run", button_statesJ); - return rootJ; - } - - void fromJson(json_t *rootJ) override - { - json_t *button_statesJ = json_object_get(rootJ, "run"); - if (button_statesJ) - { - json_t *button_stateJ = json_array_get(button_statesJ,0); - if (button_stateJ) - running = !!json_integer_value(button_stateJ); - } - } -}; - -void BPMClock::step() -{ - if (run_button_trig.process(params[RUN_SWITCH].value)){ - running = !running; - } - lights[RUN_LED].value = running ? 1.0f : 0.0f; - - tempo = std::round(params[TEMPO_PARAM].value); - time_sig_top = std::round(params[TIMESIGTOP_PARAM].value); - time_sig_bottom = std::round(params[TIMESIGBOTTOM_PARAM].value); - time_sig_bottom = std::pow(2,time_sig_bottom+1); - - frequency = tempo/60.0f; - //RESET TRIGGERS - //EXTERNAL RESET TRIGGER - if (reset_ext_trig.process(inputs[RESET_INPUT].value)) { - eighths_count = 0; - quarters_count = 0; - bars_count = 0; - resetLight = 1.0; - outputs[RESET_OUTPUT].value = 10.0f; - //INTERNAL RESET TRIGGER - }else if (reset_btn_trig.process(params[RESET_SWITCH].value)) { - eighths_count = 0; - quarters_count = 0; - bars_count = 0; - resetLight = 1.0; - outputs[RESET_OUTPUT].value = 10.0f; - }else{ - outputs[RESET_OUTPUT].value = 0.0f; - } - - resetLight -= resetLight / lightLambda / engineGetSampleRate(); - lights[RESET_LED].value = resetLight; - - if (!running) { - eighths_count = 0; - quarters_count = 0; - bars_count = 0; - outputs[BAR_OUT].value = 0.0; - outputs[BEAT_OUT].value = 0.0; - outputs[EIGHTHS_OUT].value = 0.0; - outputs[SIXTEENTHS_OUT].value = 0.0; - outputs[SIXTEENTHS_OUT].value = 0.0; - } else{ - if (time_sig_top == time_sig_bottom){ - clock.setFreq(frequency*4); - quarters_count_limit = 4; - eighths_count_limit = 2; - bars_count_limit = 16; - } else{ - if (time_sig_bottom == 4){ - quarters_count_limit = 4; - eighths_count_limit = 2; - bars_count_limit = time_sig_top * 4; - clock.setFreq(frequency*4); - } - if (time_sig_bottom == 8){ - quarters_count_limit = 4; - eighths_count_limit = 2; - bars_count_limit = time_sig_top * 2; - clock.setFreq(frequency*4); - if ((time_sig_top % 3) == 0){ - quarters_count_limit = 6; - eighths_count_limit = 2; - bars_count_limit = (time_sig_top/3) * 6; - clock.setFreq(frequency*6); - } - } - } - - clock.step(1.0 / engineGetSampleRate()); - outputs[SIXTEENTHS_OUT].value = clamp(10.0f * clock.sqr(), 0.0f, 10.0f); - - if (eighths_trig.process(clock.sqr()) && eighths_count <= eighths_count_limit) - eighths_count++; - if (eighths_count >= eighths_count_limit) - { - eighths_count = 0; - } - if (eighths_count == 0) outputs[EIGHTHS_OUT].value = 10.0f; - else outputs[EIGHTHS_OUT].value = 0.0f; - - if (quarters_trig.process(clock.sqr()) && quarters_count <= quarters_count_limit) - quarters_count++; - if (quarters_count >= quarters_count_limit) - { - quarters_count = 0; - } - if (quarters_count == 0) outputs[BEAT_OUT].value = 10.0f; - else outputs[BEAT_OUT].value = 0.0f; - - if (bars_trig.process(clock.sqr()) && bars_count <= bars_count_limit) - bars_count++; - if (bars_count >= bars_count_limit) - { - bars_count = 0; - } - if (bars_count == 0) outputs[BAR_OUT].value = 10.0f; - else outputs[BAR_OUT].value = 0.0f; - } -} - -//////////////////////////////////// -struct BpmDisplayWidget : TransparentWidget { - int *value; - std::shared_ptr font; - - BpmDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::setw(3) << *value; - - Vec textPos = Vec(4.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// -struct SigDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - SigDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - - - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.0); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::setw(2) << *value; - - Vec textPos = Vec(3, 17); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -////////////////////////////////// - -struct BPMClockWidget : ModuleWidget -{ - BPMClockWidget(BPMClock *module); -}; - - -BPMClockWidget::BPMClockWidget(BPMClock *module) : ModuleWidget(module) { - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - - panel->setBackground(SVG::load(assetPlugin(plugin,"res/BPMClock.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //BPM DISPLAY - BpmDisplayWidget *display = new BpmDisplayWidget(); - display->box.pos = Vec(23,50); - display->box.size = Vec(45, 20); - display->value = &module->tempo; - addChild(display); - //TEMPO KNOB - addParam(ParamWidget::create(Vec(26, 74), module, BPMClock::TEMPO_PARAM, 40.0f, 250.0f, 120.0f)); - //SIG TOP DISPLAY - SigDisplayWidget *display2 = new SigDisplayWidget(); - display2->box.pos = Vec(54,123); - display2->box.size = Vec(30, 20); - display2->value = &module->time_sig_top; - addChild(display2); - //SIG TOP KNOB - addParam(ParamWidget::create(Vec(8, 110), module, BPMClock::TIMESIGTOP_PARAM,2.0f, 15.0f, 4.0f)); - //SIG BOTTOM DISPLAY - SigDisplayWidget *display3 = new SigDisplayWidget(); - display3->box.pos = Vec(54,155); - display3->box.size = Vec(30, 20); - display3->value = &module->time_sig_bottom; - addChild(display3); - //SIG BOTTOM KNOB - addParam(ParamWidget::create(Vec(8, 150), module, BPMClock::TIMESIGBOTTOM_PARAM,0.0f, 3.0f, 1.0f)); - //RESET & RUN LEDS - addParam(ParamWidget::create(Vec(55, 202), module, BPMClock::RUN_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(57.2, 204.3), module, BPMClock::RUN_LED)); - addParam(ParamWidget::create(Vec(10.5, 202), module, BPMClock::RESET_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(12.7, 204.3), module, BPMClock::RESET_LED)); - //RESET INPUT - addInput(Port::create(Vec(10, 240), Port::INPUT, module, BPMClock::RESET_INPUT)); - //RESET OUTPUT - addOutput(Port::create(Vec(55, 240), Port::OUTPUT, module, BPMClock::RESET_OUTPUT)); - //TEMPO OUTPUTS - addOutput(Port::create(Vec(10, 280), Port::OUTPUT, module, BPMClock::BAR_OUT)); - addOutput(Port::create(Vec(55, 280), Port::OUTPUT, module, BPMClock::BEAT_OUT)); - addOutput(Port::create(Vec(10, 320), Port::OUTPUT, module, BPMClock::EIGHTHS_OUT)); - addOutput(Port::create(Vec(55, 320), Port::OUTPUT, module, BPMClock::SIXTEENTHS_OUT)); - -} - -Model *modelBPMClock = Model::create("AS", "BPMClock", "BPM Clock", CLOCK_TAG); \ No newline at end of file diff --git a/repos/AS/src/BlankPanel4.cpp b/repos/AS/src/BlankPanel4.cpp deleted file mode 100644 index 5c478d51..00000000 --- a/repos/AS/src/BlankPanel4.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "AS.hpp" - -struct BlankPanel4 : Module { - enum ParamIds { - NUM_PARAMS - }; - enum InputIds { - NUM_INPUTS - }; - enum OutputIds { - NUM_OUTPUTS - }; - enum LightIds { - BLINK_LIGHT, - NUM_LIGHTS - }; - - BlankPanel4() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; -}; - -void BlankPanel4::step() -{ -} - -struct BlankPanel4Widget : ModuleWidget -{ - BlankPanel4Widget(BlankPanel4 *module); -}; - -BlankPanel4Widget::BlankPanel4Widget(BlankPanel4 *module) : ModuleWidget(module) { - box.size = Vec(4 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->setBackground(SVG::load(assetPlugin(plugin, "res/BlankPanel4.svg"))); - panel->box.size = box.size; - addChild(panel); - } - - //SCREWS - MOD SPACING FOR RACK WIDTH*4 - addChild(Widget::create(Vec(0, 0))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); -} - -Model *modelBlankPanel4 = Model::create("AS", "BlankPanel4", "BlankPanel 4", BLANK_TAG); \ No newline at end of file diff --git a/repos/AS/src/BlankPanel6.cpp b/repos/AS/src/BlankPanel6.cpp deleted file mode 100644 index b9b9cccb..00000000 --- a/repos/AS/src/BlankPanel6.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "AS.hpp" - -struct BlankPanel6 : Module { - enum ParamIds { - NUM_PARAMS - }; - enum InputIds { - NUM_INPUTS - }; - enum OutputIds { - NUM_OUTPUTS - }; - enum LightIds { - BLINK_LIGHT, - NUM_LIGHTS - }; - - BlankPanel6() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; -}; - -void BlankPanel6::step() -{ -} - -struct BlankPanel6Widget : ModuleWidget -{ - BlankPanel6Widget(BlankPanel6 *module); -}; - -BlankPanel6Widget::BlankPanel6Widget(BlankPanel6 *module) : ModuleWidget(module) { - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->setBackground(SVG::load(assetPlugin(plugin, "res/BlankPanel6.svg"))); - panel->box.size = box.size; - addChild(panel); - } - - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); -} - -Model *modelBlankPanel6 = Model::create("AS", "BlankPanel6", "BlankPanel 6", BLANK_TAG); \ No newline at end of file diff --git a/repos/AS/src/BlankPanel8.cpp b/repos/AS/src/BlankPanel8.cpp deleted file mode 100644 index d2c1bc07..00000000 --- a/repos/AS/src/BlankPanel8.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "AS.hpp" - -struct BlankPanel8 : Module { - enum ParamIds { - NUM_PARAMS - }; - enum InputIds { - NUM_INPUTS - }; - enum OutputIds { - NUM_OUTPUTS - }; - enum LightIds { - BLINK_LIGHT, - NUM_LIGHTS - }; - - BlankPanel8() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; -}; - -void BlankPanel8::step() -{ -} - -struct BlankPanel8Widget : ModuleWidget -{ - BlankPanel8Widget(BlankPanel8 *module); -}; - -BlankPanel8Widget::BlankPanel8Widget(BlankPanel8 *module) : ModuleWidget(module) { - box.size = Vec(8 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->setBackground(SVG::load(assetPlugin(plugin, "res/BlankPanel8.svg"))); - panel->box.size = box.size; - addChild(panel); - } - - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); -} - -Model *modelBlankPanel8 = Model::create("AS", "BlankPanel8", "BlankPanel 8", BLANK_TAG); \ No newline at end of file diff --git a/repos/AS/src/DelayPlus.cpp b/repos/AS/src/DelayPlus.cpp deleted file mode 100644 index a8ac1a24..00000000 --- a/repos/AS/src/DelayPlus.cpp +++ /dev/null @@ -1,272 +0,0 @@ -//************************************************************************************** -//Delay Plus module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** -#include "AS.hpp" -#include "dsp/samplerate.hpp" -#include "dsp/ringbuffer.hpp" -#include "dsp/filter.hpp" - -#include "dsp/digital.hpp" - -#include -#include - -#define HISTORY_SIZE (1<<21) - -struct DelayPlusFx : Module { - enum ParamIds { - TIME_PARAM, - FEEDBACK_PARAM, - COLOR_PARAM, - MIX_PARAM, - BYPASS_SWITCH, - NUM_PARAMS - }; - enum InputIds { - TIME_INPUT, - FEEDBACK_INPUT, - COLOR_INPUT, - COLOR_RETURN, - - MIX_INPUT, - IN_INPUT, - NUM_INPUTS - }; - enum OutputIds { - COLOR_SEND, - OUT_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - BYPASS_LED, - NUM_LIGHTS - }; - - DoubleRingBuffer historyBuffer; - DoubleRingBuffer outBuffer; - SampleRateConverter<1> src; - float lastWet = 0.0f; - RCFilter lowpassFilter; - RCFilter highpassFilter; - - int lcd_tempo = 0; - SchmittTrigger bypass_button_trig; - - bool fx_bypass = false; - DelayPlusFx() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - - void step() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *statesJ = json_array(); - - json_t *bypassJ = json_boolean(fx_bypass); - json_array_append_new(statesJ, bypassJ); - - json_object_set_new(rootJm, "as_FxBypass", statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *statesJ = json_object_get(rootJm, "as_FxBypass"); - - json_t *bypassJ = json_array_get(statesJ, 0); - - fx_bypass = !!json_boolean_value(bypassJ); - - } - -}; - -void DelayPlusFx::step() { - - if (bypass_button_trig.process(params[BYPASS_SWITCH].value)) - { - fx_bypass = !fx_bypass; - } - lights[BYPASS_LED].value = fx_bypass ? 1.0f : 0.0f; - - // Get input to delay block - float in = inputs[IN_INPUT].value; - float feedback = clamp(params[FEEDBACK_PARAM].value + inputs[FEEDBACK_INPUT].value / 10.0f, 0.0f, 1.0f); - float dry = in + lastWet * feedback; - - // Compute delay time in seconds - //float delay = 1e-3 * powf(10.0 / 1e-3, clampf(params[TIME_PARAM].value + inputs[TIME_INPUT].value / 10.0, 0.0, 1.0)); - float delay = clamp(params[TIME_PARAM].value + inputs[TIME_INPUT].value, 0.001f, 10.0f); - //LCD display tempo - show value as ms - lcd_tempo = std::round(delay*1000); - // Number of delay samples - float index = delay * engineGetSampleRate(); - - // TODO This is a horrible digital delay algorithm. Rewrite later. - - // Push dry sample into history buffer - if (!historyBuffer.full()) { - historyBuffer.push(dry); - } - - // How many samples do we need consume to catch up? - float consume = index - historyBuffer.size(); - //printf("%f\t%d\t%f\n", index, historyBuffer.size(), consume); - // printf("wanted: %f\tactual: %d\tdiff: %d\tratio: %f\n", index, historyBuffer.size(), consume, index / historyBuffer.size()); - if (outBuffer.empty()) { - - double ratio = 1.0; - if (consume <= -16) - ratio = 0.5; - else if (consume >= 16) - ratio = 2.0; - - // printf("%f\t%lf\n", consume, ratio); - int inFrames = min(historyBuffer.size(), 16); - int outFrames = outBuffer.capacity(); - // printf(">\t%d\t%d\n", inFrames, outFrames); - - src.setRates(ratio * engineGetSampleRate(), engineGetSampleRate()); - src.process((const Frame<1>*)historyBuffer.startData(), &inFrames, (Frame<1>*)outBuffer.endData(), &outFrames); - historyBuffer.startIncr(inFrames); - outBuffer.endIncr(outFrames); - // printf("<\t%d\t%d\n", inFrames, outFrames); - // printf("====================================\n"); - } - float out; - float mix; - float wet = 0.0f; - if (!outBuffer.empty()) { - wet = outBuffer.shift(); - } - - if (outputs[COLOR_SEND].active == false) { - //internal color - // Apply color to delay wet output - float color = clamp(params[COLOR_PARAM].value + inputs[COLOR_INPUT].value / 10.0f, 0.0f, 1.0f); - float lowpassFreq = 10000.0f * powf(10.0f, clamp(2.0*color, 0.0f, 1.0f)); - lowpassFilter.setCutoff(lowpassFreq / engineGetSampleRate()); - lowpassFilter.process(wet); - wet = lowpassFilter.lowpass(); - float highpassFreq = 10.0f * powf(100.0f, clamp(2.0f*color - 1.0f, 0.0f, 1.0f)); - highpassFilter.setCutoff(highpassFreq / engineGetSampleRate()); - highpassFilter.process(wet); - wet = highpassFilter.highpass(); - //lastWet = wet; - }else { - //external color, to filter the wet delay signal outside of the module, or to feed another module - outputs[COLOR_SEND].value = wet; - wet = inputs[COLOR_RETURN].value; - } - lastWet = wet; - mix = clamp(params[MIX_PARAM].value + inputs[MIX_INPUT].value / 10.0f, 0.0f, 1.0f); - out = crossfade(in, wet, mix); - //check bypass switch status - if (fx_bypass){ - outputs[OUT_OUTPUT].value = in; - }else{ - outputs[OUT_OUTPUT].value = out; - } -} - -/////////////////////////////////// -struct MsDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - MsDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - // NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::right << std::setw(5) << *value; - - Vec textPos = Vec(4.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~~~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\\\\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// -struct DelayPlusFxWidget : ModuleWidget -{ - DelayPlusFxWidget(DelayPlusFx *module); -}; - -DelayPlusFxWidget::DelayPlusFxWidget(DelayPlusFx *module) : ModuleWidget(module) { - - box.size = Vec(RACK_GRID_WIDTH*8, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/DelayPlus.svg"))); - addChild(panel); - } - - //MS DISPLAY - MsDisplayWidget *display = new MsDisplayWidget(); - display->box.pos = Vec(14,50); - display->box.size = Vec(70, 20); - display->value = &module->lcd_tempo; - addChild(display); - int y_offset=40; - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //KNOBS - addParam(ParamWidget::create(Vec(74, 38+y_offset), module, DelayPlusFx::TIME_PARAM, 0.001f, 10.0f, 0.350f)); - addParam(ParamWidget::create(Vec(74, 90+y_offset), module, DelayPlusFx::FEEDBACK_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(74, 140+y_offset), module, DelayPlusFx::COLOR_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(74, 213+y_offset), module, DelayPlusFx::MIX_PARAM, 0.0f, 1.0f, 0.5f)); - //BYPASS SWITCH - addParam(ParamWidget::create(Vec(49, 272+y_offset), module, DelayPlusFx::BYPASS_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(51.2, 274+y_offset), module, DelayPlusFx::BYPASS_LED)); - //INPUTS - addInput(Port::create(Vec(10, 45+y_offset), Port::INPUT, module, DelayPlusFx::TIME_INPUT)); - addInput(Port::create(Vec(10, 95+y_offset), Port::INPUT, module, DelayPlusFx::FEEDBACK_INPUT)); - addInput(Port::create(Vec(10, 145+y_offset), Port::INPUT, module, DelayPlusFx::COLOR_INPUT)); - //DELAY SIGNAL SEND - addOutput(Port::create(Vec(20, 184+y_offset), Port::OUTPUT, module, DelayPlusFx::COLOR_SEND)); - //DELAY SIGNAL RETURN - addInput(Port::create(Vec(75, 184+y_offset), Port::INPUT, module, DelayPlusFx::COLOR_RETURN)); - //INPUTS - addInput(Port::create(Vec(10, 220+y_offset), Port::INPUT, module, DelayPlusFx::MIX_INPUT)); - addInput(Port::create(Vec(10, 310), Port::INPUT, module, DelayPlusFx::IN_INPUT)); - //OUTPUT - addOutput(Port::create(Vec(85, 310), Port::OUTPUT, module, DelayPlusFx::OUT_OUTPUT)); -} - -Model *modelDelayPlusFx = Model::create("AS", "DelayPlusFx", "DelayPlus Fx", DELAY_TAG, EFFECT_TAG); \ No newline at end of file diff --git a/repos/AS/src/Flow.cpp b/repos/AS/src/Flow.cpp deleted file mode 100644 index b37d0bbd..00000000 --- a/repos/AS/src/Flow.cpp +++ /dev/null @@ -1,152 +0,0 @@ -//************************************************************************************** -//Flow module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//************************************************************************************** -#include "AS.hpp" -#include "dsp/digital.hpp" - -struct Flow: Module { - enum ParamIds { - SWITCH_1, - SWITCH_2, - NUM_PARAMS - }; - enum InputIds { - INPUT_1, - INPUT_2, - RESET_1, - RESET_2, - CV_TRIG_INPUT_1, - CV_TRIG_INPUT_2, - NUM_INPUTS - }; - enum OutputIds { - OUTPUT_1, - OUTPUT_2, - NUM_OUTPUTS - }; - enum LightIds { - TRIGGER_LED_1, - TRIGGER_LED_2, - NUM_LIGHTS - }; - - SchmittTrigger btnTrigger1; - SchmittTrigger extTrigger1; - SchmittTrigger extReset1; - SchmittTrigger btnTrigger2; - SchmittTrigger extTrigger2; - SchmittTrigger extReset2; - - bool on_1 = false; - bool on_2 = false; - Flow() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *on_statesJ = json_array(); - - json_t *on_stateJ1 = json_integer((int) on_1); - json_t *on_stateJ2 = json_integer((int) on_2); - - json_array_append_new(on_statesJ, on_stateJ1); - json_array_append_new(on_statesJ, on_stateJ2); - - json_object_set_new(rootJm, "as_FlowStates", on_statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *on_statesJ = json_object_get(rootJm, "as_FlowStates"); - - json_t *on_stateJ1 = json_array_get(on_statesJ, 0); - json_t *on_stateJ2 = json_array_get(on_statesJ, 1); - - on_1 = !!json_integer_value(on_stateJ1); - on_2 = !!json_integer_value(on_stateJ2); - - } - -}; - -void Flow::step() { - - //TRIGGER 1 - if (btnTrigger1.process(params[SWITCH_1].value)||extTrigger1.process(inputs[CV_TRIG_INPUT_1].value)) { - on_1 = !on_1; - } - if (extReset1.process(inputs[RESET_1].value)) { - on_1 = false; - } - if(on_1){ - outputs[OUTPUT_1].value = inputs[INPUT_1].value; - }else{ - outputs[OUTPUT_1].value = 0.0f; - } - lights[TRIGGER_LED_1].value = on_1 ? 1.0f : 0.0f; - //TRIGGER 2 - if (btnTrigger2.process(params[SWITCH_2].value)||extTrigger2.process(inputs[CV_TRIG_INPUT_2].value)) { - on_2 = !on_2; - } - if (extReset2.process(inputs[RESET_2].value)) { - on_2 = false; - } - if(on_2){ - outputs[OUTPUT_2].value = inputs[INPUT_2].value; - }else{ - outputs[OUTPUT_2].value = 0.0f; - } - lights[TRIGGER_LED_2].value = on_2 ? 1.0f : 0.0f; - - -} - -//////////////////////////////////// -struct FlowWidget : ModuleWidget -{ - FlowWidget(Flow *module); -}; - -FlowWidget::FlowWidget(Flow *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/Flow.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - static const float led_offset = 3.3; - static const float led_center = 15; - static const float y_offset = 150; - //TRIGGER 1 - //SWITCH - addParam(ParamWidget::create(Vec(led_center, 50), module, Flow::SWITCH_1, 0.0, 1.0, 0.0)); - addChild(ModuleLightWidget::create>(Vec(led_center+led_offset, 50+led_offset), module, Flow::TRIGGER_LED_1)); - //PORTS - addInput(Port::create(Vec(10, 140), Port::INPUT, module, Flow::CV_TRIG_INPUT_1)); - addInput(Port::create(Vec(55, 140), Port::INPUT, module, Flow::RESET_1)); - addInput(Port::create(Vec(10, 174), Port::INPUT, module, Flow::INPUT_1)); - addOutput(Port::create(Vec(55, 174), Port::OUTPUT, module, Flow::OUTPUT_1)); - //TRIGGER 2 - //SWITCH - addParam(ParamWidget::create(Vec(led_center, 50+y_offset), module, Flow::SWITCH_2, 0.0, 1.0, 0.0)); - addChild(ModuleLightWidget::create>(Vec(led_center+led_offset, 50+led_offset+y_offset), module, Flow::TRIGGER_LED_2)); - //PORTS - addInput(Port::create(Vec(10, 140+y_offset), Port::INPUT, module, Flow::CV_TRIG_INPUT_2)); - addInput(Port::create(Vec(55, 140+y_offset), Port::INPUT, module, Flow::RESET_2)); - addInput(Port::create(Vec(10, 174+y_offset), Port::INPUT, module, Flow::INPUT_2)); - addOutput(Port::create(Vec(55, 174+y_offset), Port::OUTPUT, module, Flow::OUTPUT_2)); - -} -Model *modelFlow = Model::create("AS", "Flow", "Flow", SWITCH_TAG, UTILITY_TAG); \ No newline at end of file diff --git a/repos/AS/src/KillGate.cpp b/repos/AS/src/KillGate.cpp deleted file mode 100644 index efcf8516..00000000 --- a/repos/AS/src/KillGate.cpp +++ /dev/null @@ -1,280 +0,0 @@ -//************************************************************************************** -//KillGate module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code adapted from Dual Counter - VCV Module, Strum 2017 -//************************************************************************************** - -#include "AS.hpp" - -#include "dsp/digital.hpp" - -#include -#include - -struct KillGate : Module { - enum ParamIds { - RST_BUTTON1, - COUNT_NUM_PARAM_1, - RST_BUTTON2, - COUNT_NUM_PARAM_2, - NUM_PARAMS - }; - enum InputIds { - INPUT_1, - CLK_IN_1, - RESET_IN_1, - INPUT_2, - CLK_IN_2, - RESET_IN_2, - NUM_INPUTS - }; - enum OutputIds { - OUTPUT_1, - OUTPUT_2, - OUTPUT_3, - NUM_OUTPUTS - }; - enum LightIds { - RESET_LIGHT1, - RESET_LIGHT2, - NUM_LIGHTS - }; - - SchmittTrigger clock_trigger_1; - SchmittTrigger reset_trigger_1; - SchmittTrigger reset_ext_trigger_1; - int count_limit1 = 1; - int count1 = 0; - SchmittTrigger clock_trigger_2; - SchmittTrigger reset_trigger_2; - SchmittTrigger reset_ext_trigger_2; - int count_limit_2 = 1; - int count_2 = 0; - - const float lightLambda = 0.075; - - float resetLight1 = 0.0f; - float resetLight2 = 0.0f; - - bool gate1_open= true; - bool gate2_open= true; - - KillGate() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - - } - - void reset() override { - - count_limit1 = 1; - count1 = 0; - count_limit_2 = 1; - count_2 = 0; - gate1_open= false; - gate2_open= false; - - } - - void step() override; - -}; - - -void KillGate::step(){ - - count_limit1 = round(params[COUNT_NUM_PARAM_1].value); - count_limit_2 = round(params[COUNT_NUM_PARAM_2].value); - - bool reset1 = false; - bool reset_2 = false; - ///////////// counter 1 - if (reset_trigger_1.process(params[RST_BUTTON1].value)){ - reset1 = true; - count1 = 0; - gate1_open=true; - resetLight1 = 1.0; - - } - if (reset_ext_trigger_1.process(inputs[RESET_IN_1].value)){ - reset1 = true; - count1 = 0; - gate1_open = true; - resetLight1 = 1.0; - - } - - resetLight1 -= resetLight1 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT1].value = resetLight1; - - if (reset1 == false){ - if (clock_trigger_1.process(inputs[CLK_IN_1].value) && count1 <= count_limit1){ - if (gate1_open){ - count1++; - } - } - } - if (count1 == count_limit1){ - gate1_open = false; - } - if (!gate1_open){ - outputs[OUTPUT_1].value = 0.0f; - }else{ - outputs[OUTPUT_1].value = inputs[INPUT_1].value; - } - ///////////// counter 2 - if (reset_trigger_2.process(params[RST_BUTTON2].value)){ - reset_2 = true; - count_2 = 0; - gate2_open=true; - resetLight2 = 1.0f; - } - if (reset_ext_trigger_2.process(inputs[RESET_IN_2].value)){ - reset_2 = true; - count_2 = 0; - gate2_open=true; - resetLight2 = 1.0f; - } - resetLight2 -= resetLight2 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT2].value = resetLight2; - - if (reset_2 == false){ - if (clock_trigger_2.process(inputs[CLK_IN_2].value) && count_2 <= count_limit_2){ - if (gate2_open){ - count_2++; - } - } - } - if (count_2 == count_limit_2){ - gate2_open = false; - } - if (!gate2_open){ - outputs[OUTPUT_2].value = 0.0f; - }else{ - outputs[OUTPUT_2].value = inputs[INPUT_2].value; - } - -} - -/////////////////////////////////// -struct NumberDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - NumberDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::right << std::setw(2) << *value; - - Vec textPos = Vec(4.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// -struct KillGateWidget : ModuleWidget -{ - KillGateWidget(KillGate *module); -}; - - -KillGateWidget::KillGateWidget(KillGate *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin,"res/KillGate.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - // counter 1 - //COUNT DISPLAY - NumberDisplayWidget *display1 = new NumberDisplayWidget(); - display1->box.pos = Vec(10,50); - display1->box.size = Vec(30, 20); - display1->value = &module->count1; - addChild(display1); - //KillGate DISPLAY - NumberDisplayWidget *display2 = new NumberDisplayWidget(); - display2->box.pos = Vec(50,50); - display2->box.size = Vec(30, 20); - display2->value = &module->count_limit1; - addChild(display2); - - int group_offset = 160; - - addParam(ParamWidget::create(Vec(11, 82), module, KillGate::RST_BUTTON1 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(11+2.2, 82+2.3), module, KillGate::RESET_LIGHT1)); - - addParam(ParamWidget::create(Vec(43, 73), module, KillGate::COUNT_NUM_PARAM_1, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(10, 125), Port::INPUT, module, KillGate::RESET_IN_1)); - addInput(Port::create(Vec(55, 125), Port::INPUT, module, KillGate::CLK_IN_1)); - - addInput(Port::create(Vec(10, 170), Port::INPUT, module, KillGate::INPUT_1)); - addOutput(Port::create(Vec(55, 170), Port::OUTPUT, module, KillGate::OUTPUT_1)); - - // counter 2 - //COUNT DISPLAY - NumberDisplayWidget *display3 = new NumberDisplayWidget(); - display3->box.pos = Vec(10,50 + group_offset); - display3->box.size = Vec(30, 20); - display3->value = &module->count_2; - addChild(display3); - //KillGate DISPLAY - NumberDisplayWidget *display4 = new NumberDisplayWidget(); - display4->box.pos = Vec(50,50 + group_offset); - display4->box.size = Vec(30, 20); - display4->value = &module->count_limit_2; - addChild(display4); - - addParam(ParamWidget::create(Vec(11, 82+ group_offset), module, KillGate::RST_BUTTON2 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(11+2.2, 82+2.3+ group_offset), module, KillGate::RESET_LIGHT2)); - - addParam(ParamWidget::create(Vec(43, 73 + group_offset), module, KillGate::COUNT_NUM_PARAM_2, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(10, 125 + group_offset), Port::INPUT, module, KillGate::RESET_IN_2)); - addInput(Port::create(Vec(55, 125 + group_offset), Port::INPUT, module, KillGate::CLK_IN_2)); - - addInput(Port::create(Vec(10, 170 + group_offset), Port::INPUT, module, KillGate::INPUT_2)); - addOutput(Port::create(Vec(55, 170 + group_offset), Port::OUTPUT, module, KillGate::OUTPUT_2)); - -} - -Model *modelKillGate = Model::create("AS", "KillGate", "Kill Gate", SWITCH_TAG, SEQUENCER_TAG, UTILITY_TAG, DELAY_TAG); diff --git a/repos/AS/src/LaunchGate.cpp b/repos/AS/src/LaunchGate.cpp deleted file mode 100644 index ddcf83fd..00000000 --- a/repos/AS/src/LaunchGate.cpp +++ /dev/null @@ -1,279 +0,0 @@ -//************************************************************************************** -//LaunchGate module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code adapted from Dual Counter - VCV Module, Strum 2017 -//************************************************************************************** - -#include "AS.hpp" - -#include "dsp/digital.hpp" - -#include -#include - -struct LaunchGate : Module { - enum ParamIds { - RST_BUTTON1, - COUNT_NUM_PARAM_1, - RST_BUTTON2, - COUNT_NUM_PARAM_2, - NUM_PARAMS - }; - enum InputIds { - INPUT_1, - CLK_IN_1, - RESET_IN_1, - INPUT_2, - CLK_IN_2, - RESET_IN_2, - NUM_INPUTS - }; - enum OutputIds { - OUTPUT_1, - OUTPUT_2, - OUTPUT_3, - NUM_OUTPUTS - }; - enum LightIds { - RESET_LIGHT1, - RESET_LIGHT2, - NUM_LIGHTS - }; - - SchmittTrigger clock_trigger_1; - SchmittTrigger reset_trigger_1; - SchmittTrigger reset_ext_trigger_1; - int count_limit1 = 1; - int count1 = 0; - SchmittTrigger clock_trigger_2; - SchmittTrigger reset_trigger_2; - SchmittTrigger reset_ext_trigger_2; - int count_limit_2 = 1; - int count_2 = 0; - - const float lightLambda = 0.075f; - - float resetLight1 = 0.0f; - float resetLight2 = 0.0f; - - bool gate1_open= false; - bool gate2_open= false; - - LaunchGate() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - - } - - void reset() override { - - count_limit1 = 1; - count1 = 0; - count_limit_2 = 1; - count_2 = 0; - gate1_open= false; - gate2_open= false; - - } - - void step() override; - -}; - - -void LaunchGate::step(){ - - count_limit1 = round(params[COUNT_NUM_PARAM_1].value); - count_limit_2 = round(params[COUNT_NUM_PARAM_2].value); - - bool reset1 = false; - bool reset_2 = false; - ///////////// counter 1 - if (reset_trigger_1.process(params[RST_BUTTON1].value)){ - reset1 = true; - count1 = 0; - gate1_open=false; - resetLight1 = 1.0f; - - } - if (reset_ext_trigger_1.process(inputs[RESET_IN_1].value)){ - reset1 = true; - count1 = 0; - gate1_open = false; - resetLight1 = 1.0f; - - } - - resetLight1 -= resetLight1 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT1].value = resetLight1; - - if (reset1 == false){ - if (clock_trigger_1.process(inputs[CLK_IN_1].value) && count1 <= count_limit1){ - if (!gate1_open){ - count1++; - } - } - } - if (count1 == count_limit1){ - gate1_open = true; - } - if (gate1_open){ - outputs[OUTPUT_1].value = inputs[INPUT_1].value; - }else{ - outputs[OUTPUT_1].value = 0.0f; - } - ///////////// counter 2 - if (reset_trigger_2.process(params[RST_BUTTON2].value)){ - reset_2 = true; - count_2 = 0; - gate2_open=false; - resetLight2 = 1.0f; - } - if (reset_ext_trigger_2.process(inputs[RESET_IN_2].value)){ - reset_2 = true; - count_2 = 0; - gate2_open=false; - resetLight2 = 1.0f; - } - resetLight2 -= resetLight2 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT2].value = resetLight2; - - if (reset_2 == false){ - if (clock_trigger_2.process(inputs[CLK_IN_2].value) && count_2 <= count_limit_2){ - if (!gate2_open){ - count_2++; - } - } - } - if (count_2 == count_limit_2){ - gate2_open = true; - } - if (gate2_open){ - outputs[OUTPUT_2].value = inputs[INPUT_2].value; - }else{ - outputs[OUTPUT_2].value = 0.0f; - } - -} - -/////////////////////////////////// -struct NumberDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - NumberDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::right << std::setw(2) << *value; - - Vec textPos = Vec(4.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// -struct LaunchGateWidget : ModuleWidget -{ - LaunchGateWidget(LaunchGate *module); -}; - -LaunchGateWidget::LaunchGateWidget(LaunchGate *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin,"res/LaunchGate.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - // counter 1 - //COUNT DISPLAY - NumberDisplayWidget *display1 = new NumberDisplayWidget(); - display1->box.pos = Vec(10,50); - display1->box.size = Vec(30, 20); - display1->value = &module->count1; - addChild(display1); - //LaunchGate DISPLAY - NumberDisplayWidget *display2 = new NumberDisplayWidget(); - display2->box.pos = Vec(50,50); - display2->box.size = Vec(30, 20); - display2->value = &module->count_limit1; - addChild(display2); - - int group_offset = 160; - - addParam(ParamWidget::create(Vec(11, 82), module, LaunchGate::RST_BUTTON1 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(11+2.2, 82+2.3), module, LaunchGate::RESET_LIGHT1)); - - addParam(ParamWidget::create(Vec(43, 73), module, LaunchGate::COUNT_NUM_PARAM_1, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(10, 125), Port::INPUT, module, LaunchGate::RESET_IN_1)); - addInput(Port::create(Vec(55, 125), Port::INPUT, module, LaunchGate::CLK_IN_1)); - - addInput(Port::create(Vec(10, 170), Port::INPUT, module, LaunchGate::INPUT_1)); - addOutput(Port::create(Vec(55, 170), Port::OUTPUT, module, LaunchGate::OUTPUT_1)); - - // counter 2 - //COUNT DISPLAY - NumberDisplayWidget *display3 = new NumberDisplayWidget(); - display3->box.pos = Vec(10,50 + group_offset); - display3->box.size = Vec(30, 20); - display3->value = &module->count_2; - addChild(display3); - //LaunchGate DISPLAY - NumberDisplayWidget *display4 = new NumberDisplayWidget(); - display4->box.pos = Vec(50,50 + group_offset); - display4->box.size = Vec(30, 20); - display4->value = &module->count_limit_2; - addChild(display4); - - addParam(ParamWidget::create(Vec(11, 82+ group_offset), module, LaunchGate::RST_BUTTON2 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(11+2.2, 82+2.3+ group_offset), module, LaunchGate::RESET_LIGHT2)); - - addParam(ParamWidget::create(Vec(43, 73 + group_offset), module, LaunchGate::COUNT_NUM_PARAM_2, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(10, 125 + group_offset), Port::INPUT, module, LaunchGate::RESET_IN_2)); - addInput(Port::create(Vec(55, 125 + group_offset), Port::INPUT, module, LaunchGate::CLK_IN_2)); - - addInput(Port::create(Vec(10, 170 + group_offset), Port::INPUT, module, LaunchGate::INPUT_2)); - addOutput(Port::create(Vec(55, 170 + group_offset), Port::OUTPUT, module, LaunchGate::OUTPUT_2)); - -} - -Model *modelLaunchGate = Model::create("AS", "LaunchGate", "Launch Gate", SWITCH_TAG, SEQUENCER_TAG, UTILITY_TAG, DELAY_TAG); \ No newline at end of file diff --git a/repos/AS/src/Merge2_5.cpp b/repos/AS/src/Merge2_5.cpp deleted file mode 100644 index 3f5a70fe..00000000 --- a/repos/AS/src/Merge2_5.cpp +++ /dev/null @@ -1,98 +0,0 @@ -//************************************************************************************** -//Multiple 2x5 module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//************************************************************************************** -#include "AS.hpp" - -struct Merge2_5 : Module { - enum ParamIds { - NUM_PARAMS - }; - enum InputIds { - INPUT11, - INPUT12, - INPUT13, - INPUT14, - INPUT15, - INPUT21, - INPUT22, - INPUT23, - INPUT24, - INPUT25, - NUM_INPUTS - }; - enum OutputIds { - OUTPUT1, - OUTPUT2, - NUM_OUTPUTS - }; - - Merge2_5() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} - void step() override; -}; - - -void Merge2_5::step() { - - float IN11 = inputs[INPUT11].value; - float IN12 = inputs[INPUT12].value; - float IN13 = inputs[INPUT13].value; - float IN14 = inputs[INPUT14].value; - float IN15 = inputs[INPUT15].value; - float IN21 = inputs[INPUT21].value; - float IN22 = inputs[INPUT22].value; - float IN23 = inputs[INPUT23].value; - float IN24 = inputs[INPUT24].value; - float IN25 = inputs[INPUT25].value; - - - // Set outputs - outputs[OUTPUT1].value = IN11 + IN12 + IN13 + IN14 + IN15; - outputs[OUTPUT2].value = IN21 + IN22 + IN23 + IN24 + IN25; - -} - -struct Merge2_5Widget : ModuleWidget -{ - Merge2_5Widget(Merge2_5 *module); -}; - - -Merge2_5Widget::Merge2_5Widget(Merge2_5 *module) : ModuleWidget(module) { - box.size = Vec(5 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/Merge2_5.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - //INPUTS - addInput(Port::create(Vec(8, 75), Port::INPUT, module, Merge2_5::INPUT11)); - addInput(Port::create(Vec(43, 75), Port::INPUT, module, Merge2_5::INPUT21)); - - addInput(Port::create(Vec(8, 120), Port::INPUT, module, Merge2_5::INPUT12)); - addInput(Port::create(Vec(43, 120), Port::INPUT, module, Merge2_5::INPUT22)); - - addInput(Port::create(Vec(8, 165), Port::INPUT, module, Merge2_5::INPUT13)); - addInput(Port::create(Vec(43, 165), Port::INPUT, module, Merge2_5::INPUT23)); - - addInput(Port::create(Vec(8, 210), Port::INPUT, module, Merge2_5::INPUT14)); - addInput(Port::create(Vec(43, 210), Port::INPUT, module, Merge2_5::INPUT24)); - - addInput(Port::create(Vec(8, 255), Port::INPUT, module, Merge2_5::INPUT15)); - addInput(Port::create(Vec(43, 255), Port::INPUT, module, Merge2_5::INPUT25)); - - //OUTPUTS - addOutput(Port::create(Vec(8, 310), Port::OUTPUT, module, Merge2_5::OUTPUT1)); - addOutput(Port::create(Vec(43, 310), Port::OUTPUT, module, Merge2_5::OUTPUT2)); - -} - -Model *modelMerge2_5 = Model::create("AS", "Merge2_5", "Merge 2 x 5", MULTIPLE_TAG, UTILITY_TAG); \ No newline at end of file diff --git a/repos/AS/src/Mixer8ch.cpp b/repos/AS/src/Mixer8ch.cpp deleted file mode 100644 index 1a3a816d..00000000 --- a/repos/AS/src/Mixer8ch.cpp +++ /dev/null @@ -1,434 +0,0 @@ -//************************************************************************************** -//8 channel mixer module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Based on DrumsMixer VCV Rack by Autodafe http://www.autodafe.net -//Based on code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** - -#include "AS.hpp" -#include "dsp/digital.hpp" - -struct Mixer8ch : Module { - enum ParamIds { - MIX_PARAM, - CH1_PARAM, - CH2_PARAM, - CH3_PARAM, - CH4_PARAM, - CH5_PARAM, - CH6_PARAM, - CH7_PARAM, - CH8_PARAM, - - CH1_PAN_PARAM, - CH2_PAN_PARAM, - CH3_PAN_PARAM, - CH4_PAN_PARAM, - CH5_PAN_PARAM, - CH6_PAN_PARAM, - CH7_PAN_PARAM, - CH8_PAN_PARAM, - - CH1MUTE, - CH2MUTE, - CH3MUTE, - CH4MUTE, - CH5MUTE, - CH6MUTE, - CH7MUTE, - CH8MUTE, - MASTER_MUTE, - NUM_PARAMS - }; - enum InputIds { - MIX_CV_INPUT, - - CH1_INPUT, - CH1_CV_INPUT, - CH1_CV_PAN_INPUT, - - CH2_INPUT, - CH2_CV_INPUT, - CH2_CV_PAN_INPUT, - - CH3_INPUT, - CH3_CV_INPUT, - CH3_CV_PAN_INPUT, - - CH4_INPUT, - CH4_CV_INPUT, - CH4_CV_PAN_INPUT, - - CH5_INPUT, - CH5_CV_INPUT, - CH5_CV_PAN_INPUT, - - CH6_INPUT, - CH6_CV_INPUT, - CH6_CV_PAN_INPUT, - - CH7_INPUT, - CH7_CV_INPUT, - CH7_CV_PAN_INPUT, - - CH8_INPUT, - CH8_CV_INPUT, - CH8_CV_PAN_INPUT, - - LINK_L, - LINK_R, - NUM_INPUTS - }; - enum OutputIds { - MIX_OUTPUTL, - MIX_OUTPUTR, - CH1_OUTPUT, - CH2_OUTPUT, - CH3_OUTPUT, - CH4_OUTPUT, - CH5_OUTPUT, - CH6_OUTPUT, - CH7_OUTPUT, - CH8_OUTPUT, - - NUM_OUTPUTS - }; - - enum LightIds { - MUTE_LIGHT1, - MUTE_LIGHT2, - MUTE_LIGHT3, - MUTE_LIGHT4, - MUTE_LIGHT5, - MUTE_LIGHT6, - MUTE_LIGHT7, - MUTE_LIGHT8, - MUTE_LIGHT_MASTER, - NUM_LIGHTS - }; - Mixer8ch() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - reset(); - } - void step() override; - - SchmittTrigger ch1mute; - SchmittTrigger ch2mute; - SchmittTrigger ch3mute; - SchmittTrigger ch4mute; - SchmittTrigger ch5mute; - SchmittTrigger ch6mute; - SchmittTrigger ch7mute; - SchmittTrigger ch8mute; - SchmittTrigger chMmute; - - float ch1m = false; - float ch2m = false; - float ch3m = false; - float ch4m = false; - float ch5m = false; - float ch6m = false; - float ch7m = false; - float ch8m = false; - float chMm = false; - - float mixL = 0.0f; - float mixR = 0.0f; - - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *mutesJ = json_array(); - - json_t *muteJ1 = json_integer((int) ch1m); - json_t *muteJ2 = json_integer((int) ch2m); - json_t *muteJ3 = json_integer((int) ch3m); - json_t *muteJ4 = json_integer((int) ch4m); - json_t *muteJ5 = json_integer((int) ch5m); - json_t *muteJ6 = json_integer((int) ch6m); - json_t *muteJ7 = json_integer((int) ch7m); - json_t *muteJ8 = json_integer((int) ch8m); - json_t *muteJ9 = json_integer((int) chMm); - - json_array_append_new(mutesJ, muteJ1); - json_array_append_new(mutesJ, muteJ2); - json_array_append_new(mutesJ, muteJ3); - json_array_append_new(mutesJ, muteJ4); - json_array_append_new(mutesJ, muteJ5); - json_array_append_new(mutesJ, muteJ6); - json_array_append_new(mutesJ, muteJ7); - json_array_append_new(mutesJ, muteJ8); - json_array_append_new(mutesJ, muteJ9); - - json_object_set_new(rootJm, "as_MixerMutes", mutesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *mutesJ = json_object_get(rootJm, "as_MixerMutes"); - - json_t *muteJ1 = json_array_get(mutesJ, 0); - json_t *muteJ2 = json_array_get(mutesJ, 1); - json_t *muteJ3 = json_array_get(mutesJ, 2); - json_t *muteJ4 = json_array_get(mutesJ, 3); - json_t *muteJ5 = json_array_get(mutesJ, 4); - json_t *muteJ6 = json_array_get(mutesJ, 5); - json_t *muteJ7 = json_array_get(mutesJ, 6); - json_t *muteJ8 = json_array_get(mutesJ, 7); - json_t *muteJ9 = json_array_get(mutesJ, 8); - - - - ch1m = !!json_integer_value(muteJ1); - ch2m = !!json_integer_value(muteJ2); - ch3m = !!json_integer_value(muteJ3); - ch4m = !!json_integer_value(muteJ4); - ch5m = !!json_integer_value(muteJ5); - ch6m = !!json_integer_value(muteJ6); - ch7m = !!json_integer_value(muteJ7); - ch8m = !!json_integer_value(muteJ8); - chMm = !!json_integer_value(muteJ9); - - } - //PAN LEVEL - float PanL(float balance, float cv){ // -1...+1 - float p, gl; - p=M_PI*(balance+1)/4; - if(cv){ - gl=::cos(p)*(1-((cv+1)/5)); - }else - {gl=::cos(p); - } - return gl; - } - - float PanR(float balance , float cv){ - float p, gr; - p=M_PI*(balance+1)/4; - if(cv){gr=::sin(p)*((cv+1)/5); - }else{ - gr=::sin(p); - } - return gr; - } -}; - -void Mixer8ch::step() { - //MUTE BUTTONS - if (ch1mute.process(params[CH1MUTE].value)) { - ch1m = !ch1m; - } - lights[MUTE_LIGHT1].value = ch1m ? 1.0f : 0.0f; - if (ch2mute.process(params[CH2MUTE].value)) { - ch2m = !ch2m; - } - lights[MUTE_LIGHT2].value = ch2m ? 1.0f : 0.0f; - if (ch3mute.process(params[CH3MUTE].value)) { - ch3m = !ch3m; - } - lights[MUTE_LIGHT3].value = ch3m ? 1.0f : 0.0f; - if (ch4mute.process(params[CH4MUTE].value)) { - ch4m = !ch4m; - } - lights[MUTE_LIGHT4].value = ch4m ? 1.0f : 0.0f; - if (ch5mute.process(params[CH5MUTE].value)) { - ch5m = !ch5m; - } - lights[MUTE_LIGHT5].value = ch5m ? 1.0f : 0.0f; - if (ch6mute.process(params[CH6MUTE].value)) { - ch6m = !ch6m; - } - lights[MUTE_LIGHT6].value = ch6m ? 1.0f : 0.0f; - if (ch7mute.process(params[CH7MUTE].value)) { - ch7m = !ch7m; - } - lights[MUTE_LIGHT7].value = ch7m ? 1.0f : 0.0f; - if (ch8mute.process(params[CH8MUTE].value)) { - ch8m = !ch8m; - } - lights[MUTE_LIGHT8].value = ch8m ? 1.0f : 0.0f; - - if (chMmute.process(params[MASTER_MUTE].value)) { - chMm = !chMm; - } - lights[MUTE_LIGHT_MASTER].value = chMm ? 1.0f : 0.0f; - //CHANNEL RESULTS - float ch1L = (1-ch1m) * (inputs[CH1_INPUT].value) * params[CH1_PARAM].value * PanL(params[CH1_PAN_PARAM].value,(inputs[CH1_CV_PAN_INPUT].value))* clamp(inputs[CH1_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch1R = (1-ch1m) * (inputs[CH1_INPUT].value) * params[CH1_PARAM].value * PanR(params[CH1_PAN_PARAM].value,(inputs[CH1_CV_PAN_INPUT].value)) * clamp(inputs[CH1_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - float ch2L = (1-ch2m) *(inputs[CH2_INPUT].value) * params[CH2_PARAM].value * PanL(params[CH2_PAN_PARAM].value,(inputs[CH2_CV_PAN_INPUT].value)) * clamp(inputs[CH2_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch2R = (1-ch2m) *(inputs[CH2_INPUT].value) * params[CH2_PARAM].value * PanR(params[CH2_PAN_PARAM].value,(inputs[CH2_CV_PAN_INPUT].value)) * clamp(inputs[CH2_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - float ch3L = (1-ch3m) *(inputs[CH3_INPUT].value) * params[CH3_PARAM].value * PanL(params[CH3_PAN_PARAM].value,(inputs[CH3_CV_PAN_INPUT].value)) * clamp(inputs[CH3_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch3R = (1-ch3m) *(inputs[CH3_INPUT].value) * params[CH3_PARAM].value * PanR(params[CH3_PAN_PARAM].value,(inputs[CH3_CV_PAN_INPUT].value)) * clamp(inputs[CH3_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - float ch4L = (1-ch4m) *(inputs[CH4_INPUT].value) * params[CH4_PARAM].value * PanL(params[CH4_PAN_PARAM].value,(inputs[CH4_CV_PAN_INPUT].value)) * clamp(inputs[CH4_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch4R = (1-ch4m) *(inputs[CH4_INPUT].value) * params[CH4_PARAM].value * PanR(params[CH4_PAN_PARAM].value,(inputs[CH4_CV_PAN_INPUT].value)) * clamp(inputs[CH4_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - - float ch5L = (1-ch5m) *(inputs[CH5_INPUT].value) * params[CH5_PARAM].value * PanL(params[CH5_PAN_PARAM].value,(inputs[CH5_CV_PAN_INPUT].value)) * clamp(inputs[CH5_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch5R = (1-ch5m) *(inputs[CH5_INPUT].value) * params[CH5_PARAM].value * PanR(params[CH5_PAN_PARAM].value,(inputs[CH5_CV_PAN_INPUT].value)) * clamp(inputs[CH5_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - float ch6L = (1-ch6m) *(inputs[CH6_INPUT].value) * params[CH6_PARAM].value * PanL(params[CH6_PAN_PARAM].value,(inputs[CH6_CV_PAN_INPUT].value)) * clamp(inputs[CH6_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch6R = (1-ch6m) *(inputs[CH6_INPUT].value) * params[CH6_PARAM].value * PanR(params[CH6_PAN_PARAM].value,(inputs[CH6_CV_PAN_INPUT].value)) * clamp(inputs[CH6_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch7L = (1-ch7m) *(inputs[CH7_INPUT].value) * params[CH7_PARAM].value * PanL(params[CH7_PAN_PARAM].value,(inputs[CH7_CV_PAN_INPUT].value)) * clamp(inputs[CH7_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch7R = (1-ch7m) *(inputs[CH7_INPUT].value) * params[CH7_PARAM].value * PanR(params[CH7_PAN_PARAM].value,(inputs[CH7_CV_PAN_INPUT].value)) * clamp(inputs[CH7_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - float ch8L = (1-ch8m) *(inputs[CH8_INPUT].value) * params[CH8_PARAM].value * PanL(params[CH8_PAN_PARAM].value,(inputs[CH8_CV_PAN_INPUT].value)) * clamp(inputs[CH8_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - float ch8R = (1-ch8m) *(inputs[CH8_INPUT].value) * params[CH8_PARAM].value * PanR(params[CH8_PAN_PARAM].value,(inputs[CH8_CV_PAN_INPUT].value)) * clamp(inputs[CH8_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - - if(!chMm){ - mixL = (ch1L + ch2L + ch3L +ch4L + ch5L + ch6L + ch7L + ch8L) * params[MIX_PARAM].value * clamp(inputs[MIX_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - mixR = (ch1R + ch2R + ch3R +ch4R + ch5R + ch6R + ch7R + ch8R) * params[MIX_PARAM].value * clamp(inputs[MIX_CV_INPUT].normalize(10.0f) / 10.0f, 0.0f, 1.0f); - //CHECK FOR INPUT FROM ANOTHER MIXER - if(inputs[LINK_L].active && inputs[LINK_R].active){ - mixL += inputs[LINK_L].value; - mixR += inputs[LINK_R].value; - } - }else{ - mixL = 0.0f; - mixR = 0.0f; - } - - outputs[CH1_OUTPUT].value= ch1L+ch1R; - outputs[CH2_OUTPUT].value= ch2L+ch2R; - outputs[CH3_OUTPUT].value= ch3L+ch3R; - outputs[CH4_OUTPUT].value= ch4L+ch4R; - outputs[CH5_OUTPUT].value= ch5L+ch5R; - outputs[CH6_OUTPUT].value= ch6L+ch6R; - outputs[CH7_OUTPUT].value= ch7L+ch7R; - outputs[CH8_OUTPUT].value= ch8L+ch8R; - //check for MONO OUTPUT - - if(!outputs[MIX_OUTPUTR].active){ - outputs[MIX_OUTPUTL].value= mixL+mixR; - outputs[MIX_OUTPUTR].value= 0.0f; - }else{ - outputs[MIX_OUTPUTL].value= mixL; - outputs[MIX_OUTPUTR].value= mixR; - } - - //outputs[MIX_OUTPUTL].value= mixL; - //outputs[MIX_OUTPUTR].value= mixR; - -} - - -struct Mixer8chWidget : ModuleWidget -{ - Mixer8chWidget(Mixer8ch *module); -}; - - -Mixer8chWidget::Mixer8chWidget(Mixer8ch *module) : ModuleWidget(module) { - //box.size = Vec(15*37, 380); - box.size = Vec(RACK_GRID_WIDTH*26, RACK_GRID_HEIGHT); - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/8chMixer.svg"))); - - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //PAN KNOBS - static const float columnPos[8] = {33,73,113,153, 193, 233, 273, 313}; - static const float panPosY = 180; - addParam(ParamWidget::create(Vec(columnPos[0]-5, panPosY), module, Mixer8ch::CH1_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[1]-5, panPosY), module, Mixer8ch::CH2_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[2]-5, panPosY), module, Mixer8ch::CH3_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[3]-5, panPosY), module, Mixer8ch::CH4_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[4]-5, panPosY), module, Mixer8ch::CH5_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[5]-5, panPosY), module, Mixer8ch::CH6_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[6]-5, panPosY), module, Mixer8ch::CH7_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(columnPos[7]-5, panPosY), module, Mixer8ch::CH8_PAN_PARAM, -1.0f, 1.0f, 0.0f)); - //VOLUME FADERS - static const float volPosY = 223; - addParam(ParamWidget::create(Vec(columnPos[0]+2, volPosY), module, Mixer8ch::CH1_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[1]+2, volPosY), module, Mixer8ch::CH2_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[2]+2, volPosY), module, Mixer8ch::CH3_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[3]+2, volPosY), module, Mixer8ch::CH4_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[4]+2, volPosY), module, Mixer8ch::CH5_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[5]+2, volPosY), module, Mixer8ch::CH6_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[6]+2, volPosY), module, Mixer8ch::CH7_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(columnPos[7]+2, volPosY), module, Mixer8ch::CH8_PARAM, 0.0f, 1.0f, 0.8f)); - //MUTES - static const float mutePosY = 310; - addParam(ParamWidget::create(Vec(columnPos[0]+3, mutePosY), module, Mixer8ch::CH1MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[0]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT1)); - addParam(ParamWidget::create(Vec(columnPos[1]+3, mutePosY), module, Mixer8ch::CH2MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[1]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT2)); - addParam(ParamWidget::create(Vec(columnPos[2]+3, mutePosY), module, Mixer8ch::CH3MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[2]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT3)); - addParam(ParamWidget::create(Vec(columnPos[3]+3, mutePosY), module, Mixer8ch::CH4MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[3]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT4)); - addParam(ParamWidget::create(Vec(columnPos[4]+3, mutePosY), module, Mixer8ch::CH5MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[4]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT5)); - addParam(ParamWidget::create(Vec(columnPos[5]+3, mutePosY), module, Mixer8ch::CH6MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[5]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT6)); - addParam(ParamWidget::create(Vec(columnPos[6]+3, mutePosY), module, Mixer8ch::CH7MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[6]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT7)); - addParam(ParamWidget::create(Vec(columnPos[7]+3, mutePosY), module, Mixer8ch::CH8MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(columnPos[7]+5.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT8)); - //PORTS - static const float portsY[4] = {60,90,120,150}; - addInput(Port::create(Vec(columnPos[0], portsY[0]), Port::INPUT, module, Mixer8ch::CH1_INPUT)); - addInput(Port::create(Vec(columnPos[0], portsY[1]), Port::INPUT, module, Mixer8ch::CH1_CV_INPUT)); - addInput(Port::create(Vec(columnPos[0], portsY[2]), Port::INPUT, module, Mixer8ch::CH1_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[1], portsY[0]), Port::INPUT, module, Mixer8ch::CH2_INPUT)); - addInput(Port::create(Vec(columnPos[1], portsY[1]), Port::INPUT, module, Mixer8ch::CH2_CV_INPUT)); - addInput(Port::create(Vec(columnPos[1], portsY[2]), Port::INPUT, module, Mixer8ch::CH2_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[2], portsY[0]), Port::INPUT, module, Mixer8ch::CH3_INPUT)); - addInput(Port::create(Vec(columnPos[2], portsY[1]), Port::INPUT, module, Mixer8ch::CH3_CV_INPUT)); - addInput(Port::create(Vec(columnPos[2], portsY[2]), Port::INPUT, module, Mixer8ch::CH3_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[3], portsY[0]), Port::INPUT, module, Mixer8ch::CH4_INPUT)); - addInput(Port::create(Vec(columnPos[3], portsY[1]), Port::INPUT, module, Mixer8ch::CH4_CV_INPUT)); - addInput(Port::create(Vec(columnPos[3], portsY[2]), Port::INPUT, module, Mixer8ch::CH4_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[4], portsY[0]), Port::INPUT, module, Mixer8ch::CH5_INPUT)); - addInput(Port::create(Vec(columnPos[4], portsY[1]), Port::INPUT, module, Mixer8ch::CH5_CV_INPUT)); - addInput(Port::create(Vec(columnPos[4], portsY[2]), Port::INPUT, module, Mixer8ch::CH5_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[5], portsY[0]), Port::INPUT, module, Mixer8ch::CH6_INPUT)); - addInput(Port::create(Vec(columnPos[5], portsY[1]), Port::INPUT, module, Mixer8ch::CH6_CV_INPUT)); - addInput(Port::create(Vec(columnPos[5], portsY[2]), Port::INPUT, module, Mixer8ch::CH6_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[6], portsY[0]), Port::INPUT, module, Mixer8ch::CH7_INPUT)); - addInput(Port::create(Vec(columnPos[6], portsY[1]), Port::INPUT, module, Mixer8ch::CH7_CV_INPUT)); - addInput(Port::create(Vec(columnPos[6], portsY[2]), Port::INPUT, module, Mixer8ch::CH7_CV_PAN_INPUT)); - - addInput(Port::create(Vec(columnPos[7], portsY[0]), Port::INPUT, module, Mixer8ch::CH8_INPUT)); - addInput(Port::create(Vec(columnPos[7], portsY[1]), Port::INPUT, module, Mixer8ch::CH8_CV_INPUT)); - addInput(Port::create(Vec(columnPos[7], portsY[2]), Port::INPUT, module, Mixer8ch::CH8_CV_PAN_INPUT)); - - addOutput(Port::create(Vec(columnPos[0], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH1_OUTPUT)); - addOutput(Port::create(Vec(columnPos[1], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH2_OUTPUT)); - addOutput(Port::create(Vec(columnPos[2], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH3_OUTPUT)); - addOutput(Port::create(Vec(columnPos[3], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH4_OUTPUT)); - addOutput(Port::create(Vec(columnPos[4], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH5_OUTPUT)); - addOutput(Port::create(Vec(columnPos[5], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH6_OUTPUT)); - addOutput(Port::create(Vec(columnPos[6], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH7_OUTPUT)); - addOutput(Port::create(Vec(columnPos[7], portsY[3]), Port::OUTPUT, module, Mixer8ch::CH8_OUTPUT)); - //OUTPUT - addOutput(Port::create(Vec(356, portsY[0]), Port::OUTPUT, module, Mixer8ch::MIX_OUTPUTL)); - addOutput(Port::create(Vec(356, portsY[1]), Port::OUTPUT, module, Mixer8ch::MIX_OUTPUTR)); - addInput(Port::create(Vec(356, portsY[3]), Port::INPUT, module, Mixer8ch::MIX_CV_INPUT)); - addParam(ParamWidget::create(Vec(356, volPosY), module, Mixer8ch::MIX_PARAM, 0.0f, 1.0f, 0.8f)); - addParam(ParamWidget::create(Vec(356, mutePosY), module, Mixer8ch::MASTER_MUTE , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(356+2.2, mutePosY+2), module, Mixer8ch::MUTE_LIGHT_MASTER)); - - //LINK - addInput(Port::create(Vec(columnPos[0], 30), Port::INPUT, module, Mixer8ch::LINK_L)); - addInput(Port::create(Vec(columnPos[1], 30), Port::INPUT, module, Mixer8ch::LINK_R)); - -} -Model *modelMixer8ch = Model::create("AS", "Mixer8ch", "8-CH Mixer", MIXER_TAG, AMPLIFIER_TAG); \ No newline at end of file diff --git a/repos/AS/src/MonoVUmeter.cpp b/repos/AS/src/MonoVUmeter.cpp deleted file mode 100644 index b434d1db..00000000 --- a/repos/AS/src/MonoVUmeter.cpp +++ /dev/null @@ -1,96 +0,0 @@ -//*********************************************************************************************** -// -//MonoVUmeter module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//*********************************************************************************************** - -#include "AS.hpp" -#include "dsp/vumeter.hpp" - -struct MonoVUmeter : Module { - enum ParamIds { - NUM_PARAMS - }; - - enum InputIds { - INPUT, - NUM_INPUTS - }; - - enum OutputIds { - OUT, - NUM_OUTPUTS - }; - - enum LightIds { - METER_LIGHT, - NUM_LIGHTS = METER_LIGHT+15 - }; - - MonoVUmeter() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - } - void step() override; - - VUMeter vuBar; - -}; - -void MonoVUmeter::step(){ - //GET VALUES AND ROUTE SIGNAL TO OUTPUT - float signal_in = inputs[INPUT].value; - outputs[OUT].value = signal_in; - //VU METER BARS LIGHTS - vuBar.dBInterval = 3; - vuBar.setValue(signal_in / 10.0f); - for (int i = 0; i < 15; i++){ - lights[METER_LIGHT + i].setBrightnessSmooth(vuBar.getBrightness(i)); - } -}; - -struct MonoVUmeterWidget : ModuleWidget -{ - MonoVUmeterWidget(MonoVUmeter *module); -}; - - -MonoVUmeterWidget::MonoVUmeterWidget(MonoVUmeter *module) : ModuleWidget(module) { - box.size = Vec(2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/MonoVUmeter.svg"))); - addChild(panel); - } - //SCREWS - SPECIAL SPACING FOR RACK WIDTH*4 - addChild(Widget::create(Vec(0, 0))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - // LEFT COLUMN LEDs - static const float ledCol = 11; - static const float offsetY = 12; - static const float startY = 66; - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 0), module, MonoVUmeter::METER_LIGHT + 0)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 1), module, MonoVUmeter::METER_LIGHT + 1)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 2), module, MonoVUmeter::METER_LIGHT + 2)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 3), module, MonoVUmeter::METER_LIGHT + 3)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 4), module, MonoVUmeter::METER_LIGHT + 4)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 5), module, MonoVUmeter::METER_LIGHT + 5)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 6), module, MonoVUmeter::METER_LIGHT + 6)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 7), module, MonoVUmeter::METER_LIGHT + 7)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 8), module, MonoVUmeter::METER_LIGHT + 8)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 9), module, MonoVUmeter::METER_LIGHT + 9)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 10), module, MonoVUmeter::METER_LIGHT + 10)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 11), module, MonoVUmeter::METER_LIGHT + 11)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 12), module, MonoVUmeter::METER_LIGHT + 12)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 13), module, MonoVUmeter::METER_LIGHT + 13)); - addChild(ModuleLightWidget::create>(Vec(ledCol, startY + offsetY * 14), module, MonoVUmeter::METER_LIGHT + 14)); - - //INPUTS - addInput(Port::create(Vec(3, 270), Port::INPUT, module, MonoVUmeter::INPUT)); - //OUTPUTS - addOutput(Port::create(Vec(3,307), Port::OUTPUT, module, MonoVUmeter::OUT)); -} - -Model *modelMonoVUmeter = Model::create("AS", "MonoVUmeter", "Mono VU meter", VISUAL_TAG, UTILITY_TAG); \ No newline at end of file diff --git a/repos/AS/src/Multiple2_5.cpp b/repos/AS/src/Multiple2_5.cpp deleted file mode 100644 index 924bac5f..00000000 --- a/repos/AS/src/Multiple2_5.cpp +++ /dev/null @@ -1,134 +0,0 @@ -//************************************************************************************** -//Multiple 2x5 module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//************************************************************************************** -#include "AS.hpp" - -struct Multiple2_5 : Module { - enum ParamIds { - NUM_PARAMS - }; - enum InputIds { - INPUT1, - INPUT2, - NUM_INPUTS - }; - enum OutputIds { - OUT11, - OUT12, - OUT13, - OUT14, - OUT15, - OUT21, - OUT22, - OUT23, - OUT24, - OUT25, - NUM_OUTPUTS - }; - - Multiple2_5() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} - void step() override; -}; - - -void Multiple2_5::step() { - - float IN1 = inputs[INPUT1].value; - float IN2 = inputs[INPUT2].value; - - // Set outputs - outputs[OUT11].value = IN1; - outputs[OUT12].value = IN1; - outputs[OUT13].value = IN1; - outputs[OUT14].value = IN1; - outputs[OUT15].value = IN1; - outputs[OUT21].value = IN2; - outputs[OUT22].value = IN2; - outputs[OUT23].value = IN2; - outputs[OUT24].value = IN2; - outputs[OUT25].value = IN2; - //Is it necessary to check for active outputs in this case? - /* - if (outputs[OUT11].active) { - outputs[OUT11].value = IN1; - } - - if (outputs[OUT12].active) { - outputs[OUT12].value = IN1; - } - - if (outputs[OUT13].active) { - outputs[OUT13].value= IN1; - } - - if (outputs[OUT14].active) { - outputs[OUT14].value = IN1; - } - if (outputs[OUT15].active) { - outputs[OUT15].value = IN1; - } - - if (outputs[OUT21].active) { - outputs[OUT21].value = IN2; - } - - if (outputs[OUT22].active) { - outputs[OUT22].value = IN2; - } - - if (outputs[OUT23].active) { - outputs[OUT23].value = IN2; - } - - if (outputs[OUT24].active) { - outputs[OUT24].value = IN2; - } - if (outputs[OUT25].active) { - outputs[OUT25].value = IN2; - } - */ -} - -struct Multiple2_5Widget : ModuleWidget -{ - Multiple2_5Widget(Multiple2_5 *module); -}; - - -Multiple2_5Widget::Multiple2_5Widget(Multiple2_5 *module) : ModuleWidget(module) { - box.size = Vec(5 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/Multiple2_5.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //INPUTS - addInput(Port::create(Vec(8, 65), Port::INPUT, module, Multiple2_5::INPUT1)); - addInput(Port::create(Vec(43, 65), Port::INPUT, module, Multiple2_5::INPUT2)); - //OUTPUTS - addOutput(Port::create(Vec(8, 130), Port::OUTPUT, module, Multiple2_5::OUT11)); - addOutput(Port::create(Vec(43, 130), Port::OUTPUT, module, Multiple2_5::OUT21)); - - addOutput(Port::create(Vec(8, 175), Port::OUTPUT, module, Multiple2_5::OUT12)); - addOutput(Port::create(Vec(43, 175), Port::OUTPUT, module, Multiple2_5::OUT22)); - - addOutput(Port::create(Vec(8, 220), Port::OUTPUT, module, Multiple2_5::OUT13)); - addOutput(Port::create(Vec(43, 220), Port::OUTPUT, module, Multiple2_5::OUT23)); - - addOutput(Port::create(Vec(8, 265), Port::OUTPUT, module, Multiple2_5::OUT14)); - addOutput(Port::create(Vec(43, 265), Port::OUTPUT, module, Multiple2_5::OUT24)); - - addOutput(Port::create(Vec(8, 310), Port::OUTPUT, module, Multiple2_5::OUT15)); - addOutput(Port::create(Vec(43, 310), Port::OUTPUT, module, Multiple2_5::OUT25)); - -} - -Model *modelMultiple2_5 = Model::create("AS", "Multiple2_5", "Multiple 2 x 5", MULTIPLE_TAG, UTILITY_TAG); \ No newline at end of file diff --git a/repos/AS/src/Phaser.cpp b/repos/AS/src/Phaser.cpp deleted file mode 100644 index 70f48e9e..00000000 --- a/repos/AS/src/Phaser.cpp +++ /dev/null @@ -1,238 +0,0 @@ -//*********************************************************************************************** -// -//Phaser module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -//Based on the Phaser Module for VCV Rack by Autodafe http://www.autodafe.net -//Based on code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//And part of code on musicdsp.org: http://musicdsp.org/showArchiveComment.php?ArchiveID=78 -// -//*********************************************************************************************** - -#include "AS.hpp" -#include "dsp/digital.hpp" - -#include - -struct PhaserFx : Module{ - enum ParamIds { - RATE_PARAM, - FBK_PARAM, - DEPTH_PARAM, - BYPASS_SWITCH, - NUM_PARAMS - }; - enum InputIds { - INPUT, - RATE_CV_INPUT, - FEEDBACK_CV_INPUT, - DEPTH_CV_INPUT, - NUM_INPUTS - }; - enum OutputIds { - OUT, - NUM_OUTPUTS - }; - enum LightIds { - RATE_LIGHT, - FBK_LIGHT, - DEPTH_LIGHT, - BYPASS_LED, - NUM_LIGHTS - }; - - SchmittTrigger bypass_button_trig; - - bool fx_bypass = false; - PhaserFx() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - - void step() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *statesJ = json_array(); - - json_t *bypassJ = json_boolean(fx_bypass); - json_array_append_new(statesJ, bypassJ); - - json_object_set_new(rootJm, "as_FxBypass", statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *statesJ = json_object_get(rootJm, "as_FxBypass"); - - json_t *bypassJ = json_array_get(statesJ, 0); - - fx_bypass = !!json_boolean_value(bypassJ); - - } - -}; - -#define SR (44100.f) //sample rate -#define F_PI (3.14159f) - -class Phaser{ -public: - Phaser() //initialise to some usefull defaults... - : _fb( 0.7f ) - , _lfoPhase( 0.0f ) - , _depth( 1.0f ) - , _zm1( 0.f ) - { - Range( 440.0f, 1600.0f ); - Rate( 0.5f ); - } - - void Range( float fMin, float fMax ){ // Hz - _dmin = fMin / (SR/2.0f); - _dmax = fMax / (SR/2.0f); - } - - void Rate( float rate ){ // cps - _lfoInc = 2.0f * F_PI * (rate / SR); - } - - void Feedback( float fb ){ // 0 -> <1. - _fb = fb; - } - - void Depth( float depth ){ // 0 -> 1. - _depth = depth; - } - - float Update( float inSamp ){ - //calculate and update phaser sweep lfo... - float d = _dmin + (_dmax-_dmin) * ((sin( _lfoPhase ) + -1.f)/2.f); - _lfoPhase += _lfoInc; - if( _lfoPhase >= F_PI * 2.0f ) - _lfoPhase -= F_PI * 2.0f; - - //update filter coeffs - for( int i=0; i<6; i++ ) - _alps[i].Delay( d ); - - //calculate output - float y = _alps[0].Update( - _alps[1].Update( - _alps[2].Update( - _alps[3].Update( - _alps[4].Update( - _alps[5].Update( inSamp + _zm1 * _fb )))))); - _zm1 = y; - - return inSamp + y * _depth; - } -private: - class AllpassDelay{ - public: - AllpassDelay() - : _a1( 0.0f ) - , _zm1( 0.0f ) - {} - - void Delay( float delay ){ //sample delay time - _a1 = (1.0f - delay) / (1.0f + delay); - } - - float Update( float inSamp ){ - float y = inSamp * -_a1 + _zm1; - _zm1 = y * _a1 + inSamp; - - return y; - } - private: - float _a1, _zm1; - }; - - AllpassDelay _alps[6]; - - float _dmin, _dmax; //range - float _fb; //feedback - float _lfoPhase; - float _lfoInc; - float _depth; - - float _zm1; -}; - -Phaser *pha = new Phaser(); - -void PhaserFx::step() { - - if (bypass_button_trig.process(params[BYPASS_SWITCH].value)) - { - fx_bypass = !fx_bypass; - } - lights[BYPASS_LED].value = fx_bypass ? 1.00 : 0.0; - - - float rate = clamp(params[RATE_PARAM].value + inputs[RATE_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - float feedback = clamp(params[FBK_PARAM].value + inputs[FEEDBACK_CV_INPUT].value / 10.0f, 0.0f, 0.95f); - float depth = clamp(params[DEPTH_PARAM].value + inputs[DEPTH_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - - float input = inputs[INPUT].value / 5.0f; - - pha->Rate(rate); - pha->Feedback(feedback); - pha->Depth (depth); - - float out = pha->Update(input); - - //check bypass switch status - if (fx_bypass){ - outputs[OUT].value = input * 5.0f; - }else{ - outputs[OUT].value = out * 5.0f; - } - - lights[RATE_LIGHT].value = clamp(params[RATE_PARAM].value + inputs[RATE_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - lights[FBK_LIGHT].value = clamp(params[FBK_PARAM].value + inputs[FEEDBACK_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - lights[DEPTH_LIGHT].value = clamp(params[DEPTH_PARAM].value + inputs[DEPTH_CV_INPUT].value / 10.0f, 0.0f, 1.0f); -} - - -struct PhaserFxWidget : ModuleWidget -{ - PhaserFxWidget(PhaserFx *module); -}; - - -PhaserFxWidget::PhaserFxWidget(PhaserFx *module) : ModuleWidget(module) { - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/Phaser.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //KNOBS - addParam(ParamWidget::create(Vec(43, 60), module, PhaserFx::RATE_PARAM, 0.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(43, 125), module, PhaserFx::FBK_PARAM, 0.0f, 0.95f, 0.0f)); - addParam(ParamWidget::create(Vec(43, 190), module, PhaserFx::DEPTH_PARAM, 0.0f, 1.0f, 0.0f)); - //LIGHTS - addChild(ModuleLightWidget::create>(Vec(39, 57), module, PhaserFx::RATE_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 122), module, PhaserFx::FBK_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 187), module, PhaserFx::DEPTH_LIGHT)); - //BYPASS SWITCH - addParam(ParamWidget::create(Vec(33, 260), module, PhaserFx::BYPASS_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(35.2, 262), module, PhaserFx::BYPASS_LED)); - //INS/OUTS - addInput(Port::create(Vec(10, 310), Port::INPUT, module, PhaserFx::INPUT)); - addOutput(Port::create(Vec(55, 310), Port::OUTPUT, module, PhaserFx::OUT)); - //CV INPUTS - addInput(Port::create(Vec(10, 67), Port::INPUT, module, PhaserFx::RATE_CV_INPUT)); - addInput(Port::create(Vec(10, 132), Port::INPUT, module, PhaserFx::FEEDBACK_CV_INPUT)); - addInput(Port::create(Vec(10, 197), Port::INPUT, module, PhaserFx::DEPTH_CV_INPUT)); - -} - -Model *modelPhaserFx = Model::create("AS", "PhaserFx", "Phaser FX", EFFECT_TAG); \ No newline at end of file diff --git a/repos/AS/src/QuadVCA.cpp b/repos/AS/src/QuadVCA.cpp deleted file mode 100644 index 5bbadfa3..00000000 --- a/repos/AS/src/QuadVCA.cpp +++ /dev/null @@ -1,176 +0,0 @@ -//************************************************************************************** -//Quad QuadVCA module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code adapted from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** - -#include "AS.hpp" - -struct QuadVCA : Module { - enum ParamIds { - GAIN1_PARAM, - GAIN2_PARAM, - GAIN3_PARAM, - GAIN4_PARAM, - MODE1_PARAM, - MODE2_PARAM, - MODE3_PARAM, - MODE4_PARAM, - NUM_PARAMS - }; - enum InputIds { - GAIN1_CV_INPUT, - IN1_INPUT, - GAIN2_CV_INPUT, - IN2_INPUT, - GAIN3_CV_INPUT, - IN3_INPUT, - GAIN4_CV_INPUT, - IN4_INPUT, - NUM_INPUTS - }; - enum OutputIds { - OUT1_OUTPUT, - OUT2_OUTPUT, - OUT3_OUTPUT, - OUT4_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - GAIN1_LIGHT, - GAIN2_LIGHT, - GAIN3_LIGHT, - GAIN4_LIGHT, - NUM_LIGHTS - }; - - float v1= 0.0f; - float v2= 0.0f; - float v3= 0.0f; - float v4= 0.0f; - const float expBase = 50.0f; - - QuadVCA() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; -}; - -void QuadVCA::step() { - //QuadVCA 1 - float out = 0.0; - v1 = inputs[IN1_INPUT].value * params[GAIN1_PARAM].value; - if(inputs[GAIN1_CV_INPUT].active){ - if(params[MODE1_PARAM].value==1){ - v1 *= clamp(inputs[GAIN1_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - }else{ - v1 *= rescale(powf(expBase, clamp(inputs[GAIN1_CV_INPUT].value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - } - } - out+=v1; - lights[GAIN1_LIGHT].setBrightnessSmooth(fmaxf(0.0f, out / 5.0f)); - if (outputs[OUT1_OUTPUT].active) { - outputs[OUT1_OUTPUT].value = out; - out = 0.0f; - } - //QuadVCA 2 - v2 = inputs[IN2_INPUT].value * params[GAIN2_PARAM].value; - if(inputs[GAIN2_CV_INPUT].active){ - if(params[MODE2_PARAM].value){ - v2 *= clamp(inputs[GAIN2_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - }else{ - v2 *= rescale(powf(expBase, clamp(inputs[GAIN2_CV_INPUT].value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - } - } - out+=v2; - lights[GAIN2_LIGHT].setBrightnessSmooth(fmaxf(0.0f, out / 5.0f)); - if (outputs[OUT2_OUTPUT].active) { - outputs[OUT2_OUTPUT].value = out; - out = 0.0f; - } - //QuadVCA 3 - v3 = inputs[IN3_INPUT].value * params[GAIN3_PARAM].value; - if(inputs[GAIN3_CV_INPUT].active){ - if(params[MODE3_PARAM].value){ - v3 *= clamp(inputs[GAIN3_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - }else{ - v3 *= rescale(powf(expBase, clamp(inputs[GAIN3_CV_INPUT].value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - } - } - out+=v3; - lights[GAIN3_LIGHT].setBrightnessSmooth(fmaxf(0.0f, out / 5.0f)); - if (outputs[OUT3_OUTPUT].active) { - outputs[OUT3_OUTPUT].value = out; - out = 0.0f; - } - //QuadVCA 4 - v4 = inputs[IN4_INPUT].value * params[GAIN4_PARAM].value; - if(inputs[GAIN4_CV_INPUT].active){ - if(params[MODE4_PARAM].value){ - v4 *= clamp(inputs[GAIN4_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - }else{ - v4 *= rescale(powf(expBase, clamp(inputs[GAIN4_CV_INPUT].value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - } - } - out+=v4; - lights[GAIN4_LIGHT].setBrightnessSmooth(fmaxf(0.0f, out / 5.0f)); - if (outputs[OUT4_OUTPUT].active) { - outputs[OUT4_OUTPUT].value = out; - out = 0.0f; - } -} - -struct QuadVCAWidget : ModuleWidget -{ - QuadVCAWidget(QuadVCA *module); -}; - - -QuadVCAWidget::QuadVCAWidget(QuadVCA *module) : ModuleWidget(module) { - box.size = Vec(8 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/QuadVCA.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - static const float posX[4] = {13,39,65,91}; - //SLIDERS - addParam(ParamWidget::create(Vec(posX[0]-3, 70), module, QuadVCA::GAIN1_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(posX[1]-3, 70), module, QuadVCA::GAIN2_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(posX[2]-3, 70), module, QuadVCA::GAIN3_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(posX[3]-3, 70), module, QuadVCA::GAIN4_PARAM, 0.0f, 1.0f, 0.5f)); - //MODE SWITCHES - addParam(ParamWidget::create(Vec(posX[0], 190), module, QuadVCA::MODE1_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(posX[1], 190), module, QuadVCA::MODE2_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(posX[2], 190), module, QuadVCA::MODE3_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(posX[3], 190), module, QuadVCA::MODE4_PARAM, 0.0f, 1.0f, 1.0f)); - //CV INPUTS - addInput(Port::create(Vec(posX[0]-4, 217), Port::INPUT, module, QuadVCA::GAIN1_CV_INPUT)); - addInput(Port::create(Vec(posX[1]-4, 217), Port::INPUT, module, QuadVCA::GAIN2_CV_INPUT)); - addInput(Port::create(Vec(posX[2]-4, 217), Port::INPUT, module, QuadVCA::GAIN3_CV_INPUT)); - addInput(Port::create(Vec(posX[3]-4, 217), Port::INPUT, module, QuadVCA::GAIN4_CV_INPUT)); - //INPUTS - addInput(Port::create(Vec(posX[0]-4, 260), Port::INPUT, module, QuadVCA::IN1_INPUT)); - addInput(Port::create(Vec(posX[1]-4, 260), Port::INPUT, module, QuadVCA::IN2_INPUT)); - addInput(Port::create(Vec(posX[2]-4, 260), Port::INPUT, module, QuadVCA::IN3_INPUT)); - addInput(Port::create(Vec(posX[3]-4, 260), Port::INPUT, module, QuadVCA::IN4_INPUT)); - //LEDS - addChild(ModuleLightWidget::create>(Vec(posX[0]+5, 288), module, QuadVCA::GAIN1_LIGHT));//294 - addChild(ModuleLightWidget::create>(Vec(posX[1]+5, 288), module, QuadVCA::GAIN2_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(posX[2]+5, 288), module, QuadVCA::GAIN3_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(posX[3]+5, 288), module, QuadVCA::GAIN4_LIGHT)); - //OUTPUTS - addOutput(Port::create(Vec(posX[0]-4, 310), Port::OUTPUT, module, QuadVCA::OUT1_OUTPUT)); - addOutput(Port::create(Vec(posX[1]-4, 310), Port::OUTPUT, module, QuadVCA::OUT2_OUTPUT)); - addOutput(Port::create(Vec(posX[2]-4, 310), Port::OUTPUT, module, QuadVCA::OUT3_OUTPUT)); - addOutput(Port::create(Vec(posX[3]-4, 310), Port::OUTPUT, module, QuadVCA::OUT4_OUTPUT)); - -} - -Model *modelQuadVCA = Model::create("AS", "QuadVCA", "Quad VCA/Mixer", AMPLIFIER_TAG, MIXER_TAG); \ No newline at end of file diff --git a/repos/AS/src/Reverb.cpp b/repos/AS/src/Reverb.cpp deleted file mode 100644 index 59b61e99..00000000 --- a/repos/AS/src/Reverb.cpp +++ /dev/null @@ -1,176 +0,0 @@ -//*********************************************************************************************** -// -//Reverb module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Based on code from ML_Modules by martin-lueders https://github.com/martin-lueders/ML_modules -//And code from Freeverb by Jezar at Dreampoint - http://www.dreampoint.co.uk -// -//*********************************************************************************************** - -#include "AS.hpp" -#include "dsp/digital.hpp" - -#include "../freeverb/revmodel.hpp" - -struct ReverbFx : Module{ - enum ParamIds { - DECAY_PARAM, - DAMP_PARAM, - BLEND_PARAM, - BYPASS_SWITCH, - NUM_PARAMS - }; - enum InputIds { - SIGNAL_INPUT, - DECAY_CV_INPUT, - DAMP_CV_INPUT, - BLEND_CV_INPUT, - NUM_INPUTS - }; - enum OutputIds { - SIGNAL_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - DECAY_LIGHT, - DAMP_LIGHT, - BLEND_LIGHT, - BYPASS_LED, - NUM_LIGHTS - }; - - revmodel reverb; - float roomsize, damp; - - SchmittTrigger bypass_button_trig; - - bool fx_bypass = false; - - ReverbFx() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - - float gSampleRate = engineGetSampleRate(); - reverb.init(gSampleRate); - } - - void step() override; - - void onSampleRateChange() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *statesJ = json_array(); - - json_t *bypassJ = json_boolean(fx_bypass); - json_array_append_new(statesJ, bypassJ); - - json_object_set_new(rootJm, "as_FxBypass", statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *statesJ = json_object_get(rootJm, "as_FxBypass"); - - json_t *bypassJ = json_array_get(statesJ, 0); - - fx_bypass = !!json_boolean_value(bypassJ); - - } - -}; - -void ReverbFx::onSampleRateChange() { - - float gSampleRate = engineGetSampleRate(); - - reverb.init(gSampleRate); - - reverb.setdamp(damp); - reverb.setroomsize(roomsize); - -}; - - -void ReverbFx::step() { - - if (bypass_button_trig.process(params[BYPASS_SWITCH].value)){ - fx_bypass = !fx_bypass; - } - lights[BYPASS_LED].value = fx_bypass ? 1.0f : 0.0f; - - float out1, out2; - - out1 = out2 = 0.0f; - - float old_roomsize = roomsize; - float old_damp = damp; - - float input_signal = clamp(inputs[SIGNAL_INPUT].value,-10.0f,10.0f); - //float input_signal = inputs[SIGNAL_INPUT].value; - roomsize = clamp(params[DECAY_PARAM].value + inputs[DECAY_CV_INPUT].value / 10.0f, 0.0f, 0.88f); - damp = clamp(params[DAMP_PARAM].value + inputs[DAMP_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - - if( old_damp != damp ) reverb.setdamp(damp); - if( old_roomsize != roomsize) reverb.setroomsize(roomsize); - - reverb.process(input_signal, out1, out2); - - //check bypass switch status - if (fx_bypass){ - outputs[SIGNAL_OUTPUT].value = inputs[SIGNAL_INPUT].value; - }else { - outputs[SIGNAL_OUTPUT].value = input_signal + out1 * clamp(params[BLEND_PARAM].value + inputs[BLEND_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - //outputs[SIGNAL_OUTPUT2].value = input_signal + out2 * clamp(params[BLEND_PARAM].value + inputs[BLEND_CV_INPUT].value / 10.0, 0.0, 1.0); - } - - lights[DECAY_LIGHT].value = clamp(params[DECAY_PARAM].value + inputs[DECAY_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - lights[DAMP_LIGHT].value = clamp(params[DAMP_PARAM].value + inputs[DAMP_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - lights[BLEND_LIGHT].value = clamp(params[BLEND_PARAM].value + inputs[BLEND_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - -} - -struct ReverbFxWidget : ModuleWidget -{ - ReverbFxWidget(ReverbFx *module); -}; - - -ReverbFxWidget::ReverbFxWidget(ReverbFx *module) : ModuleWidget(module) { - box.size = Vec(15 * 6, 380); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - - panel->setBackground(SVG::load(assetPlugin(plugin, "res/Reverb.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //KNOBS - addParam(ParamWidget::create(Vec(43, 60), module, ReverbFx::DECAY_PARAM, 0.0f, 0.9f, 0.5f)); - addParam(ParamWidget::create(Vec(43, 125), module, ReverbFx::DAMP_PARAM, 0.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(43, 190), module, ReverbFx::BLEND_PARAM, 0.0f, 1.0f, 0.5f)); - //LIGHTS - addChild(ModuleLightWidget::create>(Vec(39, 57), module, ReverbFx::DECAY_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 122), module, ReverbFx::DAMP_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 187), module, ReverbFx::BLEND_LIGHT)); - //BYPASS SWITCH - addParam(ParamWidget::create(Vec(33, 260), module, ReverbFx::BYPASS_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(35.2, 262), module, ReverbFx::BYPASS_LED)); - //INS/OUTS - addInput(Port::create(Vec(10, 310), Port::INPUT, module, ReverbFx::SIGNAL_INPUT)); - addOutput(Port::create(Vec(55, 310), Port::OUTPUT, module, ReverbFx::SIGNAL_OUTPUT)); - //CV INPUTS - addInput(Port::create(Vec(10, 67), Port::INPUT, module, ReverbFx::DECAY_CV_INPUT)); - addInput(Port::create(Vec(10, 132), Port::INPUT, module, ReverbFx::DAMP_CV_INPUT)); - addInput(Port::create(Vec(10, 197), Port::INPUT, module, ReverbFx::BLEND_CV_INPUT)); - -} - -Model *modelReverbFx = Model::create("AS", "ReverbFx", "Reverb FX", REVERB_TAG, EFFECT_TAG); \ No newline at end of file diff --git a/repos/AS/src/SEQ16.cpp b/repos/AS/src/SEQ16.cpp deleted file mode 100644 index 4f2b797c..00000000 --- a/repos/AS/src/SEQ16.cpp +++ /dev/null @@ -1,473 +0,0 @@ -//*********************************************************************************************** -//16-step sequencer module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Based on SEQ16 VCV Rack by Autodafe http://www.autodafe.net -//Based on code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//*********************************************************************************************** -#include "AS.hpp" -#include "dsp/digital.hpp" - -struct SEQ16 : Module { - enum ParamIds { - CLOCK_PARAM, - RUN_PARAM, - RESET_PARAM, - STEPS_PARAM, - TRIGGER_PARAM, - PREV_STEP, - NEXT_STEP, - GATE_MODE_PARAM, - ROW1_PARAM, - ROW2_PARAM = ROW1_PARAM + 16, - ROW3_PARAM = ROW2_PARAM + 16, - GATE_PARAM = ROW3_PARAM + 16, - NUM_PARAMS = GATE_PARAM + 16 - }; - enum InputIds { - CLOCK_INPUT, - EXT_CLOCK_INPUT, - RESET_INPUT, - STEPS_INPUT, - NUM_INPUTS - }; - enum OutputIds { - GATES_OUTPUT, - ROW1_OUTPUT, - ROW2_OUTPUT, - ROW3_OUTPUT, - GATE_OUTPUT, - NUM_OUTPUTS = GATE_OUTPUT + 16 - }; - enum LightIds { - RUNNING_LIGHT, - RESET_LIGHT, - GATES_LIGHT, - TRIGGER_LIGHT, - ROW_LIGHTS, - GATE_LIGHTS = ROW_LIGHTS + 3, - NUM_LIGHTS = GATE_LIGHTS + 16 - }; - - bool running = true; - bool triggerActive = false; - // for external clock - SchmittTrigger clockTrigger; - // For buttons - SchmittTrigger runningTrigger; - SchmittTrigger resetTrigger; - SchmittTrigger prevTrigger; - SchmittTrigger nextTrigger; - SchmittTrigger manualTrigger; - SchmittTrigger gateTriggers[16]; - float phase = 0.0f; - float blinkPhase = 0.0f; - int index = 0; - int stepIndex = index+1; - int modeIndex = 0; - bool nextStep = false; - bool gateState[16] = {}; - float resetLight = 0.0f; - float stepLights[16] = {}; - const float lightLambda = 0.075f; - - enum GateMode { - TRIGGER, - RETRIGGER, - CONTINUOUS, - }; - GateMode gateMode = TRIGGER; - PulseGenerator gatePulse; - - SEQ16() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - reset(); - } - void step() override; - - int numSteps; - - json_t *toJson() override { - json_t *rootJ = json_object(); - - // running - json_object_set_new(rootJ, "running", json_boolean(running)); - - // gates - json_t *gatesJ = json_array(); - for (int i = 0; i < 16; i++) { - json_t *gateJ = json_integer((int) gateState[i]); - json_array_append_new(gatesJ, gateJ); - } - json_object_set_new(rootJ, "gates", gatesJ); - // gateMode - json_t *gateModeJ = json_integer((int) gateMode); - json_object_set_new(rootJ, "gateMode", gateModeJ); - return rootJ; - } - - void fromJson(json_t *rootJ) override { - // running - json_t *runningJ = json_object_get(rootJ, "running"); - if (runningJ) - running = json_is_true(runningJ); - // gates - json_t *gatesJ = json_object_get(rootJ, "gates"); - if (gatesJ) { - for (int i = 0; i < 16; i++) { - json_t *gateJ = json_array_get(gatesJ, i); - if (gateJ) - gateState[i] = !!json_integer_value(gateJ); - } - } - - // gateMode - json_t *gateModeJ = json_object_get(rootJ, "gateMode"); - if (gateModeJ) - gateMode = (GateMode)json_integer_value(gateModeJ); - } - - void reset() override { - for (int i = 0; i < 16; i++) { - gateState[i] = true; - } - } - - void randomize() override { - for (int i = 0; i < 16; i++) { - gateState[i] = (randomUniform() > 0.5); - } - } -}; - - -void SEQ16::step() { - numSteps = roundf(clamp(params[STEPS_PARAM].value, 1.0f, 16.0f)); - stepIndex = index+1; - // Gate mode Switch with 3 way switch - modeIndex = params[GATE_MODE_PARAM].value; - gateMode = (GateMode)int(modeIndex); - - // Run - if (runningTrigger.process(params[RUN_PARAM].value)) { - running = !running; - } - lights[RUNNING_LIGHT].value = running ? 1.0f : 0.0f; - - nextStep = false; - - if (running) { - if (inputs[EXT_CLOCK_INPUT].active) { - // External clock - if (clockTrigger.process(inputs[EXT_CLOCK_INPUT].value)) { - phase = 0.0f; - nextStep = true; - } - } - else { - // Internal clock - float clockTime = powf(2.0, params[CLOCK_PARAM].value + inputs[CLOCK_INPUT].value); - phase += clockTime / engineGetSampleRate(); - if (phase >= 1.0f) { - phase -= 1.0f; - nextStep = true; - } - } - } - - // Reset - if (resetTrigger.process(params[RESET_PARAM].value + inputs[RESET_INPUT].value)) { - phase = 0.0f; - index = 16; - nextStep = true; - resetLight = 1.0; - } - - if (nextStep) { - // Advance step - int numSteps = clamp(round(params[STEPS_PARAM].value + inputs[STEPS_INPUT].value), 1.0f, 16.0f); - index += 1; - if (index >= numSteps) { - index = 0; - } - stepLights[index] = 1.0f; - gatePulse.trigger(1e-3); - } - - resetLight -= resetLight / lightLambda / engineGetSampleRate(); - - bool pulse = gatePulse.process(1.0 / engineGetSampleRate()); - - // Gate buttons - for (int i = 0; i < 16; i++) { - if (gateTriggers[i].process(params[GATE_PARAM + i].value)) { - gateState[i] = !gateState[i]; - } - bool gateOn = (running && i == index && gateState[i]); - if (gateMode == TRIGGER) - gateOn = gateOn && pulse; - else if (gateMode == RETRIGGER) - gateOn = gateOn && !pulse; - - outputs[GATE_OUTPUT + i].value = gateOn ? 10.0f : 0.0f; - stepLights[i] -= stepLights[i] / lightLambda / engineGetSampleRate(); - lights[GATE_LIGHTS + i].value = gateState[i] ? 1.0f - stepLights[i] : stepLights[i]; - } - - // Rows - float row1 = params[ROW1_PARAM + index].value; - float row2 = params[ROW2_PARAM + index].value; - float row3 = params[ROW3_PARAM + index].value; - bool gatesOn = (running && gateState[index]); - if (gateMode == TRIGGER) - gatesOn = gatesOn && pulse; - else if (gateMode == RETRIGGER) - gatesOn = gatesOn && !pulse; - - // Outputs - outputs[ROW1_OUTPUT].value = row1; - outputs[ROW2_OUTPUT].value = row2; - outputs[ROW3_OUTPUT].value = row3; - lights[RESET_LIGHT].value = resetLight; - lights[GATES_LIGHT].value = gatesOn ? 1.0f : 0.0f; - lights[ROW_LIGHTS].value = row1; - lights[ROW_LIGHTS + 1].value = row2; - lights[ROW_LIGHTS + 2].value = row3; - //mod to make the manual trigger work - if (running) { - outputs[GATES_OUTPUT].value = gatesOn ? 10.0f : 0.0f; - lights[TRIGGER_LIGHT].value = 0.0f; - //disable manual trigger - triggerActive = false; - } - - //Edit mode - if(manualTrigger.process(params[TRIGGER_PARAM].value)){ - triggerActive = !triggerActive; - } - lights[TRIGGER_LIGHT].value = triggerActive ? 1.0f : 0.0f; - // Manual trigger/manual step, only when the seq is not running - if (triggerActive) { - running=false; - outputs[GATES_OUTPUT].value = 10.0f; - - // Blink light at 1Hz - float deltaTime = 5.0f / engineGetSampleRate(); - blinkPhase += deltaTime; - if (blinkPhase >= 1.0f){ - blinkPhase -= 1.0f; - } - // step edit light indicator - for (int i = 0; i < 16; i++) { - if(i==index){ - lights[GATE_LIGHTS + i].value = (blinkPhase < 0.5f) ? 1.0f : 0.0f; - }else{ - lights[GATES_LIGHT].value = gatesOn ? 1.0f : 0.0f; - } - } - - }else{ - outputs[GATES_OUTPUT].value = gatesOn ? 10.0f : 0.0f; - lights[GATES_LIGHT].value = gatesOn ? 1.0f : 0.0f; - } - //Prev/next step buttons only work when seq is not running - if(!running){ - if (prevTrigger.process(params[PREV_STEP].value)) { - index -= 1; - if(index<0){ - index = numSteps-1; - } - } - if (nextTrigger.process(params[NEXT_STEP].value)) { - index += 1; - if(index>numSteps-1){ - index = 0; - } - } - } -} - -struct StepsDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - StepsDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - - nvgFontSize(vg, 22); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - char displayStr[3]; - - sprintf(displayStr, "%2u", (unsigned) *value); - - Vec textPos = Vec(6, 23); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, displayStr, NULL); - } -}; - -template -struct MuteLight : BASE { - MuteLight() { - //this->box.size = Vec(20.0, 20.0); - this->box.size = mm2px(Vec(6.0, 6.0)); - } -}; - - -struct SEQ16Widget : ModuleWidget { - SEQ16Widget(SEQ16 *module); - Menu *createContextMenu() override; -}; - - -SEQ16Widget::SEQ16Widget(SEQ16 *module) : ModuleWidget(module) { - - box.size = Vec(44 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/SEQ16.svg"))); - addChild(panel); - } - //LCD STEPS SCREEN - StepsDisplayWidget *display = new StepsDisplayWidget(); - display->box.pos = Vec(341,60); - display->box.size = Vec(40, 30); - display->value = &module->numSteps; - addChild(display); - //LCD CURRENT STEP SCREEN - StepsDisplayWidget *display2 = new StepsDisplayWidget(); - display2->box.pos = Vec(401,60); - display2->box.size = Vec(40, 30); - display2->value = &module->stepIndex; - addChild(display2); - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - // - static const float portX[16] = {20,60,100,140,180,220,260,300,340,380,420,460,500,540,580,620}; - static const float elements_offst = 8; - static const float main_lds_y = 64.4; - //CLOCK KNOB - addParam(ParamWidget::create(Vec(portX[1]-elements_offst, 56), module, SEQ16::CLOCK_PARAM, -2.0f, 6.0f, 2.0f)); - //RUN RESET SWITCHES & LEDS - addParam(ParamWidget::create(Vec(portX[2], main_lds_y), module, SEQ16::RUN_PARAM , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(portX[2]+2.2, main_lds_y+2), module, SEQ16::RUNNING_LIGHT)); - addParam(ParamWidget::create(Vec(portX[3], main_lds_y), module, SEQ16::RESET_PARAM , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(portX[3]+2.2, main_lds_y+2), module, SEQ16::RESET_LIGHT)); - //STEP TRIGGER - addParam(ParamWidget::create(Vec(portX[11], main_lds_y+35), module, SEQ16::TRIGGER_PARAM , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(portX[11]+2.2, main_lds_y+2+35), module, SEQ16::TRIGGER_LIGHT)); - addParam(ParamWidget::create(Vec(portX[9]+20, main_lds_y+40), module, SEQ16::PREV_STEP, 0.0f, 1.0f, 0.0f)); - addParam(ParamWidget::create(Vec(portX[10]+5, main_lds_y+40), module, SEQ16::NEXT_STEP, 0.0f, 1.0f, 0.0f)); - //GATE MODE SWITCH - addParam(ParamWidget::create(Vec(portX[6]+2, main_lds_y-4), module, SEQ16::GATE_MODE_PARAM, 0.0f, 2.0f, 0.0f)); - //STEPS KNOBS - addParam(ParamWidget::create(Vec(portX[7]-elements_offst, 56), module, SEQ16::STEPS_PARAM, 1.0f, 16.0f, 16.0f)); - static const float main_inputs_offst = 1; - static const float main_inputs_y = 98; - //SEQ VC INPUTS - addInput(Port::create(Vec(portX[1]- main_inputs_offst, main_inputs_y), Port::INPUT, module, SEQ16::CLOCK_INPUT)); - addInput(Port::create(Vec(portX[2]-main_inputs_offst, main_inputs_y), Port::INPUT, module, SEQ16::EXT_CLOCK_INPUT)); - addInput(Port::create(Vec(portX[3]-main_inputs_offst, main_inputs_y), Port::INPUT, module, SEQ16::RESET_INPUT)); - addInput(Port::create(Vec(portX[7]-main_inputs_offst, main_inputs_y), Port::INPUT, module, SEQ16::STEPS_INPUT)); - //GATE/ROW LEDS - addChild(ModuleLightWidget::create>(Vec(portX[12]+elements_offst, main_lds_y+6), module, SEQ16::GATES_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(portX[13]+elements_offst, main_lds_y+6), module, SEQ16::ROW_LIGHTS)); - addChild(ModuleLightWidget::create>(Vec(portX[14]+elements_offst, main_lds_y+6), module, SEQ16::ROW_LIGHTS + 1)); - addChild(ModuleLightWidget::create>(Vec(portX[15]+elements_offst, main_lds_y+6), module, SEQ16::ROW_LIGHTS + 2)); - //GATE/ROW OUTPUTS - addOutput(Port::create(Vec(portX[12], 98), Port::OUTPUT, module, SEQ16::GATES_OUTPUT)); - addOutput(Port::create(Vec(portX[13], 98), Port::OUTPUT, module, SEQ16::ROW1_OUTPUT)); - addOutput(Port::create(Vec(portX[14], 98), Port::OUTPUT, module, SEQ16::ROW2_OUTPUT)); - addOutput(Port::create(Vec(portX[15], 98), Port::OUTPUT, module, SEQ16::ROW3_OUTPUT)); - - for (int i = 0; i < 16; i++) { - //ROW KNOBS - addParam(ParamWidget::create(Vec(portX[i]-elements_offst, 157), module, SEQ16::ROW1_PARAM + i, 0.0f, 10.0f, 0.0f)); - addParam(ParamWidget::create(Vec(portX[i]-elements_offst, 198), module, SEQ16::ROW2_PARAM + i, 0.0f, 10.0f, 0.0f)); - addParam(ParamWidget::create(Vec(portX[i]-elements_offst, 240), module, SEQ16::ROW3_PARAM + i, 0.0f, 10.0f, 0.0f)); - //GATE LEDS - addParam(ParamWidget::create(Vec(portX[i]+1.5, 284), module, SEQ16::GATE_PARAM + i, 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(portX[i]+5.8, 287.9), module, SEQ16::GATE_LIGHTS + i)); - //GATE STEPS OUT - addOutput(Port::create(Vec(portX[i]-2, 310), Port::OUTPUT, module, SEQ16::GATE_OUTPUT + i)); - } -} - -struct SEQ16GateModeItem : MenuItem { - SEQ16 *seq16; - SEQ16::GateMode gateMode; - void onAction(EventAction &e) override { - seq16->gateMode = gateMode; - } - void step() override { - rightText = CHECKMARK(seq16->gateMode == gateMode); - } -}; - -Menu *SEQ16Widget::createContextMenu() { - Menu *menu = ModuleWidget::createContextMenu(); - - MenuLabel *spacerLabel = new MenuLabel(); - menu->addChild(spacerLabel); - - SEQ16 *seq16 = dynamic_cast(module); - assert(seq16); - - MenuLabel *modeLabel = new MenuLabel(); - modeLabel->text = "Gate Mode"; - menu->addChild(modeLabel); - - SEQ16GateModeItem *triggerItem = new SEQ16GateModeItem(); - triggerItem->text = "Trigger"; - triggerItem->seq16 = seq16; - triggerItem->gateMode = SEQ16::TRIGGER; - menu->addChild(triggerItem); - - SEQ16GateModeItem *retriggerItem = new SEQ16GateModeItem(); - retriggerItem->text = "Retrigger"; - retriggerItem->seq16 = seq16; - retriggerItem->gateMode = SEQ16::RETRIGGER; - menu->addChild(retriggerItem); - - SEQ16GateModeItem *continuousItem = new SEQ16GateModeItem(); - continuousItem->text = "Continuous"; - continuousItem->seq16 = seq16; - continuousItem->gateMode = SEQ16::CONTINUOUS; - menu->addChild(continuousItem); - - return menu; -} - -Model *modelSEQ16 = Model::create("AS", "SEQ16", "16-Step Sequencer", SEQUENCER_TAG); \ No newline at end of file diff --git a/repos/AS/src/SawOSC.cpp b/repos/AS/src/SawOSC.cpp deleted file mode 100644 index 9007d1b0..00000000 --- a/repos/AS/src/SawOSC.cpp +++ /dev/null @@ -1,110 +0,0 @@ -//************************************************************************************** -//SawOsc module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from RODENTCAT https://github.com/RODENTCAT/RODENTMODULES -//Code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** -#include "AS.hpp" - -struct SawOsc : Module { - enum ParamIds { - PITCH_PARAM, - PW_PARAM, - NUM_PARAMS - }; - enum InputIds { - PITCH_INPUT, - PW_INPUT, - NUM_INPUTS - }; - enum OutputIds { - OSC_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - FREQ_LIGHT, - NUM_LIGHTS - }; - - float phase = 0.0f; - float blinkPhase = 0.0f; - - SawOsc() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; -}; - -void SawOsc::step() { - // Implement a simple sine oscillator - float deltaTime = 1.0f / engineGetSampleRate(); - // Compute the frequency from the pitch parameter and input - float pitch = params[PITCH_PARAM].value; - pitch += inputs[PITCH_INPUT].value; - pitch = clamp(pitch, -4.0f, 4.0f); - float freq = 440.0f * powf(2.0f, pitch); - - // Accumulate the phase - phase += freq * deltaTime; - if (phase >= 1.0f) - phase -= 1.0f; - - //Mod param - float pw = params[PW_PARAM].value*0.1f+1.0f; - //Mod input - float minput = inputs[PW_INPUT].value*0.3f; - //Mod param+input - float pinput = (pw + minput); - - // Compute the sine output - //float sine = sinf(2 * M_PI * phase); - //outputs[SINE_OUTPUT].value = 5.0 * sine; - - //saw stuff, original dev says square, but it sounds more like a SAW wave, hence this module name hehe - float saw = cos(exp(pinput * M_PI * phase));///0.87; - //dc block - - float block_coeff = 1.0f - (2.0f * M_PI * (10.0f / 44100.0f)); - float m_prev_in = 0.0f; - float m_prev_out = 0.0f; - m_prev_out = saw - m_prev_in + block_coeff * m_prev_out; - m_prev_in = saw; - - //outputs[OSC_OUTPUT].value = 5 * saw; - outputs[OSC_OUTPUT].value = m_prev_out*5; - lights[FREQ_LIGHT].value = (outputs[OSC_OUTPUT].value > 0.0f) ? 1.0f : 0.0f; -} - -struct SawOscWidget : ModuleWidget -{ - SawOscWidget(SawOsc *module); -}; - - -SawOscWidget::SawOscWidget(SawOsc *module) : ModuleWidget(module) { - box.size = Vec(4 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/SawOSC.svg"))); - addChild(panel); - } - //SCREWS - SPECIAL SPACING FOR RACK WIDTH*4 - addChild(Widget::create(Vec(0, 0))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //LIGHT - addChild(ModuleLightWidget::create>(Vec(22-15, 57), module, SawOsc::FREQ_LIGHT)); - //PARAMS - //addParam(ParamWidget::create(Vec(26, 60), module, SawOsc::PITCH_PARAM, -3.0, 3.0, 0.0)); - addParam(ParamWidget::create(Vec(26-15, 60), module, SawOsc::PITCH_PARAM, -4.0, 4.0, 0.0)); - //addParam(ParamWidget::create(Vec(26, 125), module, SawOsc::PW_PARAM, -4.0, 5.0, -4.0)); - addParam(ParamWidget::create(Vec(26-15, 125), module, SawOsc::PW_PARAM, -4.2, 5.0, -4.2)); - //INPUTS - addInput(Port::create(Vec(33-15, 200), Port::INPUT, module, SawOsc::PW_INPUT)); - addInput(Port::create(Vec(33-15, 260), Port::INPUT, module, SawOsc::PITCH_INPUT)); - //OUTPUTS - addOutput(Port::create(Vec(33-15, 310), Port::OUTPUT, module, SawOsc::OSC_OUTPUT)); -} - -Model *modelSawOsc = Model::create("AS", "SawOSC", "TinySawish", OSCILLATOR_TAG); \ No newline at end of file diff --git a/repos/AS/src/SignalDelay.cpp b/repos/AS/src/SignalDelay.cpp deleted file mode 100644 index 5157e64a..00000000 --- a/repos/AS/src/SignalDelay.cpp +++ /dev/null @@ -1,248 +0,0 @@ -//************************************************************************************** -//Signal Delay module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** -#include "AS.hpp" -#include "dsp/samplerate.hpp" -#include "dsp/ringbuffer.hpp" - -#include -#include - -#define HISTORY_SIZE (1<<21) - -struct SignalDelay : Module { - enum ParamIds { - TIME_1_PARAM, - TIME_2_PARAM, - NUM_PARAMS - }; - enum InputIds { - TIME_1_INPUT, - TIME_2_INPUT, - IN_1_INPUT, - IN_2_INPUT, - NUM_INPUTS - }; - enum OutputIds { - THRU_1_OUTPUT, - THRU_2_OUTPUT, - OUT_1_OUTPUT, - OUT_2_OUTPUT, - NUM_OUTPUTS - }; - - - DoubleRingBuffer historyBuffer1; - DoubleRingBuffer outBuffer1; - SampleRateConverter<1> src1; - float lastWet1 = 0.0f; - - int lcd_tempo1 = 0; - - DoubleRingBuffer historyBuffer2; - DoubleRingBuffer outBuffer2; - SampleRateConverter<1> src2; - float lastWet2 = 0.0f; - - int lcd_tempo2 = 0; - - SignalDelay() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} - - void step() override; - -}; - -void SignalDelay::step() { - - // DELAY 1 Get input to delay block - float in1 = inputs[IN_1_INPUT].value; - float feedback1 = 0;//only one repetition, for regular use: clampf(params[FEEDBACK_PARAM].value + inputs[FEEDBACK_INPUT].value / 10.0, 0.0, 1.0); - float dry1 = in1 + lastWet1 * feedback1; - // Compute delay time in seconds - //delay time in seconds. Linear reading, now easy to setup any value by the digit - float delay1 = clamp(params[TIME_1_PARAM].value + inputs[TIME_1_INPUT].value, 0.001f, 10.0f); - //LCD display tempo - show value as ms - lcd_tempo1 = std::round(delay1*1000); - // Number of delay samples - float index1 = delay1 * engineGetSampleRate(); - // Push dry1 sample into history buffer - if (!historyBuffer1.full()) { - historyBuffer1.push(dry1); - } - // How many samples do we need consume1 to catch up? - float consume1 = index1 - historyBuffer1.size(); - if (outBuffer1.empty()) { - double ratio1 = 1.0; - if (consume1 <= -16) - ratio1 = 0.5; - else if (consume1 >= 16) - ratio1 = 2.0; - - int inFrames1 = min(historyBuffer1.size(), 16); - int outFrames1 = outBuffer1.capacity(); - src1.setRates(ratio1 * engineGetSampleRate(), engineGetSampleRate()); - src1.process((const Frame<1>*)historyBuffer1.startData(), &inFrames1, (Frame<1>*)outBuffer1.endData(), &outFrames1); - historyBuffer1.startIncr(inFrames1); - outBuffer1.endIncr(outFrames1); - } - - float wet1 = 0.0f; - if (!outBuffer1.empty()) { - wet1 = outBuffer1.shift(); - } - outputs[THRU_1_OUTPUT].value = in1; - outputs[OUT_1_OUTPUT].value = wet1; - lastWet1 = wet1; - - // DELAY 2 Get input to delay block - float in2 = inputs[IN_2_INPUT].value; - float feedback2 = 0;//only one repetition, for regular use: clamp(params[FEEDBACK_PARAM].value + inputs[FEEDBACK_INPUT].value / 10.0, 0.0, 1.0); - float dry2 = in2 + lastWet2 * feedback2; - // Compute delay time in seconds - //delay time in seconds. Linear reading, now easy to setup any value by the digit - float delay2 = clamp(params[TIME_2_PARAM].value + inputs[TIME_2_INPUT].value, 0.001f, 10.0f); - //LCD display tempo - show value as ms - lcd_tempo2 = std::round(delay2*1000); - // Number of delay samples - float index2 = delay2 * engineGetSampleRate(); - // Push dry sample into history buffer - if (!historyBuffer2.full()) { - historyBuffer2.push(dry2); - } - // How many samples do we need consume1 to catch up? - float consume2 = index2 - historyBuffer2.size(); - if (outBuffer2.empty()) { - double ratio2 = 1.0; - if (consume2 <= -16) - ratio2 = 0.5; - else if (consume2 >= 16) - ratio2 = 2.0; - - int inFrames2 = min(historyBuffer2.size(), 16); - int outFrames2 = outBuffer2.capacity(); - src2.setRates(ratio2 * engineGetSampleRate(), engineGetSampleRate()); - src2.process((const Frame<1>*)historyBuffer2.startData(), &inFrames2, (Frame<1>*)outBuffer2.endData(), &outFrames2); - historyBuffer2.startIncr(inFrames2); - outBuffer2.endIncr(outFrames2); - } - - float wet2 = 0.0; - if (!outBuffer2.empty()) { - wet2 = outBuffer2.shift(); - } - outputs[THRU_2_OUTPUT].value = in2; - outputs[OUT_2_OUTPUT].value = wet2; - lastWet2 = wet2; - - - -} - -/////////////////////////////////// -struct MsDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - MsDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::right << std::setw(5) << *value; - - Vec textPos = Vec(4.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~~~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\\\\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// - -struct SignalDelayWidget : ModuleWidget -{ - SignalDelayWidget(SignalDelay *module); -}; - - -SignalDelayWidget::SignalDelayWidget(SignalDelay *module) : ModuleWidget(module) { - box.size = Vec(RACK_GRID_WIDTH*6, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/SignalDelay.svg"))); - addChild(panel); - } - //DELAY 1 - //MS DISPLAY - MsDisplayWidget *display1 = new MsDisplayWidget(); - display1->box.pos = Vec(10,50); - display1->box.size = Vec(70, 20); - display1->value = &module->lcd_tempo1; - addChild(display1); - static const float posX[3] = {3,33,63}; - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //KNOBS - addParam(ParamWidget::create(Vec(47, 80), module, SignalDelay::TIME_1_PARAM, 0.001f, 10.0f, 0.350f)); - //CV INPUT - addInput(Port::create(Vec(posX[0]+5, 87), Port::INPUT, module, SignalDelay::TIME_1_INPUT)); - //INPUT - addInput(Port::create(Vec(posX[0], 160), Port::INPUT, module, SignalDelay::IN_1_INPUT)); - //OUTPUTS - addOutput(Port::create(Vec(posX[1], 160), Port::OUTPUT, module, SignalDelay::THRU_1_OUTPUT)); - addOutput(Port::create(Vec(posX[2], 160), Port::OUTPUT, module, SignalDelay::OUT_1_OUTPUT)); - - //DELAY 2 - //MS DISPLAY - static const int mod_offset=160; - MsDisplayWidget *display2 = new MsDisplayWidget(); - display2->box.pos = Vec(10,50+mod_offset); - display2->box.size = Vec(70, 20); - display2->value = &module->lcd_tempo2; - addChild(display2); - //KNOBS - addParam(ParamWidget::create(Vec(47, 80+mod_offset), module, SignalDelay::TIME_2_PARAM, 0.001f, 10.0f, 0.350f)); - //CV INPUT - addInput(Port::create(Vec(posX[0]+5, 87+mod_offset), Port::INPUT, module, SignalDelay::TIME_2_INPUT)); - //INPUT - addInput(Port::create(Vec(posX[0], 160+mod_offset), Port::INPUT, module, SignalDelay::IN_2_INPUT)); - //OUTPUTS - addOutput(Port::create(Vec(posX[1], 160+mod_offset), Port::OUTPUT, module, SignalDelay::THRU_2_OUTPUT)); - addOutput(Port::create(Vec(posX[2], 160+mod_offset), Port::OUTPUT, module, SignalDelay::OUT_2_OUTPUT)); -} - -Model *modelSignalDelay = Model::create("AS", "SignalDelay", "Signal Delay", UTILITY_TAG, DELAY_TAG); \ No newline at end of file diff --git a/repos/AS/src/SineOSC.cpp b/repos/AS/src/SineOSC.cpp deleted file mode 100644 index f733db38..00000000 --- a/repos/AS/src/SineOSC.cpp +++ /dev/null @@ -1,91 +0,0 @@ -//************************************************************************************** -//SineOSC module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -//Is just the tutorial module and nothing else hehe -// -//Code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** -#include "AS.hpp" - -struct SineOsc : Module { - enum ParamIds { - FREQ_PARAM, - NUM_PARAMS - }; - enum InputIds { - FREQ_CV, - NUM_INPUTS - }; - enum OutputIds { - OSC_OUTPUT, - TRI_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - FREQ_LIGHT, - NUM_LIGHTS - }; - - float phase = 0.0f; - float blinkPhase = 0.0f; - - SineOsc() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; -}; - - -void SineOsc::step() { - // Implement a simple sine oscillator - // Compute the frequency from the pitch parameter and input - float pitch = params[FREQ_PARAM].value; - pitch += inputs[FREQ_CV].value; - pitch = clamp(pitch, -4.0f, 4.0f); - float freq = 440.0f * powf(2.0f, pitch); - // Accumulate the phase - phase += freq / engineGetSampleRate(); - if (phase >= 1.0f) - phase -= 1.0f; - // Compute the sine output - //correct sine - float sine = sinf(2.0f * M_PI * (phase+1 * 0.125f)) * 5.0f; - //original sine - //float sine = sinf(2 * M_PI * phase)+ sinf(2 * M_PI * phase * 2)*5; - //mod,like this it gives a unipolar saw-ish wave - //float sine = sinf(2.0 * M_PI * (phase * 0.125)) * 5.0; - outputs[OSC_OUTPUT].value = sine; - lights[FREQ_LIGHT].value = (outputs[OSC_OUTPUT].value > 0.0f) ? 1.0f : 0.0f; - -} - -struct SineOscWidget : ModuleWidget -{ - SineOscWidget(SineOsc *module); -}; - - -SineOscWidget::SineOscWidget(SineOsc *module) : ModuleWidget(module) { - box.size = Vec(4 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/SineOSC.svg"))); - addChild(panel); - } - //SCREWS - SPECIAL SPACING FOR RACK WIDTH*4 - addChild(Widget::create(Vec(0, 0))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //LIGHT - addChild(ModuleLightWidget::create>(Vec(22-15, 57), module, SineOsc::FREQ_LIGHT)); - //PARAMS - addParam(ParamWidget::create(Vec(26-15, 60), module, SineOsc::FREQ_PARAM, -3.0f, 3.0f, 0.0f)); - //INPUTS - addInput(Port::create(Vec(33-15, 260), Port::INPUT, module, SineOsc::FREQ_CV)); - //OUTPUTS - addOutput(Port::create(Vec(33-15, 310), Port::OUTPUT, module, SineOsc::OSC_OUTPUT)); - -} - -Model *modelSineOsc = Model::create("AS", "SineOSC", "TinySine", OSCILLATOR_TAG); \ No newline at end of file diff --git a/repos/AS/src/Steps.cpp b/repos/AS/src/Steps.cpp deleted file mode 100644 index ac9a21e1..00000000 --- a/repos/AS/src/Steps.cpp +++ /dev/null @@ -1,323 +0,0 @@ -//************************************************************************************** -//Steps module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from Dual Counter - VCV Module, Strum 2017 -//************************************************************************************** - -#include "AS.hpp" - -#include "dsp/digital.hpp" - -#include -#include - -struct Steps : Module { - enum ParamIds { - RST_BUTTON1, - COUNT_NUM_PARAM_1, - RST_BUTTON2, - COUNT_NUM_PARAM_2, - RST_BUTTON3, - COUNT_NUM_PARAM_3, - NUM_PARAMS - }; - enum InputIds { - CLK_IN_1, - RESET_IN_1, - CLK_IN_2, - RESET_IN_2, - CLK_IN_3, - RESET_IN_3, - NUM_INPUTS - }; - enum OutputIds { - OUTPUT_1, - OUTPUT_2, - OUTPUT_3, - NUM_OUTPUTS - }; - enum LightIds { - RESET_LIGHT1, - RESET_LIGHT2, - RESET_LIGHT3, - NUM_LIGHTS - }; - - SchmittTrigger clock_trigger_1; - SchmittTrigger reset_trigger_1; - SchmittTrigger reset_ext_trigger_1; - int count_limit1 = 1; - int count1 = 0; - SchmittTrigger clock_trigger_2; - SchmittTrigger reset_trigger_2; - SchmittTrigger reset_ext_trigger_2; - int count_limit_2 = 1; - int count_2 = 0; - SchmittTrigger clock_trigger_3; - SchmittTrigger reset_trigger_3; - SchmittTrigger reset_ext_trigger_3; - int count_limit_3 = 1; - int count_3 = 0; - const float lightLambda = 0.075f; - float resetLight1 = 0.0f; - float resetLight2 = 0.0f; - float resetLight3 = 0.0f; - - PulseGenerator clockPulse1; - bool pulse1 = false; - PulseGenerator clockPulse2; - bool pulse2 = false; - PulseGenerator clockPulse3; - bool pulse3 = false; - - Steps() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - - } - - void step() override; -}; - - -void Steps::step(){ - - count_limit1 = round(params[COUNT_NUM_PARAM_1].value); - count_limit_2 = round(params[COUNT_NUM_PARAM_2].value); - count_limit_3 = round(params[COUNT_NUM_PARAM_3].value); - - bool reset1 = false; - bool reset_2 = false; - bool reset_3 = false; - pulse1 = false; - - if (reset_trigger_1.process(params[RST_BUTTON1].value)){ - reset1 = true; - count1 = 0; - outputs[OUTPUT_1].value = 0; - resetLight1 = 1.0f; - - } - if (reset_ext_trigger_1.process(inputs[RESET_IN_1].value)){ - reset1 = true; - count1 = 0; - outputs[OUTPUT_1].value = 0; - resetLight1 = 1.0f; - - } - - resetLight1 -= resetLight1 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT1].value = resetLight1; - - if (reset1 == false){ - if (clock_trigger_1.process(inputs[CLK_IN_1].value) && count1 <= count_limit1) - count1++; - } - if (count1 == count_limit1){ - clockPulse1.trigger(1e-3); - } - if (count1 > count_limit1){ - count1 = 0; - } - pulse1 = clockPulse1.process(1.0 / engineGetSampleRate()); - outputs[OUTPUT_1].value = pulse1 ? 10.0f : 0.0f; - - ///////////// counter 2 - if (reset_trigger_2.process(params[RST_BUTTON2].value)){ - reset_2 = true; - count_2 = 0; - outputs[OUTPUT_2].value = 0; - resetLight2 = 1.0f; - } - if (reset_ext_trigger_2.process(inputs[RESET_IN_2].value)){ - reset_2 = true; - count_2 = 0; - outputs[OUTPUT_2].value = 0; - resetLight2 = 1.0f; - } - resetLight2 -= resetLight2 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT2].value = resetLight2; - - if (reset_2 == false){ - if (clock_trigger_2.process(inputs[CLK_IN_2].value) && count_2 <= count_limit_2) - count_2++; - } - if (count_2 == count_limit_2){ - clockPulse2.trigger(1e-3); - } - if (count_2 > count_limit_2){ - count_2 = 0; - } - pulse2 = clockPulse2.process(1.0 / engineGetSampleRate()); - outputs[OUTPUT_2].value = pulse2 ? 10.0f : 0.0f; - ///////////// counter 3 - if (reset_trigger_3.process(params[RST_BUTTON3].value)){ - reset_3 = true; - count_3 = 0; - outputs[OUTPUT_3].value = 0; - resetLight3 = 1.0f; - } - if (reset_ext_trigger_3.process(inputs[RESET_IN_3].value)){ - reset_3 = true; - count_3 = 0; - outputs[OUTPUT_3].value = 0; - resetLight3 = 1.0f; - } - resetLight3 -= resetLight3 / lightLambda / engineGetSampleRate(); - lights[RESET_LIGHT3].value = resetLight3; - - if (reset_3 == false){ - if (clock_trigger_3.process(inputs[CLK_IN_3].value) && count_3 <= count_limit_3) - count_3++; - } - if (count_3 == count_limit_3){ - clockPulse3.trigger(1e-3); - } - if (count_3 > count_limit_3){ - count_3 = 0; - } - pulse3 = clockPulse3.process(1.0 / engineGetSampleRate()); - outputs[OUTPUT_3].value = pulse3 ? 10.0f : 0.0f; -} - -/////////////////////////////////// -struct NumberDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - NumberDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - std::stringstream to_display; - to_display << std::right << std::setw(2) << *value; - - Vec textPos = Vec(4.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// - -struct StepsWidget : ModuleWidget -{ - StepsWidget(Steps *module); -}; - - -StepsWidget::StepsWidget(Steps *module) : ModuleWidget(module) { - //box.size = Vec(15*4, 380); - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin,"res/Steps.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - // counter 1 - //COUNT DISPLAY - NumberDisplayWidget *display1 = new NumberDisplayWidget(); - display1->box.pos = Vec(10,50); - display1->box.size = Vec(30, 20); - display1->value = &module->count1; - addChild(display1); - //STEPS DISPLAY - NumberDisplayWidget *display2 = new NumberDisplayWidget(); - display2->box.pos = Vec(50,50); - display2->box.size = Vec(30, 20); - display2->value = &module->count_limit1; - addChild(display2); - - int group_offset = 100; - - addParam(ParamWidget::create(Vec(5, 82), module, Steps::RST_BUTTON1 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(5+2.2, 82+2.3), module, Steps::RESET_LIGHT1)); - - addParam(ParamWidget::create(Vec(43, 73), module, Steps::COUNT_NUM_PARAM_1, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(3, 120), Port::INPUT, module, Steps::RESET_IN_1)); - addInput(Port::create(Vec(33, 120), Port::INPUT, module, Steps::CLK_IN_1)); - addOutput(Port::create(Vec(63, 120), Port::OUTPUT, module, Steps::OUTPUT_1)); - - // counter 2 - //COUNT DISPLAY - NumberDisplayWidget *display3 = new NumberDisplayWidget(); - display3->box.pos = Vec(10,50 + group_offset); - display3->box.size = Vec(30, 20); - display3->value = &module->count_2; - addChild(display3); - //STEPS DISPLAY - NumberDisplayWidget *display4 = new NumberDisplayWidget(); - display4->box.pos = Vec(50,50 + group_offset); - display4->box.size = Vec(30, 20); - display4->value = &module->count_limit_2; - addChild(display4); - - addParam(ParamWidget::create(Vec(5, 82+ group_offset), module, Steps::RST_BUTTON2 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(5+2.2, 82+2.3+ group_offset), module, Steps::RESET_LIGHT2)); - - addParam(ParamWidget::create(Vec(43, 73 + group_offset), module, Steps::COUNT_NUM_PARAM_2, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(3, 120 + group_offset), Port::INPUT, module, Steps::RESET_IN_2)); - addInput(Port::create(Vec(33, 120 + group_offset), Port::INPUT, module, Steps::CLK_IN_2)); - addOutput(Port::create(Vec(63, 120 + group_offset), Port::OUTPUT, module, Steps::OUTPUT_2)); - - // counter 3 - //COUNT DISPLAY - NumberDisplayWidget *display5 = new NumberDisplayWidget(); - display5->box.pos = Vec(10,50 + group_offset*2); - display5->box.size = Vec(30, 20); - display5->value = &module->count_3; - addChild(display5); - //STEPS DISPLAY - NumberDisplayWidget *display6 = new NumberDisplayWidget(); - display6->box.pos = Vec(50,50 + group_offset*2); - display6->box.size = Vec(30, 20); - display6->value = &module->count_limit_3; - addChild(display6); - - addParam(ParamWidget::create(Vec(5, 82+ group_offset*2), module, Steps::RST_BUTTON3 , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(5+2.2, 82+2.3+ group_offset*2), module, Steps::RESET_LIGHT3)); - - addParam(ParamWidget::create(Vec(43, 73 + group_offset*2), module, Steps::COUNT_NUM_PARAM_3, 1.0f, 64.0f, 1.0f)); - - addInput(Port::create(Vec(3, 120 + group_offset*2), Port::INPUT, module, Steps::RESET_IN_3)); - addInput(Port::create(Vec(33, 120 + group_offset*2), Port::INPUT, module, Steps::CLK_IN_3)); - addOutput(Port::create(Vec(63, 120 + group_offset*2), Port::OUTPUT, module, Steps::OUTPUT_3)); -} - -Model *modelSteps = Model::create("AS", "Steps", "Steps", SWITCH_TAG, SEQUENCER_TAG, UTILITY_TAG); \ No newline at end of file diff --git a/repos/AS/src/SuperDrive.cpp b/repos/AS/src/SuperDrive.cpp deleted file mode 100644 index d0cbe869..00000000 --- a/repos/AS/src/SuperDrive.cpp +++ /dev/null @@ -1,173 +0,0 @@ -//*********************************************************************************************** -// -//SuperDriveFx module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -//Variable-hardness clipping code from scoofy[ AT ]inf[ DOT ]elte[ DOT ]hu -//Filter code from from VCV rack dsp -// -//*********************************************************************************************** - -#include "AS.hpp" -#include "dsp/digital.hpp" -#include "dsp/filter.hpp" - -//#include - -struct SuperDriveFx : Module{ - enum ParamIds { - DRIVE_PARAM, - OUTPUT_GAIN_PARAM, - TONE_PARAM, - BYPASS_SWITCH, - NUM_PARAMS - }; - enum InputIds { - SIGNAL_INPUT, - DRIVE_CV_INPUT, - GAIN_CV_INPUT, - TONE_CV_INPUT, - NUM_INPUTS - }; - enum OutputIds { - SIGNAL_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - GAIN_LIGHT, - TONE_LIGHT, - DRIVE_LIGHT, - BYPASS_LED, - NUM_LIGHTS - }; - - SchmittTrigger bypass_button_trig; - int drive_scale=50;//to handle cv parameters properly - - RCFilter lowpassFilter; - RCFilter highpassFilter; - - bool fx_bypass = false; - SuperDriveFx() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - - void step() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *statesJ = json_array(); - - json_t *bypassJ = json_boolean(fx_bypass); - json_array_append_new(statesJ, bypassJ); - - json_object_set_new(rootJm, "as_FxBypass", statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *statesJ = json_object_get(rootJm, "as_FxBypass"); - - json_t *bypassJ = json_array_get(statesJ, 0); - - fx_bypass = !!json_boolean_value(bypassJ); - - } - - float input_signal=0.0f; - float drive = 0.1f; - float process= 0.0f; - float inv_atan_drive = 0.0f; - float output_signal= 0.0f; - -}; - -void SuperDriveFx::step() { - - if (bypass_button_trig.process(params[BYPASS_SWITCH].value)) - { - fx_bypass = !fx_bypass; - } - lights[BYPASS_LED].value = fx_bypass ? 1.0f : 0.0f; - - float input_signal = inputs[SIGNAL_INPUT].value; - //OVERDRIVE SIGNAL - //float drive = params[DRIVE_PARAM].value; - drive = clamp(params[DRIVE_PARAM].value + inputs[DRIVE_CV_INPUT].value / 10.0f, 0.1f, 1.0f); - - drive = drive * drive_scale; - //precalc - inv_atan_drive = 1.0f/atan(drive); - //process - process = inv_atan_drive * atan(input_signal*drive); - //output_signal = process * params[OUTPUT_GAIN_PARAM].value; - output_signal = process * clamp(params[OUTPUT_GAIN_PARAM].value + inputs[GAIN_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - - //TONE CONTROL - float tone = clamp(params[TONE_PARAM].value + inputs[TONE_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - float lowpassFreq = 10000.0f * powf(10.0f, clamp(2.0f*tone, 0.0f, 1.0f)); - lowpassFilter.setCutoff(lowpassFreq / engineGetSampleRate()); - lowpassFilter.process(output_signal); - output_signal = lowpassFilter.lowpass(); - float highpassFreq = 10.0f * powf(100.0f, clamp(2.0f*tone - 1.0f, 0.0f, 1.0f)); - highpassFilter.setCutoff(highpassFreq / engineGetSampleRate()); - highpassFilter.process(output_signal); - output_signal = highpassFilter.highpass(); - - //check bypass switch status - if (fx_bypass){ - outputs[SIGNAL_OUTPUT].value = inputs[SIGNAL_INPUT].value; - }else { - outputs[SIGNAL_OUTPUT].value = output_signal*3.5f;// 3.5; - } - //lights without cv input - old - //lights[DRIVE_LIGHT].value = params[DRIVE_PARAM].value; - //lights[GAIN_LIGHT].value = params[OUTPUT_GAIN_PARAM].value; - - lights[DRIVE_LIGHT].value = clamp(params[DRIVE_PARAM].value + inputs[DRIVE_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - lights[TONE_LIGHT].value = clamp(params[TONE_PARAM].value + inputs[TONE_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - lights[GAIN_LIGHT].value = clamp(params[OUTPUT_GAIN_PARAM].value + inputs[GAIN_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - -} - -struct SuperDriveFxWidget : ModuleWidget -{ - SuperDriveFxWidget(SuperDriveFx *module); -}; - - -SuperDriveFxWidget::SuperDriveFxWidget(SuperDriveFx *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/SuperDrive.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //KNOBS - addParam(ParamWidget::create(Vec(43, 60), module, SuperDriveFx::DRIVE_PARAM, 0.1f, 1.0f, 0.1f)); - addParam(ParamWidget::create(Vec(43, 125), module, SuperDriveFx::TONE_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(43, 190), module, SuperDriveFx::OUTPUT_GAIN_PARAM, 0.0f, 1.0f, 0.5f)); - //LIGHTS - addChild(ModuleLightWidget::create>(Vec(39, 57), module, SuperDriveFx::DRIVE_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 122), module, SuperDriveFx::TONE_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 187), module, SuperDriveFx::GAIN_LIGHT)); - //BYPASS SWITCH - addParam(ParamWidget::create(Vec(33, 260), module, SuperDriveFx::BYPASS_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(35.2, 262), module, SuperDriveFx::BYPASS_LED)); - //INS/OUTS - addInput(Port::create(Vec(10, 310), Port::INPUT, module, SuperDriveFx::SIGNAL_INPUT)); - addOutput(Port::create(Vec(55, 310), Port::OUTPUT, module, SuperDriveFx::SIGNAL_OUTPUT)); - //CV INPUTS - addInput(Port::create(Vec(10, 67), Port::INPUT, module, SuperDriveFx::DRIVE_CV_INPUT)); - addInput(Port::create(Vec(10, 132), Port::INPUT, module, SuperDriveFx::TONE_CV_INPUT)); - addInput(Port::create(Vec(10, 197), Port::INPUT, module, SuperDriveFx::GAIN_CV_INPUT)); - -} - -Model *modelSuperDriveFx = Model::create("AS", "SuperDriveFx", "Super Drive FX", AMPLIFIER_TAG, EFFECT_TAG); \ No newline at end of file diff --git a/repos/AS/src/Tremolo.cpp b/repos/AS/src/Tremolo.cpp deleted file mode 100644 index 04fdb08c..00000000 --- a/repos/AS/src/Tremolo.cpp +++ /dev/null @@ -1,228 +0,0 @@ -//*********************************************************************************************** -// -//TremoloFx module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//LFO code adapted from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//*********************************************************************************************** - -#include "AS.hpp" -#include "dsp/digital.hpp" - -//LFO CODE ***************************** -struct LowFrequencyOscillator { - float phase = 0.0f; - float pw = 0.5f; - float freq = 1.0f; - bool offset = false; - bool invert = false; - SchmittTrigger resetTrigger; - LowFrequencyOscillator() { - - } - void setPitch(float pitch) { - pitch = fminf(pitch, 8.0f); - freq = powf(2.0f, pitch); - } - void setPulseWidth(float pw_) { - const float pwMin = 0.01f; - pw = clamp(pw_, pwMin, 1.0f - pwMin); - } - void setReset(float reset) { - if (resetTrigger.process(reset)) { - phase = 0.0f; - } - } - void step(float dt) { - float deltaPhase = fminf(freq * dt, 0.5f); - phase += deltaPhase; - if (phase >= 1.0f) - phase -= 1.0f; - } - float sin() { - if (offset) - return 1.0f - cosf(2*M_PI * phase) * (invert ? -1.0f : 1.0f); - else - return sinf(2.0f*M_PI * phase) * (invert ? -1.0f : 1.0f); - } - float tri(float x) { - return 4.0f * fabsf(x - roundf(x)); - } - float tri() { - if (offset) - return tri(invert ? phase - 0.5 : phase); - else - return -1.0f + tri(invert ? phase - 0.25f : phase - 0.75f); - } - /* - float saw(float x) { - return 2.0 * (x - roundf(x)); - } - float saw() { - if (offset) - return invert ? 2.0 * (1.0 - phase) : 2.0 * phase; - else - return saw(phase) * (invert ? -1.0 : 1.0); - } - float sqr() { - float sqr = (phase < pw) ^ invert ? 1.0 : -1.0; - return offset ? sqr + 1.0 : sqr; - } - */ - float light() { - return sinf(2.0f*M_PI * phase); - } -}; -//LFO CODE ***************************** - -struct TremoloFx : Module{ - enum ParamIds { - WAVE_PARAM, - FREQ_PARAM, - BLEND_PARAM, - INVERT_PARAM, - BYPASS_SWITCH, - NUM_PARAMS - }; - enum InputIds { - SIGNAL_INPUT, - WAVE_CV_INPUT, - FREQ_CV_INPUT, - BLEND_CV_INPUT, - NUM_INPUTS - }; - enum OutputIds { - SIGNAL_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - WAVE_LIGHT, - PHASE_POS_LIGHT, - PHASE_NEG_LIGHT, - BLEND_LIGHT, - BYPASS_LED, - NUM_LIGHTS - }; - - LowFrequencyOscillator oscillator; - - SchmittTrigger bypass_button_trig; - - bool fx_bypass = false; - - TremoloFx() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - - void step() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *statesJ = json_array(); - - json_t *bypassJ = json_boolean(fx_bypass); - json_array_append_new(statesJ, bypassJ); - - json_object_set_new(rootJm, "as_FxBypass", statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *statesJ = json_object_get(rootJm, "as_FxBypass"); - - json_t *bypassJ = json_array_get(statesJ, 0); - - fx_bypass = !!json_boolean_value(bypassJ); - - } - - float input_signal =0.0f; - float output_signal = 0.0f; - float tremolo_signal = 0.0f; - float blend_control = 0.0f; - float lfo_modulation = 0.0f; - -}; - -void TremoloFx::step() { - - if (bypass_button_trig.process(params[BYPASS_SWITCH].value)){ - fx_bypass = !fx_bypass; - } - lights[BYPASS_LED].value = fx_bypass ? 1.0f : 0.0f; - - input_signal = clamp(inputs[SIGNAL_INPUT].value,-10.0f,10.0f); - - //oscillator.setPitch(params[FREQ_PARAM].value); - oscillator.setPitch( clamp(params[FREQ_PARAM].value + inputs[FREQ_CV_INPUT].value, 0.0f, 3.5f) ); - oscillator.offset = (1.0f); - oscillator.invert = (params[INVERT_PARAM].value <= 0.0f); - oscillator.setPulseWidth(0.5f); - oscillator.step(1.0f / engineGetSampleRate()); - - float wave = clamp( params[WAVE_PARAM].value + inputs[WAVE_CV_INPUT].value, 0.0f, 1.0f ); - float interp = crossfade(oscillator.sin(), oscillator.tri(), wave); - - lfo_modulation = 5.0f * interp; - - //check bypass switch status - if (fx_bypass){ - outputs[SIGNAL_OUTPUT].value = input_signal; - }else { - tremolo_signal = input_signal * clamp(lfo_modulation/10.0f, 0.0f, 1.0f); - blend_control = clamp(params[BLEND_PARAM].value + inputs[BLEND_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - output_signal = crossfade(input_signal,tremolo_signal,blend_control); - outputs[SIGNAL_OUTPUT].value = output_signal; - } - - lights[PHASE_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0f, oscillator.light())); - lights[PHASE_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0f, -oscillator.light())); - lights[BLEND_LIGHT].value = clamp(params[BLEND_PARAM].value + inputs[BLEND_CV_INPUT].value / 10.0f, 0.0f, 1.0f); - -} - - - -struct TremoloFxWidget : ModuleWidget -{ - TremoloFxWidget(TremoloFx *module); -}; - - -TremoloFxWidget::TremoloFxWidget(TremoloFx *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/Tremolo.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //phase switch - addParam(ParamWidget::create(Vec(13, 100), module, TremoloFx::INVERT_PARAM, 0.0f, 1.0f, 1.0f)); - //KNOBS - addParam(ParamWidget::create(Vec(43, 60), module, TremoloFx::WAVE_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(43, 125), module, TremoloFx::FREQ_PARAM, 0.0f, 3.5f, 1.75f)); - addParam(ParamWidget::create(Vec(43, 190), module, TremoloFx::BLEND_PARAM, 0.0f, 1.0f, 0.5f)); - //LIGHTS - addChild(ModuleLightWidget::create>(Vec(39, 122), module, TremoloFx::PHASE_POS_LIGHT)); - addChild(ModuleLightWidget::create>(Vec(39, 187), module, TremoloFx::BLEND_LIGHT)); - //BYPASS SWITCH - addParam(ParamWidget::create(Vec(33, 260), module, TremoloFx::BYPASS_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(35.2, 262), module, TremoloFx::BYPASS_LED)); - //INS/OUTS - addInput(Port::create(Vec(10, 310), Port::INPUT, module, TremoloFx::SIGNAL_INPUT)); - addOutput(Port::create(Vec(55, 310), Port::OUTPUT, module, TremoloFx::SIGNAL_OUTPUT)); - //CV INPUTS - addInput(Port::create(Vec(10, 67), Port::INPUT, module, TremoloFx::WAVE_CV_INPUT)); - addInput(Port::create(Vec(10, 132), Port::INPUT, module, TremoloFx::FREQ_CV_INPUT)); - addInput(Port::create(Vec(10, 197), Port::INPUT, module, TremoloFx::BLEND_CV_INPUT)); - -} - -Model *modelTremoloFx = Model::create("AS", "TremoloFx", "Tremolo FX", EFFECT_TAG); \ No newline at end of file diff --git a/repos/AS/src/TriLFO.cpp b/repos/AS/src/TriLFO.cpp deleted file mode 100644 index f5d2527d..00000000 --- a/repos/AS/src/TriLFO.cpp +++ /dev/null @@ -1,254 +0,0 @@ -//************************************************************************************** -//TriLFO module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code adapted from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** -#include "AS.hpp" -#include "dsp/digital.hpp" - -struct LowFrequencyOscillator { - float phase = 0.0f; - float pw = 0.5f; - float freq = 1.0f; - bool offset = false; - bool invert = false; - SchmittTrigger resetTrigger; - LowFrequencyOscillator() { - //resetTrigger.setThresholds(0.0f, 0.01f); - } - void setPitch(float pitch) { - pitch = fminf(pitch, 8.0f); - freq = powf(2.0f, pitch); - } - void setPulseWidth(float pw_) { - const float pwMin = 0.01f; - pw = clamp(pw_, pwMin, 1.0f - pwMin); - } - void setReset(float reset) { - if (resetTrigger.process(reset)) { - phase = 0.0f; - } - } - void step(float dt) { - float deltaPhase = fminf(freq * dt, 0.5f); - phase += deltaPhase; - if (phase >= 1.0f) - phase -= 1.0f; - } - float sin() { - if (offset) - return 1.0f - cosf(2*M_PI * phase) * (invert ? -1.0f : 1.0f); - else - return sinf(2.0f*M_PI * phase) * (invert ? -1.0f : 1.0f); - } - float tri(float x) { - return 4.0f * fabsf(x - roundf(x)); - } - float tri() { - if (offset) - return tri(invert ? phase - 0.5f : phase); - else - return -1.0f + tri(invert ? phase - 0.25f : phase - 0.75f); - } - float saw(float x) { - return 2.0f * (x - roundf(x)); - } - float saw() { - if (offset) - return invert ? 2.0f * (1.0f - phase) : 2.0f * phase; - else - return saw(phase) * (invert ? -1.0f : 1.0f); - } - float sqr() { - float sqr = (phase < pw) ^ invert ? 1.0f : -1.0f; - return offset ? sqr + 1.0f : sqr; - } - float light() { - return sinf(2.0f*M_PI * phase); - } -}; - - -struct TriLFO : Module { - enum ParamIds { - OFFSET1_PARAM, - INVERT1_PARAM, - FREQ1_PARAM, - OFFSET2_PARAM, - INVERT2_PARAM, - FREQ2_PARAM, - OFFSET3_PARAM, - INVERT3_PARAM, - FREQ3_PARAM, - // - FM1_PARAM, - FM2_PARAM, - PW_PARAM, - PWM_PARAM, - // - NUM_PARAMS - }; - enum InputIds { - FM1_INPUT, - FM2_INPUT, - RESET1_INPUT, - RESET2_INPUT, - RESET3_INPUT, - PW_INPUT, - NUM_INPUTS - }; - enum OutputIds { - SIN1_OUTPUT, - TRI1_OUTPUT, - SAW1_OUTPUT, - SQR1_OUTPUT, - SIN2_OUTPUT, - TRI2_OUTPUT, - SAW2_OUTPUT, - SQR2_OUTPUT, - SIN3_OUTPUT, - TRI3_OUTPUT, - SAW3_OUTPUT, - SQR3_OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - PHASE1_POS_LIGHT, - PHASE1_NEG_LIGHT, - PHASE2_POS_LIGHT, - PHASE2_NEG_LIGHT, - PHASE3_POS_LIGHT, - PHASE3_NEG_LIGHT, - NUM_LIGHTS - }; - - LowFrequencyOscillator oscillator1; - LowFrequencyOscillator oscillator2; - LowFrequencyOscillator oscillator3; - - TriLFO() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; - - float pw_param = 0.5f; -}; - - -void TriLFO::step() { - //LFO1 - oscillator1.setPitch(params[FREQ1_PARAM].value + params[FM1_PARAM].value * inputs[FM1_INPUT].value + params[FM2_PARAM].value * inputs[FM2_INPUT].value); - //oscillator1.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.0); - oscillator1.setPulseWidth(pw_param); - oscillator1.offset = (params[OFFSET1_PARAM].value > 0.0f); - oscillator1.invert = (params[INVERT1_PARAM].value <= 0.0f); - oscillator1.step(1.0f / engineGetSampleRate()); - oscillator1.setReset(inputs[RESET1_INPUT].value); - - outputs[SIN1_OUTPUT].value = 5.0f * oscillator1.sin(); - outputs[TRI1_OUTPUT].value = 5.0f * oscillator1.tri(); - outputs[SAW1_OUTPUT].value = 5.0f * oscillator1.saw(); - outputs[SQR1_OUTPUT].value = 5.0f * oscillator1.sqr(); - - lights[PHASE1_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0f, oscillator1.light())); - lights[PHASE1_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0f, -oscillator1.light())); - //LFO2 - oscillator2.setPitch(params[FREQ2_PARAM].value + params[FM1_PARAM].value * inputs[FM1_INPUT].value + params[FM2_PARAM].value * inputs[FM2_INPUT].value); - //oscillator2.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.0); - oscillator2.setPulseWidth(pw_param); - oscillator2.offset = (params[OFFSET2_PARAM].value > 0.0f); - oscillator2.invert = (params[INVERT2_PARAM].value <= 0.0f); - oscillator2.step(1.0f / engineGetSampleRate()); - oscillator2.setReset(inputs[RESET2_INPUT].value); - - outputs[SIN2_OUTPUT].value = 5.0f * oscillator2.sin(); - outputs[TRI2_OUTPUT].value = 5.0f * oscillator2.tri(); - outputs[SAW2_OUTPUT].value = 5.0f * oscillator2.saw(); - outputs[SQR2_OUTPUT].value = 5.0f * oscillator2.sqr(); - - lights[PHASE2_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0f, oscillator2.light())); - lights[PHASE2_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0f, -oscillator2.light())); - //LFO3 - oscillator3.setPitch(params[FREQ3_PARAM].value + params[FM1_PARAM].value * inputs[FM1_INPUT].value + params[FM2_PARAM].value * inputs[FM2_INPUT].value); - //oscillator3.setPulseWidth(params[PW_PARAM].value + params[PWM_PARAM].value * inputs[PW_INPUT].value / 10.0); - oscillator3.setPulseWidth(pw_param); - oscillator3.offset = (params[OFFSET3_PARAM].value > 0.0f); - oscillator3.invert = (params[INVERT3_PARAM].value <= 0.0f); - oscillator3.step(1.0f / engineGetSampleRate()); - oscillator3.setReset(inputs[RESET3_INPUT].value); - - outputs[SIN3_OUTPUT].value = 5.0f * oscillator3.sin(); - outputs[TRI3_OUTPUT].value = 5.0f * oscillator3.tri(); - outputs[SAW3_OUTPUT].value = 5.0f * oscillator3.saw(); - outputs[SQR3_OUTPUT].value = 5.0f * oscillator3.sqr(); - - lights[PHASE3_POS_LIGHT].setBrightnessSmooth(fmaxf(0.0f, oscillator3.light())); - lights[PHASE3_NEG_LIGHT].setBrightnessSmooth(fmaxf(0.0f, -oscillator3.light())); - -} - - -struct TriLFOWidget : ModuleWidget -{ - TriLFOWidget(TriLFO *module); -}; - - -TriLFOWidget::TriLFOWidget(TriLFO *module) : ModuleWidget(module) { - box.size = Vec(RACK_GRID_WIDTH*10, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/as_LFO.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //LFO 1 - addInput(Port::create(Vec(10, 60), Port::INPUT, module, TriLFO::RESET1_INPUT)); - addParam(ParamWidget::create(Vec(41, 55), module, TriLFO::FREQ1_PARAM, -8.0f, 6.0f, -1.0f)); - // - addChild(ModuleLightWidget::create>(Vec(37, 52), module, TriLFO::PHASE1_POS_LIGHT)); - // - addParam(ParamWidget::create(Vec(90, 60), module, TriLFO::OFFSET1_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(120, 60), module, TriLFO::INVERT1_PARAM, 0.0f, 1.0f, 1.0f)); - // - addOutput(Port::create(Vec(11, 120), Port::OUTPUT, module, TriLFO::SIN1_OUTPUT)); - addOutput(Port::create(Vec(45, 120), Port::OUTPUT, module, TriLFO::TRI1_OUTPUT)); - addOutput(Port::create(Vec(80, 120), Port::OUTPUT, module, TriLFO::SAW1_OUTPUT)); - addOutput(Port::create(Vec(114, 120), Port::OUTPUT, module, TriLFO::SQR1_OUTPUT)); - //LFO 2 - static const int lfo2_y_offset = 100; - addInput(Port::create(Vec(10, 60+lfo2_y_offset), Port::INPUT, module, TriLFO::RESET2_INPUT)); - addParam(ParamWidget::create(Vec(41, 55+lfo2_y_offset), module, TriLFO::FREQ2_PARAM, -8.0f, 6.0f, -1.0f)); - // - addChild(ModuleLightWidget::create>(Vec(37, 52+lfo2_y_offset), module, TriLFO::PHASE2_POS_LIGHT)); - // - addParam(ParamWidget::create(Vec(90, 60+lfo2_y_offset), module, TriLFO::OFFSET2_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(120, 60+lfo2_y_offset), module, TriLFO::INVERT2_PARAM, 0.0f, 1.0f, 1.0f)); - // - addOutput(Port::create(Vec(11, 120+lfo2_y_offset), Port::OUTPUT, module, TriLFO::SIN2_OUTPUT)); - addOutput(Port::create(Vec(45, 120+lfo2_y_offset), Port::OUTPUT, module, TriLFO::TRI2_OUTPUT)); - addOutput(Port::create(Vec(80, 120+lfo2_y_offset), Port::OUTPUT, module, TriLFO::SAW2_OUTPUT)); - addOutput(Port::create(Vec(114, 120+lfo2_y_offset), Port::OUTPUT, module, TriLFO::SQR2_OUTPUT)); - //LFO 3 - static const int lfo3_y_offset = 200; - addInput(Port::create(Vec(10, 60+lfo3_y_offset), Port::INPUT, module, TriLFO::RESET3_INPUT)); - addParam(ParamWidget::create(Vec(41, 55+lfo3_y_offset), module, TriLFO::FREQ3_PARAM, -8.0f, 6.0f, -1.0f)); - // - addChild(ModuleLightWidget::create>(Vec(37, 52+lfo3_y_offset), module, TriLFO::PHASE3_POS_LIGHT)); - // - addParam(ParamWidget::create(Vec(90, 60+lfo3_y_offset), module, TriLFO::OFFSET3_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(120, 60+lfo3_y_offset), module, TriLFO::INVERT3_PARAM, 0.0f, 1.0f, 1.0f)); - // - addOutput(Port::create(Vec(11, 120+lfo3_y_offset), Port::OUTPUT, module, TriLFO::SIN3_OUTPUT)); - addOutput(Port::create(Vec(45, 120+lfo3_y_offset), Port::OUTPUT, module, TriLFO::TRI3_OUTPUT)); - addOutput(Port::create(Vec(80, 120+lfo3_y_offset), Port::OUTPUT, module, TriLFO::SAW3_OUTPUT)); - addOutput(Port::create(Vec(114, 120+lfo3_y_offset), Port::OUTPUT, module, TriLFO::SQR3_OUTPUT)); - -} - -Model *modelTriLFO = Model::create("AS", "TriLFO", "Tri LFO", LFO_TAG); \ No newline at end of file diff --git a/repos/AS/src/TriggersMKI.cpp b/repos/AS/src/TriggersMKI.cpp deleted file mode 100644 index 282e89dd..00000000 --- a/repos/AS/src/TriggersMKI.cpp +++ /dev/null @@ -1,196 +0,0 @@ -//************************************************************************************** -//TriggersMKIMKI module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//************************************************************************************** -#include "AS.hpp" -#include "dsp/digital.hpp" -#include -#include - -struct TriggersMKI: Module { - enum ParamIds { - VOLTAGE_PARAM, - RUN_SWITCH, - MOMENTARY_SWITCH, - NUM_PARAMS - }; - enum InputIds { - CV_RUN_INPUT, - NUM_INPUTS - }; - enum OutputIds { - TRIGGER_OUT, - NUM_OUTPUTS - }; - enum LightIds { - RUN_LED, - MOMENTARY_LED, - NUM_LIGHTS - }; - - SchmittTrigger LatchTrigger; - SchmittTrigger LatchExtTrigger; - SchmittTrigger BtnTrigger; - SchmittTrigger BtnExtTrigger; - - const float lightLambda = 0.075; - float resetLight = 0.0f; - float volts = 0.0f; - bool running = false; - - TriggersMKI() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; - - - json_t *toJson() override - { - json_t *rootJ = json_object(); - json_t *button_statesJ = json_array(); - json_t *button_stateJ = json_integer((int)running); - json_array_append_new(button_statesJ, button_stateJ); - json_object_set_new(rootJ, "run", button_statesJ); - return rootJ; - } - - void fromJson(json_t *rootJ) override - { - json_t *button_statesJ = json_object_get(rootJ, "run"); - if (button_statesJ) - { - json_t *button_stateJ = json_array_get(button_statesJ,0); - if (button_stateJ) - running = !!json_integer_value(button_stateJ); - } - } - -}; - -void TriggersMKI::step() { - - volts = clamp(params[VOLTAGE_PARAM].value, 0.0f, 10.0f); - - //LATCH TRIGGER - //EXTERNAL TRIGGER - if (LatchTrigger.process(params[RUN_SWITCH].value)||LatchExtTrigger.process(inputs[CV_RUN_INPUT].value)) { - running = !running; - } - //INTERNAL TRIGGER - if (running) { - lights[RUN_LED].value = 1.0f; - outputs[TRIGGER_OUT].value = volts; - }else{ - lights[RUN_LED].value = 0.0f; - outputs[TRIGGER_OUT].value = 0.0f; - } - - //MOMENTARY TRIGGER - //EXTERNAL TRIGGER - if (BtnTrigger.process(params[MOMENTARY_SWITCH].value)) { - resetLight = 1.0; - if (!running) { - outputs[TRIGGER_OUT].value = volts; - } - }else{ - if (!running) { - outputs[TRIGGER_OUT].value = 0.0f; - } - } - resetLight -= resetLight / lightLambda / engineGetSampleRate(); - lights[MOMENTARY_LED].value = resetLight; - -} - -/////////////////////////////////// -struct VoltsDisplayWidget : TransparentWidget { - - float *value; - std::shared_ptr font; - - VoltsDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); - }; - - void draw(NVGcontext *vg) override { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.5); - - char display_string[10]; - sprintf(display_string,"%5.2f",*value); - - Vec textPos = Vec(3.0f, 17.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "~~~~~", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "\\\\\\\\\\", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - nvgText(vg, textPos.x, textPos.y, display_string, NULL); - //nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - } -}; -//////////////////////////////////// - -struct TriggersMKIWidget : ModuleWidget -{ - TriggersMKIWidget(TriggersMKI *module); -}; - - -TriggersMKIWidget::TriggersMKIWidget(TriggersMKI *module) : ModuleWidget(module) { - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/TriggersMKI.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - //VOLTS DISPLAY - VoltsDisplayWidget *display1 = new VoltsDisplayWidget(); - display1->box.pos = Vec(10,50); - display1->box.size = Vec(70, 20); - display1->value = &module->volts; - addChild(display1); - - //PARAMS - addParam(ParamWidget::create(Vec(26, 77), module, TriggersMKI::VOLTAGE_PARAM, 0.0f, 10.0f, 5.0f)); - //SWITCHES - static const float led_offset = 3.3; - static const float led_center = 15; - addParam(ParamWidget::create(Vec(led_center, 182), module, TriggersMKI::RUN_SWITCH, 0.0, 1.0, 0.0)); - addChild(ModuleLightWidget::create>(Vec(led_center+led_offset, 182+led_offset), module, TriggersMKI::RUN_LED)); - - addParam(ParamWidget::create(Vec(led_center, 262), module, TriggersMKI::MOMENTARY_SWITCH, 0.0, 1.0, 0.0)); - addChild(ModuleLightWidget::create>(Vec(led_center+led_offset, 262+led_offset), module, TriggersMKI::MOMENTARY_LED)); - - //PORTS - addInput(Port::create(Vec(10, 145), Port::INPUT, module, TriggersMKI::CV_RUN_INPUT)); - addOutput(Port::create(Vec(55, 145), Port::OUTPUT, module, TriggersMKI::TRIGGER_OUT)); - -} - -Model *modelTriggersMKI = Model::create("AS", "TriggersMKI", "Triggers MKI", SWITCH_TAG, UTILITY_TAG); \ No newline at end of file diff --git a/repos/AS/src/TriggersMKII.cpp b/repos/AS/src/TriggersMKII.cpp deleted file mode 100644 index 640dde62..00000000 --- a/repos/AS/src/TriggersMKII.cpp +++ /dev/null @@ -1,248 +0,0 @@ -//************************************************************************************** -//TriggersMKII module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//************************************************************************************** -#include "AS.hpp" -#include "dsp/digital.hpp" -#include -#include -//#include -//#include - -struct TriggersMKII: Module { - enum ParamIds { - LABEL_PARAM_1, - LABEL_PARAM_2, - TRIGGER_SWITCH_1, - MOMENTARY_SWITCH_2, - NUM_PARAMS - }; - enum InputIds { - CV_TRIG_INPUT_1, - CV_TRIG_INPUT_2, - NUM_INPUTS - }; - enum OutputIds { - - TRIGGER_OUT1, - MOMENTARY_OUT2, - - NUM_OUTPUTS - }; - enum LightIds { - RUN_LED, - TRIGGER_LED_1, - MOMENTARY_LED_2, - NUM_LIGHTS - }; - - SchmittTrigger btnTrigger1; - SchmittTrigger extTrigger1; - SchmittTrigger btnTrigger2; - SchmittTrigger extTrigger2; - - const float lightLambda = 0.075f; - float resetLight1 = 0.0f; - float resetLight2 = 0.0f; - - int label_num1 = 0; - int label_num2 = 0; - - TriggersMKII() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; - - -}; - -void TriggersMKII::step() { - - label_num1 = roundf(params[LABEL_PARAM_1].value); - label_num2 = roundf(params[LABEL_PARAM_2].value); - - - outputs[TRIGGER_OUT1].value = 0.0f; - outputs[MOMENTARY_OUT2].value = 0.0f; - - //TRIGGER 1 - //EXTERNAL TRIGGER - if (btnTrigger1.process(params[TRIGGER_SWITCH_1].value)) { - resetLight1 = 1.0; - outputs[TRIGGER_OUT1].value = 10.0f; - //INTERNAL TRIGGER - }else if (extTrigger1.process(inputs[CV_TRIG_INPUT_1].value)) { - resetLight1 = 1.0; - outputs[TRIGGER_OUT1].value = 10.0f; - }else{ - outputs[TRIGGER_OUT1].value = 0.0f; - } - resetLight1 -= resetLight1 / lightLambda / engineGetSampleRate(); - lights[TRIGGER_LED_1].value = resetLight1; - - //TRIGGER 2 - //EXTERNAL TRIGGER - - if (btnTrigger2.process(params[MOMENTARY_SWITCH_2].value)) { - resetLight2 = 1.0; - outputs[MOMENTARY_OUT2].value = 10.0f; - //INTERNAL TRIGGER - }else if (extTrigger2.process(inputs[CV_TRIG_INPUT_2].value)) { - resetLight2 = 1.0; - outputs[MOMENTARY_OUT2].value = 10.0f; - }else{ - outputs[MOMENTARY_OUT2].value = 0.0f; - } - resetLight2 -= resetLight2 / lightLambda / engineGetSampleRate(); - lights[MOMENTARY_LED_2].value = resetLight2; - -} - -static const char *label_values[] = { - "------", - " MUTE", - " SOLO", - " RESET", - " DRUMS", - " KICK", - " SNARE", - " HIHAT", - " CLAP", - " PERC", - "BASS 1", - "BASS 2", - " GTR 1", - " GTR 2", - "LEAD 1", - "LEAD 2", - " PAD 1", - " PAD 2", - "CHORDS", - " FX 1", - " FX 2", - " SEQ 1", - " SEQ 2", - " MIX 1", - " MIX 2", - " AUX 1", - " AUX 2", - " ON", - " OFF", - " START", - " STOP", - " PAUSE", - " UP", - " DOWN", - " LEFT", - " RIGHT", -}; - -/////////////////////////////////// -struct LabelDisplayWidget : TransparentWidget { - - int *value; - std::shared_ptr font; - - LabelDisplayWidget() { - font = Font::load(assetPlugin(plugin, "res/saxmono.ttf")); - }; - - void draw(NVGcontext *vg) override - { - // Background - //NVGcolor backgroundColor = nvgRGB(0x20, 0x20, 0x20); - NVGcolor backgroundColor = nvgRGB(0x20, 0x10, 0x10); - NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); - nvgBeginPath(vg); - nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); - nvgFillColor(vg, backgroundColor); - nvgFill(vg); - nvgStrokeWidth(vg, 1.5); - nvgStrokeColor(vg, borderColor); - nvgStroke(vg); - // text - nvgFontSize(vg, 18); - nvgFontFaceId(vg, font->handle); - nvgTextLetterSpacing(vg, 2.0); - - std::stringstream to_display; - to_display << std::right << std::setw(5) << *value; - - Vec textPos = Vec(4.0f, 16.0f); - - NVGcolor textColor = nvgRGB(0xdf, 0xd2, 0x2c); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "000000", NULL); - - textColor = nvgRGB(0xda, 0xe9, 0x29); - nvgFillColor(vg, nvgTransRGBA(textColor, 16)); - nvgText(vg, textPos.x, textPos.y, "------", NULL); - - textColor = nvgRGB(0xf0, 0x00, 0x00); - nvgFillColor(vg, textColor); - //nvgText(vg, textPos.x, textPos.y, to_display.str().c_str(), NULL); - nvgText(vg, textPos.x, textPos.y, label_values[*value], NULL); - } -}; -//////////////////////////////////// - -struct TriggersMKIIWidget : ModuleWidget -{ - TriggersMKIIWidget(TriggersMKII *module); -}; - -TriggersMKIIWidget::TriggersMKIIWidget(TriggersMKII *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/TriggersMKII.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - static const float led_offset = 3.3; - static const float led_center = 15; - static const float y_offset = 150; - //TRIGGER 1 - //LABEL DISPLAY - LabelDisplayWidget *display1 = new LabelDisplayWidget(); - display1->box.pos = Vec(6,50); - display1->box.size = Vec(78, 20); - display1->value = &module->label_num1; - addChild(display1); - - //PARAM - addParam(ParamWidget::create(Vec(46, 77), module, TriggersMKII::LABEL_PARAM_1, 0.0, 35.0, 0.0)); - //SWITCH - addParam(ParamWidget::create(Vec(led_center, 132), module, TriggersMKII::TRIGGER_SWITCH_1, 0.0, 1.0, 0.0)); - addChild(ModuleLightWidget::create>(Vec(led_center+led_offset, 132+led_offset), module, TriggersMKII::TRIGGER_LED_1)); - //PORTS - addOutput(Port::create(Vec(7, 78), Port::OUTPUT, module, TriggersMKII::TRIGGER_OUT1)); - addInput(Port::create(Vec(7, 104), Port::INPUT, module, TriggersMKII::CV_TRIG_INPUT_1)); - - //TRIGGER 2 - //LABEL DISPLAY - LabelDisplayWidget *display2 = new LabelDisplayWidget(); - display2->box.pos = Vec(6,50+y_offset); - display2->box.size = Vec(78, 20); - display2->value = &module->label_num2; - addChild(display2); - - //PARAM - addParam(ParamWidget::create(Vec(46, 77+y_offset), module, TriggersMKII::LABEL_PARAM_2, 0.0, 35.0, 0.0)); - //SWITCH - addParam(ParamWidget::create(Vec(led_center, 132+y_offset), module, TriggersMKII::MOMENTARY_SWITCH_2, 0.0, 1.0, 0.0)); - addChild(ModuleLightWidget::create>(Vec(led_center+led_offset, 132+led_offset+y_offset), module, TriggersMKII::MOMENTARY_LED_2)); - //PORTS - addOutput(Port::create(Vec(7, 78+y_offset), Port::OUTPUT, module, TriggersMKII::MOMENTARY_OUT2)); - addInput(Port::create(Vec(7, 104+y_offset), Port::INPUT, module, TriggersMKII::CV_TRIG_INPUT_2)); - -} - - -Model *modelTriggersMKII = Model::create("AS", "TriggersMKII", "Triggers MKII", SWITCH_TAG, UTILITY_TAG); diff --git a/repos/AS/src/VCA.cpp b/repos/AS/src/VCA.cpp deleted file mode 100644 index 3d3fa7b4..00000000 --- a/repos/AS/src/VCA.cpp +++ /dev/null @@ -1,101 +0,0 @@ -//************************************************************************************** -//VCA module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from the Fundamentals plugins by Andrew Belt http://www.vcvrack.com -//************************************************************************************** - -#include "AS.hpp" - -struct VCA : Module { - enum ParamIds { - LEVEL1_PARAM, - LEVEL2_PARAM, - MODE1_PARAM, - MODE2_PARAM, - NUM_PARAMS - }; - enum InputIds { - ENV1_INPUT, - IN1_INPUT, - ENV2_INPUT, - IN2_INPUT, - NUM_INPUTS - }; - enum OutputIds { - OUT1_OUTPUT, - OUT2_OUTPUT, - NUM_OUTPUTS - }; - - float v1= 0.0f; - float v2= 0.0f; - const float expBase = 50.0f; - - VCA() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS) {} - void step() override; -}; - -void VCA::step() { - //VCA 1 - v1 = inputs[IN1_INPUT].value * params[LEVEL1_PARAM].value; - if(inputs[ENV1_INPUT].active){ - if(params[MODE1_PARAM].value==1){ - v1 *= clamp(inputs[ENV1_INPUT].value / 10.0f, 0.0f, 1.0f); - }else{ - v1 *= rescale(powf(expBase, clamp(inputs[ENV1_INPUT].value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - } - } - outputs[OUT1_OUTPUT].value = v1; - //VCA 2 - v2 = inputs[IN2_INPUT].value * params[LEVEL2_PARAM].value; - if(inputs[ENV2_INPUT].active){ - if(params[MODE2_PARAM].value){ - v2 *= clamp(inputs[ENV2_INPUT].value / 10.0f, 0.0f, 1.0f); - }else{ - v2 *= rescale(powf(expBase, clamp(inputs[ENV2_INPUT].value / 10.0f, 0.0f, 1.0f)), 1.0f, expBase, 0.0f, 1.0f); - } - } - outputs[OUT2_OUTPUT].value = v2; -} - - -struct VCAWidget : ModuleWidget -{ - VCAWidget(VCA *module); -}; - -VCAWidget::VCAWidget(VCA *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/VCA.svg"))); - addChild(panel); - } - - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //SLIDERS - addParam(ParamWidget::create(Vec(10, 70), module, VCA::LEVEL1_PARAM, 0.0f, 1.0f, 0.5f)); - addParam(ParamWidget::create(Vec(55, 70), module, VCA::LEVEL2_PARAM, 0.0f, 1.0f, 0.5f)); - //MODE SWITCHES - addParam(ParamWidget::create(Vec(14, 190), module, VCA::MODE1_PARAM, 0.0f, 1.0f, 1.0f)); - addParam(ParamWidget::create(Vec(59, 190), module, VCA::MODE2_PARAM, 0.0f, 1.0f, 1.0f)); - //PORTS - addInput(Port::create(Vec(10, 217), Port::INPUT, module, VCA::ENV1_INPUT)); - addInput(Port::create(Vec(55, 217), Port::INPUT, module, VCA::ENV2_INPUT)); - - addInput(Port::create(Vec(10, 260), Port::INPUT, module, VCA::IN1_INPUT)); - addInput(Port::create(Vec(55, 260), Port::INPUT, module, VCA::IN2_INPUT)); - - addOutput(Port::create(Vec(10, 310), Port::OUTPUT, module, VCA::OUT1_OUTPUT)); - addOutput(Port::create(Vec(55, 310), Port::OUTPUT, module, VCA::OUT2_OUTPUT)); - -} - -Model *modelVCA = Model::create("AS", "VCAWidget", "VCA", AMPLIFIER_TAG); \ No newline at end of file diff --git a/repos/AS/src/WaveShaper.cpp b/repos/AS/src/WaveShaper.cpp deleted file mode 100644 index 5b29dbc2..00000000 --- a/repos/AS/src/WaveShaper.cpp +++ /dev/null @@ -1,130 +0,0 @@ -//************************************************************************************** -//WaveSahper module for VCV Rack by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// -//Code taken from HetrickCV plugins by Michael Hetrick https://github.com/mhetrick/hetrickcv -//************************************************************************************** -#include "AS.hpp" - -#include "dsp/digital.hpp" - -struct WaveShaper : Module { - enum ParamIds { - AMOUNT_PARAM, - SCALE_PARAM, - RANGE_PARAM, - BYPASS_SWITCH, - NUM_PARAMS - }; - enum InputIds { - INPUT, - AMOUNT_INPUT, - NUM_INPUTS - }; - enum OutputIds { - OUTPUT, - NUM_OUTPUTS - }; - enum LightIds { - BYPASS_LED, - NUM_LIGHTS - }; - - SchmittTrigger bypass_button_trig; - bool fx_bypass = false; - - WaveShaper() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} - void step() override; - - json_t *toJson()override { - json_t *rootJm = json_object(); - - json_t *statesJ = json_array(); - - json_t *bypassJ = json_boolean(fx_bypass); - json_array_append_new(statesJ, bypassJ); - - json_object_set_new(rootJm, "as_FxBypass", statesJ); - - return rootJm; - } - - void fromJson(json_t *rootJm)override { - json_t *statesJ = json_object_get(rootJm, "as_FxBypass"); - - json_t *bypassJ = json_array_get(statesJ, 0); - - fx_bypass = !!json_boolean_value(bypassJ); - - } - -}; - - -void WaveShaper::step() { - - if (bypass_button_trig.process(params[BYPASS_SWITCH].value)){ - fx_bypass = !fx_bypass; - } - lights[BYPASS_LED].value = fx_bypass ? 1.0f : 0.0f; - - float input = inputs[INPUT].value; - - bool mode5V = (params[RANGE_PARAM].value == 0.0f); - if(mode5V) input = clamp(input, -5.0f, 5.0f) * 0.2f; - else input = clamp(input, -10.0f, 10.0f) * 0.1f; - - float shape = params[AMOUNT_PARAM].value + (inputs[AMOUNT_INPUT].value * params[SCALE_PARAM].value); - shape = clamp(shape, -5.0f, 5.0f) * 0.2f; - shape *= 0.99f; - - const float shapeB = (1.0f - shape) / (1.0f + shape); - const float shapeA = (4.0f * shape) / ((1.0f - shape) * (1.0f + shape)); - - float output = input * (shapeA + shapeB); - output = output / ((std::abs(input) * shapeA) + shapeB); - output *= 10.0f; - //check for bypass switch status - if (fx_bypass){ - outputs[OUTPUT].value = inputs[INPUT].value; - }else{ - outputs[OUTPUT].value = output; - } -} - -struct WaveShaperWidget : ModuleWidget -{ - WaveShaperWidget(WaveShaper *module); -}; - -WaveShaperWidget::WaveShaperWidget(WaveShaper *module) : ModuleWidget(module) { - - box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/WaveShaper.svg"))); - addChild(panel); - } - //SCREWS - addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - //PARAMS - addParam(ParamWidget::create(Vec(26, 60), module, WaveShaper::AMOUNT_PARAM, -5.0f, 5.0f, 0.0f)); - addParam(ParamWidget::create(Vec(26, 125), module, WaveShaper::SCALE_PARAM, -1.0f, 1.0f, 1.0f)); - //INPUTS - addInput(Port::create(Vec(33, 180), Port::INPUT, module, WaveShaper::AMOUNT_INPUT)); - //RANGE SWITCH - addParam(ParamWidget::create(Vec(33, 220), module, WaveShaper::RANGE_PARAM, 0.0f, 1.0f, 0.0f)); - //BYPASS SWITCH - addParam(ParamWidget::create(Vec(33, 260), module, WaveShaper::BYPASS_SWITCH , 0.0f, 1.0f, 0.0f)); - addChild(ModuleLightWidget::create>(Vec(35.2, 262), module, WaveShaper::BYPASS_LED)); - //INS/OUTS - addInput(Port::create(Vec(10, 310), Port::INPUT, module, WaveShaper::INPUT)); - addOutput(Port::create(Vec(55, 310), Port::OUTPUT, module, WaveShaper::OUTPUT)); - -} - -Model *modelWaveShaper = Model::create("AS", "WaveShaper", "Wave Shaper", WAVESHAPER_TAG); \ No newline at end of file diff --git a/repos/AS/src/stereoVUmeter.cpp b/repos/AS/src/stereoVUmeter.cpp deleted file mode 100644 index dc348cea..00000000 --- a/repos/AS/src/stereoVUmeter.cpp +++ /dev/null @@ -1,124 +0,0 @@ -///////////////////////////////////////////////////// -// Stereo VU Meter module by Alfredo Santamaria - AS - https://github.com/AScustomWorks/AS -// StereoVUmeter -// -///////////////////////////////////////////////////// - -#include "AS.hpp" -#include "dsp/vumeter.hpp" - -struct StereoVUmeter : Module { - enum ParamIds { - NUM_PARAMS - }; - - enum InputIds { - INPUT_LEFT, - INPUT_RIGHT, - NUM_INPUTS - }; - - enum OutputIds { - OUT_LEFT, - OUT_RIGHT, - NUM_OUTPUTS - }; - - enum LightIds { - METER_LIGHT_LEFT, - METER_LIGHT_RIGHT = METER_LIGHT_LEFT+15, - NUM_LIGHTS = METER_LIGHT_RIGHT + 15 - }; - - StereoVUmeter() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { - } - void step() override; - - VUMeter vuBar; - -}; - -void StereoVUmeter::step(){ - //GET VALUES AND ROUTE SIGNALS TO OUTPUTS - float signal_in_Left = inputs[INPUT_LEFT].value; - float signal_in_Right = inputs[INPUT_RIGHT].value; - outputs[OUT_LEFT].value = signal_in_Left; - outputs[OUT_RIGHT].value = signal_in_Right; - //VU METER BARS LIGHTS - vuBar.dBInterval = 3; - for (int i = 0; i < 15; i++){ - vuBar.setValue(signal_in_Left / 10.0f); - lights[METER_LIGHT_LEFT + i].setBrightnessSmooth(vuBar.getBrightness(i)); - vuBar.setValue(signal_in_Right / 10.0f); - lights[METER_LIGHT_RIGHT + i].setBrightnessSmooth(vuBar.getBrightness(i)); - } -}; - -struct StereoVUmeterWidget : ModuleWidget -{ - StereoVUmeterWidget(StereoVUmeter *module); -}; - - -StereoVUmeterWidget::StereoVUmeterWidget(StereoVUmeter *module) : ModuleWidget(module) { - - box.size = Vec(4 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); - { - SVGPanel *panel = new SVGPanel(); - panel->box.size = box.size; - panel->setBackground(SVG::load(assetPlugin(plugin, "res/StereoVUmeter.svg"))); - addChild(panel); - } - //SCREWS - SPECIAL SPACING FOR RACK WIDTH*4 - addChild(Widget::create(Vec(0, 0))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, 0))); - addChild(Widget::create(Vec(0, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - addChild(Widget::create(Vec(box.size.x - RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); - - // LEFT COLUMN LEDs - static const float leftCol = 15; - static const float offsetY = 12; - static const float startY = 66; - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 0), module, StereoVUmeter::METER_LIGHT_LEFT + 0)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 1), module, StereoVUmeter::METER_LIGHT_LEFT + 1)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 2), module, StereoVUmeter::METER_LIGHT_LEFT + 2)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 3), module, StereoVUmeter::METER_LIGHT_LEFT + 3)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 4), module, StereoVUmeter::METER_LIGHT_LEFT + 4)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 5), module, StereoVUmeter::METER_LIGHT_LEFT + 5)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 6), module, StereoVUmeter::METER_LIGHT_LEFT + 6)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 7), module, StereoVUmeter::METER_LIGHT_LEFT + 7)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 8), module, StereoVUmeter::METER_LIGHT_LEFT + 8)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 9), module, StereoVUmeter::METER_LIGHT_LEFT + 9)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 10), module, StereoVUmeter::METER_LIGHT_LEFT + 10)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 11), module, StereoVUmeter::METER_LIGHT_LEFT + 11)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 12), module, StereoVUmeter::METER_LIGHT_LEFT + 12)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 13), module, StereoVUmeter::METER_LIGHT_LEFT + 13)); - addChild(ModuleLightWidget::create>(Vec(leftCol, startY + offsetY * 14), module, StereoVUmeter::METER_LIGHT_LEFT + 14)); - //RIGHT COLUMN LEDs - static const float rightCol = 37; - - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 0), module, StereoVUmeter::METER_LIGHT_RIGHT + 0)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 1), module, StereoVUmeter::METER_LIGHT_RIGHT + 1)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 2), module, StereoVUmeter::METER_LIGHT_RIGHT + 2)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 3), module, StereoVUmeter::METER_LIGHT_RIGHT + 3)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 4), module, StereoVUmeter::METER_LIGHT_RIGHT + 4)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 5), module, StereoVUmeter::METER_LIGHT_RIGHT + 5)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 6), module, StereoVUmeter::METER_LIGHT_RIGHT + 6)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 7), module, StereoVUmeter::METER_LIGHT_RIGHT + 7)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 8), module, StereoVUmeter::METER_LIGHT_RIGHT + 8)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 9), module, StereoVUmeter::METER_LIGHT_RIGHT + 9)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 10), module, StereoVUmeter::METER_LIGHT_RIGHT + 10)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 11), module, StereoVUmeter::METER_LIGHT_RIGHT + 11)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 12), module, StereoVUmeter::METER_LIGHT_RIGHT + 12)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 13), module, StereoVUmeter::METER_LIGHT_RIGHT + 13)); - addChild(ModuleLightWidget::create>(Vec(rightCol, startY + offsetY * 14), module, StereoVUmeter::METER_LIGHT_RIGHT + 14)); - - //INPUTS - addInput(Port::create(Vec(3, 270), Port::INPUT, module, StereoVUmeter::INPUT_LEFT)); - addInput(Port::create(Vec(3, 307), Port::INPUT, module, StereoVUmeter::INPUT_RIGHT)); - //OUTPUTS - addOutput(Port::create(Vec(33,270), Port::OUTPUT, module, StereoVUmeter::OUT_LEFT)); - addOutput(Port::create(Vec(33,307), Port::OUTPUT, module, StereoVUmeter::OUT_RIGHT)); -} - -Model *modelStereoVUmeter = Model::create("AS", "StereoVUmeter", "Stereo VU meter", VISUAL_TAG, UTILITY_TAG); \ No newline at end of file