From 678e93e34134c0966121934647d554fabc0e7656 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 14 Dec 2023 20:59:06 -0500 Subject: [PATCH 01/81] Fix some RhythmExplorer poly ports --- doc/RhythmExplorer.PNG | Bin 64808 -> 67903 bytes src/RhythmExplorer.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/RhythmExplorer.PNG b/doc/RhythmExplorer.PNG index b29307f9f46ef5ce05c439ad40b3ba82fa61cb51..e1d12e51ebe7f417c7e0c694fdbbee0f2aa839c3 100644 GIT binary patch delta 8788 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 delta 5651 zcmZ8kdpMK-`+sKJGwd0aFlSPTFsB?+wiN1<_*5d57GagjDLK`%ndX#35s|}+N{N)p zh-^(lVv2M?o66}^HsnJQzlXlR>-)QY`(xL0J>(5zh3YAbvInXl>S0ztU?2G z;`?is4Z_2hWG^chZrq^q;Gh5Pd5OCV25DtB5VlGqd|9C)E@>Ld8Z zUUB41dM#>&YO#nE`HYbtYvmoKdtR01@_XX)RY=QWfx1i~hnnH}_6Sh^05rZNRWN}4 z@Oo-y+>iCLXUt488464vE!%zeN>mpiLt2H9;LKBy>!RJ31>9yHJglTvR#o{4x?cMN zz;9q%E^Y1lOe4>Zb1>@6SdZ!SJbj~}MlK!w5V)v4(|JEREpnfXIR z7yw_%Fdq}@u_t*p@EF9bV69-5ln^~ybN{v`$Aws`gX`5xZHEZ0rh@?iP-kZ+^a}(b zwv`_HdE_wuA^8o!u2LlL_EI)IK=rB(QsK8`>Z??KrR=i!SgNM2vtCt>sjnV< zIrcMfPg0TX**pgGy91L^p|@3W2HBWrttyAslIyxtN8u0j`}jaDEiI5b*LWX$Yd*Vm zwzJq7lGoaV(d7Ts{I-ump@30QQJ}4@t>h#qh+gjgIchB57TRBZ0`{AkFPIA}aqa`Q zxh)k4b!e+uEj2a%*pH_27^q>MgpR>R3pWqwN_r;`K8Y~<_P#0s6|Rk*3BD? zTiImA=`}EQ)4uAH8XO8V>OVP7G08(&rBUib+&|kG7$j2M+~i{~X}XvW+g~QAt>6?utcQ4KK*7e#ZIH$X~C*-)h>@5jg+9u`*``nF2|w4Y6}pzkeZ z4pI-*$F>CjZX$s0U*$eLyPTUVBR0;*w7*dqh7Hgi&j$6^MlTY&;t!!y3#)J3SmSu~ z=-S9E*(}e;C;M6}{bnOTJeyNqZfx@@*wM`fW0gp$ALl2?TjblE%jfm+nYvGFwb@g_23qh}txtj0k-K;8 zX5{!qTF}2V01lox4s~!5DoaeR58k$REvT!j3(CmIu&j>v#KnBb%gck<7fl5^Hh~?5 zShu6g|H(#VvH2Jx3pbl(nGq*4lfJ9L*yn937DVzbF@11|{L!nzr{)>y=)e}%`4lCy zy9cYlNUQ#HETbG#CSF-(-#*Zt7m9v|ZwMb>#mud-<>Uah5$V`S;W{lX`M>?!7Rhb7 zq#ClxwTBbn)ZO}P8v_OIKU)=zh?g#1BJS9+1BvBv0+1_k!wi-y8o{3C^yn`M45Kzm zs-K{)TB>qNKaD{bx%hbvKs3NM5cUn@tRjaaKm8JW0f?b>R z!|oN~$;z~0c-E-$SwD2(A*+0V^?nw62P{!4!IezQ1wYZdD>c*7T>PW& zl-8Ing_U5f!;HKnO%%v2L=Ct32_%}dr)n#?XU2LDYlrjY5hU$Ij;T6=Wud<>24YvW zP>haK20z;=XecEuD!cJdH*rG2XgjO#8j^o29k|DpiyUIwxrDmsGF{Es6IGaU1N|d7 z7lMnin&g>QMt>mLf~@P!?zf&On3!o(LCzJvbS^&atLu$rfXBPdn>RzXcC}Cu16LV@ z?LRN`BtQNgUW+=){YC%PP3Mo*anF`1Gh+57)nE=IL~d3mB*2UPu-S(_$F8{3#BFSA zl*mQO>Xg3zy&%>?C(h$bWZsV}-%+}W3n#2ID4L(0O&=~!T+GMU|K>yPD$_(I3cbz? z!%*Z{2H#gH4V1{*^blmJyQ!!0uFzSx(Ie;)TsawMB~5;DGpd%a{w*yad&7riU)2mMD}8(<9nCVXpwfkJra z1+_&SHzEpdj!ykik=$v0Ns6Yib^`%?gul^R9DOI z!tIiOjeEUNbde!~6$N!-ho@%rHvN^Jil z(z%s}c%aRHJdo=9f2@Kr`0&!@!#7E0Ld_HVgw1b}o~_~oOy+?S!DZI3Xi(sySbI?0 zEJJ;fJ}&9&B=*=0740f=z*AOQ+Vaq$|4qL>tWKl>PJ=qeTy&in zO(DJF7iR1;_~-{k-|_kL=P2=aC10SR1@evu?Y0>cA~)|rS}dAo_6jR}<;+%iyN40h z*UqhKr;L)TwOd@0NCtp>4mCiJRBDE(IaG7$))YvwE;)LWXYW%I)EPThVc-Hg=?@hT zH6m-IY1o>_kJmHr-#2q~r)ozUXk^`sXWUY<+pxi+4bc1xvUA6D`5i*ruN<+HL<>q9 zw}8uq{$%#npxJ40AYi=We7P&nQ)w|%c7HPUuJ&ry*?!&7N47>rc!{>6Evu|YY~EWR zlS9GVDC6wBu2?WmdUZo=D4Rc;Kbgzj8u zD3z`N9&~?z<+wuO`cE4g9MGlC1iSiWS*OSmaj@Zd5w~s%;JAi;Zc2sNDd+0y>s83n z6zk*y+c1`Bm0*Xj;mM3BBtqktC2CUHDB}GW#q&RZ<2X{;NusV?Ja?9}hWDZ{u3|N& z;Bka(%y`VjBAm|HX4UX2(D4LqjG${*lunH6~7?rzn*}(|g|!$IJkfnHQg~ zuk_U6bHO@6{FOwc2ZVbaw>06R%!sei%{p2AhG44^+a9e7!nmngigFq~TEISfqnLYo zjT?Q)h&~-!b)Pav_;#9UqJ0sinR4ueAD=2$X9R?INovA|h>uYTy_D)yUfb%&Xp2#h z#-HiXVs&z;R3bFOxbpC?)^cCnU)u#er~2b!P%qpHa256o%|hX@^rlRe@au0ZgeQF2 zF)YgdhNmzprvCus~=b^0Y!qvUH{;*&LBk z@KRGuu;#{!6jt)dCV*8a#ZkmAtj1QZ0uQ2(1qR}tMkt40*P-P!sR_GQCW7yI9UUD& zo))f?z5h3P;}{bsZ%(gxk1dFj^R5J8RbTzbJp}VGr10KjSdjl>OHrdFYp(NT9w*w0Z{R+;sflyc=-M$B7ww!`oM1~D&6m$c2?#pvG%)#@>rIIb%sBfT2XASBiLUeh%Imft^?8IAP)`WzDBg zpXU9uom`#FP-4az`UwiZ!ve?sWWI==Dx>nr^ zjXi9-tQ?$SUn)RNsc%Ag-g&wGFVYp&5%b`%FoxT?OWBu>P}hWV)cX!D_J!sp@g?qT zKEjC+qtI)By*}=AWNtqO~J%*d{Z^_eAbOh(){c$%d$b`U*O`%37uOJ43 z?#)PVdVXl;RXF;x-uTzs5=!BoDY_PmU%#M{J6n%My)L zDRYlQusMBj6=m{We*QP;^{y4r#Dmwuur|su3O1u89)qTJTdu+OEqX;{sAKA?8y@o} z%BkD6lGl?r{ZRel_IwuVydr46k>rygODXydA-45%veb+TGOd#M_%tz))i*ebso zxjP4o|9!N@zh=2ZP@4L7woctN_p`FYxw$P8-xbKUH>c*{pv7d<0rdU-UeeE7|I)A+Cdiq0cQCVfi{TGkl8Ox@e>6(_T& z8IGNw!`2n4JzS-9P=@BQ&RSU+ZE7kXsi==8aFGBEJ7iW>lUsiOD3^IbbGPw%rmDX- zbcZZBHHP-+x*)*Em39-G1|^G=h5yoIK|dhnZS*L5I^|Kr$znnwPs+~H)k>}+Hrx8JG|G$Xesi3BZM+(hWiXUvO)qCt%Pd5Io>^wCw? zrC%faj((m%PO@wy`7oX5l8WDowPnTihF@}oxAYq}!6aEHN2(xxJV zmXthg_>gB{;%6IE$Qb84gV_qVRL=d3v6$=byngj1Wq)0pYpTpHf)Ijw@J^TO%9-7kwbtUBn9q;*1d2uo4aq0dy+P#E#YP@ED)bs z?J=7h8q`d!>Rd)7FqUgd6>k)Gu0u9ru0w)X8_q{m`crZLau4tH`&gMP%E_6fJ>Qt; z?Yx*!t`6e8()HqzrSUovBTG8t#77el6rRq#@ChbWet+K~QQ!mz!Ilq}^6%sbtduI| z4;GIgYr(_Pa}l9b>dfyHhGOK7wGwk*)`Gn~#1{SNY*r;Omf&=@##j;-b3$M&9LR?n zG`!ue3|Eu zU0Hx96Br{u@ho`70K~l-PP7SV_n#@d*(!0{6^ABFR^YZ{VX7e`^vJsjH2357;W+Qc3B0J>3U12;KmLlvE|Jo2nD z5uR<5JgUkSrJrAmewp9~#iEu&+aYcYM+LFCv!gG&Hn9#-&Oz!5H_d~0f_c35cCPe+ znt5I0B+^!HQp0ka0bb8atWIU}U20bBsV#J-mKBm}ZOT zDUxWK>JPOGLwQf}H zeG)tsPTZu~$L#JF){HMK@Iv7WKUAprp854&SIlBT-*8vB?E)i#7X;vuwzc4R(g0Ad z{_U}g=&H4(1SV-o2`!<2pk?N$N~6dywW5x)QM|B_7@_l7>;PRbJ>=Mho<41HZqCKs zG!(l~{z&t#=7DSJdwYwc{E(F=q%Z94FHQc!64xDXhc;!mRRgxb}IhdKTimov* zXQ$DeKIq_b-Ae177y3IJEtc|3(&2K>zN}pcXo@ZtIV`(Vec(x,y), module, RhythmExplorer::CLOCK_INPUT)); x += dx; - addInput(createInputCentered(Vec(x,y), module, RhythmExplorer::RNG_OVERRIDE_INPUT)); + addInput(createInputCentered(Vec(x,y), module, RhythmExplorer::RNG_OVERRIDE_INPUT)); x += dx; addInput(createInputCentered(Vec(x,y), module, RhythmExplorer::SEED_INPUT)); x += dx; @@ -850,11 +850,11 @@ struct RhythmExplorerWidget : VenomWidget { x += dx; addInput(createInputCentered(Vec(x,y), module, RhythmExplorer::RUN_GATE_INPUT)); x += dx * 1.5f; - addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::GATE_OR_OUTPUT)); + addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::GATE_OR_OUTPUT)); x += dx; - addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::GATE_XOR_ODD_OUTPUT)); + addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::GATE_XOR_ODD_OUTPUT)); x += dx; - addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::GATE_XOR_ONE_OUTPUT)); + addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::GATE_XOR_ONE_OUTPUT)); x += dx; addOutput(createOutputCentered(Vec(x,y), module, RhythmExplorer::SEED_OUTPUT)); x += dx; From 731894fa0f7877fc53e208c1ae5551f75d76c44b Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 26 Dec 2023 22:43:44 -0500 Subject: [PATCH 02/81] Add Logic module --- plugin.json | 13 +- res/Coal/Logic_Coal.svg | 966 ++++++++++++++++++++++++++++++++++++ res/Danger/Logic_Danger.svg | 966 ++++++++++++++++++++++++++++++++++++ res/Earth/Logic_Earth.svg | 966 ++++++++++++++++++++++++++++++++++++ res/Ivory/Logic_Ivory.svg | 942 +++++++++++++++++++++++++++++++++++ res/op_AND.svg | 114 +++++ res/op_NAND.svg | 116 +++++ res/op_NOR.svg | 114 +++++ res/op_OR.svg | 112 +++++ res/op_SUM.svg | 114 +++++ res/op_XNOR_1.svg | 123 +++++ res/op_XNOR_ODD.svg | 127 +++++ res/op_XOR_1.svg | 121 +++++ res/op_XOR_ODD.svg | 125 +++++ res/op_down.svg | 110 ++++ res/out_1.svg | 121 +++++ res/out_2.svg | 121 +++++ res/out_3.svg | 121 +++++ res/out_4.svg | 121 +++++ res/out_5.svg | 121 +++++ res/out_6.svg | 121 +++++ res/out_7.svg | 121 +++++ res/out_8.svg | 121 +++++ res/out_9.svg | 121 +++++ res/out_none.svg | 111 +++++ src/Filter.hpp | 8 +- src/Logic.cpp | 373 ++++++++++++++ src/plugin.cpp | 1 + src/plugin.hpp | 1 + 29 files changed, 6607 insertions(+), 5 deletions(-) create mode 100644 res/Coal/Logic_Coal.svg create mode 100644 res/Danger/Logic_Danger.svg create mode 100644 res/Earth/Logic_Earth.svg create mode 100644 res/Ivory/Logic_Ivory.svg create mode 100644 res/op_AND.svg create mode 100644 res/op_NAND.svg create mode 100644 res/op_NOR.svg create mode 100644 res/op_OR.svg create mode 100644 res/op_SUM.svg create mode 100644 res/op_XNOR_1.svg create mode 100644 res/op_XNOR_ODD.svg create mode 100644 res/op_XOR_1.svg create mode 100644 res/op_XOR_ODD.svg create mode 100644 res/op_down.svg create mode 100644 res/out_1.svg create mode 100644 res/out_2.svg create mode 100644 res/out_3.svg create mode 100644 res/out_4.svg create mode 100644 res/out_5.svg create mode 100644 res/out_6.svg create mode 100644 res/out_7.svg create mode 100644 res/out_8.svg create mode 100644 res/out_9.svg create mode 100644 res/out_none.svg create mode 100644 src/Logic.cpp diff --git a/plugin.json b/plugin.json index 859e6f1..a4e46ca 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "slug": "Venom", "name": "Venom", - "version": "2.5.0", + "version": "2.6.0dev", "license": "GPL-3.0-or-later", "brand": "", "author": "David Benham", @@ -79,6 +79,17 @@ "Expander" ] }, + { + "slug": "Logic", + "name": "Logic", + "description": "Flexible logic gate processor suitable for both CV and audio applications", + "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#logic", + "tags": [ + "Logic", + "Polyphonic", + "Utility" + ] + }, { "slug": "Mix4", "name": "Mix 4", diff --git a/res/Coal/Logic_Coal.svg b/res/Coal/Logic_Coal.svg new file mode 100644 index 0000000..dce5bcd --- /dev/null +++ b/res/Coal/Logic_Coal.svg @@ -0,0 +1,966 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/Logic_Danger.svg b/res/Danger/Logic_Danger.svg new file mode 100644 index 0000000..d83ed98 --- /dev/null +++ b/res/Danger/Logic_Danger.svg @@ -0,0 +1,966 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/Logic_Earth.svg b/res/Earth/Logic_Earth.svg new file mode 100644 index 0000000..fab61c6 --- /dev/null +++ b/res/Earth/Logic_Earth.svg @@ -0,0 +1,966 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/Logic_Ivory.svg b/res/Ivory/Logic_Ivory.svg new file mode 100644 index 0000000..35cf59b --- /dev/null +++ b/res/Ivory/Logic_Ivory.svg @@ -0,0 +1,942 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_AND.svg b/res/op_AND.svg new file mode 100644 index 0000000..2b66e10 --- /dev/null +++ b/res/op_AND.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_NAND.svg b/res/op_NAND.svg new file mode 100644 index 0000000..6525cb4 --- /dev/null +++ b/res/op_NAND.svg @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_NOR.svg b/res/op_NOR.svg new file mode 100644 index 0000000..94897dc --- /dev/null +++ b/res/op_NOR.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_OR.svg b/res/op_OR.svg new file mode 100644 index 0000000..fc7e5a7 --- /dev/null +++ b/res/op_OR.svg @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_SUM.svg b/res/op_SUM.svg new file mode 100644 index 0000000..9485de2 --- /dev/null +++ b/res/op_SUM.svg @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_XNOR_1.svg b/res/op_XNOR_1.svg new file mode 100644 index 0000000..c3daeb8 --- /dev/null +++ b/res/op_XNOR_1.svg @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_XNOR_ODD.svg b/res/op_XNOR_ODD.svg new file mode 100644 index 0000000..47049f7 --- /dev/null +++ b/res/op_XNOR_ODD.svg @@ -0,0 +1,127 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_XOR_1.svg b/res/op_XOR_1.svg new file mode 100644 index 0000000..dff42b4 --- /dev/null +++ b/res/op_XOR_1.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_XOR_ODD.svg b/res/op_XOR_ODD.svg new file mode 100644 index 0000000..e1489eb --- /dev/null +++ b/res/op_XOR_ODD.svg @@ -0,0 +1,125 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/op_down.svg b/res/op_down.svg new file mode 100644 index 0000000..0af00ce --- /dev/null +++ b/res/op_down.svg @@ -0,0 +1,110 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_1.svg b/res/out_1.svg new file mode 100644 index 0000000..c8cc941 --- /dev/null +++ b/res/out_1.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_2.svg b/res/out_2.svg new file mode 100644 index 0000000..e87432a --- /dev/null +++ b/res/out_2.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_3.svg b/res/out_3.svg new file mode 100644 index 0000000..250a479 --- /dev/null +++ b/res/out_3.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_4.svg b/res/out_4.svg new file mode 100644 index 0000000..8d9bbdf --- /dev/null +++ b/res/out_4.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_5.svg b/res/out_5.svg new file mode 100644 index 0000000..3e7e6b9 --- /dev/null +++ b/res/out_5.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_6.svg b/res/out_6.svg new file mode 100644 index 0000000..74b5635 --- /dev/null +++ b/res/out_6.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_7.svg b/res/out_7.svg new file mode 100644 index 0000000..8786245 --- /dev/null +++ b/res/out_7.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_8.svg b/res/out_8.svg new file mode 100644 index 0000000..90fc4aa --- /dev/null +++ b/res/out_8.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_9.svg b/res/out_9.svg new file mode 100644 index 0000000..5a39d4a --- /dev/null +++ b/res/out_9.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/res/out_none.svg b/res/out_none.svg new file mode 100644 index 0000000..7ae3dfd --- /dev/null +++ b/res/out_none.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/src/Filter.hpp b/src/Filter.hpp index ac60601..971373b 100644 --- a/src/Filter.hpp +++ b/src/Filter.hpp @@ -48,10 +48,10 @@ class OversampleFilter_4 { class DCBlockFilter_4 { public: void init(float sampleRate){ - f[0].setCutoffFreq(10.f/sampleRate); - f[1].setCutoffFreq(10.f/sampleRate); - f[2].setCutoffFreq(10.f/sampleRate); - f[3].setCutoffFreq(10.f/sampleRate); + f[0].setCutoffFreq(2.f/sampleRate); + f[1].setCutoffFreq(2.f/sampleRate); + f[2].setCutoffFreq(2.f/sampleRate); + f[3].setCutoffFreq(2.f/sampleRate); } void reset(){ f[0].reset(); diff --git a/src/Logic.cpp b/src/Logic.cpp new file mode 100644 index 0000000..b786377 --- /dev/null +++ b/src/Logic.cpp @@ -0,0 +1,373 @@ +// Venom Modules (c) 2023 Dave Benham +// Licensed under GNU GPLv3 + +#include "Filter.hpp" +#include "plugin.hpp" + +#define CHANNEL_COUNT 9 +#define MAXOVER 32 +#define LIGHT_OFF 0.02f +#define LIGHT_DIM 0.1f +#define LIGHT_FADE 5e-6f + +struct Logic : VenomModule { + enum ParamId { + MERGE_PARAM, + OVER_PARAM, + RANGE_PARAM, + DC_PARAM, + HIGH_PARAM, + LOW_PARAM, + ENUMS(RECYCLE_PARAM, CHANNEL_COUNT), + ENUMS(OP_PARAM, CHANNEL_COUNT), + PARAMS_LEN + }; + enum InputId { + HIGH_INPUT, + LOW_INPUT, + ENUMS(A_INPUT, CHANNEL_COUNT), + ENUMS(B_INPUT, CHANNEL_COUNT), + INPUTS_LEN + }; + enum OutputId { + ENUMS(GATE_OUTPUT, CHANNEL_COUNT), + OUTPUTS_LEN + }; + enum LightId { + LIGHTS_LEN + }; + + enum Ops { + OP_NONE, + OP_AND, + OP_OR, + OP_XOR_1, + OP_XOR_ODD, + OP_NAND, + OP_NOR, + OP_XNOR_1, + OP_XNOR_ODD + }; + + int oversample = -1; + std::vector oversampleValues = {1,2,4,8,16,32}; + std::vector highValues = {1.f, 5.f, 10.f, 1.f, 5.f, 10.f}; + std::vector lowValues = {0.f, 0.f, 0.f, -1.f, -5.f, -10.f}; + OversampleFilter highUpSample, lowUpSample; + OversampleFilter_4 aUpSample[CHANNEL_COUNT][4], bUpSample[CHANNEL_COUNT][4], outDownSample[CHANNEL_COUNT][4]; + DCBlockFilter_4 dcBlock[CHANNEL_COUNT][4]; + simd::int32_4 aState[CHANNEL_COUNT][4]{}, bState[CHANNEL_COUNT][4]{}; + + Logic() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + + configSwitch(MERGE_PARAM, 0.f, 1.f, 0.f, "Merge polyphony", {"Off", "On"}); + configSwitch(RANGE_PARAM, 0.f, 5.f, 2.f, "Output range", {"0-1", "0-5", "0-10", "+/- 1", "+/- 5", "+/- 10"}); + configSwitch(OVER_PARAM, 0.f, 5.f, 0.f, "Oversampling", {"Off", "x2", "x4", "x8", "x16", "x32"}); + configSwitch(DC_PARAM, 0.f, 1.f, 0.f, "DC block", {"Off", "On"}); + + configParam(HIGH_PARAM, -10.f, 10.f, 2.f, "Rise threshold", "V"); + configInput(HIGH_INPUT,"Rise threshold"); + configParam(LOW_PARAM, -10.f, 10.f, 0.1f, "Fall threshold", "V"); + configInput(LOW_INPUT,"Fall threshold"); + + std::vector recycleLabels = {"None"}; + std::vector opLabels = { + "Defer", + "AND", + "OR", + "XOR 1", + "XOR ODD", + "NAND", + "NOR", + "XNOR 1", + "XNOR ODD" + }; + for(int i = 0; i < CHANNEL_COUNT; i++){ + std::string i_s = std::to_string(i+1); + configInput(A_INPUT+i, "Gate A " + i_s); + configInput(B_INPUT+i, "Gate B " + i_s); + configSwitch(RECYCLE_PARAM+i, 0, i, 0, "Reuse for input " + i_s, recycleLabels); + configSwitch(OP_PARAM+i, 0, 8, 0, "Logic operation " + i_s, opLabels); + configOutput(GATE_OUTPUT + i, "Gate " + i_s); + recycleLabels.push_back("Gate " + i_s + " output"); + } + initDCBlock(); + } + + void initDCBlock(){ + float sampleTime = settings::sampleRate; + for (int c=0; c(params[RANGE_PARAM].getValue()); + bool dc = params[DC_PARAM].getValue(); + for (int c=CHANNEL_COUNT-1; c>=0; c--) { + if (params[OP_PARAM+c].getValue()){ + current = c; + if (!endChannel) endChannel = c+1; + } + channelMap[c] = current; + } + for (int c=0; c1) { + highThresh = highUpSample.process(o>1 ? 0.f : highThresh * oversample); + lowThresh = lowUpSample.process(o>1 ? 0.f : lowThresh * oversample); + } + int32_4 outSum[endChannel][4]{}; + for (int c=0; c0){ + if (o==0) outCnt[channelMap[c]] += (merge ? aChannels[c] : 1); + for (int p=0, pi=0; p < (merge ? aChannels[c] : polyCount[channelMap[c]]); p+=4, pi++) { + float_4 in=0.f; + if (o==0){ + in = inputs[A_INPUT+c].getPolyVoltageSimd(p); + } + if (oversample>1) { + in = aUpSample[c][pi].process(o ? float_4::zero() : in * oversample); + } + aState[c][pi] = static_cast(simd::ifelse(in>float_4(highThresh), 1.f, aState[c][pi])); + aState[c][pi] = static_cast(simd::ifelse(in<=float_4(lowThresh), 0.f, aState[c][pi])); + if (merge){ + for (int i=p; i0){ + if (o==0) outCnt[channelMap[c]] += (merge ? bChannels[c] : 1); + for (int p=0, pi=0; p < (merge ? bChannels[c] : polyCount[channelMap[c]]); p+=4, pi++) { + float_4 in=0.f; + if (o==0){ + in = inputs[B_INPUT+c].getPolyVoltageSimd(p); + } + if (oversample>1) { + in = bUpSample[c][pi].process(o ? float_4::zero() : in * oversample); + } + bState[c][pi] = static_cast(simd::ifelse(in>float_4(highThresh), 1.f, bState[c][pi])); + bState[c][pi] = static_cast(simd::ifelse(in<=float_4(lowThresh), 0.f, bState[c][pi])); + if (merge){ + for (int i=p; i=0) { + if (o==0) outCnt[channelMap[c]]++; + if (merge) { + outSum[channelMap[c]][0][0] += outState[recycle][0][0]; + } else { + for (int p=0, pi=0; p(params[OP_PARAM+c].getValue()); + for (int p=0, pi=0; p(simd::ifelse(outSum[c][pi]==outCnt[c], 1.f, 0.f)); + break; + case OP_OR: + outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]>0.f, 1.f, 0.f)); + break; + case OP_XOR_1: + outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]==1.f, 1.f, 0.f)); + break; + case OP_XOR_ODD: + outState[c][pi] = static_cast(simd::ifelse((outSum[c][pi]&1)==1, 1.f, 0.f)); + break; + case OP_NAND: + outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]!=outCnt[c], 1.f, 0.f)); + break; + case OP_NOR: + outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]==0.f, 1.f, 0.f)); + break; + case OP_XNOR_1: + outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]!=1.f, 1.f, 0.f)); + break; + case OP_XNOR_ODD: + outState[c][pi] = static_cast(simd::ifelse((outSum[c][pi]&1)==0, 1.f, 0.f)); + break; + } + outVal[c][pi] = simd::ifelse(outState[c][pi]==0, lowValues[range], highValues[range]); + if (oversample>1) { + outVal[c][pi] = outDownSample[c][pi].process(outVal[c][pi]); + } + } + } + } + } + for (int c=0; c(Vec(47.549,28.210), module, Logic::MERGE_PARAM)); + addParam(createLockableParam(Vec(70.216,28.210), module, Logic::OVER_PARAM)); + addParam(createLockableParam(Vec(92.883,28.210), module, Logic::RANGE_PARAM)); + addParam(createLockableParam(Vec(115.549,28.210), module, Logic::DC_PARAM)); + + addParam(createLockableParamCentered(Vec(35.718,61.5), module, Logic::HIGH_PARAM)); + addInput(createInputCentered(Vec(66.265,61.5), module, Logic::HIGH_INPUT)); + addParam(createLockableParamCentered(Vec(98.582,61.5), module, Logic::LOW_PARAM)); + addInput(createInputCentered(Vec(129.198,61.5), module, Logic::LOW_INPUT)); + + float y = 101.5f; + for(int i = 0; i < CHANNEL_COUNT; i++, y += 30.0f){ + addInput(createInputCentered(Vec(20.718,y), module, Logic::A_INPUT+i)); + addInput(createInputCentered(Vec(51.109,y), module, Logic::B_INPUT+i)); + addParam(createParamCentered(Vec(82.000,y), module, Logic::RECYCLE_PARAM+i)); + addParam(createParamCentered(Vec(113.391,y), module, Logic::OP_PARAM+i)); + addOutput(createOutputCentered(Vec(144.282,y), module, Logic::GATE_OUTPUT+i)); + } + } + +}; + + +Model* modelLogic = createModel("Logic"); diff --git a/src/plugin.cpp b/src/plugin.cpp index 211e502..85fc2bd 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -80,6 +80,7 @@ void init(Plugin* p) { p->addModel(modelHQ); p->addModel(modelLinearBeats); p->addModel(modelLinearBeatsExpander); + p->addModel(modelLogic); p->addModel(modelMix4); p->addModel(modelMix4Stereo); p->addModel(modelMixFade); diff --git a/src/plugin.hpp b/src/plugin.hpp index 74295c4..a78c971 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -16,6 +16,7 @@ extern Model* modelCloneMerge; extern Model* modelHQ; extern Model* modelLinearBeats; extern Model* modelLinearBeatsExpander; +extern Model* modelLogic; extern Model* modelMix4; extern Model* modelMix4Stereo; extern Model* modelMixFade; From 83aad4062e7f533974a8d27757b027030a8d9a40 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 27 Dec 2023 09:20:35 -0500 Subject: [PATCH 03/81] replace all int32_4 with float_4 --- src/Logic.cpp | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) diff --git a/src/Logic.cpp b/src/Logic.cpp index b786377..f718f70 100644 --- a/src/Logic.cpp +++ b/src/Logic.cpp @@ -5,7 +5,6 @@ #include "plugin.hpp" #define CHANNEL_COUNT 9 -#define MAXOVER 32 #define LIGHT_OFF 0.02f #define LIGHT_DIM 0.1f #define LIGHT_FADE 5e-6f @@ -56,7 +55,7 @@ struct Logic : VenomModule { OversampleFilter highUpSample, lowUpSample; OversampleFilter_4 aUpSample[CHANNEL_COUNT][4], bUpSample[CHANNEL_COUNT][4], outDownSample[CHANNEL_COUNT][4]; DCBlockFilter_4 dcBlock[CHANNEL_COUNT][4]; - simd::int32_4 aState[CHANNEL_COUNT][4]{}, bState[CHANNEL_COUNT][4]{}; + simd::float_4 aState[CHANNEL_COUNT][4]{}, bState[CHANNEL_COUNT][4]{}; Logic() { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); @@ -159,14 +158,13 @@ struct Logic : VenomModule { highThresh = lowThresh; lowThresh = temp; } - int32_4 outCnt[endChannel]{}, outState[endChannel][4]{}; - float_4 outVal[endChannel][4]{}; + float_4 outCnt[endChannel]{}, outState[endChannel][4]{}, outVal[endChannel][4]{}; for (int o=0; o1) { highThresh = highUpSample.process(o>1 ? 0.f : highThresh * oversample); lowThresh = lowUpSample.process(o>1 ? 0.f : lowThresh * oversample); } - int32_4 outSum[endChannel][4]{}; + float_4 outSum[endChannel][4]{}; for (int c=0; c0){ if (o==0) outCnt[channelMap[c]] += (merge ? aChannels[c] : 1); @@ -178,8 +176,8 @@ struct Logic : VenomModule { if (oversample>1) { in = aUpSample[c][pi].process(o ? float_4::zero() : in * oversample); } - aState[c][pi] = static_cast(simd::ifelse(in>float_4(highThresh), 1.f, aState[c][pi])); - aState[c][pi] = static_cast(simd::ifelse(in<=float_4(lowThresh), 0.f, aState[c][pi])); + aState[c][pi] = simd::ifelse(in>float_4(highThresh), 1.f, aState[c][pi]); + aState[c][pi] = simd::ifelse(in<=float_4(lowThresh), 0.f, aState[c][pi]); if (merge){ for (int i=p; i1) { in = bUpSample[c][pi].process(o ? float_4::zero() : in * oversample); } - bState[c][pi] = static_cast(simd::ifelse(in>float_4(highThresh), 1.f, bState[c][pi])); - bState[c][pi] = static_cast(simd::ifelse(in<=float_4(lowThresh), 0.f, bState[c][pi])); + bState[c][pi] = simd::ifelse(in>float_4(highThresh), 1.f, bState[c][pi]); + bState[c][pi] = simd::ifelse(in<=float_4(lowThresh), 0.f, bState[c][pi]); if (merge){ for (int i=p; i(simd::ifelse(outSum[c][pi]==outCnt[c], 1.f, 0.f)); + outState[c][pi] = simd::ifelse(outSum[c][pi]==outCnt[c], 1.f, 0.f); break; case OP_OR: - outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]>0.f, 1.f, 0.f)); + outState[c][pi] = simd::ifelse(outSum[c][pi]>0.f, 1.f, 0.f); break; case OP_XOR_1: - outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]==1.f, 1.f, 0.f)); + outState[c][pi] = simd::ifelse(outSum[c][pi]==1.f, 1.f, 0.f); break; case OP_XOR_ODD: - outState[c][pi] = static_cast(simd::ifelse((outSum[c][pi]&1)==1, 1.f, 0.f)); + outState[c][pi] = simd::ifelse((static_cast(outSum[c][pi])&1)==1, 1.f, 0.f); break; case OP_NAND: - outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]!=outCnt[c], 1.f, 0.f)); + outState[c][pi] = simd::ifelse(outSum[c][pi]!=outCnt[c], 1.f, 0.f); break; case OP_NOR: - outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]==0.f, 1.f, 0.f)); + outState[c][pi] = simd::ifelse(outSum[c][pi]==0.f, 1.f, 0.f); break; case OP_XNOR_1: - outState[c][pi] = static_cast(simd::ifelse(outSum[c][pi]!=1.f, 1.f, 0.f)); + outState[c][pi] = simd::ifelse(outSum[c][pi]!=1.f, 1.f, 0.f); break; case OP_XNOR_ODD: - outState[c][pi] = static_cast(simd::ifelse((outSum[c][pi]&1)==0, 1.f, 0.f)); + outState[c][pi] = simd::ifelse((static_cast(outSum[c][pi])&1)==0, 1.f, 0.f); break; } outVal[c][pi] = simd::ifelse(outState[c][pi]==0, lowValues[range], highValues[range]); From d06f9940eec94bdc718c6a7db98170e9d29c2e4b Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 27 Dec 2023 13:06:19 -0500 Subject: [PATCH 04/81] remove dynamic arrays because not supported on mac --- src/Logic.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Logic.cpp b/src/Logic.cpp index f718f70..6161a43 100644 --- a/src/Logic.cpp +++ b/src/Logic.cpp @@ -158,13 +158,13 @@ struct Logic : VenomModule { highThresh = lowThresh; lowThresh = temp; } - float_4 outCnt[endChannel]{}, outState[endChannel][4]{}, outVal[endChannel][4]{}; + float_4 outCnt[CHANNEL_COUNT]{}, outState[CHANNEL_COUNT][4]{}, outVal[CHANNEL_COUNT][4]{}; for (int o=0; o1) { highThresh = highUpSample.process(o>1 ? 0.f : highThresh * oversample); lowThresh = lowUpSample.process(o>1 ? 0.f : lowThresh * oversample); } - float_4 outSum[endChannel][4]{}; + float_4 outSum[CHANNEL_COUNT][4]{}; for (int c=0; c0){ if (o==0) outCnt[channelMap[c]] += (merge ? aChannels[c] : 1); From 7aee36c094875e208005974194caa52df3156454 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 28 Dec 2023 21:35:23 -0500 Subject: [PATCH 05/81] Add Logic module and some doc stubs --- README.md | 26 +- doc/Logic.png | Bin 0 -> 28389 bytes doc/NORS_IQIntervals.png | Bin 0 -> 13228 bytes plugin.json | 10 + res/Coal/NORS_IQIntervals_Coal.svg | 480 +++++++++++++++++++++++++ res/Danger/NORS_IQIntervals_Danger.svg | 480 +++++++++++++++++++++++++ res/Earth/NORS_IQIntervals_Earth.svg | 480 +++++++++++++++++++++++++ res/Ivory/NORS_IQIntervals_Ivory.svg | 427 ++++++++++++++++++++++ src/NORS-IQIntervals.cpp | 102 ++++++ src/plugin.cpp | 1 + src/plugin.hpp | 1 + 11 files changed, 1999 insertions(+), 8 deletions(-) create mode 100644 doc/Logic.png create mode 100644 doc/NORS_IQIntervals.png create mode 100644 res/Coal/NORS_IQIntervals_Coal.svg create mode 100644 res/Danger/NORS_IQIntervals_Danger.svg create mode 100644 res/Earth/NORS_IQIntervals_Earth.svg create mode 100644 res/Ivory/NORS_IQIntervals_Ivory.svg create mode 100644 src/NORS-IQIntervals.cpp diff --git a/README.md b/README.md index 292b377..6a47629 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,17 @@ Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and li [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) [Acknowledgments](#acknowledgments) -|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)|[MIX 4](#mix-4)|[MIX 4
STEREO](#mix-4-stereo)| -|----|----|----|----|----|----|----|----| -|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)| +|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)|[LOGIC](#logic)|[MIX 4](#mix-4)|[MIX 4
STEREO](#mix-4-stereo)| +|----|----|----|----|----|----|----|----|----| +|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)|![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)| -|[MIX EXPANDERS](#mix-expanders)|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| +|[MIX EXPANDERS](#mix-expanders)|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ INTERVALS](#norsiq-intervals)|[POLY
CLONE](#poly-clone)| |----|----|----|----| -|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)| +|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Intervals module image](doc/NORS_IQIntervals.png)|![Poly Clone module image](doc/PolyClone.png)| -|[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| -|----|----|----|----| -|![RECURSE module image](doc/Recurse.PNG)|![RECURSE STEREO module image](doc/RecurseStereo.PNG)|![Reformation module image](doc/Reformation.PNG)|![Rhthm Explorer module image](doc/RhythmExplorer.PNG)| +|[POLY
UNISON](#poly-unison)|[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| +|----|----|----|----|----| +|![Poly Unison module image](doc/PolyUnison.PNG)|![RECURSE module image](doc/Recurse.PNG)|![RECURSE STEREO module image](doc/RecurseStereo.PNG)|![Reformation module image](doc/Reformation.PNG)|![Rhthm Explorer module image](doc/RhythmExplorer.PNG)| |[SHAPED
VCA](#shaped-vca)|[VCA MIX 4](#vca-mix-4)|[VCA MIX 4 STEREO](#vca-mix-4-stereo)|[VENOM
BLANK](#venom-blank)|[WINCOMP](#wincomp)| |----|----|----|----|----| @@ -312,6 +312,11 @@ An expander is ignored if it is bypassed. [Return to Table Of Contents](#venom) +## LOGIC +![Logic module image](doc/Logic.png) + +[Return to Table Of Contents](#venom) + ## MIX 4 ![Mix 4 module image](doc/Mix4.png) A compact polyphonic mixer, attenuator, inverter, amplifier, and/or offset suitable for both audio and CV. @@ -691,6 +696,11 @@ If the module is bypassed then the Trig input is passed unchanged to the Trig ou [Return to Table Of Contents](#venom) +## NORSIQ INTERVALS +![NORSIQ Intervals module image](doc/NORSE_IQIntervals.png) + +[Return to Table Of Contents](#venom) + ## POLY CLONE ![Poly Clone module image](doc/PolyClone.png) Poly Clone replicates each channel from a polyphonic input and merges the result into a single polyphonic output. It is especially useful with the Recurse modules when using polyphonic inputs. Poly Clone provides a convenient way to replicate channels in polyphonnic CV inputs to match the recursion count. diff --git a/doc/Logic.png b/doc/Logic.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f161ee654e6b340432cd699dcf4387d9b145a7 GIT binary patch literal 28389 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 vTndZYH} zux3v$GL=wy-|e2VO4;d@a#2uJw^hT{1zXLQQel=(93cu`mz_0);P zZ|vhL@thKQfjezUX#+}Xh9^>%fxd)}KJSme6Mp+tIRj`>ATHeE|wM}mcDc``VJ*tGBzCI4sdCAq+ zzq*#&#A|BL93oN{AbBU&4>y-%ImYI>Ls!lc*u>+m>55C?p>KH3uDP_KpG2<9dvDCQ zabv>Dg$teB;4^*d$i9eDDoUmG(Q*!S z`ae{|aZs6R5hb=4tuS%501)_FV2M-&4 zSxJqwDvr&X9aaG|UHNU56>4V7eI@DQhrw-+4|@M6=JG+)1!f(NyAjjwBN>b)s#qBe%Br$Mo6hqsgh8z7Md zk(tz$Vl}pdT_*34;RcM$@Iv=qw3gr}yb0K6Y)MKi01Mpc}=!6t= zC)Q)KvPLprrqbS;r4Qv53b5b$uD+AENV^bTao1*DVV&N4XqAdLov@m$n-zIP#yPpP zv{EZxEnLYpD$^7>aAR4Mbq<;IIFt|9t*@hNEoMsjHkwyr;6*6xoEB-jIFYtDI;C4? z*W+bpCrKsOVFzfHe~z#+J^%?WQ4dFi2U&34*4>F?dF(oBgG#%k~*Zqd_~L%f)t_mY(7~~ z&@XC3^RC_5cP@yjcay$c;_XRp?&1kmPT>Y6!+flm~wTm>l zd!K!#ASJofnpsLk1=hBgGaa=?^xx;(aP!V_eXuQ^3Lm0* YXvBDHgzN~|z7Aox!^x)9+BfmP0mz2g)Bpeg literal 0 HcmV?d00001 diff --git a/doc/NORS_IQIntervals.png b/doc/NORS_IQIntervals.png new file mode 100644 index 0000000000000000000000000000000000000000..253dbbb71da9932614f0f1c56d3309071c2a9630 GIT binary patch literal 13228 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 a?o?m2@*Jza!~GWyV0+Zz$cw}H)c*r{b@WUC literal 0 HcmV?d00001 diff --git a/plugin.json b/plugin.json index a4e46ca..46c887f 100644 --- a/plugin.json +++ b/plugin.json @@ -215,6 +215,16 @@ "Polyphonic" ] }, + { + "slug": "NORS_IQIntervals", + "name": "NORS_IQ Interval Generator", + "description": "Convert a polyphonic chord into CV to generate a scale with the Non-Octave_Repeating Scale Intervallic Quantizer", + "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#nors_iq_interval_generator", + "tags": [ + "Quantizer", + "Polyphonic" + ] + }, { "slug": "PolyClone", "name": "Poly Clone", diff --git a/res/Coal/NORS_IQIntervals_Coal.svg b/res/Coal/NORS_IQIntervals_Coal.svg new file mode 100644 index 0000000..3a1b91b --- /dev/null +++ b/res/Coal/NORS_IQIntervals_Coal.svg @@ -0,0 +1,480 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/NORS_IQIntervals_Danger.svg b/res/Danger/NORS_IQIntervals_Danger.svg new file mode 100644 index 0000000..e2a7e93 --- /dev/null +++ b/res/Danger/NORS_IQIntervals_Danger.svg @@ -0,0 +1,480 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/NORS_IQIntervals_Earth.svg b/res/Earth/NORS_IQIntervals_Earth.svg new file mode 100644 index 0000000..69cfc02 --- /dev/null +++ b/res/Earth/NORS_IQIntervals_Earth.svg @@ -0,0 +1,480 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/NORS_IQIntervals_Ivory.svg b/res/Ivory/NORS_IQIntervals_Ivory.svg new file mode 100644 index 0000000..3bed40b --- /dev/null +++ b/res/Ivory/NORS_IQIntervals_Ivory.svg @@ -0,0 +1,427 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/NORS-IQIntervals.cpp b/src/NORS-IQIntervals.cpp new file mode 100644 index 0000000..4d3a8b9 --- /dev/null +++ b/src/NORS-IQIntervals.cpp @@ -0,0 +1,102 @@ +// Venom Modules (c) 2023 Dave Benham +// Licensed under GNU GPLv3 + +#include "plugin.hpp" + +#define LIGHT_ON 1.f +#define LIGHT_OFF 0.02f + +struct NORS_IQIntervals : VenomModule { + + enum ParamId { + FOLD_PARAM, + PARAMS_LEN + }; + enum InputId { + TRIG_INPUT, + CHORD_INPUT, + INPUTS_LEN + }; + enum OutputId { + TRIG_OUTPUT, + ROOT_OUTPUT, + LENGTH_OUTPUT, + INTERVALS_OUTPUT, + OUTPUTS_LEN + }; + enum LightId { + FOLD_LIGHT, + LIGHTS_LEN + }; + + dsp::SchmittTrigger trigIn; + + NORS_IQIntervals() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + configSwitch(FOLD_PARAM, 0.f, 1.f, 0.f, "Fold at octaves", {"Off", "On"}); + configInput(TRIG_INPUT, "Trigger"); + configInput(CHORD_INPUT, "Chord poly"); + configOutput(TRIG_OUTPUT, "Trigger"); + configOutput(ROOT_OUTPUT, "Scale root"); + configOutput(LENGTH_OUTPUT, "Scale length"); + configOutput(INTERVALS_OUTPUT, "Scale intervals poly"); + } + + void process(const ProcessArgs& args) override { + VenomModule::process(args); + if (trigIn.process( inputs[TRIG_INPUT].getVoltage(), 0.1f, 2.f) || !inputs[TRIG_INPUT].isConnected()){ + bool octaveFold = params[FOLD_PARAM].getValue(); + float chord[16]{}; + int channels = inputs[CHORD_INPUT].getChannels(); + inputs[CHORD_INPUT].readVoltages(chord); + if (octaveFold) { + if (channels>13) channels = 13; + } else { + if (channels>14) channels = 14; + } + std::sort(chord, chord+channels); + if (octaveFold) { + float whole; + float frac = std::modf(chord[channels-1]-chord[0], &whole); + if (frac > 1e-6) { + chord[channels++] = chord[0] + whole + 1.f; + } + } + outputs[ROOT_OUTPUT].setVoltage(chord[0]); + outputs[ROOT_OUTPUT].setChannels(1); + outputs[LENGTH_OUTPUT].setVoltage(static_cast(channels-1)/2.f-0.5f); //NORS_IQ clamps value to valid value, so neg values OK + outputs[LENGTH_OUTPUT].setChannels(1); + for (int c=1; c>>(Vec(22.5f, 75.f), module, NORS_IQIntervals::FOLD_PARAM, NORS_IQIntervals::FOLD_LIGHT)); + addInput(createInputCentered(Vec(22.5f,120.f), module, NORS_IQIntervals::TRIG_INPUT)); + addInput(createInputCentered(Vec(22.5f,160.f), module, NORS_IQIntervals::CHORD_INPUT)); + addOutput(createOutputCentered(Vec(22.5f,215.f), module, NORS_IQIntervals::TRIG_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,255.f), module, NORS_IQIntervals::ROOT_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,295.f), module, NORS_IQIntervals::LENGTH_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,335.f), module, NORS_IQIntervals::INTERVALS_OUTPUT)); + } + + void step() override { + VenomWidget::step(); + NORS_IQIntervals* mod = dynamic_cast(this->module); + if(mod) { + mod->lights[NORS_IQIntervals::FOLD_LIGHT].setBrightness(mod->params[NORS_IQIntervals::FOLD_PARAM].getValue() ? LIGHT_ON : LIGHT_OFF); + } + } +}; + +Model* modelNORS_IQIntervals = createModel("NORS_IQIntervals"); diff --git a/src/plugin.cpp b/src/plugin.cpp index 85fc2bd..7586430 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -91,6 +91,7 @@ void init(Plugin* p) { p->addModel(modelMixSend); p->addModel(modelMixSolo); p->addModel(modelNORS_IQ); + p->addModel(modelNORS_IQIntervals); p->addModel(modelPolyClone); p->addModel(modelPolyUnison); p->addModel(modelRecurse); diff --git a/src/plugin.hpp b/src/plugin.hpp index a78c971..0da136a 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -27,6 +27,7 @@ extern Model* modelMixPan; extern Model* modelMixSend; extern Model* modelMixSolo; extern Model* modelNORS_IQ; +extern Model* modelNORS_IQIntervals; extern Model* modelPolyClone; extern Model* modelPolyUnison; extern Model* modelRecurse; From ecd4649487bdbd64314c5528c3d84e0604e43155 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 28 Dec 2023 23:53:35 -0500 Subject: [PATCH 06/81] Update README.md --- README.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 6a47629..139ae30 100644 --- a/README.md +++ b/README.md @@ -6,17 +6,21 @@ Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and li [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) [Acknowledgments](#acknowledgments) -|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)|[LOGIC](#logic)|[MIX 4](#mix-4)|[MIX 4
STEREO](#mix-4-stereo)| -|----|----|----|----|----|----|----|----|----| -|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)|![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)| +|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)| +|----|----|----|----|----|----| +|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)| -|[MIX EXPANDERS](#mix-expanders)|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ INTERVALS](#norsiq-intervals)|[POLY
CLONE](#poly-clone)| +|[LOGIC](#logic)|[MIX 4](#mix-4)|[MIX 4
STEREO](#mix-4-stereo)|[MIX EXPANDERS](#mix-expanders)| |----|----|----|----| -|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Intervals module image](doc/NORS_IQIntervals.png)|![Poly Clone module image](doc/PolyClone.png)| +|![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)| -|[POLY
UNISON](#poly-unison)|[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| -|----|----|----|----|----| -|![Poly Unison module image](doc/PolyUnison.PNG)|![RECURSE module image](doc/Recurse.PNG)|![RECURSE STEREO module image](doc/RecurseStereo.PNG)|![Reformation module image](doc/Reformation.PNG)|![Rhthm Explorer module image](doc/RhythmExplorer.PNG)| +|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ INTERVALS](#norsiq-intervals)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| +|----|----|----|----| +|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Intervals module image](doc/NORS_IQIntervals.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)| + +|[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| +|----|----|----|----| +|![RECURSE module image](doc/Recurse.PNG)|![RECURSE STEREO module image](doc/RecurseStereo.PNG)|![Reformation module image](doc/Reformation.PNG)|![Rhthm Explorer module image](doc/RhythmExplorer.PNG)| |[SHAPED
VCA](#shaped-vca)|[VCA MIX 4](#vca-mix-4)|[VCA MIX 4 STEREO](#vca-mix-4-stereo)|[VENOM
BLANK](#venom-blank)|[WINCOMP](#wincomp)| |----|----|----|----|----| @@ -697,7 +701,7 @@ If the module is bypassed then the Trig input is passed unchanged to the Trig ou ## NORSIQ INTERVALS -![NORSIQ Intervals module image](doc/NORSE_IQIntervals.png) +![NORSIQ Intervals module image](doc/NORS_IQIntervals.png) [Return to Table Of Contents](#venom) From a36c9c5a847c0ad4102fd03711151594e2094b9a Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 29 Dec 2023 15:27:44 -0500 Subject: [PATCH 07/81] Update README.md --- README.md | 86 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 78 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 139ae30..b0e43b7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and li |----|----|----|----| |![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)| -|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ INTERVALS](#norsiq-intervals)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| +|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
INTERVALS](#norsiq-intervals)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| |----|----|----|----| |![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Intervals module image](doc/NORS_IQIntervals.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)| @@ -29,13 +29,7 @@ Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and li ## Color Coded Ports All polyphonic ports use brass cores, while monophonic ports use steel cores. -*EDIT - the following Rhythm Explorer polyphonic ports are missing brass cores:* - - *RAND* - - *OR* - - *XOR ODD* - - *XOR 1* - -Input ports are on the base faceplate color with base labels. Output ports are on a contrasting color with inverted labels. +Input ports are on the base faceplate color, and output ports are on a contrasting background color. [Return to Table Of Contents](#venom) @@ -319,6 +313,82 @@ An expander is ignored if it is bypassed. ## LOGIC ![Logic module image](doc/Logic.png) +The Logic module provides up to 9 independent polyphonic logic gates that can be configured for any of the standard logic operations. All logic gates support one, two, or more inputs. A merge option allows polyphonic input channels to be used as inputs for the same logic gate. Compound logic operations can be created by reusing earlier outputs as inputs, without introducing sample delays. Options for oversampling, output range, and DC offset removal make Logic ideal for audio applications, with undesired aliasing limited by the oversampling. + +### MERGE button +Controls how polyphonic inputs are handled. +- **Off (gray - default)**: Each polyphonic channel gets its own logic gate. The number of output channels is the maximum channel count found across all inputs for that gate. Monophonic inputs are replicated to match the output channel count. Polyphonic inputs with fewer channels assign constant 0V to the missing channels. +- **On (white)**: All logic gate outputs are monophonic. Polyphonic input channels are collected as separate inputs to a single monophonic gate. + +### OVER (oversampling) button +Controls how much oversampling is applied to reduce aliasing when using the output as an audio signal. Oversampling can be CPU expensive, so should be off for normal CV usage. For audio applications, the least amount of oversampling should be used that gives satisfactory results. +- **Off (gray - default)** +- **2x (yellow)** +- **4x (green)** +- **8x (light blue)** +- **16x (dark blue)** +- **32x (purple)** + +### RANGE button +Controls the output voltages used for high and low states. Unipolar outputs are typically used for CV, and bipolar for audio. +- **0-1 (yellow)**: unipolar low = 0, high = 1 +- **0-5 (green)**: unipolar low = 0, high = 5 +- **0-10 (dark blue - default)**: unipolar low = 0, high = 10 +- **+/- 1 (pink)**: bipolar low = -1, high = 1 +- **+/- 5 (orange)**: bipolar low = -5, high = 5 +- **+/- 10 (purple)**: bipolar low = -10, high = 10 + +### DC button +Controls whether DC offsets are removed from the outputs +- **Off (gray - default)**: Used for normal CV outputs +- **On (white)**: Useful for audio outputs + +### HIGH THRESH and LOW THRESH knobs and inputs +Set the low and high thresholds for the Schmitt triggers that determine the state of each input. The effective threshold is the sum of the knob value and the corresponding input. The same thresholds are used for all inputs. An input goes high whenever the voltage rises above the high threshold. The input goes low whenever the voltage is at or below the low threshold. The state remains unchanged if the voltage lies between the thresholds. + +The module automatically swaps the high and low thresholds if the high falls below the low, so the effective high threshold is always guaranteed to be greater than or equal to the low threshold. + +The Low Threshold knob factory default is 0.1V, and the High Threshold knob default is 2V. + +### Logic rows +There are nine rows, each consisting of two inputs, a Reuse button to recycle a previous output as an additional input, an Operation button to set the output logic, and an output for the logic result. The operation may be set to "defer" so that the row inputs are included as inputs to the row below, and the deferred row output is effectively disabled. + +#### A and B inputs +Provide up to two inputs for each row. An input is ignored if it is not patched. + +#### Reuse button +This button allows any of the logic outputs from rows above to be used as an additional input for the row, without introducing a sample delay. If set to None (three dashes), then the button is ignored. The first row doesn't have any row above, so its value is fixed at None. + +If the output selected for reuse is deferred, then it is ignored as an input. + +An output can also be used as input by patching an output from one row to input A or B from another row, except the patch cable will introduce a one sample delay. + +#### OP (Operation) button +All operations other than defer have non-standard definitions so that they work with one, two, three, or more inputs. Each logic operation will operate in the standard way if there are exactly two inputs. +- **Defer (down arrow - default)**: All inputs from the row are included as inputs to the row below, and the output is unavailable for reuse. The output for the row will be constant 0V. +- **AND**: The output is high only if all inputs are high. +- **OR**: The output is high if at least one input is high. +- **XOR 1**: The output is high only if exactly one input is high and all others are low. +- **XOR ODD**: The output is high only if there are an odd number of high inputs. +- **NAND**: The output is high if at least one input is low. +- **NOR**: The output is high only if all inputs are low. +- **XNOR 1**: The output is high unless exactly one input is high. +- **XNOR ODD**: The output is high if an even number of outputs are high, or if all inputs are low + +Note that AND, OR, XOR 1, and XOR ODD will all give the same output if there is only one input. A high input will produce a high output, and low input a low output. + +The NAND, NOR, XNOR 1, and XNOR ODD will all function as a NOT operator if there is only one input. A high input will produce a low output, and a low input a high output. + +#### OUT output +Produces the output for the selected logic operation. The output will be monophonic constant 0V if the operation is deferred, or if there are no inputs. + +### Standard Venom Context Menus +[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. + +### Bypass + +All outputs are monophonic 0V if LOGIC is bypassed. + [Return to Table Of Contents](#venom) ## MIX 4 From 1779ac6cfcb3a0fb77b278577842b086df9c85a7 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 29 Dec 2023 15:31:36 -0500 Subject: [PATCH 08/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b0e43b7..61d5092 100644 --- a/README.md +++ b/README.md @@ -356,7 +356,7 @@ There are nine rows, each consisting of two inputs, a Reuse button to recycle a #### A and B inputs Provide up to two inputs for each row. An input is ignored if it is not patched. -#### Reuse button +#### REUSE button This button allows any of the logic outputs from rows above to be used as an additional input for the row, without introducing a sample delay. If set to None (three dashes), then the button is ignored. The first row doesn't have any row above, so its value is fixed at None. If the output selected for reuse is deferred, then it is ignored as an input. From 785b4a7b14a72e8e0014b7323a971ec3d5bc03d2 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 29 Dec 2023 23:27:04 -0500 Subject: [PATCH 09/81] Update README.md --- README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/README.md b/README.md index 61d5092..252d86c 100644 --- a/README.md +++ b/README.md @@ -772,6 +772,54 @@ If the module is bypassed then the Trig input is passed unchanged to the Trig ou ## NORSIQ INTERVALS ![NORSIQ Intervals module image](doc/NORS_IQIntervals.png) +Converts up to 14 channels of a polyphonic "chord" input into a set of CV outputs that define a scale for the Non-Octave-Repeating Scale Intervallic Quantizer (NORSIQ). + +### General Operation +Polyphonic V/Oct channels at the CHORD input are sorted, and the lowest note defines the scale root, the number of channels determines the scale length, and the intervals between the sorted notes define the intervals for the NORSIQ. The computation of the defining scale CV may be continuous, or it may be held constant until a trigger is received. + +#### NORSIQ configuration +The NORSIQ module must be configured properly for the CV from the NORSIQ INTERVALS module to define the correct scale: +- The EQUAL DIVS button must be off so that intervals can be defined directly. +- All 14 Interval knobs must be fully counter-clockwise (0V, 0 cents, or 1:1 ratio) +- The SCALE LENGTH knob must be fully counter-clockwise (1) +- The SCALE ROOT should be at the default noon position (C4), unless you want to transpose the scale to a different key. + +The PSEUD-OCT INTERVAL and EDPO knobs and inputs are ignored. The INTERVAL UNIT, ROOT UNIT, ROUND, and EQUI LIKELY contols may configured as you see fit. + +The NORSIQ has a "NORSIQ Intervals module configuration" factory preset that quickly sets the appropriate configuration. + +### OCTAVE FOLD button +Controls where the scale repeats +- **Off (gray - default)**: The last (highest) note of the sorted chord input defines the last note of the scale, which becomes the root of the next scale. +- **On (white)**: An extra note that is an octave multiple above the scale root is added to define the last note of the scale. The lowest root octave that is above the highest chord note is used. If the highest chord note is already an octave of the root, then it becomes the last note of the scale, and no note is added. + +### TRIG input +If patched, then the outputs will not change until a monophonic trigger is received. The trigger is detected by a Schmitt trigger with a high threshold of 2V and low threshold of 0.1V. + +If left unpatched, then the outputs are continuosly updated according to the current inputs. + +### CHORD input +The polyphonic V/Oct input used to define the scale. If the OCTAVE FOLD is off, then only the first 14 channels are used. If the OCTAVE FOLD is on, then only the first 13 channels are used. + +### TRIG output +The result of the TRIG input Schmitt trigger is forwarded to the TRIG output so that the trigger remains in sync with any scale changes. + +### ROOT output +This monophonic output is typically patched to the NORSIQ SCALE ROOT input to define the root of the scale according to the lowest sorted note from the CHORD input. The ROOT output can be ignored if you want to transpose the scale to a different key. + +### LENGTH output +This monophonic output must be patched to the NORSIQ SCALE LENGTH input to define the length of the scale. + +### INTVLS output +This polyphonic output must be patched to the NORSIQ POLY INTERVALS input to define the interval between each of the notes in the scale. + +### Standard Venom Context Menus +[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. + +### Bypass + +All outputs are constant monophonic 0V if NORSIQ INTERVALS is bypassed. + [Return to Table Of Contents](#venom) From 9bf05a9ee7418a57c0566b78767a317b5787d145 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sat, 30 Dec 2023 13:17:50 -0500 Subject: [PATCH 10/81] Rename module and reposition some controls --- README.md | 14 +- doc/Logic.png | Bin 28389 -> 28286 bytes doc/NORSIQChord2Scale.png | Bin 0 -> 14063 bytes doc/NORS_IQIntervals.png | Bin 13228 -> 0 bytes plugin.json | 6 +- ...ls_Coal.svg => NORSIQChord2Scale_Coal.svg} | 118 +++++++---- ...anger.svg => NORSIQChord2Scale_Danger.svg} | 112 +++++++---- ..._Earth.svg => NORSIQChord2Scale_Earth.svg} | 132 +++++++----- ..._Ivory.svg => NORSIQChord2Scale_Ivory.svg} | 189 ++++++++++++------ src/Logic.cpp | 8 +- ...-IQIntervals.cpp => NORSIQChord2Scale.cpp} | 30 +-- src/plugin.cpp | 2 +- src/plugin.hpp | 2 +- 13 files changed, 387 insertions(+), 226 deletions(-) create mode 100644 doc/NORSIQChord2Scale.png delete mode 100644 doc/NORS_IQIntervals.png rename res/Coal/{NORS_IQIntervals_Coal.svg => NORSIQChord2Scale_Coal.svg} (82%) rename res/Danger/{NORS_IQIntervals_Danger.svg => NORSIQChord2Scale_Danger.svg} (83%) rename res/Earth/{NORS_IQIntervals_Earth.svg => NORSIQChord2Scale_Earth.svg} (82%) rename res/Ivory/{NORS_IQIntervals_Ivory.svg => NORSIQChord2Scale_Ivory.svg} (77%) rename src/{NORS-IQIntervals.cpp => NORSIQChord2Scale.cpp} (71%) diff --git a/README.md b/README.md index 252d86c..d820912 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,9 @@ Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and li |----|----|----|----| |![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)| -|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
INTERVALS](#norsiq-intervals)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| +|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| |----|----|----|----| -|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Intervals module image](doc/NORS_IQIntervals.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)| +|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)| |[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| |----|----|----|----| @@ -770,15 +770,15 @@ If the module is bypassed then the Trig input is passed unchanged to the Trig ou [Return to Table Of Contents](#venom) -## NORSIQ INTERVALS -![NORSIQ Intervals module image](doc/NORS_IQIntervals.png) +## NORSIQ Chord To Scale +![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png) Converts up to 14 channels of a polyphonic "chord" input into a set of CV outputs that define a scale for the Non-Octave-Repeating Scale Intervallic Quantizer (NORSIQ). ### General Operation Polyphonic V/Oct channels at the CHORD input are sorted, and the lowest note defines the scale root, the number of channels determines the scale length, and the intervals between the sorted notes define the intervals for the NORSIQ. The computation of the defining scale CV may be continuous, or it may be held constant until a trigger is received. #### NORSIQ configuration -The NORSIQ module must be configured properly for the CV from the NORSIQ INTERVALS module to define the correct scale: +The NORSIQ module must be configured properly for the CV from the NORSIQ Chord To Scale module to define the correct scale: - The EQUAL DIVS button must be off so that intervals can be defined directly. - All 14 Interval knobs must be fully counter-clockwise (0V, 0 cents, or 1:1 ratio) - The SCALE LENGTH knob must be fully counter-clockwise (1) @@ -786,7 +786,7 @@ The NORSIQ module must be configured properly for the CV from the NORSIQ INTERVA The PSEUD-OCT INTERVAL and EDPO knobs and inputs are ignored. The INTERVAL UNIT, ROOT UNIT, ROUND, and EQUI LIKELY contols may configured as you see fit. -The NORSIQ has a "NORSIQ Intervals module configuration" factory preset that quickly sets the appropriate configuration. +The NORSIQ has a "NORSIQ Chord To Scale module configuration" factory preset that quickly sets the appropriate configuration. ### OCTAVE FOLD button Controls where the scale repeats @@ -818,7 +818,7 @@ This polyphonic output must be patched to the NORSIQ POLY INTERVALS input to def ### Bypass -All outputs are constant monophonic 0V if NORSIQ INTERVALS is bypassed. +All outputs are constant monophonic 0V if NORSIQ Chord To Scale is bypassed. [Return to Table Of Contents](#venom) diff --git a/doc/Logic.png b/doc/Logic.png index e5f161ee654e6b340432cd699dcf4387d9b145a7..984b5b8c3c1ad9d7fc8c641ca650312672b7be48 100644 GIT binary patch delta 23546 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 M?{l;++e?W39~Iu=BLDyZ delta 23555 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 diff --git a/doc/NORSIQChord2Scale.png b/doc/NORSIQChord2Scale.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe6b97a9b168b7cde048f9b1d25636bb6cac1b7 GIT binary patch literal 14063 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 literal 0 HcmV?d00001 diff --git a/doc/NORS_IQIntervals.png b/doc/NORS_IQIntervals.png deleted file mode 100644 index 253dbbb71da9932614f0f1c56d3309071c2a9630..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13228 zcmX9_XIK-@*WF}8LJ7Skbfj94(4<2mDn%&@3Ialq7HJ|Kq$EUw4GaiUq(ni*3L;1q z6GE>6K~X`2ARsD4K^M&Af;*j9V5E7}3le;)7W7amdN<887b-Re z+uC5St(~m|Lykos9ZJdH#OimwL81SAsQij-|6Yq~xoZ}Bh~o2N*S{ z>?gk|HZba-YQ=9&@3o5b5VkrNw1@eUY>LYK^|iyvliJVv@^LVHY9>@-6>s!u%&By8 z?&WRd{xi?5PR7lz7{d`XfBvNi{3U#s&K20YZjo7%)Qg3W%hJf;_o3(AstCr+g*OOP zPL2dBzo3AgX_hjnOMXpKvpQ|BXBBp4pOybvF!tuqncO&a^)=z=0Xwz4Yl$`2MnIOa{m3J!BR$|g2EMfGp9|9 zl#QEThm=0{EJ4FZ$cN<~x*t7zZSnxCGi7HhO%~u!ijO}F$2Y=meEjUL1H3aLzpd0@ z4xGD8QrLi>P)I?`cr+3Vejc#$cGY7(&`U?j{R%~$c|LLVn}`~rqZzoFC9G(nOU#~{ zEbC+hxtz{DIdVTo0fY8YR;GNK7o#+{^271RU;@(L19j>*uV9XJJ_6;xLk^z)2Uvyn zTycO$u_lJv@Qc5g)S{BXs@Tp1is8jCski$A@r3HCDvW1+Tmj=VQ}XCtK@6q8|0bH> z?g>il+a9!(wnsZ>x?2yfWgiWrloiqJkW@o#0QFK;dnR)uydz@4&YX1;Z?+*}#-fq@R7`d!a3(sOz}u0bzxYweoP zU<*he^Yz6T8Uz3Z4Bi9k&q+bpe`ZNL*^u!Pg+6;{r|v(qgNk^3P%0=jqTgO!Vlb-!p;U9qU^Pdc^B4PRn#;zE}H^qfRR=JP$Xw>CJzBeH4I4M@zzET{WIv z%FGt^*@yM7PO(86IVWvw@wo9%>omu$7cvGr!DnrzN~sXHP(4rRYmGYxz5A6!P}nya4?AugehAi)Qn`Vr^J;d`oT*lc{@ zSbe;#+jjeLSJZ-KT$hM~3{kJnvpJDxuFD$ftP!mfGEoKf)Fqu?+FV^kC0vcEd6{KV zZx0Rb)?q`STU$t4OxK3Ji1o!UjbzAJKGYBlzu@fZ>`%?k!E-o#{=ED*e1TC)(m5?; zQBl#fX~JPgS?1FZ7g6dbN(QhUR^-Q9kD3G3j2df^g$LZggO2uR&kD? z*qneBJm7R!&Ein1k93t}L)=ajg==4oXG08VrD*#-${~QC`NTk$K@p8GK$x16Z#|M_ zis6s(yskvw%s@KTga8j?oqqF+!Ez7L96(LI-R({3qM9?$+y{Xk>7MKSZKg6~tU$cK zk3Vqwp1PC3*|TTS8%-Xl`MV}4VlkxN=iB-FNXkY&XyHS@iFh&u1)Z$WeqZicb+R{b zLM5ibV$2-AbI4_>13q)bm|V!%Sv(LUfuedOVFbx7GSzS%(-u zN4sRkT1l~D^gyLAgtM5Gkv87%WGam+G#3qRHvDs6S?tQNB<{su$kMDT};0YJtDA`;sF zgQ$Lo7@3YYP%_7CEo>u-MAIXAA%6FYu3Ip7&dD-V$`>sY@hqJh$gQI}z%1H){2a>e zMg$7GobuttSHG&4)j;}*#0V*JONkIj$b|bn%}X&NrxqQEyS^~|Q3c7J>U_R&pfYnZ z$pg)Q{VCly+Lmt!DfK#xy>69%oFx9-O+F)5ojo+A!M>z_TC%H8jG&3s*B2<<5A(4C z&sE){P3nqt1b~`n&ov~FeMX1lkuSV(NSe+?R?%u!ebW|25C+J%PH?4V~- z2Rs@mlY^ySk&VX=A%#icynvK;Ads=xVDym`7|28NO;Yc;I$3Q_FQ|HBYKUP+V!HMe zp+)sa+}(3}MI`eE*fZbg;VW%>DQqQ64(u{dxTlGlO6lZU_d6u5PkQc_aXoLL$hnsh z^2~4RdZ>`+TIeq=Nxig-LBb`v@QjKMjX=E|$=Q2xhs0%ul^9z^QE>K_(R;d*(E)hj zGH73B3%W`YAAZI^G>co~HOu2IEa2(?%V@*BlQ@6Bm0d92Nsq@~baaI~9Rs_$+0-3~ z{(zQ-fbA4b6@J}-6*X~^?V?yMfZH#k+SZPd6SR9*<{OWUf~pRxgaHn=iEC@33uc!1 zG*HGHep)~8;5nW_B1!!!wrq!{IXgR*=IEKKPwJrIZm)*WeS8I@4d5zP!yjPTBfszM)KkkbG;&> zGQ1@f2tiihL$$2w@M`yX@kf1r;o*OLZ5(<**FU9i6MX>tlf)2s|FQ1g9*i02&@3Lo zS1}#;XGtyTaN~XbQe_iei4Ziw04gjj9Cz4S&g}>(;PN7P!^#P~K@G;%9;^^O`sC@} z5*8wtG5S3XdEsmt`{QUN{Z2_*10PvFoYA9;|6c7o>qX(_sHqc@Xero3+^goM)n9=? z?vLoxYO3k_-QV>Iq2ijIPai*_xxs_J*yAPbePlF_1<5gMKi06Thj@EF-2Lzjx08UaymU z?$Llp7WVOO#kaY=?`AOv&b}_hSs%}1u;{S*=_PHjVn5Fl$%6a>^niE$0Puux{{CS! z_EifwPhjPQJ0u%3-vw3@`&|twdD`BX@%l@}le;Nxhd|a%?FyTy$V+QXD$m{(4^z|hVB<&Di#fLxA_1Q=YE|I$S{Bs?B-m5vG z*XhF;?j-*9Z-NuLX_v0UoQ1|yM$5^`qp|u|g_i&ug>r{uc7;B> z3}3cxp=aLh;)hKM8sNJssqg}p0Oc)Rji7|62qs`gMn`qJ0NHg6!aRQI%Du-gvnFQ* zyTqnapnf3r?N?801c*Wy+4<8c*9UQT`+jhoh8y@sdE0$35U9bnEEp2{3O+SI*56s4BZ# zJAz)ag4ZLa_Xw5l$11>#Wn7d}SHzzRPn@V8)>pld$fKRjqbAI1{q@wf@|&Om)yziT z&AiHHYw7QPu)#p}Y~~?dmT%nZj=X9HR8LtG_UJ?j(lcvQ^eNL4x|yT2{?@5hDV@AR z?z`u43}!GcDLIY8p4*>qRbrVkK+VcxaMp%YBx22=OSo@J@%jHPBsszaP-1rXT%}EZ zUdf50EX}LKb=XeY;^9epT~*7o13GIP8@dFbH<;(>Q3_&p5q$br7D;2A$alorPLDoy zMHWAgMk+;i@m;8v6MXWWdxR0qB?Bq)P5<;bpsQJ{6o2yeKf!wBt{ke&l-DJJn0-Aj zT@SRe44J;>l79P~3O^)|P44(?k+{|tzBb1PcPhJ@ks%mt#hY^=84`OY5fVehW%B$0 ze*`LtQ-2d!GdwycPqKB_BRHvyqsPzaChn~8jb)q%wY}lL<)DXFQCL~UWblUdnL|>P z@++DY6h7VUh#RV9ofOs$28dc(DuyfeSXNnKWyP_9ZNO?6{p>1pB13 zwy-oD$4)rKB1qUMf;_};4nT!H#Qi>>oy<@ceFB}O>{bkBBcA_ie{Gi+c0uOj9;y}g z73AyNU0^YEo#%uQEebha)(*(L0zNuakzl9pNUVA*zDl z1v6z#q1mz9orEPkDh^X9YOS}YR&Ni%^4^^mH4u4ujRJ{texHGnS%0^}i&7_Q?G3EXCj-}(E*8unl`8N6Qd5YwXK(gy3@qHjM z69zp0F&IxsOQ-dbBk1(N5(l?7vI0;NFCf8vGQuR67^!dz7tRIYo!Uxm4bplQsEb{LOech ztbKrnHIDg~#*=ngxHy0{>U5r(BcWnC-5s-%*82gSyaiQooc_hHkOCh~q*+;qeQgo+ z+_O?RDISgy(|@YQFIVou<3L%0-m-&c95IHBmKrA&PO61x-66eD2PcBsWa}1mwl0wzkXu{vd0hYsOY$v}OyVA#2njh5o>T$Hgx=7r0$de| z!<+lrtxtZ^Ke|&N4L}05QRMS>&Khj3k$Meuo0rr(02}=Z3Xy0t}cGj;e`eY z=#!SUhjet<)Qk*nNz=}6^yD*yMYtGXJ==}J?3or zLbK(zcc!G_ET2Fn0f$nPcG~^>tw3RW0%+zI^kr)uDNRz&=#QWp+3XmEpAjfmC>JhQ zESK_A=<+NylF^S{nq5p`C;k(lY|B$qW?22;QZl7z4ovM{q6+VSHC2Xgw zv@J~9!2Xc+JGgYu<%$_L%7%O=Aa&+dsd*BAkzyhp@L1=qW)BpbBCpIe;Fgr4mHu)+ zm*JGf1#^l9T@_wv11)e2A&3`?;(EX1-Vqv28rf%`J*V?Ij+rT`L@nK>KEOodld$GN z^yzj1&#+6PZUM{z4V8|`Bc?JVYw@7x2jP99SOa;@LL6d=ctFR%Ky4otKac%yJNAcT zmvw3L#bm4WF{1j8r*nY1IzD<^zW$g@T(zvY3Rn>Y&jo0ooX$98DytfyDj#t7(uA7u zU*z1qi9}X@X%1N1nUV#&63?Hrk17m+mvpuaoEPBg`v8PM0>sXN-{%2;6Q`jWp^%HJs;WfS+oT{{YJz-dD4d$?)CBv_MAUVc zSpAAe&taYiFa6y(M`?;()FnV%6M4YfM=p9RGWqdoOaJ<1;j(xGp$L4Cy9~I$>h~Yn z`j#ofa0j`Oy+#ph80LaG_1#zQK0QsSJlE90ncVh(dkC1r|2K9Q)=9e!>smZ%RP_&h zE_6F5$Ir&j?z~%boKE=dkNd*y31MMEo?ZtA0pnVZELd^CB7RBLh=T1Oxv~})PUf%K z0sS(sk>FsLCtM7$4HdRvd)Aj*=>F@F5{CdPbu;93!HTmI9Tzhd=%b}|1m=d3f zPqpma%%Gqk_CEwcN4esU@V?d-NIJ8g7-+-~Ue@2DSG%3EyN+{rmnnKL445C-w}%es zB0LkJdb<5`g1T{0(50Zx1J{^>-Ecpf_mj1r@3haJ6eEvCc zpBlA9%i}e07g$Br804U%YDXEN;naAfDzv)896P$eEqWQ`Oqx}%LupeV2Q?P*eQFAk zfE6t&!R5lAz2yyhnz*r&g_9cF(l;39S@eK)AGeDAmh~;5+EE?$J@EoQikx|MYG&qq zc$EP{QG7$h2;f`ld$&mcUPRC3rA@bWcMs4Wyr3%yk1z0>=8Bhli=kx8b5LChDowru z)gm>HJT)p3HTJM+rPKaAaFGtl2-<4|fy7V9;BEMshYfJnzXDXFYRY(XhAco~5SH6X z;|C{(Xqg8q+`!`IYm2Ie=Wp}1lMV2t;NU(Ut-lZ-CsBk)3c{{V=|sqW>Wj={uaVPO zC&DR}BbVaON7-eP9Ps+(2zwiH(Ay`U0^p~$#Nk@te#-idJERGCVQRi<3SYk9rz-(J zVIN)iK1I#&nw7dZ9K8iO!W3$TKSuPM&ZFG*j2breLOwOidnz+#_ShdNM)mBIMYZ@C zi%FPcc-3!xr0XI7DVnub`7Q@huDuCG(!Lj5{LckXods~# zrehv@#F+P`=CN5m16%Fvl{JNgn`ttfv2Yd%8N`}m;t+3pZH}i7o{p5UGTaPlKmZcD2rmv9!~!BG6dv1NqHCsfQnQ?4zm9e5 z^xZW;n`!d~J!ZIHpy?n_iu%A=X1(+N%jkVUg{VZR3R;4gWXJO1(58;~%;N+fJ{E66 z1B)5Phx*&VTnl{vFLU@;(2`wNmgE39aVSQOiUHk$(a{QPzn zW}ZcKtLb*e8>t|J`akZT|4oE6gO9qM!}2^5jIgLeXjnu*-Pn0z((!*gGwlnqTX z@2nv^%n1j-lVXYf((LbFAGM;#yuVn4JQOp4Os21+S>aGZ{p7dy8(jLpI{>3IqV{o8 z)pUcw)Ifes*$!m!2wf!)|59TU*M1eeL-{p$>rEe>$7lvW(cuNH?_mpsRCi_K#J0(w zSJAH*zA#u3f6S~L!YtydZ4pMT32Q86ILoD0;+pe-YTYBp;-*$Sp1@nu0%QdC6&@ln zMyc17>ol)0KJ}AuryOMJMSp9vbOzBV;?$t-^$6sdgE7dnXT6Y=>Qa>Y>MDjlBbq@3 z%`_amX`wdWZ~4q#9QP7!z7CB1EHMm}B0ug?gjXsB!hP@=ye2k5JKqH9rd|sWSGBDG z5h=gGs@hY&S8oaVQF%-(jD|BNnJdvqf!RTS&3$`)fd`k8AwKMt31>FMdH9HFN%{1p z%>^sCuk&$^*&agA+U(u^$jo~O@d$4~{dVC)HKfKs3#0@3Y-qV)vaKN&`DoD6Z;o)n z$BCL3$l>Vv=O3EYj8iE*6kg;mYIG}Zs>459&OT}hsAab#Z}KRlfIQvZzSgJ}mw5CD z@%Ve}($%M&&rE=8m})@E-~ig8EJNy)XZDvomjhh2!*jk<+KaJ+k0BJpz0{c0m- zaquj|_rqWb?q3lZn&y@#UTkKOLDiLb&@wXx;^`W+R3nbQRS>$`zeR)BCJ{BiWAzVRJAKG}Q z_%11nEGg42$BxRp2+b)-yG9a^tA)9NhNeuz03mp&y;k^%?TvNN^P7n5@DUAR)|^I# z%nU-|ygH9r^^LT&yOTUCIT9>>D0;6~bIiW|yt+jA7|zsE(JZ-LiLOmo5^R2dU3zRZ zL9nQjlu;oz70!Ky#zI7m?RNXqJY)*#k=-2OhmL3c5^wVf=fj?b%Gwh$kCJG;W=rov zNtsfCaYD~R!p7sf@dQE-M{;Z#UVMwQxvI@M>fj=L!AY>QqX*_y3ez3`)N^O@%k328 zWsD{hO_bN0?=Y{A0YYb1p>cxz z!k7kDh{8#SV`65c&*NowECGV({V~;;0g%#iW zI-Qj8ufm-6cXE9P3otrF*+vNI${BCM>Y*C&v5q_E0m)n%{Lbq}Gq8U~G?!HSDZ>Ln zzim#tuB^MK@Ltob1vA^=GP(r3Xc!qA%Tw|wu#NUK7-nYAQ$tqFK8YhQ+%>H9F$&+X zAk(f&a`>NN!!^lrTZ@B^Z2ttYnqupb52JWM>m=7uBn`Xr2Q#{T-k7^SzcZ)kJmfmM z-kAuxo+8fGJ8Ao$WSl%JiSkOiQfEA=hqvfKG~UL+E|3j-alJWqQ6a89zqY~R_pGQI zF>tT#@oN}4=xY|X_dQl{>&lu0Qn#_4R3+oVy(fE{$bpxCjyu6*W@X(g7q(XHAL{3mA+8bZU@|NTYrc@B5oxQhqR<4 zH%Si|e}8@;9nDt;HOZ;!mN+4Vy${h&j1J+|P4yY8)?6}4S} z5qmsY*P~b?cdu8Qk)J(N<%HD-Bkvksgf618pO|TcfmT4|9q|3&zrx$Y^QTctAcip z!r*D4ntuS{w-+u^Ce)XY0SdMPO6AF%ox4>4zvH}l$y66+`N)GsY6^0Ky7Vvta{pZ8T|;kdlx7fyp~>RDV$Q@0JMggt?k z{GR-=&_{c6zYUOi=7Ugp#cOg#$=IS0615c>?k5(Pa8Sj7^lZfDJ+C<7x&HpBWkzM` zTQoM2`a3)O8p#z4{~5bzu4>w>$^WBiRpeC-&6I;Xt=**-Ijha{ zRp~p}Y%psc-uv&7qc;khr$~JNt^HUU#BlYh-Z=clogx$8gWJRUUFt0N%(Wc3`Ujs$ zAC3|+Hb4~o@EI>Oh0IM_dw|v)_3kWZhbjKOtZ7k#Gg4Mo`8IiXX zEtAXLOCHs)09wgBzrRI=hrM21wd=kPf7j%=+-P6KJ$1y5!xK z8>SUJog;LSxM}xFj$E!Ns2|ufvX^Zfaf%C}WFZQpdDQrvnn=TCx(A510)7hiRxBjy-_}?0-!a*TWojlQYPMxYtRBvsL@PyJxMNmR8%>CCf&UM7 zaJfbdGG*DJf)sNhx_LSFx!i!|Bxv2sUH^=@>?c*p_!_f)anN5ifHaTm{A*^sTQSUPyK*ItbOlwC0?%2)N}gZBFe*t)Vqgh z(bhD{H|aw1u#5D2E8OXgm6qKu#LvT2R!}NVvT{GncZq#`FMHoGXi!_@n z1^@o1I}ZOMj&N7igqks3PKy4mKstHw)F>0ZC;QQKl0Wcl>IKF1Z^T!g9pdc-YhDV=&u9r-FIo4|IOf4n#I}E643u1;71#*3fq=~vuq1#*G{s`_H;SZ;;qNBwv`Tr zC}am5RUqsoS7$@x#198sTY@1}o^_-(%Or&rV@{QuEA-9xrGI1j>TBBWa#2jCwIfQ# zy^)ydAJApz2uz6*|vA79ChrD z4E&U}SuQckZCX1l@b&+HQ%1RlK``!=S>jP|SOzK!D@1OV(~xmduXP8|?bZ zSJxm>fP_sSRxx7sOuVhaf8qqU(x?SdMM=L5+3@+kMc}3%49M(*pPl%2)8MOi_}tz_wiAt47Y}Glyhhe z$DG>B?!D-7Dk^PfeHtAUK}iXlCHyh4ia936sbJ;ex4lV$E{;WqWc%O+q{L>uuA7df z7E?EkvJpy>)BX%0SOHg!7SH*(<5*%52*@kTprv^0cqI~M4|+ns*u~2>uXB}e@_1va zN&cQSuVd^#H)-c=XtvH&IYJDQiywR(qTLXTS@9~mNo z+P@54^Nc#QnOJ^*4U?hV&dCK zh49TB+3*%o7pT_RmO`KPCx2mY99))w{-2~1(1}+?g%Z6$p~~d9X;_IFgMs0R%Tysa zh}QVN6^*OkNBGAdHTL>J1K(JL3R@0Ixbu@W>C3)$%1_$X&JGX`{OjMCLGQC=H1bRnr7$IE7zdo4`Nu`g%W<<gLx;-M)YQb=M5k@mL6 z;rZp$kRGfOGHCPE@_g7O{JO*SvTF_sO6jRRK4aH{N17XDb6(oos&MI)s1YqiMN3fY z#ex*P#J0nxRRlfM4RVn+lcDQUuCe69XbH`(RerWW{C#=*pHG``>G>jek6d+7pp~5? zL`SdQaIHioZ*O$}XZ;r+lKJ$D{(EYPuSMYfkhv9?8A9^>4gwAIa1^KI`2{Yil_AZ>vKF4i@6M{WmT+$CLZQ;B7PpLN4 zE{~Z(W64!4-Rm1O(3FiM49j-`BLgEyx!W)6+EjrrH9qQL*=~)MRIy zfdnl}ouM>~TfD=d-9e?Bj+Vx=g{k9dA?nx5aF?BJY`v@WZGT4E5B*o(Aw2fOCH;@W zSrcy4MkP|qSCv+Y<7vMXa$X}eeMe5`VmRTEdQMQR4#3RG2O|(&=2e@G_y8aM{2Ynz zXsNz}KET8{!v}zLB~wkY3%FSL`#p|_J#RvyMn3zpYl93)cY~BZJl%domPV1%@pgI@ zPxtC^xvQxf;fuzCjXxx=py6ozc~mNXWN77j%@FnBWg9*7%L8=Y@nD;-^A7{HQTdDG zvaDYM+Dk?c2Yv9+uuQ*($h^tGI1DqEz2oMW_ot&AgMkR2-xg@bEd{!XFumDHCE)jn z`m(nMA5tf{pXimG&~|qTYduIEt$M+n&WT@7q;qckU|%15m}0o6Wb#%6nrX?t zG|*MD8G2!WBRn?lzqTpt=JLfK-;#WLQjrr!dP`HSkJeyqJw?(~`HH%H)hD-_}! z^xd?2AHTwv;oJYzQTAaJ1NSf1rSAtfn~x$-T>PS&NDgD}obhg_pZ?HFkJvcCx^y0S zqVg*SQ}r@ce!I5vHYxPo8TgCq36vE2H!8ZuacfYKGI)G8RlZ-gxQiaKbb#p{Y7alg z-Y%u(Z#5GRF%{Wp{^rR)BFkPto(5PszBR}MU6%Qt3A^+qgI{>IKYtQakTQDu=WEOv zJYqL6FmMfQzK<%OD$Rj0z3mMsU+G~V^U&gqlJ(t1OHhS#ia;G#WXn+B(r-MpT=?9> znd~|Ur+Qtn??Zm=6+l~rp6%!Sp~t{GD!-z3mjCE(jSl12wDK@R%qgH$6NS zN}NS)@hEVF1pMH~xr=s3Y{QwQck587 zuSt0PR>o`uMt$qIQM0+UQ|`8O{k*_OofP89c9^G5$Ktf0)Q*Po04F*^7*qzHY#7fR z^kXjz`LAj0YvqW?o#Aaz6HB%RH!tk6HiBp?t2@g7MnUe%@yD(VE1I)y#dnpGdcEoU z-{4SpXR*0xaOHrgQ~#!;)Q~02zbA$MN`m@#G9x`Dq8ho&iNXxYbG(VAla`j2o@=+R ziGuImJ%af{TyCby1mn}_<$o0GtHt`@B}$N<3M9Q1_$acaEO>yAn$(X)0`jN-EK7qR zr_k3aUMQ$jWCY&4F3%-NC3hfSP7AdvnV+EV5phYN{p|e7Rf`L(8i1GB(p6`BdG`gA zGItPt!YRby0^T26Wse#3HFWPKZTihE*?L{EbCx|~h7@Ih@+)i8s@hk;;T=sW5Oo*; a?o?m2@*Jza!~GWyV0+Zz$cw}H)c*r{b@WUC diff --git a/plugin.json b/plugin.json index 46c887f..6f4d3c5 100644 --- a/plugin.json +++ b/plugin.json @@ -216,9 +216,9 @@ ] }, { - "slug": "NORS_IQIntervals", - "name": "NORS_IQ Interval Generator", - "description": "Convert a polyphonic chord into CV to generate a scale with the Non-Octave_Repeating Scale Intervallic Quantizer", + "slug": "NORSIQChord2Scale", + "name": "NORSIQ Chord To Scale", + "description": "Convert a polyphonic chord into CV to generate a scale for the Non-Octave_Repeating Scale Intervallic Quantizer", "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#nors_iq_interval_generator", "tags": [ "Quantizer", diff --git a/res/Coal/NORS_IQIntervals_Coal.svg b/res/Coal/NORSIQChord2Scale_Coal.svg similarity index 82% rename from res/Coal/NORS_IQIntervals_Coal.svg rename to res/Coal/NORSIQChord2Scale_Coal.svg index 3a1b91b..522d99a 100644 --- a/res/Coal/NORS_IQIntervals_Coal.svg +++ b/res/Coal/NORSIQChord2Scale_Coal.svg @@ -5,7 +5,7 @@ viewBox="0 0 45 380" version="1.1" id="svg100" - sodipodi:docname="NORS_IQ_Intervals_Coal.svg" + sodipodi:docname="NORSIQChord2Scale_Coal.svg" inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" @@ -44,7 +44,7 @@ inkscape:window-x="1592" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="layer4" + inkscape:current-layer="layer7" inkscape:pagecheckerboard="0" units="px" inkscape:showpageshadow="false" @@ -144,7 +144,7 @@ inkscape:groupmode="layer" id="layer5" inkscape:label="Lines" - style="display:inline" /> + style="display:none" /> + style="font-weight:bold;font-size:10px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#ede7dc;fill-opacity:1" + transform="translate(0.02034555)"> - - - - - - - - + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#ede7dc;fill-opacity:1" + transform="translate(0,10)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#ede7dc;fill-opacity:1" + transform="translate(3.437e-4,5)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#ede7dc;fill-opacity:1" + transform="translate(3.437e-4,5)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#ede7dc;fill-opacity:1" + transform="translate(0,10)"> + + + + + + + + + + + + + + + + style="display:none" /> + style="font-weight:bold;font-size:10px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1" + transform="translate(0.02034555)"> - - - - - - - - + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1" + transform="translate(0,10)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1" + transform="translate(3.437e-4,5)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1" + transform="translate(3.437e-4,5)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#000000;fill-opacity:1" + transform="translate(0,10)"> + + + + + + + + + + + + + + + + style="fill:#ff0000;fill-opacity:1"> + style="font-size:49.3889px;line-height:1.25;font-family:'NECK ROMANCER';-inkscape-font-specification:'NECK ROMANCER, Normal';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke-width:2.64583"> + style="fill:#ff0000;fill-opacity:1" /> + style="fill:#ff0000;fill-opacity:1" /> + style="fill:#ff0000;fill-opacity:1" /> + style="fill:#ff0000;fill-opacity:1" /> + style="font-size:78.5061px;line-height:1.25;font-family:Nosferotica;-inkscape-font-specification:'Nosferotica, Normal';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#ff0000;fill-opacity:1;stroke-width:3.27108"> + style="fill:#ff0000;fill-opacity:1" /> @@ -144,7 +144,7 @@ inkscape:groupmode="layer" id="layer5" inkscape:label="Lines" - style="display:inline" /> + style="display:none" /> + style="font-weight:bold;font-size:10px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#d2ac95;fill-opacity:1" + transform="translate(0.02034555)"> - - - - - - - - + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#d2ac95;fill-opacity:1" + transform="translate(0,10)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#d2ac95;fill-opacity:1" + transform="translate(3.437e-4,5)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#d2ac95;fill-opacity:1" + transform="translate(3.437e-4,5)"> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#d2ac95;fill-opacity:1" + transform="translate(0,10)"> + + + + + + + + + + + + + + + + style="display:none" /> + inkscape:label="Lines" + style="display:none" /> + style="font-weight:bold;font-size:10px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#252525;fill-opacity:1" + transform="translate(0.02034555)"> + id="path17265" + style="fill:#252525;fill-opacity:1" /> + id="path17267" + style="fill:#252525;fill-opacity:1" /> + id="path17269" + style="fill:#252525;fill-opacity:1" /> + id="path17271" + style="fill:#252525;fill-opacity:1" /> + id="path17273" + style="fill:#252525;fill-opacity:1" /> - - - - - - - - + id="path17275" + style="fill:#252525;fill-opacity:1" /> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#252525;fill-opacity:1" + transform="translate(0,10)"> + id="path17291" + style="fill:#252525;fill-opacity:1" /> + id="path17293" + style="fill:#252525;fill-opacity:1" /> + id="path17295" + style="fill:#252525;fill-opacity:1" /> + id="path17297" + style="fill:#252525;fill-opacity:1" /> + id="path17299" + style="fill:#252525;fill-opacity:1" /> + id="path17301" + style="fill:#252525;fill-opacity:1" /> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#252525;fill-opacity:1" + transform="translate(3.437e-4,5)"> + id="path17304" + style="fill:#252525;fill-opacity:1" /> + id="path17306" + style="fill:#252525;fill-opacity:1" /> + id="path17308" + style="fill:#252525;fill-opacity:1" /> + id="path17310" + style="fill:#252525;fill-opacity:1" /> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#252525;fill-opacity:1" + transform="translate(3.437e-4,5)"> + id="path17313" + style="fill:#252525;fill-opacity:1" /> + id="path17315" + style="fill:#252525;fill-opacity:1" /> + id="path17317" + style="fill:#252525;fill-opacity:1" /> + id="path17319" + style="fill:#252525;fill-opacity:1" /> + id="path17321" + style="fill:#252525;fill-opacity:1" /> + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#252525;fill-opacity:1" + transform="translate(0,10)"> + id="path17324" + style="fill:#252525;fill-opacity:1" /> + id="path17326" + style="fill:#252525;fill-opacity:1" /> + id="path17328" + style="fill:#252525;fill-opacity:1" /> + id="path17330" + style="fill:#252525;fill-opacity:1" /> + + + + + + + + + + + + + + + + inkscape:label="Inverse Lines" + style="display:none" /> (Vec(47.549,28.210), module, Logic::MERGE_PARAM)); - addParam(createLockableParam(Vec(70.216,28.210), module, Logic::OVER_PARAM)); - addParam(createLockableParam(Vec(92.883,28.210), module, Logic::RANGE_PARAM)); - addParam(createLockableParam(Vec(115.549,28.210), module, Logic::DC_PARAM)); + addParam(createLockableParamCentered(Vec(51.33,33.), module, Logic::MERGE_PARAM)); + addParam(createLockableParamCentered(Vec(73.999,33.), module, Logic::OVER_PARAM)); + addParam(createLockableParamCentered(Vec(96.663,33.), module, Logic::RANGE_PARAM)); + addParam(createLockableParamCentered(Vec(119.33,33.), module, Logic::DC_PARAM)); addParam(createLockableParamCentered(Vec(35.718,61.5), module, Logic::HIGH_PARAM)); addInput(createInputCentered(Vec(66.265,61.5), module, Logic::HIGH_INPUT)); diff --git a/src/NORS-IQIntervals.cpp b/src/NORSIQChord2Scale.cpp similarity index 71% rename from src/NORS-IQIntervals.cpp rename to src/NORSIQChord2Scale.cpp index 4d3a8b9..63d959b 100644 --- a/src/NORS-IQIntervals.cpp +++ b/src/NORSIQChord2Scale.cpp @@ -6,7 +6,7 @@ #define LIGHT_ON 1.f #define LIGHT_OFF 0.02f -struct NORS_IQIntervals : VenomModule { +struct NORSIQChord2Scale : VenomModule { enum ParamId { FOLD_PARAM, @@ -31,7 +31,7 @@ struct NORS_IQIntervals : VenomModule { dsp::SchmittTrigger trigIn; - NORS_IQIntervals() { + NORSIQChord2Scale() { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); configSwitch(FOLD_PARAM, 0.f, 1.f, 0.f, "Fold at octaves", {"Off", "On"}); configInput(TRIG_INPUT, "Trigger"); @@ -77,26 +77,26 @@ struct NORS_IQIntervals : VenomModule { }; -struct NORS_IQIntervalsWidget : VenomWidget { - NORS_IQIntervalsWidget(NORS_IQIntervals* module) { +struct NORSIQChord2ScaleWidget : VenomWidget { + NORSIQChord2ScaleWidget(NORSIQChord2Scale* module) { setModule(module); - setVenomPanel("NORS_IQIntervals"); - addParam(createLockableLightParamCentered>>(Vec(22.5f, 75.f), module, NORS_IQIntervals::FOLD_PARAM, NORS_IQIntervals::FOLD_LIGHT)); - addInput(createInputCentered(Vec(22.5f,120.f), module, NORS_IQIntervals::TRIG_INPUT)); - addInput(createInputCentered(Vec(22.5f,160.f), module, NORS_IQIntervals::CHORD_INPUT)); - addOutput(createOutputCentered(Vec(22.5f,215.f), module, NORS_IQIntervals::TRIG_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,255.f), module, NORS_IQIntervals::ROOT_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,295.f), module, NORS_IQIntervals::LENGTH_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,335.f), module, NORS_IQIntervals::INTERVALS_OUTPUT)); + setVenomPanel("NORSIQChord2Scale"); + addParam(createLockableLightParamCentered>>(Vec(22.5f, 85.f), module, NORSIQChord2Scale::FOLD_PARAM, NORSIQChord2Scale::FOLD_LIGHT)); + addInput(createInputCentered(Vec(22.5f,125.f), module, NORSIQChord2Scale::TRIG_INPUT)); + addInput(createInputCentered(Vec(22.5f,165.f), module, NORSIQChord2Scale::CHORD_INPUT)); + addOutput(createOutputCentered(Vec(22.5f,215.f), module, NORSIQChord2Scale::TRIG_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,255.f), module, NORSIQChord2Scale::ROOT_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,295.f), module, NORSIQChord2Scale::LENGTH_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,335.f), module, NORSIQChord2Scale::INTERVALS_OUTPUT)); } void step() override { VenomWidget::step(); - NORS_IQIntervals* mod = dynamic_cast(this->module); + NORSIQChord2Scale* mod = dynamic_cast(this->module); if(mod) { - mod->lights[NORS_IQIntervals::FOLD_LIGHT].setBrightness(mod->params[NORS_IQIntervals::FOLD_PARAM].getValue() ? LIGHT_ON : LIGHT_OFF); + mod->lights[NORSIQChord2Scale::FOLD_LIGHT].setBrightness(mod->params[NORSIQChord2Scale::FOLD_PARAM].getValue() ? LIGHT_ON : LIGHT_OFF); } } }; -Model* modelNORS_IQIntervals = createModel("NORS_IQIntervals"); +Model* modelNORSIQChord2Scale = createModel("NORSIQChord2Scale"); diff --git a/src/plugin.cpp b/src/plugin.cpp index 7586430..b973886 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -91,7 +91,7 @@ void init(Plugin* p) { p->addModel(modelMixSend); p->addModel(modelMixSolo); p->addModel(modelNORS_IQ); - p->addModel(modelNORS_IQIntervals); + p->addModel(modelNORSIQChord2Scale); p->addModel(modelPolyClone); p->addModel(modelPolyUnison); p->addModel(modelRecurse); diff --git a/src/plugin.hpp b/src/plugin.hpp index 0da136a..bc94280 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -27,7 +27,7 @@ extern Model* modelMixPan; extern Model* modelMixSend; extern Model* modelMixSolo; extern Model* modelNORS_IQ; -extern Model* modelNORS_IQIntervals; +extern Model* modelNORSIQChord2Scale; extern Model* modelPolyClone; extern Model* modelPolyUnison; extern Model* modelRecurse; From bc63c2d2e906bcedc05925e530a2f0482eb3c9d7 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sat, 30 Dec 2023 15:09:16 -0500 Subject: [PATCH 11/81] threshold oversample bug fix --- src/Logic.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/Logic.cpp b/src/Logic.cpp index 6adddfa..2daf47b 100644 --- a/src/Logic.cpp +++ b/src/Logic.cpp @@ -65,9 +65,9 @@ struct Logic : VenomModule { configSwitch(OVER_PARAM, 0.f, 5.f, 0.f, "Oversampling", {"Off", "x2", "x4", "x8", "x16", "x32"}); configSwitch(DC_PARAM, 0.f, 1.f, 0.f, "DC block", {"Off", "On"}); - configParam(HIGH_PARAM, -10.f, 10.f, 2.f, "Rise threshold", "V"); + configParam(HIGH_PARAM, -10.f, 10.f, 2.f, "High threshold", "V"); configInput(HIGH_INPUT,"Rise threshold"); - configParam(LOW_PARAM, -10.f, 10.f, 0.1f, "Fall threshold", "V"); + configParam(LOW_PARAM, -10.f, 10.f, 0.1f, "Low threshold", "V"); configInput(LOW_INPUT,"Fall threshold"); std::vector recycleLabels = {"None"}; @@ -161,8 +161,8 @@ struct Logic : VenomModule { float_4 outCnt[CHANNEL_COUNT]{}, outState[CHANNEL_COUNT][4]{}, outVal[CHANNEL_COUNT][4]{}; for (int o=0; o1) { - highThresh = highUpSample.process(o>1 ? 0.f : highThresh * oversample); - lowThresh = lowUpSample.process(o>1 ? 0.f : lowThresh * oversample); + highThresh = highUpSample.process(o ? 0.f : highThresh * oversample); + lowThresh = lowUpSample.process(o ? 0.f : lowThresh * oversample); } float_4 outSum[CHANNEL_COUNT][4]{}; for (int c=0; c Date: Mon, 1 Jan 2024 00:39:18 -0500 Subject: [PATCH 12/81] FixedSwitchQuantity --- src/ShapedVCA.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/ShapedVCA.cpp b/src/ShapedVCA.cpp index 27bf4a3..2989d14 100644 --- a/src/ShapedVCA.cpp +++ b/src/ShapedVCA.cpp @@ -51,10 +51,10 @@ struct ShapedVCA : VenomModule { ShapedVCA() { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); - configSwitch(RANGE_PARAM, 0.f, 5.f, 0.f, "Level Range", {"0-1", "0-2", "0-10", "+/- 1", "+/- 2", "+/- 10"}); - configSwitch(MODE_PARAM, 0.f, 1.f, 0.f, "VCA Mode", {"Unipolar clipped CV (2 quadrant)", "Bipolar unclipped CV (4 quadrant)"}); - configSwitch(CLIP_PARAM, 0.f, 2.f, 0.f, "Output Clipping", {"Off", "Hard clip", "Soft clip"}); - configSwitch(OVER_PARAM, 0.f, 4.f, 0.f, "Oversample", {"Off", "x4", "x8", "x16", "x32"}); + configSwitch(RANGE_PARAM, 0.f, 5.f, 0.f, "Level Range", {"0-1", "0-2", "0-10", "+/- 1", "+/- 2", "+/- 10"}); + configSwitch(MODE_PARAM, 0.f, 1.f, 0.f, "VCA Mode", {"Unipolar clipped CV (2 quadrant)", "Bipolar unclipped CV (4 quadrant)"}); + configSwitch(CLIP_PARAM, 0.f, 2.f, 0.f, "Output Clipping", {"Off", "Hard clip", "Soft clip"}); + configSwitch(OVER_PARAM, 0.f, 4.f, 0.f, "Oversample", {"Off", "x4", "x8", "x16", "x32"}); configParam(LEVEL_PARAM, 0.f, 1.f, 1.f, "Level", "x", 0.f, 1.f, 0.f); configInput(LEVEL_INPUT, "Level CV"); configParam(BIAS_PARAM, 0.f, 0.5f, 0.f, "Level CV bias", " V", 0.f, 10.f, 0.f); @@ -64,7 +64,7 @@ struct ShapedVCA : VenomModule { configInput(RIGHT_INPUT, "Right"); configOutput(LEFT_OUTPUT, "Left"); configOutput(RIGHT_OUTPUT, "Right"); - configSwitch(OFFSET_PARAM, 0.f, 2.f, 0.f, "Output offset", {"None", "-5 V", "+5 V"}); + configSwitch(OFFSET_PARAM, 0.f, 2.f, 0.f, "Output offset", {"None", "-5 V", "+5 V"}); configBypass(LEFT_INPUT, LEFT_OUTPUT); configBypass(inputs[RIGHT_INPUT].isConnected() ? RIGHT_INPUT : LEFT_INPUT, RIGHT_OUTPUT); } From 8d1f0a4a339bf914ea8154e5a5f72bf9e530fc17 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 1 Jan 2024 00:39:44 -0500 Subject: [PATCH 13/81] BenjolinOsc shell --- plugin.json | 12 + res/Coal/BenjolinOsc_Coal.svg | 1001 ++++++++++++++++++++++++++++ res/Danger/BenjolinOsc_Danger.svg | 1001 ++++++++++++++++++++++++++++ res/Earth/BenjolinOsc_Earth.svg | 1001 ++++++++++++++++++++++++++++ res/Ivory/BenjolinOsc_Ivory.svg | 1015 +++++++++++++++++++++++++++++ src/BenjolinOsc.cpp | 129 ++++ src/plugin.cpp | 1 + src/plugin.hpp | 1 + 8 files changed, 4161 insertions(+) create mode 100644 res/Coal/BenjolinOsc_Coal.svg create mode 100644 res/Danger/BenjolinOsc_Danger.svg create mode 100644 res/Earth/BenjolinOsc_Earth.svg create mode 100644 res/Ivory/BenjolinOsc_Ivory.svg create mode 100644 src/BenjolinOsc.cpp diff --git a/plugin.json b/plugin.json index 6f4d3c5..26c851b 100644 --- a/plugin.json +++ b/plugin.json @@ -13,6 +13,18 @@ "donateUrl": "", "changelogUrl": "https://github.com/DaveBenham/VenomModules/blob/main/changelog.md", "modules": [ + { + "slug": "BenjolinOsc", + "name": "Benjolin Oscillator", + "description": "Complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin", + "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#benjolin-oscillator", + "tags": [ + "Low-frequency oscillator", + "Oscillator", + "Random", + "Sequencer" + ] + }, { "slug": "BernoulliSwitch", "name": "Bernoulli Switch", diff --git a/res/Coal/BenjolinOsc_Coal.svg b/res/Coal/BenjolinOsc_Coal.svg new file mode 100644 index 0000000..c1f6562 --- /dev/null +++ b/res/Coal/BenjolinOsc_Coal.svg @@ -0,0 +1,1001 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/BenjolinOsc_Danger.svg b/res/Danger/BenjolinOsc_Danger.svg new file mode 100644 index 0000000..d5682b5 --- /dev/null +++ b/res/Danger/BenjolinOsc_Danger.svg @@ -0,0 +1,1001 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/BenjolinOsc_Earth.svg b/res/Earth/BenjolinOsc_Earth.svg new file mode 100644 index 0000000..12cb41a --- /dev/null +++ b/res/Earth/BenjolinOsc_Earth.svg @@ -0,0 +1,1001 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/BenjolinOsc_Ivory.svg b/res/Ivory/BenjolinOsc_Ivory.svg new file mode 100644 index 0000000..bbfbcb9 --- /dev/null +++ b/res/Ivory/BenjolinOsc_Ivory.svg @@ -0,0 +1,1015 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/BenjolinOsc.cpp b/src/BenjolinOsc.cpp new file mode 100644 index 0000000..13766be --- /dev/null +++ b/src/BenjolinOsc.cpp @@ -0,0 +1,129 @@ +// Venom Modules (c) 2023 Dave Benham +// Licensed under GNU GPLv3 + +#include "plugin.hpp" + +#define LIGHT_ON 1.f +#define LIGHT_OFF 0.02f + +struct BenjolinOsc : VenomModule { + + enum ParamId { + OVER_PARAM, + FREQ1_PARAM, + FREQ2_PARAM, + RUNG1_PARAM, + RUNG2_PARAM, + CV1_PARAM, + CV2_PARAM, + PATTERN_PARAM, + CHAOS_PARAM, + DOUBLE_PARAM, + PARAMS_LEN + }; + enum InputId { + CV1_INPUT, + CV2_INPUT, + CHAOS_INPUT, + DOUBLE_INPUT, + CLOCK_INPUT, + INPUTS_LEN + }; + enum OutputId { + TRI1_OUTPUT, + TRI2_OUTPUT, + PULSE1_OUTPUT, + PULSE2_OUTPUT, + XOR_OUTPUT, + PWM_OUTPUT, + RUNG_OUTPUT, + OUTPUTS_LEN + }; + enum LightId { + CHAOS_LIGHT, + DOUBLE_LIGHT, + LIGHTS_LEN + }; + + BenjolinOsc() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + configSwitch(OVER_PARAM, 0.f, 5.f, 0.f, "Oversample", {"Off", "x2", "x4", "x8", "x16", "x32"}); + configParam(FREQ1_PARAM, -1.f, 1.f, 0.f, "Oscillator 1 frequency"); + configParam(FREQ2_PARAM, -1.f, 1.f, 0.f, "Oscillator 2 frequency"); + configParam(RUNG1_PARAM, -1.f, 1.f, 0.f, "Oscillator 1 rungler modulation amount"); + configParam(RUNG2_PARAM, -1.f, 1.f, 0.f, "Oscillator 2 rungler modulation amount"); + configParam(CV1_PARAM, -1.f, 1.f, 0.f, "Oscillator 1 CV modulation amount"); + configParam(CV2_PARAM, -1.f, 1.f, 0.f, "Oscillator 2 CV modulation amount"); + configInput(CV1_INPUT, "Oscillator 1 CV modulation"); + configInput(CV2_INPUT, "Oscillator 2 CV modulation"); + configOutput(TRI1_OUTPUT, "Oscillator 1 triangle"); + configOutput(TRI2_OUTPUT, "Oscillator 2 triangle"); + configOutput(PULSE1_OUTPUT, "Oscillator 1 pulse"); + configOutput(PULSE2_OUTPUT, "Oscillator 2 pulse"); + configParam(PATTERN_PARAM, -1.f, 1.f, 0.f, "Rungler cycle chance"); + configSwitch(CHAOS_PARAM, 0.f, 1.f, 0.f, "Maximum chaos", {"Off", "On"}); + configSwitch(DOUBLE_PARAM, 0.f, 1.f, 0.f, "Double clock", {"Off", "On"}); + configInput(CHAOS_INPUT,"Maximum chaos trigger"); + configInput(DOUBLE_INPUT,"Double clock trigger"); + configInput(CLOCK_INPUT,"Clock"); + configOutput(XOR_OUTPUT,"XOR"); + configOutput(PWM_OUTPUT,"PWM"); + configOutput(RUNG_OUTPUT,"Rungler"); + } + + void process(const ProcessArgs& args) override { + VenomModule::process(args); + } +}; + +struct BenjolinOscWidget : VenomWidget { + + struct OverSwitch : GlowingSvgSwitchLockable { + OverSwitch() { + addFrame(Svg::load(asset::plugin(pluginInstance,"res/smallOffButtonSwitch.svg"))); + addFrame(Svg::load(asset::plugin(pluginInstance,"res/smallYellowButtonSwitch.svg"))); + addFrame(Svg::load(asset::plugin(pluginInstance,"res/smallGreenButtonSwitch.svg"))); + addFrame(Svg::load(asset::plugin(pluginInstance,"res/smallLightBlueButtonSwitch.svg"))); + addFrame(Svg::load(asset::plugin(pluginInstance,"res/smallBlueButtonSwitch.svg"))); + addFrame(Svg::load(asset::plugin(pluginInstance,"res/smallPurpleButtonSwitch.svg"))); + } + }; + + BenjolinOscWidget(BenjolinOsc* module) { + setModule(module); + setVenomPanel("BenjolinOsc"); + addParam(createLockableParamCentered(Vec(24.865,96.097), module, BenjolinOsc::FREQ1_PARAM)); + addParam(createLockableParamCentered(Vec(63.288,96.097), module, BenjolinOsc::FREQ2_PARAM)); + addParam(createLockableParamCentered(Vec(120.923,76.204), module, BenjolinOsc::OVER_PARAM)); + addParam(createLockableParamCentered(Vec(24.865,148.33), module, BenjolinOsc::RUNG1_PARAM)); + addParam(createLockableParamCentered(Vec(63.288,148.33), module, BenjolinOsc::RUNG2_PARAM)); + addParam(createLockableParamCentered(Vec(120.923,148.33), module, BenjolinOsc::PATTERN_PARAM)); + addParam(createLockableParamCentered(Vec(24.865,202.602), module, BenjolinOsc::CV1_PARAM)); + addParam(createLockableParamCentered(Vec(63.288,202.602), module, BenjolinOsc::CV2_PARAM)); + addParam(createLockableLightParamCentered>>(Vec(101.712,202.602), module, BenjolinOsc::CHAOS_PARAM, BenjolinOsc::CHAOS_LIGHT)); + addParam(createLockableLightParamCentered>>(Vec(140.135,202.602), module, BenjolinOsc::DOUBLE_PARAM, BenjolinOsc::DOUBLE_LIGHT)); + addInput(createInputCentered(Vec(24.865,235.665), module, BenjolinOsc::CV1_INPUT)); + addInput(createInputCentered(Vec(63.288,235.665), module, BenjolinOsc::CV2_INPUT)); + addInput(createInputCentered(Vec(101.712,235.665), module, BenjolinOsc::CHAOS_INPUT)); + addInput(createInputCentered(Vec(140.135,235.665), module, BenjolinOsc::DOUBLE_INPUT)); + addOutput(createOutputCentered(Vec(24.865,288.931), module, BenjolinOsc::TRI1_OUTPUT)); + addOutput(createOutputCentered(Vec(63.288,288.931), module, BenjolinOsc::TRI2_OUTPUT)); + addOutput(createOutputCentered(Vec(101.712,288.931), module, BenjolinOsc::XOR_OUTPUT)); + addInput(createInputCentered(Vec(140.135,288.931), module, BenjolinOsc::CLOCK_INPUT)); + addOutput(createOutputCentered(Vec(24.865,330.368), module, BenjolinOsc::PULSE1_OUTPUT)); + addOutput(createOutputCentered(Vec(63.288,330.368), module, BenjolinOsc::PULSE2_OUTPUT)); + addOutput(createOutputCentered(Vec(101.712,330.368), module, BenjolinOsc::PWM_OUTPUT)); + addOutput(createOutputCentered(Vec(140.135,330.368), module, BenjolinOsc::RUNG_OUTPUT)); + } + + void step() override { + VenomWidget::step(); + BenjolinOsc* mod = dynamic_cast(this->module); + if(mod) { + mod->lights[BenjolinOsc::CHAOS_LIGHT].setBrightness(mod->params[BenjolinOsc::CHAOS_PARAM].getValue() ? LIGHT_ON : LIGHT_OFF); + mod->lights[BenjolinOsc::DOUBLE_LIGHT].setBrightness(mod->params[BenjolinOsc::DOUBLE_PARAM].getValue() ? LIGHT_ON : LIGHT_OFF); + } + } +}; + +Model* modelBenjolinOsc = createModel("BenjolinOsc"); diff --git a/src/plugin.cpp b/src/plugin.cpp index b973886..689d004 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -74,6 +74,7 @@ void init(Plugin* p) { pluginInstance = p; // Add modules here + p->addModel(modelBenjolinOsc); p->addModel(modelBernoulliSwitch); p->addModel(modelBernoulliSwitchExpander); p->addModel(modelCloneMerge); diff --git a/src/plugin.hpp b/src/plugin.hpp index bc94280..8561985 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -10,6 +10,7 @@ using namespace rack; extern Plugin* pluginInstance; // Declare each Model, defined in each module source file +extern Model* modelBenjolinOsc; extern Model* modelBernoulliSwitch; extern Model* modelBernoulliSwitchExpander; extern Model* modelCloneMerge; From 5e266348c481c2c21ab7aeaf8ebb562db77fad23 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 4 Jan 2024 09:27:41 -0500 Subject: [PATCH 14/81] Benjolin fully functional! (bug is it bug free?) --- src/BenjolinOsc.cpp | 113 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 111 insertions(+), 2 deletions(-) diff --git a/src/BenjolinOsc.cpp b/src/BenjolinOsc.cpp index 13766be..a881b09 100644 --- a/src/BenjolinOsc.cpp +++ b/src/BenjolinOsc.cpp @@ -2,6 +2,7 @@ // Licensed under GNU GPLv3 #include "plugin.hpp" +#include "Filter.hpp" #define LIGHT_ON 1.f #define LIGHT_OFF 0.02f @@ -44,12 +45,26 @@ struct BenjolinOsc : VenomModule { DOUBLE_LIGHT, LIGHTS_LEN }; + + int oversample = -1; + std::vector oversampleValues = {1,2,4,8,16,32}; + OversampleFilter_4 upSample, downSampleA, downSampleB; + dsp::SchmittTrigger clockTrig; + simd::float_4 osc{0.f,0.f,1.f,1.f}, triMask{1.f,1.f,0.f,0.f}, dir{1.f,1.f,0.f,0.f}, + in{}, outA, outB{}; + float *tri1=&osc[0], *tri2=&osc[1], *pul1=&osc[2], *pul2=&osc[3], *dir1=&dir[0], *dir2=&dir[1], + *tri1Out=&outA[0], *tri2Out=&outA[1], *pul1Out=&outA[2], *pul2Out=&outA[3], + *xorOut=&outB[0], *pwmOut=&outB[1], *rungOut=&outB[2], + *cv1In=&in[0], *cv2In=&in[1], *clockIn=&in[2], + xorVal, rung; + unsigned char asr = 37; + bool chaosIn=false, dblIn=false; BenjolinOsc() { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); configSwitch(OVER_PARAM, 0.f, 5.f, 0.f, "Oversample", {"Off", "x2", "x4", "x8", "x16", "x32"}); - configParam(FREQ1_PARAM, -1.f, 1.f, 0.f, "Oscillator 1 frequency"); - configParam(FREQ2_PARAM, -1.f, 1.f, 0.f, "Oscillator 2 frequency"); + configParam(FREQ1_PARAM, -9.3f, 9.0f, 0.f, "Oscillator 1 frequency"); + configParam(FREQ2_PARAM, -9.3f, 9.0f, 0.f, "Oscillator 2 frequency"); configParam(RUNG1_PARAM, -1.f, 1.f, 0.f, "Oscillator 1 rungler modulation amount"); configParam(RUNG2_PARAM, -1.f, 1.f, 0.f, "Oscillator 2 rungler modulation amount"); configParam(CV1_PARAM, -1.f, 1.f, 0.f, "Oscillator 1 CV modulation amount"); @@ -71,8 +86,102 @@ struct BenjolinOsc : VenomModule { configOutput(RUNG_OUTPUT,"Rungler"); } + void onSampleRateChange() override { + float rate = APP->engine->getSampleRate(); + int maxOver; + if (rate>384000.f) + maxOver = 1; + else if (rate>192000.f) + maxOver = 2; + else if (rate>96000.f) + maxOver = 3; + else if (rate>48000.f) + maxOver = 4; + else + maxOver = 5; + if (params[OVER_PARAM].getValue()>maxOver) + params[OVER_PARAM].setValue(maxOver); + paramQuantities[OVER_PARAM]->maxValue = maxOver; + } + void process(const ProcessArgs& args) override { VenomModule::process(args); + if (oversample != oversampleValues[params[OVER_PARAM].getValue()]) { + oversample = oversampleValues[params[OVER_PARAM].getValue()]; + upSample.setOversample(oversample); + downSampleA.setOversample(oversample); + downSampleB.setOversample(oversample); + } + simd::float_4 k = triMask * 60.f * args.sampleTime / oversample; + bool cv1Connected = inputs[CV1_INPUT].isConnected(), + cv2Connected = inputs[CV2_INPUT].isConnected(), + clockConnected = inputs[CLOCK_INPUT].isConnected(), + chaos = params[CHAOS_PARAM].getValue(), + dbl = params[DOUBLE_PARAM].getValue(); + int trig; + *cv1In = inputs[CV1_INPUT].getVoltage(); + *cv2In = inputs[CV2_INPUT].getVoltage(); + *clockIn = inputs[CLOCK_INPUT].getVoltage(); + if ((inputs[CHAOS_INPUT].getVoltage()>=2.f) != chaosIn) { + chaosIn = !chaosIn; + if (chaosIn) { + chaos = !chaos; + params[CHAOS_PARAM].setValue(chaos); + } + } + if ((inputs[DOUBLE_INPUT].getVoltage()>=2.f) != dblIn) { + dblIn = !dblIn; + if (dblIn) { + dbl = !dbl; + params[DOUBLE_PARAM].setValue(dbl); + } + } + for (int o=0; o1 && (cv1Connected || cv2Connected || clockConnected)){ + in = upSample.process(o ? simd::float_4::zero() : in * oversample); + } + simd::float_4 freq = { + params[FREQ1_PARAM].getValue() + (cv1Connected ? *cv1In : *tri2) * 0.9f * params[CV1_PARAM].getValue() + rung * 0.9f * params[RUNG1_PARAM].getValue(), + params[FREQ2_PARAM].getValue() + (cv2Connected ? *cv2In : *tri1) * 0.9f * params[CV2_PARAM].getValue() + rung * 0.9f * params[RUNG2_PARAM].getValue(), + 0.f,0.f + }; + simd::ifelse(freq<-9.3f, -9.3f, freq); + osc += simd::pow(2.f, freq) * k * dir; + if (*tri1 > 1.f || *tri1 < -1.f) { + *tri1 = *dir1 + *dir1 - *tri1; + *dir1 *= -1.f; + } + if (*tri2 > 1.f || *tri2 < -1.f) { + *tri2 = *dir2 + *dir2 - *tri2; + *dir2 *= -1.f; + } + if (*pul1 != math::sgn(*tri1)) *pul1*=-1.f; + if (*pul2 != math::sgn(*tri2)) *pul2*=-1.f; + *pwmOut = *tri2>*tri1 ? 5.f : -5.f; + trig = clockTrig.processEvent( clockConnected ? *clockIn : *pul2, -1.f, 1.f); + if (trig>0 || (trig && dbl)){ + float ptrn = chaos ? 0.5f : params[PATTERN_PARAM].getValue(); + unsigned char data = (ptrn>=*tri1 || ptrn>=10.f) ^ (chaos ? ((asr&32)>>5)^((asr&64)>>6) : (asr&128)>>7); + asr = (asr<<1)|data; + xorVal = asr&1 ? 5.f : -5.f; + rung = (((asr&2)>>1)+((asr&8)>>2)+((asr&64)>>4)) * 1.428571f - 5.f; + } + *xorOut = xorVal; + *rungOut = rung; + if (oversample>1) { + outA = downSampleA.process(osc*5.f); + outB = downSampleB.process(outB); + } + else + outA = osc*5.f; + } + outputs[TRI1_OUTPUT].setVoltage(*tri1Out); + outputs[TRI2_OUTPUT].setVoltage(*tri2Out); + outputs[PULSE1_OUTPUT].setVoltage(*pul1Out); + outputs[PULSE2_OUTPUT].setVoltage(*pul2Out); + outputs[XOR_OUTPUT].setVoltage(*xorOut); + outputs[PWM_OUTPUT].setVoltage(*pwmOut); + outputs[RUNG_OUTPUT].setVoltage(*rungOut); } }; From 788ddcfed30e8e60f052db897a17cf8b6ce02330 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 4 Jan 2024 10:53:03 -0500 Subject: [PATCH 15/81] Add BenjolinOsc doc image --- doc/BenjolinOsc.png | Bin 0 -> 50104 bytes src/BenjolinOsc.cpp | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 doc/BenjolinOsc.png diff --git a/doc/BenjolinOsc.png b/doc/BenjolinOsc.png new file mode 100644 index 0000000000000000000000000000000000000000..52b3ac151b569017fbffb523b712a2ba6910496f GIT binary patch literal 50104 zcmX7vcT|$^`^VWhaGQcVcjds5niDe9ER}L(t{@i;mE7e5QOwGbBey-~Peu2h1ft&o6>00;yUI%ap|6z{VF z1OmtMA$Z>&2gRgJVZYE5j|R&an?>%iO@$BVt2!jq?WUnWqN>Ymi=aepuC_w?GcUcE@z?Vx;} z(JuBeVvqVqZ~U`hmD@U@(HIN{7n}d(hpvx)8|WNA|7FB6rK3jQR`PUFQHv8$L5vJA znBE?@Q93>TOctfodeG2?ws;F)ujnUjM=dMM04KebkDBXqWxP!Ir_WrlNSGF9Sd>{N z1T@8LSV9d14d|um>zNtvNZFdLF&YL7W6z{j4jaCIk9N~4U@57nyyAZC7C}f4DHY#Z z-=5QEJP-Lye_!|H307|6X)@m10siP8vqJ@S2>u;4DW8Tq_WP}7K`(6@PGc3hLa3N^dE!{JzYsmO9?bZ3b?1TprH_p_ zNW_GV88>G*6rYJu^F9JK2K`={UuRieE}yZ_L-cSF$m` zb`fP!>+_PP>Q4TmYOGaL(~r5Uau|L4u{(>+Hf^iol8nn$_V4cpYAQO2q~K0bX^9S? z=HVcBnq|vak=7~idYPCg2Q@wFq~ujxjEZBH>f6P#?gvrkE{=xiA9+=ww+f1Rt%P?! zEFmrltA0yJSsi=6G{NHj`V=MUYkX-!VCLs6`Bd@qi`Dk%q+}RoaWaO9EoRnLzgU`z zV{%uzofv1CM&EgtV{l*d06ynar*NspgdsT#<%0)DuwOoixhEqLo7hL6>)<-w0|W2{ zn#+qAeYjj4gHwUjO>Mk@rgZo|n7%{P zjHFflsXhDh?zN8}J*FKl-o2}g%Jol1sqKm26(ej4&gUfj`U>uAT3W;&6i|w->=wvs zi`oTS6Qa!-#=;9zutgkjykX?D{sK~6oscS+m7SOEZ+9&XmVxhlZDC`Rgjv4DD7b1` zgb}c>!mR(Y>JpWdLK>g)cE}}7JvxR0PN6?4u+f?=?Z9Q{!z3XY8~0}cP}W0(9}I_1 zScsgga7;K(?XwvN%dZ*0TgRnKk5IrJMFP^sj_*`WVt{L%P#x>s@c28F`GL?`?qx3S zU?o2&+bnF|ob^>>2#u@QSGgf5j$B)^D_RgGP=5}5{!WqDk@$-25U$>Z=&&Q?=8&?1+!j`tmG@;(fNL*2Y0)P z-#NY5^YdDa-QANJ_<6|VhlWohNttdVq)g`zzI=#uo2j-4q}o597qJ7GS+|COijZEV zeYLNM*lAGh2~xUp4pE2y zc>o`PR8I3uL~P*CHDSqHvORl&>BsN-t|FWdNCT}0F^06o46qI@=Fhi%6A2pB>J0Wk zeb_p9$nqERF;ad%{}r}|J$qGwJl#?M^#SvS@}IbNv}M9}KYQ%mtIYgDsK}4r;Q)j1 z^%H(X63PD>Lg(P{@cRH0ke3riDz}Tf_S3k|lpPMVSL;SUa&mA@?&$s`Z;luP8CKta zu_yS$jl5d)3()CoIt=GqbecANz4lJnhcRU-)m?!MbGxC8GAoRfuIDR|{tkQE7nP@T zHdz*4COhY;&b1>eFF_yCLdMTFFq7Qvb*;NU!sYBf6*pF!bB-gr?|K7>Q*eHfcahz zxp4_0a*i&=O;kqQBM!Zw6C+jvodWXN!va3V7vXZKKya{_33Bo<`=iAza88r`jZn1F zqci<=#C1uAx92ECLSK+#PqBjDNwPV1b8)OWZ(5#mF{%0~bS(eX@zb>PPz!m6EA!P} zrQ$+KL8-8)u*4g*G3UU3|LDzGJ$h@k1nVvI6Z*c>B5ABG7-JoAMGQ*D_#C^UeSH`g zwxqQ30mKq)xNBi%0Qah1u!@d0Jb6k60*G_gii}Zi%m`}m zqSpnMiSb8H=vyDR)rFGZ!Zg1OmW~Y(F9v~63Qp*Bz$Rj{vvUQE1r5!@mV0y+O>@#2o5=Qy1`8ox*Q-Gp;+m40fPe^8l^@G4SS?FDUty7;y#R zCQCF}QmgxhOkLqpGSuzutwA|;xPZzkOuHAKZlI%^PO7AQxZ#JdkgMEB;+x11AOmkWKYw*_`Nv=%>#oS2 z#E1Vv_`R(w+<(EOuC9)nH%DWEo5tk>&}9GC)CviDX}xxnkg&&h;i^TI&O}=YwTivW zF4%eRSY+_#VdI~lqU_9WWz(Tr@WKu6=5QTWDyx-OT{J5l_~*af3y{K6O+o$rS{(W7 zWBqp{PH219OI=DnK>04JN$Zr7(DiCd)T|~=bD>SL5-M`Q@vkN(W7DVPm{_p(Da5ZQ zuv`Gn^zi>Yn1)J({3%b(dM8S7JqeM$y!gk4kzn^J5T6Jn3oChG#yCjrS$K_V2zkyA zH21Jt$A9eQMHOpOyn2&%1cxn#Akfcx*o%7|wgBrq!bN)8U$wM$`Yg%FtMzfVc!yi` zL3mvg)JGed68#o?ME8^-Hl#ySka^#$`Z6gdf+(clL16tiJtcz~bk63UwisjElp|lv z>oI&eGhfc-LoQ{P9*Qa@RZ{VjZ{NOudk(8V64(Tt7)HrB(u6)0n@8LxnNqGHMl5fp z3HWlpeFm3)-nmsIO$gYZWT zlV%gN$=D$@F35l#5X%nG&1d0*>|`&7G0wh>r&nLnb`V0agAWr_nOEOGdi01BrwzcH z0Y^w>O@N?Rf=T`JG;l))%1?^C7h5R-89z#bE?-rv%EYh3re`@Jap{DIHlguY7K>JT5 zrQN)pQ+}Rk2s?WGzXSIhPe}1ZQbYOsjsJuc?d^Pwq0mjY&;PqbllR+*C$MC~_hNbf zBJrJkSIz-iz85?G7V|${)#GzT*i?@5ZSE-wP`S0XhBI58m@Y+XUx%0I2#zNsTdog^ zG_5K|hDqCr%|$pv9VM$v1AzhXtt@4HT99ri<*)+RGh?pJ!)h>ZC(6qQ*;41{NcN*iWR1( zpty5bN6}6iZRaA+_7L68B4n~I5!`TBrs1=?k}6|bgWJV-=n#e>C|yf^o~mHhLh{~pfYFS z7UhhhlpE8`#R2PpKn~%Jg`f5^yd(~4pSh1YEQc%F#E&))6dlB%>$}mo7%~pY3HjKV zy;o1?I%&A20tH+{%BRJC8NpCCsY4TB1wM*g)1JtsbRpCV?STum5ldaqjNSQH(jlH7 zt#h{B@s#^xs6v*AedYl3X|Kqy$xe#jt`TE7%N)TjEo^6I8w7(k9O%MEvvXufD}TfB_3%)P0Y-aWG)!HWp^9ilqjhbBCBC5aFo4^6m@_F6BrvV#|Pn+sOR! z<34>OgKo4dE$wGeeCUNpZ2b1z)6AeMKs?@1@0||J&M_zBj6jQk3qf9pyp9jdsRX%vPHlI6m2>_=Np4gm!B9^QdaK5 zhOI*o>_H3m%;t`WLI(@nAl)3*>4I2Q*|Fo-B=oK=zdFDLpTfogF%9?!)>It|H2ZKYNx%JbPuq5B`t3k5qkm5)TBDWYY6U57|;*Gl# ztA2c0Hf88=BD#R=A>05TAw?kk8o09D_k3_4$TWweTvx-_hmCOfg^FNS-@JNs(^O^{1V@0P;x&erz!X48a8dR^>;$%1RYS>ve=%jf152(BVsKu?| zR_ZOhMD#83O6}B3Sh9&gc#M{2HubeF-kN~D!md~YF0SC#6B)TgdA+gTke->$`NwaM z9FOI@>9c6qUbh9x45^L-mo@x&nmXs@r~ZHK9CAenxo_w#;O z|IKZtwR>`M5*nuh2Y!2mIs4Y>;(uKrgu%kEzOI*e!2J4DiJ#z%42K(5It&bTBNdJ# z`_(}iNaSU5+t(oU|0ZH!!+KS}DwFXXd zrXK=E6p=b#zWp5u5M4FUKs@cj-R1eCh?8PsjQJKfLDMVUtqPW7W`CfMZ;&gd82B)T8X|TDp zYsLLL3&8kI{n39Dq3oOTJqm;$nF<}RIe?F>CAJRKfz;sL6P*=p%(i0x-qcOYs zT#(s|V2{)ICu>lN%r}IyFJk#$+++5>O$QssJ|q4PMIb#dBE02;7*_=I5_M%ax7W;? z!Y3MiMaEt(GvCddA?C`LoC4GmE$SW%a$h*Qwn?9R^MvC) z`kC_>GOt}w8pr`Yg(^Zb`lecfq^*M^Wj2lY*bs4crxYRL&%eJh+!_(vj1ti4PY`B$ z0E+v_kzD~j%2at&W*#>P+CQz#N@TJkfZ-p-wC<3lkF8~3KZXRw0bIEX&wb*-j2XnI z40Q@WgbNM*Lb&|^W+3FhklCx`ObadMM^i$;9skU<(iS6+Q%VLd>t)7&%bibx zh#4|lFAN-Q(uZ<>@d0xLcJqu9-jd^Q4}9u=L^ICRKGP`U{~Ot3p%g_6$ioR5PJzut z*O{dU>`?cl4Z}k>d-xHA2h7n=adxUCHn8>f>jPTgy$~YLhgLDsyM7}TtJ;;MH#>Jh z=&DtwS6mrHxUSSPMz|^VxYSMjS1;g=X2{eFA@fxq2DkwL8xjPUx88lfNIjkQ2VM=W zc}?>5^#`TZ&=&b&4qs{Fj((T+L&*awvxobatBx{C|2r(SWM8(U~z9i3+?Yd*43(L$iv8KfGK&b%MqfopZ|IZV;Jx_c}5L zS{V)*aLta{k+#!axX*{d?Bl8xihudS^z2!nR^RfWoqoldfSEQa%%~sYM9Wu>AcRbx zAAC>Er8Y)WKRCXAon-LnY1!^=E498iK zxiSB~7PDk^GAO> zNm7hJhJU~FdHsVITEn0H#0k7}{?ZYp-YLnNq0phR=sue9Na9lB+joG;C7gkn><2Ac zQP_O{6+{r{nc7N#!#VD{2vWq56`TnV>IMacQTHKg>>&=HX^;1VCm#xV6u@NK5WS~A z7}5icrTPmxv63Kig{0=*PHg`G;3%v`ODr@%q2AFyn7PP{LtNj>*Q{|o{YZJ`^hHkO zn!q^_iJ$>BEEDu75Ep90$v0%d4HX6FB~O|q5uaz%s@4t}Xy|L5ZB8fcf_vU~0`PXM zF>Sn__HPOW^g~+e{-P*~!sPuT4Y5MsjMy^pocdqd}tRqsgW07rrCU(b}D0q@>+ zPQV@sHB5;cCP8HIpviJRkIX;6J{d><5lW880lLN}t%n4ewi`mo=WR^wZx`@-Ta|Z2MydI24}B^YHco$bj*hl?#juV zD>CN94JX`A7PBY{(RN)dTPJ3Ux#odh18SivaNG^qns>fbla}I){exscC?{8y1O<b;sj{ipdj3ZPw;K5dMMi;H8x1!oL+ znN$J(gbTW9)GitC?3_!xkxeH_qP+MBYA63~|4o_hduE2(P_*y`9jw&#ZtJ2f4SG|K zt|stY4nA!-XKPF2-f*(T$ zF4$c=j%|Yq&n9ec(xyAgQ&7P0=c$Bfk%e}j0LtY?e@eqsIfuM(VeobF@5yhTqk})k z@jZI1t2fbhB^xgttqL$02$l**EJ4Gm6jt^~T~~LAvc7PJ=)~2p`!?+hs>!^a15$@^ zZua_fP7I}ND5AG%Pf@AANvI1|_AbBwrDU8%3(K1!r^=s14f!C%I7Z&m($fFAU;189 z9bPiJYe~-=wM87t{4`hsSMXSaMel9LavM+>1Y7x5k#UF~7rNAi5R#?^;11Kf}A?>ed74HX{wq-V| zRwhBTZ%6Z;V4kJ<(wqaeh;~k?{%lC&oF@O6wC-60turrZ)5hGp>w-*mdRmPT>yvQ^ zCi2%fd{7mbfp5RoWHXna{@}$I`FVMHc!UXjV{15&ACaqitd zSdV>9w^OnISfj5Zi5p^%JH^px)t|yaO9~`^ZI1 zsYT3dW>eIKhLZ<}riVxDU!t+S|jo zOc}P!0XN>$22!}M)>#+)%QOeZua6%2id5_0<82~6f*G>U z7kSZ2N4}=DzS)3OYHZC}p~Xg+u}G;Bih^%`XK71^idRE(4#Dk3(`mjRt4i zqB|%XQ`QV#Oq8_{!PdiSP`67h;{+Ttol4C~pkJHNW}!)}k#b%T%|M~Wes|G= zRrS8;sKj^T@f;`GCnFJgOR!hc&UL&U;o9_cxh<-0Uc|HWh-Edh>@2Q5ls)CozLK>x z)$Y$rwIrZ-PDxF+kC> zN-e?ZzM)vE<9S|-)07_mPwftNlW!r1nm!w|`%iw8PnYD6J5WQ2`mPY^IKom2TDZud3l zy4|;=RNa$_ZcnM=hLtYRIjGwFbLOe6YH0DNVhoP-O5JU zXP&rA3AU>I25pv&yR_#cuw?bZ0Q)D<59ILhMa)Jpug_;3*;>~o2Tmx~ImdIZMdzF0 zEB03UCGw&mWN-4kg z`_1Qs1Wf*}p1~jZsMJf_VO5?jIcuaw)UX_^-0249tl9K zf57ug7_Pv^6U_?uBk{-f!P+!_41KoZ9L&s2Zr!bKxn7bcAA3w(#c(a@Ie6wnA^?`4R6P?}&H}_w?c}tqlm8XTk2R50xdL`n9xByEIp=mg)Wz{U`vs zPHGRXYo!MHTE<&)iDs2D$jNiyz9VA+G3bJPre_3i8R5&n$anvL4-?mMEFJ%C!4m`^ z3-R#`P?epRA}#lua|$_r0J%m?0DtmTdKSyvXU5JlB18U~AEbmQB9tRv_!;G@P_ zjyop}wl=E&iyUe%9}1%PbG~t4wRx~Ndz%F(PHg^_HAnD=$|5P3bstIEtjnG&6I3yA z-oL*u?fx+aK2sB)DjZ&=)w2&MlEeu{;x7?8AvJiInw{4#tFflNnxR`;n;og391xx# zWcUwhdQ8esYO~Up(|I$2nS(NYl|gH(JTE zX_C)t{?+TgqwJ768kvv?wz1T_!~9f=Gr$GlUn6#*8ImOUc!hO%bT6pZ{8ko7K?r*3 zG&P{8$%Lk+QaAG2O{QG-dfOBJ+gRGg-%N`j_NsDa4t#AMKl2Y+Dij=ip$oKZc2Iek z*jnfO@uY$X0bS8EKNLYMwf(r9sxa@mbM^Gh-OYCosiBO zP0TIuXk|`53Ox6QGbj7{Kc=MWe$d^R&%h~Y_+iYfp&^_9BJk@VKnp%s?M}FxlU_bWAa5Y4$(3vD=%N*d(FN*M`K}_>XqQ+wc&Vfqye<216Nj*3^uX^4>t+FsZ zRoGv%hD-!S$o(_;18o%Cm3V*rU$PM=y%>vsst4f12*>zanubR|rO}FR6p?pn6Yv&C zXgF!O=F1gn(u7CLOzQ=;7JhyOTMlN9 z-GZ_sz4BYxDv%r;DHMRpq=T0px4}LmZlgJYiCut@rF+(7<^kYVfQadv;R19sbX4bS{)L=X>lZ+FUTwD zW4<2j0~I#&?rvc+*t;9w6IAzpwkH^>c7pI;$eyZn<$$08N8V5h1vIKd_kb(6)0_q& zXSck-=AQiFN-qjh^-dbK!E}7mQ6i91sA<~tK8p7K6B6VzduNaGJNsJKiIU&0^c|E% zfZOOSn3_}kpeez)l}P{x=~dG>3UxX( zj5u3jTP1=&eSn@0(t=N!IggI;>zv2E-;Cn8%3or(s?>Yup`JnwQ7|)ok&!u`!UYb6 zvJ=JF#V?AB4Y>@4AA&t$y8ZrY&TCj@yTB9KaAtLT&7RFu@oWp@x-8i%cOfGM);e$T zNWqcO9D@bOlq`RX)|za1h1Kk9WTqMEPYiRi@EP;KY#uI2&7pK@wtzHsqlCAWG043uH}5Hi2Jab)jwN_;bc^?UzM` z?1^LRKd2D#ZwiD|f&IPs12?AHuCPF%ial09+>rsHT+U@@((J1(lnd-A<0=Y}Shzro zdcQE4aE^1Z!6C@ zsz!5ag+|CJn#cCnU0yLltloV8;UG9zVYX3^oz|%YX4j9uXTIB`z7KA`X=J7Xf3=u% z&mBQHIuBppw4jpUEps>@YtKRJL{XY}o6fme| zlRsQ8GV`U#n5#N-U1j#26T9Lr@D%_3yB`MUiq&*XFEfXJkdT}0#zvfy-h9#hfcbX| zC=FoO1!(hJ7u{M~;fC}HuaF3EvXki3+GEHdQ1MDFva6lekpSRDX2coZ;pLx|q0BwxV$ty5hi19^3Cf^>{mk2sI>h%?MhV+%0$l=C z_wg)+)k^UWmWr1br$`hL(Jf>JW^;U&K^MHlT6yM3X}n8F-JAvNou2XY3OhQCY*kGJEn6ZW`5( z-u%Y{VSPWu)m9FR{n97lp-TeRp@&h{6sj((+$;}`JMc#Fb9+C?W9(K@ECq!t=u-JmGa#Ds6Y?MD!;K}_-G!xnPZU?1?K?bnn0yt!=MA~{ zV3RedVT`m@^$hi#I*J%~FM{e?PKx*#WaeeRW+U4cbqut{zRydqt~~$ttqs z0(bj!TGmG{2|&r>oOcz~%_jVUTde)7^ezd0&mNa+rRHiS;;ZIo6F7k@x3@M)`vrekSTH zmWi}6%OrKF!uR10D^(94QuBIft5pxHuqPlo<8b-h;jwpcW8ns%2_AjxXW#pub29e- zB~rXoA@?{05=)U*fatuuah;C@s(A?G_keD^YJf`5CEgZI)LB8wFH;xfGtqpkF0K9( z=yB8SY5OekyO^e?W;Bjhc7ECiI{x(K;Z6`A-LPD6BhmQ3ASg%d9_>^9+#VOzvo-x# zfuq(`#$J#IFMo>5P_O4Ptg5b`dkzfXc{cthXo)_9aHJ`uv|xb|KNX5@`>TQuN7bMgr`m@=;}R&-H1IbU!d)ID3oj#lm^4oAc%_mFmMo~H znMs$>E@c*);VcmM*HLgaSJa~AUKG&blW&Z_`X}-3vE_s0kn1(s#%%A8C_L#hs^zs2 z3P?M3oc8tVLH2+XaO6C~JQUV|Y-?{V>wrd2@R9qM_$jplJwi%?c$Uug>qeAK#X(NT zeE)=aof!{r*B=87JP+mi<(tM00>`qIHXhvjVGzBYtoP`1LoVrURxWRLK^wVL&^t(9 zy?ar1933z~TgWtz-b9qR1 zQdEiglOnLoDFw630=0(#XU+RK3H0p3-pntn3x|ms%5>7kdIZXLJqQ|72dTM_oP28% zxP63y;3!;V=T8w+@r1jlzzV|kS0?ol?4$Z@_!+=Mpy7acc%t0w1TY*pXz=LFOU%Nz z*S8%RxyOI#hc|vOpqkoAQ}YDK7au~M2HCKw!?C_>)e~6~YL!<7Q%`_q1}TW1NH>kP z(%-*B1M@AzEbG2qg}EV3?{9tiUX6Ope0l-bx_(>dEObg^<=V6d`SWQ zAk(e8&lC2K4FeV<=a`Y0g?uqWQTWUP90k+>kw)Ln`l9yl`;QmI4ZzMSI&uD{-$l7k z!fzhQw8llgI-0`z5rzL61=L&Rx8~Cx^gER3Nk>mE`%+d^#7%5brnQ>V(T4rRREx7A zB8(cdNP{EY4|rVrW!Y%n3=-nNaRW|i6ueFXKb$3T)dMqLcmeG(9)r=RKDDBeexvpk zz?pRZESjjUxI&Da)!E2eG*dC`S*e-8j%v|N_rqSQ)>mAi*88wx9qY>kl_UMs?o}SXmD;f<+Dl=! z$C5C2nFnhzl5gZ0c(umgzeLul&bY;t@ z1EmMaE2d;TsPbDVXsN~s{#*s`DnNdsn8Qb;A?77%>G@$Wg=X7FDa=JksRO@&ADdqm z@Y?0Rl|T@VJ?3j8ZJ2QTRoF9)>$gogorsg%$t*xc2%qZaY@G%+v=cJz?nX4#`+%Z{ zHg1(`FgIdO-{yhC!XXxMGjdS!J@AM#vNjpHq?EiQ=lujP{O3-|R0eKJ?KJ zK#&&lIRTQ_G#LomBL&E&uvE&?FCZH;A)gzQ@kiV<@gDY&XysIWsG7zt_Pb%1j~f<+ zI!IeS^SJfv)7v#jlp=M*#j+`(Y&q8b2Yc(PFxYKd3?W% zvp{Aksi|4c-lZHFilYxoos;|0Jpc89E-LTw6e)UZTbos47DbgWl|=#8?YQH^V^re^ zYPvowC>8wK`j^PTrVJA5c+&F!#uyKkfxL5ZC$Z44YAM>&-%5MdXWt zBIe^~GDsiaRiLaAKp7_xQ=33_Ir!03SIP9c^sj2)39R;7KpDh!L>7{@avt#p~z=EehF@ zOxP^Bkh(0$rM!DHx`>@<2`igkula;J{n#sD6JcJhp}b!vHfVXVeFu&E>Wkzhc-5$5 zoR8DDna&+r9W1d1;nYu2iUwXU;!~y->T;SQeo8?ruV!cFoD+pVp0SKsl!MNG&|~Ln z0fLn{dhfp%i_G-29>B49G8x<@G$% zp4=iiQV*UKMJ=;eehhVN$o2O1P^FQdTjGkqhEpHSNb1({k@}QtPM4T}9deIsq22Wr ztm0CqCq9NTy>@Qm9lX=<-quh#ci_%m_S$P;zqOqmU#ukOJVz`#gXVlYkUFaIK+RT< zDa=<9NsdJtZS$b$ZqR;y$1+PHEqFyoFtkLno8P<-9zHEeUi3cVo)2!wS|6NjMF9^- zWSOn6>3=L}-N%ZA`jWPmzh7h=TDi>|v#`UbbeguB7|0!pO#*KzJF{t|x}8CMDOJ7< zdX6rv2vs}EZh@USgCRbc{cGd| zm}i8O+}lYS(du*iuuwEc2K*zbR^O}r>K?f(fO8BUd5LD9zQarhR~p{BoyBv(E{Fdb zKS+6oF#YlF4eLBX?F3u(RoBC?j;D^i>8SvM3xPORABTi)+aS9ph+xyhvN;qyD+d#1CFSN|d=b^Dg%Q3Xl^hoGA~m>-TKRBK`dEi+O0e8xzi}E;BzG2R(*i3Ac<%ox7{M-Bh-Eqs+>qAofP*xxJ073LM{3q@{G~ef?eMkr z$;77awr-%R-9qFFQxLX`(DP-52^ME?SoZk>EKroarVN~dh0cj7lW5{<3-cD2q!O#_2%oYfq7%NcQZmqu zL7xpY#lIJXNz*P0PZ>~`G>|?k%bUHv+#r!UiEnHPb-h&a8~|^tIu%1vjCDn6>MTM7 z=YpqN%!u*ot=m)e7p*8Qi$YK`YN2=d0mn$Fhu*_4aW)kuU`KcuzA@#^nKbl5)%vtU z6n0~izEDl#W*~Ka@tw@xjt&ZvY*g6{YS{uGA|)2?*|fh*xC?tW8vkc=5Y&Q7*mz;h zc_j=j(RV5}?FO0VmB`ON9}V%Lmq29}X_FHSpL1W1=Kx%!>m=Z)S!p5gZfE_k8TU-d z=a&gkBTpTnnj`!k--SFxcSNF#I(f(rn%FFqL&qy5sh#jzsZu%!FhOw5+1q@C81e8E zYpK~kG=;B8aIWnLyueB3%;JwX;BFzVgLq-zucNw|Rxe`zc7i&A`nJ=|Ysi84wySFa zgh$40pb0m@s!n{WkReXEwL#!pFkyzS=1AD2>r1sch!m?)pOxSZP5xNLCFVTY#bq&x z$Wu$S121vVMW6|!U5BZ3Ip($`+mHqxF@S4dx%&Hy1QfbDA42ez&B5Yn2mwtJmmt`6 zk+;@fy0}2-9+52gWF~w*_jAIgsJS87)HQDc1aAJdGqi+4S)nr}T- z^neZ=T%^6-!R;7-Rd7e1@pOR+;)ovGbq608X+;M0C~ZYR;Z)2Er^8*3b1!0QBO=wy}aa5z>!sv_ZH^r|?vePrgDrUghUYw_n5ez{Y(GBcSmuKJb! zkQVRLc0^*W4!C9o=FNf#M8&Eg>*}DnnSiIxAo#(_T2OZ)K8({P_duu@xXJnL1&)6K z?oILIk>p*7mP~n<2)el3GE;jtK#wq(v=)qaMOKbL1`g06@SGTYkTLhy6N0V*IOGm| z(pu<(FxOdB6ac|%BEgeeJ$x-+gg=b&bh)y=KGjs4r}k*4Jv7MSNSgIxC?$-q_IvA56*U#a#Q>;?rp z$q`Xxlvey-*a1kv+O8s${v^vh+AeY88oU{Q+Ec^81s?<#WQM)<2kJu>Y58&MoviFlR0IZBfvv29 zHcJ>%ghwA_T|Cu?nSZ0i!vCE$9`#zJjC`_fIkS!!z3?}O=BE3=)WrcB2#I1do^wy03n5H~!i6sX}$d7&i98wARu$@LuO`nrB7(qiZ@ zsV=G=iOF3j$<{QB4Oe1ZiW)5^Obid?n~>$-7EZc~(sbEJPh&zjya;7hlGsjBYH%K7*1wh1S@q&l`}Ccyiy5UZ6DRmdnTb zyc6oLscejQekc$s=KyZR9TJ?z3J7O}0 zg8Y8oin0^2Jer$#85zHw6akvqoU8E6{+$V%a4Xmm0ccTCG6O<(A{%sbOYT0nnW6gT z)dgspdNf)gs<*(9rXu6+#CnDym$aw*Wu3}bU{g_M%cKOa>tRGMMwzw|K=5NG7o zD~wW@C=g-77(ZWWzQr8AWEUUjAWjBa?VdFRWIC#ha<9!9^S^vE#$kZPPN!YzbbEI9@E;J|2_c)W-gYY{C7Fd72SA(qMm4@0b~6or zqcB;wTFt=uu#$~6Wn;QN4U5KwT*cI!6ddkg`B9)Gr0X??^fjjVp52woQRI`Fw5TKd z+;iXkP#^GyO1851KzHxsr(Y!tHN5=&8BQGVrawG7j;qvh%5Nr#3CryPDyn`8D99lX zUG`pH#eL<(=0g%Bj|Ezd@sl(lbd3=dLsEn9ThgRN$ivfvNU{r}e7s0GB=Yjo^s_$# zUejxzKDuEjNeum~&xiJ544f3$I|RqqT=tiy#k!Nqpz14%;C#=!BF=BC=kyH{NkdxJ z(Le|dcTUcVIMBbn)YMGJ>ERFIpbn74P}k7u1+2Hx3#}w-re?a=KEsI!Xwth_mh|nD zMZ~oKy5PQCo-3lV5P9h*BPb{3cM#xo5q7QM2G3T@TXYd^K(T?-F=z*!RiBUAY!tpm zCrE&Jh_zFf6p#g76wvmAQ$$L(i->Y2xd0z+r7Q6RC-U8d9gZunAPwqq+wt6zC<@{x zVSpo5cE-1wG(je5z2AelG>cI52CYX#a@!WfMBQyJ0Pfxn*rAIY%nSJX)&{q~Mi5lG z)H(d3A8Y0H)x5l*N=(UiMDqt}(8m(^wWvEUI)YC1oDQX`5#slHF#@?08Rnpf}hSaLI}DK9cmVvf7?}@Df~@p=-S@ zMrmnMm}m`iuBfPX2SW(&@kk+8lYi{uKAz;4zf#rVw>$@0mSH-o{$ku9Nhv^S0z$&vp6x+Lkqr=V4-x(q)R=AMtlokSEkl>{OgOiQ zH^BPKOVf21BQkSBkA;y-FtJIbV~5C@KpMGGde(^IOET}SW*o72^$D5aq0LN~RlyxC zM3)4CbvH@N$0)ZMTM)x(K(RP>u|-Vobs%H{Xb5n_UYhu}lj@F2He3?0H17nCn$Eoc z@Qn8^@Hyaoz4^yVaD#~LfbgsX1)qU z#tUH`K|9`0O7OkWQ7!ZNorHJ6vXj8@7wgzx3YIVYiaco8u!BsI>Fqzz^E}4hYvgA0 zx8SAIKT*?FNVzFMN)Cf*!u1S_XBTYY6#XQBBKii=>l|2PRmLxI*BJ7>q+{7+Mf-#_ z$wT)eVQP=BDiEs6D%65h4Gt(E7CQwI66*5CLsS~VR7BVsS9`CbXyy-V7w#rU81gS|=LCl` z<20G0kN>niZc+%;XWyQkn+ci+rrTn^4trv_-d3;a*9g~bQZFNFZi!JdMDp>I!l))1 zXKeQkzwV({9Aq9GdBnu=ZRbhc>xWZ;0wUi}oV%0-C1_V&kd6Z7kX5kuE2UI>zxuL{j}rrU=sor9=`QcSLsyyAvG5yb*SuRh*KL-KIAnOS&bx@W$yM ztB1EI3&dVB%$53Ryfhv|pW$8(;JBQSA(CVqTa&(=*JM~ETp9vCI&;T#w8_ki{sF#`xWKu8iQMhWavmD^z5~N$h$a#g+WF`}T!Eskw}7>^yy;E)brtdz z#mD<+aL}^a*b>?dP5RNE@VRflFy2AbEVOj2HCX7m%x$xRf zhuvQxt6^S0d>aU_yh!n3HGTaae*hoIa^@_KOY;!ya^6Yuf!3QyTmQQaEpWkTTW9xw zR`r*{3_@nG^NV)eiaM1eyjKsNfLa)@n?@WBly8Rp3B!{kBR2qJt?i~m;j{$T0 zxK|0YC*3G+$LP!oIc0`c?U!$4agC5A@zD;g5QC^GWQc6$c$>xe3qM&~;EcS$e2sU0 zzrbL#Fr^`0;HnDw2g91YW1`=!*>3NxaA$Zyj&1if-G32Ie!bXXRVVsNE30H^4${jvk$Q?l&=a48$ClF)h{$Yw_{6Prq#F8g7kuH)4!5wuU`8Ijt9AgZQN zQ|)g4zv{WF5G_w}z6t(bHL+RCQO)G~(V=6Nxd`fuAQX35C6=IMFX!?QltjAg>IlOq z7t*exfx_`_j_~#N(6D9y$|~akkE$g2^~et9hDvh}bwjJU)eP|QvbTiM55-qoaM412 zZ9fJIM+x>yl|a6d+`bgDKOHk^1eH6D^wMJ2X-`8HkOe9IFU zmt?$LybX+P0_PX~vYYR?tfYT-k&)yDj5YsNv1|)1zt1#ibx8Dg7_<8(qZa@SuEFtP z)$7`RF%O`Tag|8=!y#Ykz#yQ)UJ&6r{s=v7fj^ooQpmyfu7Qzss4<_t-HA{K;guG#Y0kdXHjLO6BhWQ4p@w}K|*V4VO{7pv!2#E4p9rFESLpPpwLZ`w&pP#mmWnNwe!Y7d$ z9=gH@G2GJq`6eVqwFIvPn;2*1sHa>a)Eq|q=am^I{z6qs)R>MCNqalOD)cxO6U-l< z=ns8Uz?N?AD}xI+abr62E~cOa@>a~-TRM@Hvp~p7BK3MSoKS5Ng)H|^W2eokv12D2 zlRqkf#u(*qxK;g-F|<1Nn_Y;FewfxY+|-giXP1yR%vI|Shl08U=TH2qp-zPOa1@b} z1VOXI3{7s{o7gF#u_6l1r(MXn zq-3)1hSeoRO{AKUzEH#7i&qfpb@AN^eB)n@->$(7rJ5|VWP@xjp7uSntc=*9!K;;z z3ECG33_hSAK6V#8V#Jazx}({3z^r6fSm8a@tb`O!tP0liyb#es}_8Q$|k<;$cD z0hTn-F@R7E0gkETCNMZ5$9x-70%`7Fbj?1V>DmLae__x$chap#qX4JQv|bb0S^9)2 zS+`tfn~%u!_?wYw4v;eePVz;@GqxCL^#ej4+?@%bcbu~)NOoaiLG4o*+sELXd3IBJ zQ#3|7GQL3?{tFRXlYP~z-X-6Z)yAD$% z_X+mFXodz~0@6E&6)?g!@rL-9z)|0&ImH1{rQ!jgFejG!4I2?p6MS-4jJh2=!0j1x zPd5pM3pDSHVVHrcU2}Gu)O<;P8m=;@uP`XRAV#{hLDfo6CXB$YL(Y7-FQ6Ps+7Dkq zDrHMFz8v64^ppDM$<3dA_0jl!*tBQHlHes3BMTFZ@PC<^^hc&a&=z3%tAtcra~ zd8gV2RkNKbC-K&_(2t{LxNgF7;26%<`GkR?-{-N~OKtrfXZ_$JG%nm_1U_eX2{eki z_bI)3nlNV z_iYX$Ep;>P`frhO^*R{vlipN*AZp}E@<&+H)lsXDc%odYi|%?HR1Bg&uk7G>XZ_NQ z!%f3fyPK*A+`6kYqC$uA+9&|<}?^CWhq z8&iDED)mJ)|I1lhTU#7lC72X|FKTr!e4d^zy7{<{Im3Tafm5*87*{#BbVvhEyg49`+kYM%Q#T8jn9n;0~vUL$2ZI#ih))-2R;I%2eEci+m zi&nuER;tYIJfH9uicugpe{n6g>h=xtN7;`Ps4dDp2Plamqj$jK(9v;sFmCUzQ;O${ z%0C^2?-3GU9wOw&?p?=NGp5||J3E^2vnZ`yHVu34>?`WXzEZHguAkJs+6zn!pY%M7 zgYx$1DYoK%d+SAg>{|OKV<1b~;F1f_HRD2YP4a9PoU!t(Xuy2q0>qLg zshRMo2-~ZZV-)2_Had&RtbG`bJ_F98%o(A}xgJS>HZ>eQ&N+Y*606-`$PpX+Zcc1x z^~THhxFI+RpOJ# zAwDj&Sj!r}Fn8w}e7_GSXEZSfuzqH~Spr|R=6km1%WA)1b)GI0D=&7-jA-jW@|hE^ z$nC}3b58L|-DWrJ&oIf`y>iLk-kIbmdc@~ne|~FqEH@K~O2|ac*78uC(E0PY3=t(@ zy0JrGo5pRrmZP@u1ttTJD35&H`mY|idTgz2q<@B$!H73bIRQ7Jf`DS#X32&znc)VE z;`qJt@=o4|6#?5Po`w3V`~?&KpGD!Vp4i^rL6pt+ApQU^sh<(B zy|imLC7X<-MOS3y=~R}R1*rTOJ^NzEzTcuy-$WaUcnnA4m$PO zr}a<2ioQNv;Q9qpWp(C5{smu*C!6Ch%`A?{bIjRh{3wn1Liedk$U0S!*3?;%i2FEH z0tQ{Z#@SmKC`(er`tUHYDtaON{+BUE^*#g6wb8fD@i%7HGpjk((d}&-Hg*z<>_N;T zo>d-0iPZxYcA*tFY`KEURKqqnlh9VIN9o26Q-Q|+ZtRS=IB;G2IATI;mz#HxWy+={ z7;^g2<;P;{L1Xe35%dXJXac)}+k%$U5h55oh0*^)CS!E|m>st90Ofcg_6yy@5k+!oPx&HQSrI z*|`U{#x9-Ic>yDQ;#a1-4bO~+@rFNPF(-MRb}f@FIH+hVX|TlYhJ!J!!OCbhsEkQy zEDc7Y2f5$ByCKrwp2Udx?T_*U%gLlq(r}snnTnQH7v(@cer5K+D{n~+XRhpYXKyv* z_sIjp(pQ%fr8P&KwRq32H`W2i4bunGG*2Q-uOJIgrEaXKvF<&Fo%uyc?g=#Xcn?L(QQV`Sk8mpm@Y9Lw z=|w)JE7Ps~`p;jR{jo9IPGNPBa@(%N)2cU{*YPXO;zFa7$z?Qe{RVI~1vM4Y% z9XVo1`6L;5zNtm{+Jm45A=|s6!(emLPvefC-#*SDF!l!u(TRoF@cqD{8OVyl{jid_ zrsxNQQ4L3s^0Rkh=M+lV5l%F%*z(qiF#H9v7_ zLs44YGmul)AI?2%5fLSfODvve`reLLIh34k5$OY-$|i8~zDB|o$W+X>-bW_%x!np& z3Phpv_lb4OV~*c;SfM>apC7Aawhg|?Lr@J~R!r2>4|Y6f)OOqWF2l&()lWw_wZid? znT_nW$zj}BSfYT>_w9Namy5L{C!6|#rjs+@KDzOAKf;~G^QQ$IzP>RXQ`i*n$Py9| z0w%UTCz^*%w*k$hk^|2xJX$Z$EL7jcLH&C^J2VhhLKx1<`Hc{3@yi>;(M`VKyaD%1 zB9wN9&lfD$LUHSSJc(!c;mvRl5)=6pIB_^^9jug0{W>egDz4RY)QdW0s0XLK@8D$g zJ-dAU{gJLT-a1-;nlq=*6@3NzuES6V#Hm&{-13wJ8zwSn^<{Au#i*xb=by+??qRp; zk+XbfCsYOCb(pj;WfRX??%l;{o9xJNJFs-`o6I9P5+i{gY-5VsX)_qk)|6vnR}IPU zGazxvYbR7z;bo8Zk!bJX{~DA}cj4e12i*nbB3n}4>(dy0r+jeSlON-W>1ON499sJQn2BL_%0wwA#t}eTQp(8pzUKwT zNJyBM0{Gz9=K2?qm7AvC5yvCW;@mOE7;9hXKNeUk18ItG-tJx(a#Z{dGlhzqekDX{ zBJTYb88C$I^(13;KFh=Sh_@}t1TW21aLInQPHs1l%jR6uX-)12Tq`MXB_65$nCa{p z<-bFS!fmDV_S!v74gi)lZ>v8bTU=n6^jx|j`;1d415G=G-IJPkb>z0KLMY*;UMWwB z9))acu2UgTt>j*|fRbGbQb`VUA+(n}9Pu^Fik!KBF%>+$@xwdx z?jD}yax#Ca&>{6N=E$HIM;B03h8HK2+snN_tgu3e^r%gm-GNtXiuN+EdT}@*k zGsT{t{Q^yX!;C3?T3$ZUkg{y;{8?s-46`Q~OqJ&?;LzjqnK>3HaL@X2&NZL6ZyynfuPrzcj?X=MR=|G5@1Ki<$I8`_+)Z;6{@3{R8a#MF~uLf{Ty_yRb!16L@4E$(%F2=+SX zE^$<)D1sg9%JsGI4>SI{HR(+>h8rew4zI8AI0RvKo2((uE=PH9aeEld8BsPwFb4cP ztHvaQ^mk85_-59|_8-RR^U79LRvQZOf9dbk11@Y*w^4{gJS?*V%4 zlE1>8Nk20}LmT3|GCN#HbLVfJqueEFb}=F5wFGhnX(ea6ggHnM+C_0-UAk1Y@uIi< z2^m}c7yCn&d=b#l<~n^g#6@fO#6TiQc^i3fx597|=(6wyakq@5hznd*F%N+hVHtF) zb1TY=wL78|m8YVh5XPIj49x-NiKK%Uu6tdF{cz!}XtK#ZNcbWLt7d3y2z^3m92UJZ z8eRuUeTERpQSxHrpX`%lQ*D-bZ7g30MtNlRF?+_N)H^AqxjDJMK<$~oYC{TchrAm1B<__ z-((sT(Q+2EGjoWy&(F2EZEdCVBIaq@?c)wEK%Wnm#LD6^B=U=y=-4RS# z_!Y@-u?;ydW~)5Z@!!igKps2w&mV-AyA#?I6AEyD2%kAaBV{yriFf26}-Ii4%$XhIpN?!)`)q_;V>@>@=)~kB{#=R8~M0 z7|BA%rqCGp6!`2P3NP%N#}S;OE}xbpMh=%09!Wtq2wa~=;k)VOLnr#L8lg}qLwfoh zUopbsJbh(mbmYbDlv32gdz)*Y4H|ACt3Ur(p1}R#TpS%LwqeL``Y<*y&^}3d`Tokl zUhxKH(jqzjQyN&mllSSA==+eW1Hk+^j=KfHJul658ir8m&#O|oM359XUxxQa1vo3{-V zk;PE$ka!yY`LMdqJusKy$V_4!6BuRPccvV|{@00@H#dBM_0N{0*x>D=$?qGXoN5A1 zN>OiR3pTuFFEH(E9x#f;sPd$xg67*l1#{jswM=^PWlif)*zymgSC{AJcH$}r>AADA zRnE?o?a`I>n1|w*VOl##zE;8-k6Bk>PRgfi45V^DrI5qLj>upu&*TQBa(^?#{1Dj% z*$$~Qc6+?$wloXFZ|y(ePeI8sC~f)k$2L-ko0-lEMsFPm7yh~W2@A6Oz*rIA4#!Fy zZqc``lXFG*?Guxhl-2X92%1bOp1&n^`;mfdiHnev3d}0Uxn8WpMKaX1px;v}%`*|; zp-<*C2EUq%dHeWcwR3_XiBuc~*XWAe#+f2;wQUTv&>R0fyKQz#qwQ*=Oh z8>Ls^3V7&}3W1R>HcS76`A^7LR=ulB+vg;5YZh5IS;;=BJxV!Yhbh~;r#-Fp0Pqtu zl|btvNTzIw?~3^Xq~b@5ecO3VK{HHfES2;JtD#MaLDrlFsNYpWwjgt5{lK3pW-9h< zHH?rNS9WWNiZWFj$yUDtvotECRau1r(4DsCHD&s-C|I;|4x?Zgjrd8yU&8m^k#8Zh zU9U-k^AWq8cz0|lTKPFlbWQH%r5(M`hD7Wm(59<(f4P1bikaZ~B$%fvvk?-IukxJk zteDLrU&hOMVDrSG{FNWP={iRb-?mH$+n7Kt}Ry{0{ zK@udkED7bGCJ7ta1E0AV7c)(*9Sn;OhB!hZZ%vfptP#Z1D1m}RwZrt0GB23sCmG`x zD)(;sv3?yb4E>)~Jj8Jchq?$gw%f&W{YW$D@s#`bZaxFXH8){8E+)I#Hv()FP9wX> zaa(hs{vG5MajCMTOyw>Z>0T{vKtH8MPR!RWFKVm*US0jzg!Ak-Nlb8$`ro!<0$0UQ zdxq%@L*q0;9H{?-0wEnwaZztAYDeEQw)_<2dq{HcJWk=kA)__LARccPaI;}{8#3-m z%<5C_2^s;_wgG2DheArH{;_Y;@*_3E3%>U{vnL!es%HFtMS{ zWN&tz+&rXf#Jg+)jl&VRAs8;W)t&U^hcZnCWUFHpRoeRdI{>-BV64U4kSlxGRi|;1 z43%BX@kpr6k84C%!3lLZanQFCnvUWyzu590$ck9X?SuFGo=G2veq1(<%GwfA1hTD> z%US8mwU|N0=f@hZ-z-&^angNoYscV4{Ns~?rjY~f?Y$f!g%o7%Q>-z0OEb~@1a7BC^O-)gYADD;#;sTjF2+@>10_ArK z=!zLHP*&^bsdru+4KhVxj{T2=Y})%jgmD`TLKgTR2s!irfskeYk&t&74sWL~#+xuj zq-cD;PRIS%pNSrH-TKr&zd#?C&UT!aw}{usHeEf0?L{|a(z3A~C~TVjcj>1t&(7hw z?4RGkf$LbW*C^|EA}x16K99tt*u#47Rcs2+)}&Pp7Qzi+$dzr-`uc({Xu=mg``ICd z;r0ccE(=OT#h2LfsU|vmj0%+s&J8|?RzbIt7GK)tcXX7Sgh^ERVk+;~o4>fQ2PAXD zfzBOhqU3DZ%-Uay+9W$6WU>CU!@p4S5NDvT3o5_!3_7JPp2!c-gaLu#&IiUKVKYyP2LigJMo7*>DcJ9f` z`TF90FfLyCiLaqWJupX=ZYg@<_l+IN$dI~jAIoeT>O03ESoXU82UlX(H)h@k6NiUu ziGd$xIU9TV71>w<8+`3jf{2)X_rc$f`)dDP&zol!`dreVzx`vFpI>OqIb8I<3TKP& z>*|6774;E5Cn{@U^Mcx~qTfvF|1F|q)9o7?)CO3`5^Fj|kLNSy+W#U6&X$6<_Fj8@ zm}H-;RriD0Rn+B|dGffo^o;$oMEQK#2AhS>b@$s#=&>t-}&W6d~H&Dx^mF2|gVU757vTNOYW zo)G=Wks~nc?{zTu=|IYBE)eXSJ@L@H z`56!`KTkPAfj{+38U4RKBrOVk5_1&5PbjBG{k6wvC7NJDmz^@sh}Jw>80ad(jhfft zD)Z(H==CJd#WSd70#eTbb+(|c&fIdq{m`MdakvvZRBYGJ=^BEe{c?dB#I8*7;ZfT9 zEUej*ndjrUpdHWVgsHasfIkk#612X6CIvTwN2)<1YP6r0DCE?=^v7Ph_V zlJbgXIrk{q!~ul1DZz-t^MHive6HVNbMtfy4(qAwbz4FEtKA$9T~&dWVjE&)$|l09 z!&l=iIOqvzb$T~!mmSJ#{&B-MDmo7FaVrIKEwLrG+_llPE+l(8p~rS(poJJRdQ zl^o(OsM>BpCar7<`D?YbO%-OMpte0Ge?0Zj<1vz^`92vwNqnbgg0uM&oWUQO3FVx$ zcDKh9(@+2QM9sYn$54XM#5h5k|C`Ci7$WJvLtE$(SCC42SuJkZnjoNNU1s>YM`NfI ztE^1J(cN9r@)pDS_eT6fld+=(6pewpW$R8~{~*C>73{bKDq4oE@@4H?fT4*AOF0l- zh08S}5rwE1-shCB{@Gn6TtZrS?BFPB`UQxcwcm*?!d2ASY3weoOXSHkZDXzOy!H$ z554>vko!dMGKjM#{2IY*6>YLCl5h&CahQAf2*m`X_F>s5%j93%Smjl=U6)gNd>ss^ z77$g6Ji)wo@UAiJDEj#JE_T5L=TI7-r)QisLS>}UCvNQL zz)ALf&;bSNdT#n1O|a+bkVtOv)ze?T;xWRfU<5bg-Fu|r48z!ny_~8{yVC9Ki$|7E zk(vca$0Eq#&Ifs7XNe07xL=$UWKWg^{qBh{>|vOLt?Vx0-NG+G<1xLVoz$?~O~BXR!QpGS1>3u)I~BO7APsE10(PhvjTXkw5vTVI30yn(AGMhRi^8ZgsNp$O?0J&bT#kGX6k}p#)c^yG!r!7}-S;sZ^`W#ljK?7ZaE|72 zOngd&`)~ku7+4lFtn^DH>~Tgyr%EhTE@et2?U`kLXSsHv3lPRKf%ZL0+&ih+ttuOj z3kcB$JyQ@2N0l}Pe_^RIFM>m)guWW|yq#@Yp1E}wS6b@N6H(DtB7H%WHu@W+_(Vgr<8nDBE zki|eE#&R3|xdv1r09|P!bxW|uPeESj&|M59YB;Fn|EB5D+ya@56|4Vbqv}*rI9e2= zcnUjy1Khem$^?cls!3WyCD!b5x}r5YG=QQ147D7(`8{*9V-NW7+)C;BX0Fxy|7imNiQD03o?tT6I_HVZE13F6#62Km6g>ZsZ zmncE-YHe}{W(i}b^&plM$?sWDcQ?>?VYUfRmB|5a7|sfG{^hac+a|J85ua7CZ}#+f zQIc49)W}~5&RD3#vd3E`8HPz|^?L>$dJ9e7D!VDDpgwW}2=7B`?4+21p~?)AJzHkQ zDWF^~pnCVPA=2Q&HAInyo=z8MU)vr@h>lope(~xBTBKSV`SDZ%hxMw`J1cDxeE=(e z6``fz>Wbm!-+5@xe&0z_U4IVUF9Xd9HGA;p2a#2m@?#jJW@A4hE;nCFO0vxlW375I zM^6#rWAHCo?faxHU4_aM$X}3)Q>=HH*>}lb@aN+xo2=&>lG2D~;avNa-ec3Eh}nk4=GlTbo#lsw}W20C45!!aR} zBM{z$23nn?0o*KO0Jt7h+lodtRAh%XlYzt)A@YkjFW-m-I#C z{9k3R2tj***fTq48LspJP4p5F0y{_TOg?B->~c0NmmjcRrF`55H1BiNKL zX-XlS|6aHl%FowmLPI6|VV#5Uu@aiO_?z8E-lfGl|uB7V;W{JPKJu#CfrsI z6zQ?eZdCb3{y|>?z4s#jy$7iEjAtIFLPI&N0oe`_2$KsY+~X>L8JmJ%4KzLqGuq`P zSKy*!7pQGNgpjb;PRVD~%4k0!eMw)@r))Cc5r@T4T{hZ($O}NO5@`XMYoFU=`#b+Z z(}5j3&dsdB-9TtY1oKgYAtK;M_JOm==vg=@=i_r6i*Dy{E zQrtf!B}y1B$BtbuxK$O$h^dDwRh44%9yYM&5u&Z5t1E1a7AmZup>1Pd4`f$KIYMu; z`i~Hd>CU1sOVqWy*gRYg?6K$4O+rkOl0UoYuWo*1oWhb|{^xBBeu-s$R^@cI1L+S# zZx$FaRrz~BE~uTEO_b%Lu!fc2A~n_c&D5czO+FiG*k6o>3hd56TO zv7$vo#=uz`w?QVP3FlrB@%BkE!qgiRD$AP7CwB-yoyl_pCo#G)AjWyf2lXK=h_{CW zgO0)JUmVaU3nh0Oo7V&F5D+3!{L!)c-x--=xdJ2;HAodlne%*-WMxTaVQQD@|0$Cc zttroPL?wJF`w!m^X;qnrr!=f?0G9d!M{&reuOieR?-9OpX#5?PwJ>CO@bF=bn;jF= zN6ti2zrI-Co$N!$M8XD+lTKwbL!?V|z1qT&ha$cPZfPZF-g&k*@Nl0JA?y9D$sF;?7}Rv&Gr^X;ckB16d8>4Y z>;?Z%ji70|P~m5co+%J(O6nj&QrnN2M`ET+n`M&9AKFBXKL;&uf#phM#vdGQ|J}T^ zVl2a`QRa0Wll}RQ7@6XnFIw(j&CS?5U_@XC0AzCiQ4+)|4xx)JQ$N0SO~y@eGO13 zaaNz(U;w8u`~>8RFnYfyDpTw_+8i@D1*)R7NVRPetjVtRzXaCBt6N#xeBW)F;=2xN zTi^J)D$mXG|4gh~vE`_!=@NVnqqnO5<7}uti{(+(minx+J2;Lw4kL^r2pp{!fN$7a z8%d4luM}stwM)7?pFh}=gm-UZ=vTBPtx9*Wx(#HnU%$?I-C&ol9|ve`=b{&(omT8* zYu$Wz0j} zkpMtX6w!#7)#QqsQ8K~iG09mB*VZaTTLAv2vi17|L^F66PNdJ_B z@Glm&3I5)>AdGvP`UlJ)vKzrrkOg-I--C;utn~9F7rpFcXrEB1(n-X%8b+ZkR7e571SeG)?z`8XF)SyvYX9Qpv|2)G|& z-MQhLk;@d{Hea=uYnKKICR0|ya=9{%G)DYRc|+0`QVv57pq9$9Xc5F_*S*bG{gy6%11B>D;Cv&$(?b#ZaD-! z+(Pi#E!?EEb6>8t%q+|G6Z*vP6;9gE?_I|*lxku3D-3IYXg|oUa-?`MgX&4A1?9{D zJzEU?_2k4PgWf(#LF(Jrp{9rW1(gyp#anj0-XU0pqayX@H+N+_l65wxe{12KIp$&^ zU4))C=m6|59Fke`g%QjGh36C2q#G>9NdJ*toWzno)|%$IeNF!L-3pwikHSN)jTG!o zi_mfmENEq>Y`n0LJG{SOCd_LVyrw&$a>3!v?5mn0#|u{GUEB%}>J z-?M`|v!O-r|65|8ItVQ8qnAfhwtyNqSdxN0GA2p`1?Lx>Un#$RYU}|PiRXy>!$IDr z+hrQ}>I!gy1nmy`os*GMjnAW2+Rb=Kc^=8K@|BRh6dk|LYR9FK(FFF%xX&xz7!CAE zj0taRGQXuh%@PdTkDHRv=-JM-%Zh~7q?vUpbZZBaTF#*?a=yVDxcWl~aFcZCO#U z4tg*EI&g5iSAJU$sR%)}*4s^BAC-|74}{F&bX4U%C+?ockNRFPVdAS^gN3k=32Zv$ z<@1Wv=mDva;?=F3)$8Mh*%eq`ffjGs7aDMKsb?6&$23xblxZxD*f8?JJ}P+e+M~B^ znK;;&Nn%)sL55&#PT=iMS=?&v%rTQ4^yS@@j0;}z`%hdF>51mnjUO>M&U$3Pu);|4 zp^973522nf&~J6f75A0CRa=!g^zBX@uYD5elQm$NxIqWRG%=yWPgB0Z1)bo(5)J!A zs8rP+7r0i%SK6js|DS*`%Gy&E-72M}ZLh|}BZjwAy387{E-<3*6)|VZH6XaX9 z;~5cTxInoc_mnZrjF#7CFoOs^ihU{?74$7Xmz(4H2PAIzP~4=4ci%mg$^6#~p}&kOnD8?`c$%IjY83 z2?m7^?^pB9bTNU_2y!nGXXUlwnmLt!!kJXh82W~4#8W3Q?Bt#I^=ii^h4zL(+rig9Fre1yeeO?&&Ms>GWGV<)mlD&67$Og9$KS8vi)*XVAF9pW z>OctGZcxs(Bo|1fEfDi=-F;|uf%*SA(wk`i;;hY?Dada3va7>`Q~8uUi_Xd4#FVN(U@(pPf9$d71mnXKovP=~y}cN5Zf z;Ub|y*<1d>_h*9>aKhPM#Uy*xKH+=Xj6MIH(itnbW0!o@(2BchIbR;iZI?4Mlj1+l z{y20TStK~V{i`T#Wtg?=5^;$k^GiZLnzlAipF1z?97-GwAKO0cpZ)@6W4Rru2|cwo z&B7_$C&5)H)2>CfP5ft*hBIg*FL)HA-`w@Hyh9|BxKW&b37O;QA4|W#Dz;16wZObc zRjod4=EZw0oZat(Z5ic9^9u~=D{gCi;edv?WzCK>9h0`Q>U){0|K`&=h8}=1Q8SfA zZUU^wH|_a`9^s`(Y>gr^a#!%srUou}$XnLsl%pwX^ugPK%9Qu!4<1H_F8fEFj`JOB zjKz11;&tKM!Q*22?`Ybl%fVxWj&Uhr+0kvsIh7}V8>f$6v`?2Y@G%}Xtuel>(QUFc zR#oWNm*$F@y*#}kH43xWAZ_pj*o6Ph$0Hs@MNa$;z9-N z;rj58O6i|CB7}1iMCnf6!b-d7wd;eTa!cKnC%=in=&}Vi?0aX6%Jjk#FizhH#?-*W z;>+4ZiAp&0j=>SZmJIl55{vtNCCD)M+N_vjp{0%We^)E~fe%$La;?6@aLeqm!7fCX z+W65$oE#@DcKMe})I`;7ZTXhG83X=dOU<2{{8bYuc{{XdVQVVdLdNGdkVj$z!qMxq z$Ax1g;QcsfMnOnR^7^wcUj^(drHAWK8eZH`s-BBk)P}?`VoMOhY&!XE+vPntNRa`9 zMCUW;S+!Pan?mzGzr5imeg4k>qfoJ zdhWT_4FcnXQ1nY#I9@u$=gkC^qrJl1wON)?Y7zsS*Blp5$jI`Tyl^E~h8M(!n>oNP z8GYpa>niETIGEpq$Kr|C6~h_9$NG#OOf^W+jK>ca?zjy%eAmC9bJ}~vh;B_pJSoAw z3f2RZz2wB_g%vJd4gjV$D}$yq`8%s_ukYrMsj^!!_LAt7i zZl0e}<<3A4AxLQHyRS)oZS^HpI}HXRc~iV-T+8hSBSVZlp|gcP;=sOE zLRdoe_U)GV5LiB#%o}Wm$m1JUw&XK;mAEYnms;H-TxzViyVrK* zSi*(%orEsB^)Y?=D7=fsAH-TDSkETx$x1bKhg_7oE+Qf)%4-#^pW(0;P{dD{yg;Y* zs!dF7?D~oVM{WYNA#Rn*Xbet8`Qf_Du{dq6lyJ-Q^-J3Ve4R1n{8`Kgmii)40XrTdSRJ?g7G3z2^s+h2j`t_xUpdOpDfm9bLg9u=+e3rVf=Ty7sa+K%dA0m z3E`O;Hvj5X=434H^a;F1G`<+Nnnp4lct<)=?E~Y(lN}0b+Om@>4e3ADfX2ZGU%9Ne z7Gsywb&`|Gq+kdH9OjH2Pyj$ddQ+N49R8R7f<%P*;w1<+vyp7@iJ`Ua4R)P;&p_t~@Q&Kb3GL7h)dGLql z_CKV*K2t-77|GC=cIr`(#9q9%SMH`sFFttFagf+KY7urH$6ivGw%Ftxt4Eb{@`+sk z{d!V{5A4qn&#sKS;2W99YT0BFAV(H=%lP5!>I#pAlHCq_m9Vsz-98#J&5PR{`Jfu< zcdR)TlQla-_TK1N*@zo>{hOA>fdoT`lSd0lwyplBXN6Yd#I>E+lqpy9r=i3tHo(^g z8tblNoV;nh@|4ZNsCNT~bj*2c0TcVQcCX@&Ws1*~3~Rg(4QP31P;9Ap})T45A- zAd@vwQJy0gX|xruQxi+fl;_r#Y($RgJJ=LO4Ry`hZHtc%BW4xsnB-Ln_gfrfcI9tF z)uwJBAC9uBezZBSQU8S`4Rk&owGop4V;$LnYc?X={R~}S{s1@bQ}7Ai9;`wZH?pke z$8s~#oP3vEM(BS^$0lZ`|LS`0*uJnmNuur`*s&05j(zdqAtP&~dvR*;-K`HZB*&aS z|3l15c1W`%{c%uj6QvA4K4)UOAhTGn_xGJnZN)!H`BH}!9j92Nkgm4}m zhO*wZ0e+V{?7W~)pWv*%UfzBUVQfrEY?_jS#%rV1#_7`{y`N<844mGZv&FM}s4rcK z+ZC|VXWy`rw1(a9RBI;<)8pikHq=7{gO-rnXIkG{?-R?`9ql#-`V@VAjwyKnlGoUb zJ6t&S@tnm8+)G-y7xAZvHIZE4#x*QBb&Bp}i}c^sLQG{6x{IU znre%zgS7vPQ73sD5wmve7z5UJ^a&?4Ah2ItIn7AuW8)u~uV|2d2la zsY4^woeB3G1lmLwB*>4Wu-npk?2nrG*luhSFu`6_-1c4VN}$eIKMQzMm*IK+nC4S> za_96PcSw{Z^4|Po`fL0bGm3dPZfI?{Y_lgdeZ2hCW#t*p`h?rL)p?5P zq83}JQ@l9uPQLK>MOKnsf0iy+MTs%TYnRcmcAr96RV8j;`AS2q&Z= zHORF?rEeQCR$UZ}i&xM1@*4C@)GNfDTl)^kh}XND3BBXO(GQpTa*dSmFkF|Y);U_N z{v}beItK$adx_R5k3Aqj6;^XseE+K93)3Q^rAOG)F7F|;Zhg4?UV(=R9~qEfi6w8E z@7%{sEIZ-JpNsnEyo!&=jo}upk_`WBZEcmjGJw&%#qsHE(vTRb`9P#)!M60DQ2H^0G?4=vmGv-YkEZyH->v6!Su+U+1XNa z)mq#B#}iN^Q#nr0kzd1DPi#IvrXe+06F9iEYtWHveXrBDL_Or?4s|+`xr1+GUQ-p1 z5hz8CtoZsjEqj!*x@z%r(x9~V!)8frAi`_Xa$jVp{8^535z?3;6+2*0DCwu{W+WLP zf=)$Z$ibfA0Diyqn|*yfeOufk@*BpVi>#({90tv>l5w#Bz198nzg6+LAiiWPC*F~hN;? z@XsE)!zjqR=v8h^K5w#mXI7R~*6$fB#0}S!m$0DLg&aOPLIbXk9}A%t6_xaL^f7>r zV8~!Hr7qje_!Skpke}z+zJZy2M5%w+jKx*sdwfi^f^Z@OGgAcGNVbajoB^_PRD-SNvE~K zP&)wG8ynrf{zjZNGP&*$^tul;D+`6cn}O8582gv^mHGS!A%%UA7=aPZ=2?FTv+_Y{ zsEvxf;^&j(mtwnS3JTce7{dvs1qcM+K3@ZQUfLfkP|`s`HD86d2L}q2oE4N88Vcq z;NhJl5rU_Sd;v7)B(d3=KC+IpYx}p6PV7<#Gc9c!(+*AA$WcdYP<*Tc=OZ2Tz#g9J zMyOC-YRp8rJ-xPCaYVl06|2ElFQvb2)K`o-{xaAYvmHA)rt7w&2Rm0S>oL7YUOMW; zp;Bcn|01~59zqkQlfH{AnEeh|X?!EY$QN|pgbk!ySEL*2RymD z25Y@jL`7rjQgIh+MUnLa^{7h*MPAT@YvY@;V_DO zbF(nB4q?Br7sBNF6)=@BqR%OoYYNIM6s-&5;NE&*;e!xGx8Z zdG5p$2=;8bqVQy>zyC^gxT?U$DlibqyO7;R1ch&?2yQrs+9(Ko?ouyLnVOojj=h(= zyng2FiwdNhQoor-lNDylql$08#XeLIsBmt_HQm&x+bNT-9iE^6y0Ok(0C2*TemcJ&~N%Z*fF}%~u?ploymsO|i^6=?z^tJd@tWOo{ICsRaAoK`X7e15ysb5|svz5RISAO+@yMPBLP;+TWnIjR zV7G7T-S5mC(zXva-Q~8q_;f4J?j)>N7dXal8iL;9*GX!3DwbjGrz`NcFj>?s9r;Kj ziziwtbC~OCHgE}>cYhJ9YJo{Ss;E0Qx&g%bV4-N9@~bNZy`w#$wa9Sy#Wi%y*LJKe zKnylpij1I%E@*`_r`{*IgI|uX?IxH#gP&Om!ez`(!epu($Hz0UYSmFf8k;?MeOf4nO7fkLZubrYDvK%2&Z$Qd-L(!7E z$+`FK!Aw&P<2`{)!jUHrKqRtA*5%gg6oqH{jT*zG1ZeXS@23x41NhU5-tl{sku|F#P=YipaE9c9WpI)`P#4&bvVx({BQ#wjyZZe}-PJ0ORQ2tUtK@^0!*%elb$3o~^2N z$dCmGS2q7ZbYD9DenpPF(A2-+C6Va*yJKNcfbyY3#36h>okJiFp^UEiw{I2c*csC?x)%Gs8Ea?NqAGQ` z-Rvmht*Une(Blemb{gd{@g(%Kat}~ExIMsNK6m5;)WXv5^z7; zmLiGY_n|ZIKdqyS);&KqzOdl+e~&7xkwHTv3$n*6vYjiTDdx2pU>>(()jD=WNW+h^ z?xk>azm>v`+G{pQHJhzy=;vv>mai{#*sc;&e4zkf*qa&wg%K})_{ zNmBbLQ{r4)`w1i_1Yw0XuCAI_z2T~mtSqOjZLVB(VkMrb`64v0w3Gq10Q##dBBw{CyOt2*y>47Ic~) zgMY!lSXCO_Yu3P}+)a52T?g0|4^RH!#Q3=Enc1eD??Hyl59r_du;K!*`|(d6JdO|Y z&z_ws#{YZbafi+M?3MphZdANVL%uSeKnce|@QsN((ngOl(p*g2vw~gF4kRb(d=Kup zf}Jm^D+*9r=-an%r}yXY6(gUz%WRo&yB=0-2{M3j8#Cz|G$KQlZy>v|y}Ur4Whf68 zO(DKVc|G)C8lE~ulEe4|(OB6cvAV9qwkLsWn9&IT6Xx2*@?MTrhccbk$p_NLPa$#V z)$_RJk+z!uPpJU{)a-~hx-s&i9=%-Ttz^zy$~`5MJGI-t!Cz_l@jw>!mfp7jI&Ds5%VX*I zv=ZJayY+d6mzmnY+r*B<5-3G_EHz)=&H_yMxbF#=clo1h?;>Hudh(>ajKk#V{&(1~?9a#reVcP&K;oDr}HaZqY z&krk5=ep4C0&%w`+I6R{Tm;Q^vXh*Q#%O2T${i41CkR3yq4G# zdQg398;F$Jso-=37@)<`3i0vr(n^A$ol@R{_cuZ=O#edpPcTKg-8o$OZ3=M7dwHqD z!Oq-nMY}9Hjq9x?QPQ3<*P>(f92-XDe1aB8TM?~?}zC0!7XwS(9IKcFF*0ggkr-sQ861w?=#DQh=vQ8?p z<+0BAB`vIpMWK=q5I9F-Y&}Iha*3DbY0bzE`>0x}YZpo~Gi2R}0s@~KJ{UfpvrY8k zg_@gtBL4DbSnU$8r4b#>anxC!>j~>Uxf78>4R)>iHAal%5CR5)hlB z=Ui}Gd1Mg^eGB`s*pvkT*w1lb>v_$AGf8=GB2M_YNq9~-$OQ#XFfEz#ulVA<*fl@# z7CiTy?jmw|1(`wQU$_E4Q|I1M=>s-d z%GiBim_24y&F_-jGUEzJb&-(WdusJKYr;{yk|x^tq9%M(|J`g)2-N4@7Z!bE?Ik=@ zz+Ss^dAJ}mbYP<;dXNP(@ygdQtNr_#+~>q1eTS5R4jh1Y3=_<*!M09%+x0S0s{{Tf z-BMt}KSW-S%!3e%Y8miCcHdR-mo-dcN7fDzYJ2GdCL#ZZ{iSvMM19xLP-zo~^GdPu z!!UoBu)f$=ay|}rBpz3+PzHZRhR{=rR7a#HKYbA|#gAriI;jcAk?P_rp$)uOCon}y z(RbGO#&Hb|I@TDsaMLE~6LWF3zW9kXr?b;%|Kgp%g}Ol<>~6q%{LFxR%}l_^RCT(# zo7oS*8oMwp`EQUwnG$PJa2rAloAWN3X5k5fzJD^7`eK->U71rjt~uh!`AD#lcM!>! zKc*6DGzegd{vD?rp=V!vb_wSe8n+dA3O9@p5(1C}gAg8Z_ITkF%~4%3N-@fDp@V3R zINUu7FpBwK1J+pXV~U`Tyx)AuJHAZ`kaB08rGd+{mvHfR)>i`m(s@G&fV-`f{eGlFOh^Ni9=SA*@r<+seTqY$_+2 z=zOR!P;t~6h_ncDMFMyf{fzHnei|FILJUIW`yt8~wO>E-hF=`jl|;A*jA?0_U?*oz zgWiKoKRD5wRpnxDpfl=OutP7K&-MZRDs37_&0@6lVb$S*@D?rdc>ajA>IkMe#m=NYj)!iIbT z(aYtny@qr|Zj*otTfoP^T;fovEB|Nv+(P3wzMLY)uY1ET+r7F?Pm(+X`!fG zXaT|OBg;LS^Ha9`8#GH%POd$Mi?*d%S~|Ywk{Mlm7pLsM?(x#EsgX_@-?Z8lB|K%& z)fjkzWkHR>b1y8(A)`F=BJveKihatTKeL^ZkJ0V8fyHucQBk+e>gHt><=I-8Xy_9x zv6AJslDV^r2jtC0K}520D>hD6*2lj36~sqwD#V1b=e|w+(sN}QI+-Z2@Wh1gX1M?4 zS^N$xkWwU5h8@lj7m!8%z=c`90CP@|(n+Z@2g=JxCv4zJUYUG?1LATBTTKVw(gN8} zTD&$2kT@(;0Ff;9?;~IN!jlF!4_}gNX2%Sl>LfnY6-TX0K`4%h@*RTC>8x+vOLIV) zimeQO-5fF?#LSp6#)2GTBUQQLvoMe3?am;p#FA=3z9Tt(jscY+X23H`l@0oZT8Yl; z(b)&EQ^a#%LFW#irb*_2FoHiw|E4FXtI7bNen!4iK{$4RxV;YE6pxu{fp_U7p;3Fp z0tAt6%5h7TPgAO|PWmx}f)dsOtJzHFx8M#BhYQ`KW4zcC8GM;w*WG zRO>6;uR3~yNqQN;Y2$$djKeyXaUEzU(B+I9Z|?pD=*P@stxwvDB4_XQ^xV^HHv$3k zfs_#)@mGrt8fIBPQ5QR}HZRG$i%ftm%MhxV90MO05`4&961hNb&9a9?Dor!SHL8r_ zJ{YM@2JMaH^GiDqo7ea;Y{MpvjkN0^`O9q?zafVf$zvJG0G{(jBj^{a+)6-80wI-x z>JtSD@wn5S!~q{b4TFCw*@#`qf6wL?K3RxYG_z+Nll?R-ubPPtt~_c5oo-nl{Ng@m z;~Ij;KzZp8$VHF7FDlsPGN6ZSQ`ltL1L89c@1p?){eDp;BXU5~xdrB*vs`}bf|3k4b%sy4CWd9qa5 zf58^k`*LTX2ZHx98yw3`mZg$^{ragHzFWTOqiXuO@6WY&sTV4p6K2}m46omM&u)X@ za1O4;3ukwb)Knh(Bxo-8KY&7gY`1(`A>>+u`wV?|n5t6no>2UQhC<|?MOGX+WaKIo z@q*TLYx8KIPRWzz5ZFOO2?A1Yb|jg88ttWuM-{@y8^kiCi~DjimD`gH+uHF;{B$v@iFX@0rV ziS_Z*X4{dt3rG(>+!V?$X$1GFWh0@7_|yNC+!>csIJe5Xmz(nRJ&fqPe~RkLzJnH^ zVwK?o8)ZVuOWe;V+mKOp<``gtUyh(R-x?P`R&pA0#Ak6lYt|c`Q#2Gf%4}Fp&f{u-aZJso+F6(70H%aMgn4tr-Dc9!0U#P)ZpiVsWLzi6Vyw?VEh z^mDOo5Fytza!u%8)RdOKz(sUEdXd&Fp54*O+%L3Me6K!Uy+R#evpNZn81XT@Ls!sA znV9_+JCN8uL+q1&ZCZpRo=&1ea5|>em6WS0u%hWR5IbPu`I!rf*ri3 z13fxOIZWc6cv+^QiNwc&E+1R2z$+7Uc=z6GK4&KFk;7KtVafzwHAruj+Bi26sYg3t zrdH9*f9>v{RKIf?rADx03Hs!Kz4YzxoB^90OiCnk9>|93p*36ZLkA8fkq=akYr6d; z9}1H;FQz`;DxZZaiEIyVkCmJh*rY9Rj6-V}_~ID7xwo^6$%adJNG5{T_#N5Ok8_HF z%V++)dRTH*INe`oA8d;RxPkbL()U<5ahoO=NG}rQA#mFm%8D7`F=}gszboO%x!)fw zrTc8xg0P3_^6_dq_Ub-tII~SMu`x$@@C@A07I7)5th0R zdTqT(wmFRns(FuhEVX#l;sWnk8Wv>`D!IbF@xdIQ@cR+2`pP*a8|I(6`GYTtEhAd) zo2^PeN1XU*ZYqkg!jswIYmEE73aV;f%8Q29EC1gGVmVNF?W+ zw!w5VCrLcui~^BW+@^b6dIg4K;^RD3SOW@2;NOiW@ z-M(+-@l#r#>7ZbFdt7Ogy30-@{#7=4znVd^ekV~i#~9pF=xE0p#dEE_$f1ok{F8}T z;nlmh^P*aXwYS(edsYxjE>Y1b_W<@pke@K}JPAVx?U%kh18(zoA?2MM&Q(3W6@ zF?fyG-38OU{mZyFQiev2#8hYgyfgL=ec==7n{}TKdokyGIl8gjDp5cB5cP}v%@_?}RD@)ABf zw{yNggg5sgZATmkmd=#TbByM?;~^VCI83Fk0PQ1L?)~FTZ1@;?nrGwF*Jz%#n2Up{Yod6V(B zYfBEUY)B3P=#pj%n}*%qF50RT-0MaucI!A*L{8XM;8MT8XH9MWfsQQozUMwyC$D|n z6cE}xGSP>(47S;!QzHrqE86;caYqagi{(piD%71RG<#Rnp)<7XFmZW8xxNvL z*G()Yod3AMmgwhx;#fa1&+_sz%A;j#-eNR-IglS!`->x8xK#JCK`*h;p*{uCbF^dq zE@3^WLI#Sk78kvh33>3rQetp1w#QkIp6~(ft*QKxoRZL}RA-=57gv~9R)z892_Wiw@@#Sn&w)*^XG7I~5+pi}wUYr~ zr0(Oy=wVGd*75_Jcb-|>{nTKIVaL7J7v0EP#dORZ?8B0LL7BYk2Wu;>Es{V^O)y!B~aFOU#y*^M^DAV)m$ zN!OvIg=kX8zZ{}J6wnUMX1RK@mJJ~RpY-aIc!8PxDOoh&JA#AtYC=Jz<4D%Iv2MeLE(yVnNmuT~!sN`7;OVPK zzysX-B?Y?ri8G4LrT$%-8}X(&MjmRG8<+^QL2;R+y%(gGk$Mcww!y+ ziPA&(ro~}iUi77=OB=j}E3cD`Y6ubr1-o(dQ`q4-AVkwUia5;j*@gvLf?veb z+vJ+Es6`Lqoh;WeIDQ^cG`3%1Bt8)gzExv)grKVY74wz{ev^p`a?ew~TpnSmg(49?)1w-)&WMdiYUAuyn+P; zIbq3hC8npTbC(mxVnR5ZWn4aKg2d7>yZu3u$Gb51N7&7v=x76Itc#XVUj|oE#|E{< zdD^uTH)sf@i$CCrDcM{{*1e<3Qmuu+A9ll@x zl(LKD+46b~;di(4KkF^L{fk_TV8P+WqEMQ{|LVg&d>L+e0}qI>># zn#n1+q-7_hq$BXf*E4n@j;GK;oC{Gc=r-D0P2A5M>x)oebS=W@WR3Ofp`IYgrj(f( z;a7&suTixhK8!HAj^I7VPn)n>Lc~cy*a1jo0t@?ucXNDKhwvX;&OHr=Ho<2H)Q?j{iMmgOoe^V5~Aq5eKHK#gGL)r26x)aqVi2 z-`FS0$Y|3N!6DYXa-ccb=EG(QhB2&@vq1HNZ}kk88>;w5jl=AV-dM2 zkO*WqRcNJn z5{Dt|r9DCLEpSzkh2kj94fjt{|>GjNNw^F(eO{qI<;z9ULv; zO&OG%FopjK)|p1CQeOb63^Lo#%Hz6=cT4pHg#iX*T}M@fpt{bax4;@^P;6FwB(JBl z6aV_8pj`p)=BSunZ3*s=Mx}p4X4dJ2Y#aI*(Ty|Hp5Vs0Lde$z6Zi*+S^(O6(T%VPL-0>qw~LyG14u*=pDiyhhx@_$}rC<`bIS+pNJK%y@I%r6J+>oW1v{{!-v<%r8$X~a01Sc=xB5H@#SK96BFbz zMuG*RF$_kc`Qiy76#Dp*3dgGy=N6k~DSb{Zh~S)@_|%X>uRY!azc`4n1K0*SmAV=F zs$*Sn!K~gccnbYIK^gcT*Ca_?@5s@{CRt+hV62d?EW(CK(jKa?j8IU9C7c=*Q7Zaz zT2fMQ67~d2&({zPKwn!Ar$r*~Y&3&hx+xh?A_%#59oVuj;RKyJ*+6-Kqs{aPEHq&y z!Tmt}ar`MfVJS6V0BZKBx0-KXlF}XjH`SbjzNv|_0ZOlkGJ7(t;hzDx0^3IfQ>EPq zn+2wUa*d?_;~_MeGnBtzaZD3!YmuGjF&%w@HWiG+uJAP8VJEp% za~Zt$G@Y%5dH-e^l1vcRGASBo4c}N&w1~}V!-I@9M&&E1#vr9n~R z4kGw^rnF3s@oH4?hC1vcL(qQ5v78O!V{fop=pJS4^YVh*$qJA8@FQv_IW3_C8t znY`XDl%I>?kNfuKDfa8F4df7CWh&iLP)YZ5y)3(9dB+cZ?ruh(>i*NNi%j%HIM958 zo)w)+CqJQ8J7nG3p$>a9SBkysgt<+3_N=hl4L?&8G|1(1#kF)3Yr&;z^ylidM3M-H z--{;)$BJ01v5(FLv$c=$(F5VNtVB*8*=2u7*veD*zC}30MPQ~}*W>NGf!rLR6l5ig zy9JkhU@V9tA51Cm0FCI6e6a8u(b5zR*FSR{D|hDnmgyrG6&2y$Je2`jiLZx0u@zz- zpciW3#<@==mJ(Vi?Cn*qQ7$;LNOG9523M`gF^@9U4m4K zoZ(O#I9O8@-o@@xzG6ptNpoS#7kz~%6>xE0|Nlc_IO0&?QQ#T*t}tKdg$H6lLKryY z^iVAU2Q)Il06CceI?y-HRiE>+@<-d4BYO)pVg7hvVIf^Fvy*Ug+sNx<0pR{8jlKJC zmHHjLr3WFLMd&ie_Q_W74M*0cD16Jiaa<`&qLI#0<~pIYthvD#x^L8zhZ_AKPproh zMuyMl(kt%ljf?y+f_sJEKqQzQgAZql?_2E#>5R`=&=-*X*ms9uXi#ul$8%Skbo|*0 za@x9k$Pcvb167(~#VIv4HRYvPLH{>M&P4l=LHTc#u^N4`nXyAaM$XZV9@a=XK`-03 zfC@kRar$Ob{wF@2G`lpRVE@;Hc6vch|H9&!tt1cUs_)IIFi;>ik}}HBWOSB~8gtpo;@|hCf&q z?%sp-k|A%*iuiA6oLa`vAQSI7ngBMQ03%+(WHvtspE4pB3`poKLj}P+seCbc$R8?i zATeb4)$bWXe5Cl6?l%s}q@kg%&dSc-f!E83#BKM58JklqEu{=aJ$WRDZE`UmMl+%Q z$2?#HRpVc1hHos>+s69dvkhIdZOjoc()SGs&l+$l5ppMMT`6+kgyqgI@DLMZ(k>Z< z?Bo65-(SfZMR&gbAH`sFm^H=wyv(u;o+LJ^jU;ApqBdzUPK%adZA|W8vaTF6~A3_=Bo3X&>oLx6OEGL^S9r6$^ zR}eP^h+S~v19-tpT=^?<_)|)g9lq~1u~9djL%$pTO zFmx6Bc(3L66hK-rqTNw*12|d|JR%$=a>*1xEjqY{mFzBistm_yL3SR%&YFm8DO?Y= zN=mxE$=IkR@IF_Yi_K#(I;HC?c5fjTY=h~zDeW&IA>GhR#_gB1jQZ;n!&~uM;!Vi?HkKTBiRKNtkWhOB|;xcvR8qtT)20% zi^f{Fy&fEtEZzuzrH<3l6F*VaLWCV8HaJ{axk!4-!%s^&V%b?}a>j-p{2#LnYcNA{ z9AIZ6uzXs)Aig)@1XI7!O~mjSViadz+w-^R{d@5DQ5~U{e7+v%nGB!^kCzEjy@?_^ z=Ph}ulL^Qtc*#1*fKO|Q6DpXtamcz%zKxlz@dx!<)2p2^Z6d(d9PD1Hi*1{*8#H^_z5&^2~QqXaz*& zL2r2mIwPwRz?wYAqRJI9;qwcz;+5DfqPZE_ycgGrR>$>s5CsY3dzX&fbb!E{{Hy%9 zJTiv^b=bhsL96rJW0oelXqv5{1$vc?11DmLr$}$^?OzLVK9bmam|rdF^%7b+1Ol<` za%tr@u2~Ws#I>{)6fL@G)>b9ANUqueZurh8Z)H`f8--;3WxM?4zskud8Vq&AC@{D6!-MC&4~~y&-%!gEPWc)!`3z_}qJV z8qSCyMkJ6n$WquC*o6GNz{=p;*lnRvw@7sRRLQ{?_3DAT(c&~=`x2OWuxRC>t2-$V z_X(a4gncGI|fq;!#4YiK?1mqxAc&D?Pg;Bih?0*Kt}lmR%QkUyjFg?-EL_o zm4P$zkWZ;hn!4z0ZIn7k4j*ienc8tWi3xYF;a(ZkwrFDr@k%Xuse{0puCbP&^1W6@ z@43=GMaynC&@wU81Xs`&U-X-m43QQsxz>6?hcyvipaI$@Tl(kR1+wRS<4`~?C`GH? zfz|sZzNv}<9@1hexRJi;(P_4+x#U|Ia8E+p5je@A;N->CI~V3UirmCmW-~jzA{k#5 zZn-gHbWNIt_PSCZcg|D1@=egdNMLPc$XbfiTsZw`fcHw z+I`gIBItoO3uTy1vhZ|JaaOiD=%8$KK&H0qkqJfM1l}TtVIF~5sj7@%9r79nq4!(B zbDX9t=*uBl3Fc+a;BZIo^4Pok@7pB=9Uhz9zf=P-VZNLrzWzn)!ocJfun3+}0fmcB z14NBvX#Y#g%0z&&+k_b)Wz_4GB5SbFgoL%#v_Or29e;%B0|dh$<<%zAcg<^M>a%mJ zVp1e4i-2ucdV`s_ytH;)VFXslVFV)tb>+@lMXGz|6NA*K3}H7J2-gvE@H;(vA*B~4C-^bK0-ut=Lh>0YcB-ZQ2OG*Q{4ws%$vXFi!7HAuleHb8L)SHfQjr9v0=Xno zcyQyfp~Ih3j1(r} zaXS|u&Dp)_J4GL)IX!B7=K5fLU_xRwbTo&yDTL@|RN8NaEH(3UzwA$ZO8c&*q%^-O zA6;r@Qp-9f*A61zE}q@))uDO>lj4S3M=eIIpnHa*i7{sB;H@I!>p-&073R98HrMlz zi?4iopVgRFTA=L*c#%i+pc5zWXu&J;rQ7i2g}5+T=u7IB#Oi2agA+OB8p-AUt-H6& z&eoYwvaUJFx0|Rl@N6&PvwLV1Rl0>E#{Ze=)=!vpbrPOzRqMasoIb134$^d5Urfl| z9K)M0nSq+G{Cx8_d!fU7VRe}J$<0GLQG}HC}#|nPWJ*VXlo!5s=i2o45b~YOVk6b_>E2x{BE_*60prMb) zciBBYvi8mS&5?FQ-%DQ}+gWYcbM)VT!N9+_oGknZP~Z10H&SzSpWaZTcLPWD1v{4< z+(SP`(vgqb)Jt_d;vyTjl?)q8$3J|TU2no_)jZxNBsR}aT|Hvd{-{kTb7qUF9>woA616|;`=*MDl z2|C;AO+K+rO``wk<__0(PsxJZyAw&iPv7D82@k9)%C_%Q|1-w5u1)ICFEq){A=y}o zvnqPI`44mm=lLImsrcd(TQnQ2aH~>dBb)vr==-;^IUCQi&To!G{-vz)6ssC2(9=sV z=u4KZvZ_rP=#{PuFCM;n{Vlj`m_j6zu_F?1YWYyQY*jA0XULa4y7&ciZ=(y3zu(yX z=-Ow`03R#-QAhmG=Q|d@W&SBWX+5W;wv^iT=ENxdukw4Q`kz0LoZ(Pxz0VpG?M_vsqJwXST@HN@y8AB;YjZBuTU8*K>}&!TET*)n4c4 z8*&#zznhoRSEjtS*_~KTKDhVN)o4j|VpOE_9@WyB4)xNAyHSymn@IBddnP``M82vk zMlYQ^13v54f!V2WGFj5NyrQHR40vCU`H)W>k7xc#NVKuqJ11k2=V@8qBVD#J7j<;g ziPlNItF%y>bNH|D5`pQtm+%QpX>AFsQ5K4Ziy0J|2^=x}?J*3()<@Vn;{E z%|t|qq?;cmZJM*ZW5nw0O{5bp(UnCA$Rk113>}u@H1owe- zp(TI#E{5~nIcsbQgpTKq8UDF(-RqXH`j;ooHckUN(R6pNSsi{h?YY%DXElzBKK7xm zpbFou`BQCTD`YP(m2R|G$@vR6ruf?n3kwdTH?qyzv-Mdy8-=|Kd=0!by`mfU@`vT6 zXY}u9>Z+@wud=rqxmr|r#*$$MISrYkoOv=)XsQHjxF41 zJgu;#4_EX8NOZ<4+im-?YOO{Mz3=0!@xpsng{|Bc zRQdPckr-=5!#f>cHzF0oo>C9Z(sEBDU;4^b6^biYVNpgv=vwO)`D`8_*-c9sZiZ@o z3!-ruH+|F2X_=cIi`MNs?rTwhfUPdv*CG9`20^ZxS#C;pM*}#zQi7>es>m7EU13XB zAb*S^$Ss(sye_(L)z->A=flQfUwyMKE{$oMA%#tmbrOk2UD?8^F~wU%0(&hS_*uR*z^BG5lK1}sQQ^{t literal 0 HcmV?d00001 diff --git a/src/BenjolinOsc.cpp b/src/BenjolinOsc.cpp index a881b09..94895e2 100644 --- a/src/BenjolinOsc.cpp +++ b/src/BenjolinOsc.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" From 9ddba4f63bc3084d417c968f2fa9505fbd9a111f Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 4 Jan 2024 12:28:21 -0500 Subject: [PATCH 16/81] Update README.md --- README.md | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index d820912..c7908b6 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,9 @@ Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and li [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) [Acknowledgments](#acknowledgments) -|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)| -|----|----|----|----|----|----| -|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)| +|[BENJOLIN
OSCILLATOR](#benjolin-oscillator)|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)| +|----|----|----|----|----|----|----| +|![Benjolin Oscillator module image](doc/BenjolinOsc.png)|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)| |[LOGIC](#logic)|[MIX 4](#mix-4)|[MIX 4
STEREO](#mix-4-stereo)|[MIX EXPANDERS](#mix-expanders)| |----|----|----|----| @@ -78,6 +78,12 @@ Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for [Return to Table Of Contents](#venom) +## BENJOLIN OSCILLATOR +![Benjolin Oscillator module image](doc/BenjolinOsc.png) +A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. Patch in a resonant state variable filter, and you have a complete functional Benjolin. + +[Return to Table Of Contents](#venom) + ## BERNOULLI SWITCH ![Bernoulli Switch module image](doc/BernoulliSwitch.png) The Bernoulli Switch randomly routes two inputs to two outputs. From 87ec0f4a78ba0ab7b5969de4ead862740275923d Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 4 Jan 2024 17:48:20 -0500 Subject: [PATCH 17/81] Update README.md --- README.md | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 79 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c7908b6..ed10fcb 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,85 @@ Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for ## BENJOLIN OSCILLATOR ![Benjolin Oscillator module image](doc/BenjolinOsc.png) -A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. Patch in a resonant state variable filter, and you have a complete functional Benjolin. +A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. Connect a resonant state variable filter, and you have a complete functional Benjolin. + +The module is arranged in three vertical sections: OSC1, OSC2, and RUNGLER. + +The oscillators are digital with triangle and pulse outputs, and a frequency range of approximately 30 seconds / cycle, up to approximately 7.6 kHz. The oscillators are intentionally close to, but not exactly 1V/Octave. + +## OSC1 (Oscillator 1) +### FREQ1 (Oscillator 1 Frequency) knob +Sets the base frequency of oscillator one. Full counterclockwise is roughly 30 seconds per cycle. The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory until about noon (the default) where it begins to transition to audio rates at 20Hz. Fully clockwise is around 7.6 kHz. The oscillator can be modulated above the knob maximum. + +### RUNG1 (Rungler 1) knob +Controls how much the rungler signal modulates oscillator 1 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). + +### CV1 (Control Voltage 1) knob and input +Bipolar input with a bipolar attenuverter to modulate oscillator 1 frequency. The attenuverter ranges from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). + +The CV1 input is normalled to the Oscillator 2 triangle output. + +### TRI1 (Triangle 1) output +Triangle waveform bipolar output for oscillator one, ranging from -5 to 5 volts. + +### PULSE1 output +Pulse waveform bipolar output for oscillator one, ranging from -5 to 5 volts. + +## OSC2 (Oscillator 2) +### FREQ2 (Oscillator 2 Frequency) knob +Sets the base frequency of oscillator two. Full counterclockwise is roughly 30 seconds per cycle. The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory until about noon (the default) where it begins to transition to audio rates at 20Hz. Fully clockwise is around 7.6 kHz. The oscillator can be modulated above the knob maximum. + +### RUNG2 (Rungler 2) knob +Controls how much the rungler signal modulates oscillator 2 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). + +### CV2 (Control Voltage 2) knob and input +Bipolar input with a bipolar attenuverter to modulate oscillator 2 frequency. The attenuverter ranges from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). + +The CV2 input is normalled to the Oscillator 1 triangle output. + +### TRI2 (Triangle 2) output +Triangle waveform bipolar output for oscillator two, ranging from -5 to 5 volts. + +### PULSE2 output +Pulse waveform bipolar output for oscillator two, ranging from -5 to 5 volts. + +## RUNGLER +The rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input along with comparators, logic gates, and a digital to analog converter. The rungler produces multiple output signals - XOR, PWM and Rungler. When a bit falls off the shift register, it is XORed with the data input and fed back into position one of the ASR. Depending on the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. + +The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. + +### PATTERN knob +Controls whether the rungler repeats a pattern or is chaotic. When fully anticlockwise, the rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. + +Below is a technical discussion of how it works. + +The Pattern knob range is from -1 to 1, with a default of 0 at noon. The raw internal triangle signal also ranges from -1 to 1. If the Pattern value is greater than the instantaneous incoming triangle value, then the rungler input is high (1), else the input is low (0). The input is XORed with the recycled ASR bit. So a high input inverts the recycled bit, and a low input preserves the recycled bit. + +When the Pattern knob is fully counterclockwise, the input is guaranteed to be zero, the recycled bit is preserved, and an 8 step pattern is established. + +When the Pattern knob is fully clockwise, the input is guaranteed to be 1, the recycled bit is inverted, and a 16 step pattern is established. + +At noon there is a roughly 50-50 chance of 0 or 1, so the rungler output is at its most chaotic, typically with no recognizeable pattern. + +### CHAOS button and input +If enabled, the Pattern knob is ignored, and the rungler output is always chaotic. Each press of the button toggles the state of the chaos button. A leading edge of a trigger at the input will also toggle the button state. + +The Chaos button works by converting the 8 step ASR into a 128 step linear ASR, and by ignoring the Pattern button and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. + +If Chaos is off, then the rungler may fall into a pattern over time, even if the Pattern knob is at noon. The Chaos button is useful for re-introducing chaos into the output. + +### DOUBLE button and input +If enabled, the Rungler is triggered at double the rate. Normally the Rungler is triggered by the leading edge of a clock gate. When in Double mode the Rungler is triggered by both the leading and trailing edges of a clock gate. + +Each press of the Double button toggles the state of the button. A leading edge of a trigger at the input will also toggle the button state. + +### CLOCK input + +### XOR output + +### PWM output + +### RUNG (Rungler) output [Return to Table Of Contents](#venom) From c36e6d8b665f593741970be668ffc9904da75693 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 4 Jan 2024 17:54:41 -0500 Subject: [PATCH 18/81] Update README.md --- README.md | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index ed10fcb..2138027 100644 --- a/README.md +++ b/README.md @@ -86,48 +86,48 @@ The module is arranged in three vertical sections: OSC1, OSC2, and RUNGLER. The oscillators are digital with triangle and pulse outputs, and a frequency range of approximately 30 seconds / cycle, up to approximately 7.6 kHz. The oscillators are intentionally close to, but not exactly 1V/Octave. -## OSC1 (Oscillator 1) -### FREQ1 (Oscillator 1 Frequency) knob +### OSC1 (Oscillator 1) +#### FREQ1 (Oscillator 1 Frequency) knob Sets the base frequency of oscillator one. Full counterclockwise is roughly 30 seconds per cycle. The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory until about noon (the default) where it begins to transition to audio rates at 20Hz. Fully clockwise is around 7.6 kHz. The oscillator can be modulated above the knob maximum. -### RUNG1 (Rungler 1) knob +#### RUNG1 (Rungler 1) knob Controls how much the rungler signal modulates oscillator 1 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). -### CV1 (Control Voltage 1) knob and input +#### CV1 (Control Voltage 1) knob and input Bipolar input with a bipolar attenuverter to modulate oscillator 1 frequency. The attenuverter ranges from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). The CV1 input is normalled to the Oscillator 2 triangle output. -### TRI1 (Triangle 1) output +#### TRI1 (Triangle 1) output Triangle waveform bipolar output for oscillator one, ranging from -5 to 5 volts. -### PULSE1 output +#### PULSE1 output Pulse waveform bipolar output for oscillator one, ranging from -5 to 5 volts. -## OSC2 (Oscillator 2) -### FREQ2 (Oscillator 2 Frequency) knob +### OSC2 (Oscillator 2) +#### FREQ2 (Oscillator 2 Frequency) knob Sets the base frequency of oscillator two. Full counterclockwise is roughly 30 seconds per cycle. The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory until about noon (the default) where it begins to transition to audio rates at 20Hz. Fully clockwise is around 7.6 kHz. The oscillator can be modulated above the knob maximum. -### RUNG2 (Rungler 2) knob +#### RUNG2 (Rungler 2) knob Controls how much the rungler signal modulates oscillator 2 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). -### CV2 (Control Voltage 2) knob and input +#### CV2 (Control Voltage 2) knob and input Bipolar input with a bipolar attenuverter to modulate oscillator 2 frequency. The attenuverter ranges from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). The CV2 input is normalled to the Oscillator 1 triangle output. -### TRI2 (Triangle 2) output +#### TRI2 (Triangle 2) output Triangle waveform bipolar output for oscillator two, ranging from -5 to 5 volts. -### PULSE2 output +#### PULSE2 output Pulse waveform bipolar output for oscillator two, ranging from -5 to 5 volts. -## RUNGLER +### RUNGLER The rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input along with comparators, logic gates, and a digital to analog converter. The rungler produces multiple output signals - XOR, PWM and Rungler. When a bit falls off the shift register, it is XORed with the data input and fed back into position one of the ASR. Depending on the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. -### PATTERN knob +#### PATTERN knob Controls whether the rungler repeats a pattern or is chaotic. When fully anticlockwise, the rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. Below is a technical discussion of how it works. @@ -140,25 +140,25 @@ When the Pattern knob is fully clockwise, the input is guaranteed to be 1, the r At noon there is a roughly 50-50 chance of 0 or 1, so the rungler output is at its most chaotic, typically with no recognizeable pattern. -### CHAOS button and input +#### CHAOS button and input If enabled, the Pattern knob is ignored, and the rungler output is always chaotic. Each press of the button toggles the state of the chaos button. A leading edge of a trigger at the input will also toggle the button state. The Chaos button works by converting the 8 step ASR into a 128 step linear ASR, and by ignoring the Pattern button and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. If Chaos is off, then the rungler may fall into a pattern over time, even if the Pattern knob is at noon. The Chaos button is useful for re-introducing chaos into the output. -### DOUBLE button and input +#### DOUBLE button and input If enabled, the Rungler is triggered at double the rate. Normally the Rungler is triggered by the leading edge of a clock gate. When in Double mode the Rungler is triggered by both the leading and trailing edges of a clock gate. Each press of the Double button toggles the state of the button. A leading edge of a trigger at the input will also toggle the button state. -### CLOCK input +#### CLOCK input -### XOR output +#### XOR output -### PWM output +#### PWM output -### RUNG (Rungler) output +#### RUNG (Rungler) output [Return to Table Of Contents](#venom) From 7ec35f9ca304684867c40022963164deb7ad421a Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 5 Jan 2024 00:28:25 -0500 Subject: [PATCH 19/81] Update README.md --- README.md | 49 +++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 2138027..5f8d032 100644 --- a/README.md +++ b/README.md @@ -82,13 +82,19 @@ Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for ![Benjolin Oscillator module image](doc/BenjolinOsc.png) A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. Connect a resonant state variable filter, and you have a complete functional Benjolin. +The Benjolin was invented by Rob Horkijk in 2009. It is a non-traditional / experimental electronic musical instrument that uses a small number of simple circuits and a minimal number of knobs to create an astonishing range of sounds and patterns. Extensive use of feedback and cross-modulation makes the Benjolin a chaotic sound source, with the ability to create stable patterns as well. + +I would like to create a complete Benjolin module, but I do not have the kowledge to create a resonant filter worthy of the Benjolin. So this module only includes the two oscillators and the Rungler. A separate filter module can be used in a patch to create a fully functioning Benjolin. + +There have been many variations of the Rungler. This module is based on the Eurorack version 2 of the Benjolin created by After Later Audio in collaboration with Rob Hordijk. + The module is arranged in three vertical sections: OSC1, OSC2, and RUNGLER. -The oscillators are digital with triangle and pulse outputs, and a frequency range of approximately 30 seconds / cycle, up to approximately 7.6 kHz. The oscillators are intentionally close to, but not exactly 1V/Octave. +The oscillators are digital with triangle and pulse outputs. They are intentionally not exactly 1V/Octave. ### OSC1 (Oscillator 1) -#### FREQ1 (Oscillator 1 Frequency) knob -Sets the base frequency of oscillator one. Full counterclockwise is roughly 30 seconds per cycle. The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory until about noon (the default) where it begins to transition to audio rates at 20Hz. Fully clockwise is around 7.6 kHz. The oscillator can be modulated above the knob maximum. +#### FREQ1 knob +Sets the base frequency of oscillator one. Fully counterclockwise is roughly 0.03 Hz (30 seconds per cycle). The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory up through noon at about 15 Hz. A bit above that and it transitions to audio rates, with a maximum fully clockwise frequency of around 7.8 kHz. The oscillator can be modulated above the knob maximum. #### RUNG1 (Rungler 1) knob Controls how much the rungler signal modulates oscillator 1 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). @@ -106,7 +112,7 @@ Pulse waveform bipolar output for oscillator one, ranging from -5 to 5 volts. ### OSC2 (Oscillator 2) #### FREQ2 (Oscillator 2 Frequency) knob -Sets the base frequency of oscillator two. Full counterclockwise is roughly 30 seconds per cycle. The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory until about noon (the default) where it begins to transition to audio rates at 20Hz. Fully clockwise is around 7.6 kHz. The oscillator can be modulated above the knob maximum. +Sets the base frequency of oscillator two. Fully counterclockwise is roughly 0.03 Hz (30 seconds per cycle). The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory up through noon at about 15 Hz. A bit above that and it transitions to audio rates, with a maximum fully clockwise frequency of around 7.8 kHz. The oscillator can be modulated above the knob maximum. #### RUNG2 (Rungler 2) knob Controls how much the rungler signal modulates oscillator 2 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). @@ -122,13 +128,23 @@ Triangle waveform bipolar output for oscillator two, ranging from -5 to 5 volts. #### PULSE2 output Pulse waveform bipolar output for oscillator two, ranging from -5 to 5 volts. -### RUNGLER -The rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input along with comparators, logic gates, and a digital to analog converter. The rungler produces multiple output signals - XOR, PWM and Rungler. When a bit falls off the shift register, it is XORed with the data input and fed back into position one of the ASR. Depending on the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. +### OVERSAMPLE switch +This small color coded switch controls how much oversampling is applied to reduce aliasing artifacts in the outputs.- Off (gray) +- x2 (yellow) +- x4 (green) +- x8 (light blue - default) +- x16 (dark blue) +- x32 (purple) + +Aliasing might not be noticeable with chaotic and/or low frequency outputs. But the aliasing can become painfully obvious when producing high frequency coherant output unless oversampling is used. But oversampling is rather CPU intensive, so you want to use the minimum amount that gives good results. An oversample value of x8 uses reasonable CPU, and provides clean output in all but the most extreme cases. -The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. +Due to float arithmetic limitations, the oscillators would stall at the lowest frequency if the VCV sample rate is set above 48 kHz and high oversample rates are used. To compensate, the maximum allowed oversampling is reduced as the VCV sample rate increases. This enables the oscillators to cover their full range regardless what VCV sample rate is used. + +### RUNGLER +The Rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into position one of the ASR. Depending on the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. The rungler produces multiple output signals. #### PATTERN knob -Controls whether the rungler repeats a pattern or is chaotic. When fully anticlockwise, the rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. +Controls whether the Rungler repeats a pattern or is chaotic. When fully anticlockwise, the Rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. Below is a technical discussion of how it works. @@ -154,12 +170,29 @@ Each press of the Double button toggles the state of the button. A leading edge #### CLOCK input +This is the input that triggers the Rungler. It expects a bipolar clock input, with a high state detected above +1V, and a low state below -1V. + +The Clock input is normaled to the Oscillator 2 pulse output. + #### XOR output +This is simply the first bit of the Rungler ASR, scaled and offset to be bipolar +/-5V. + #### PWM output +Although this is under the Rungler section, it actually has nothing to do with the Rungler. This bipolar +/-5V output is produced by a comparator that outputs 5V when the TRI2 signal is greater than TRI1, and -5V otherwise. This is the signal that traditionally gets sent to the Benjolin filter input. It was called PWM by Rob Hordijk because it is a series of variable width pulses. + #### RUNG (Rungler) output +This output is also bipolar varying between +/-5V. It is a stepped voltage signal with 8 possible values created by the digital to analog converter in the Rungler. + +### Standard Venom Context Menus +[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. + +### Bypass + +All outputs are constant monophonic 0V when the Benjolin Oscillator is bypassed. + [Return to Table Of Contents](#venom) ## BERNOULLI SWITCH From 67be38425c93d0e7ba85bd77bb3c2311af33b37d Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 5 Jan 2024 09:06:32 -0500 Subject: [PATCH 20/81] Update README.md --- README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 5f8d032..5b85427 100644 --- a/README.md +++ b/README.md @@ -80,13 +80,13 @@ Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for ## BENJOLIN OSCILLATOR ![Benjolin Oscillator module image](doc/BenjolinOsc.png) -A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. Connect a resonant state variable filter, and you have a complete functional Benjolin. +A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. It produces 7 outputs: 4 basic wave shapes (discounting FM), two varying width pulse outputs, and a stepped voltage output similar to a random sample & hold. Frequency range is very wide, from slow LFO rates to high audio rates. Connect a resonant filter with excellent ping characteristics, and you have a complete functional Benjolin. The Benjolin was invented by Rob Horkijk in 2009. It is a non-traditional / experimental electronic musical instrument that uses a small number of simple circuits and a minimal number of knobs to create an astonishing range of sounds and patterns. Extensive use of feedback and cross-modulation makes the Benjolin a chaotic sound source, with the ability to create stable patterns as well. -I would like to create a complete Benjolin module, but I do not have the kowledge to create a resonant filter worthy of the Benjolin. So this module only includes the two oscillators and the Rungler. A separate filter module can be used in a patch to create a fully functioning Benjolin. +There have been many variations of the Benjolin, but the basic functional architecture is always the same - two oscillators, a specialized shift register construct called the Rungler, and a resonant state variable filter. This module is based on the Eurorack version 2 of the Benjolin created by After Later Audio in collaboration with Rob Hordijk. -There have been many variations of the Rungler. This module is based on the Eurorack version 2 of the Benjolin created by After Later Audio in collaboration with Rob Hordijk. +Some day I would like to create a complete Benjolin module, but I do not yet have the kowledge to program a resonant filter worthy of the Benjolin. So this module only includes the two oscillators and the Rungler. A complete fully functioning Benjolin patch can be created by pairing the Benjolin Oscillator with a resonant filter module. The module is arranged in three vertical sections: OSC1, OSC2, and RUNGLER. @@ -112,7 +112,7 @@ Pulse waveform bipolar output for oscillator one, ranging from -5 to 5 volts. ### OSC2 (Oscillator 2) #### FREQ2 (Oscillator 2 Frequency) knob -Sets the base frequency of oscillator two. Fully counterclockwise is roughly 0.03 Hz (30 seconds per cycle). The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory up through noon at about 15 Hz. A bit above that and it transitions to audio rates, with a maximum fully clockwise frequency of around 7.8 kHz. The oscillator can be modulated above the knob maximum. +Sets the base frequency of oscillator two. Fully counterclockwise is roughly 0.03 Hz (around 30 seconds per cycle). The oscillator cannot be modulated below this minimum frequency. The oscillator remains in LFO territory up through noon at about 15 Hz. A bit above that and it transitions to audio rates, with a maximum fully clockwise frequency of around 7.8 kHz. The oscillator can be modulated above the knob maximum. #### RUNG2 (Rungler 2) knob Controls how much the rungler signal modulates oscillator 2 frequency. The knob is a bipolar attenuverter ranging from -1 (100% inverted) to 1 (100%), with the default noon value of 0 (no modulation). @@ -136,12 +136,12 @@ This small color coded switch controls how much oversampling is applied to reduc - x16 (dark blue) - x32 (purple) -Aliasing might not be noticeable with chaotic and/or low frequency outputs. But the aliasing can become painfully obvious when producing high frequency coherant output unless oversampling is used. But oversampling is rather CPU intensive, so you want to use the minimum amount that gives good results. An oversample value of x8 uses reasonable CPU, and provides clean output in all but the most extreme cases. +Aliasing might not be noticeable with chaotic and/or low frequency outputs. But the aliasing can become painfully obvious when producing high frequency coherant output unless oversampling is used. But oversampling is rather CPU intensive, so you want to use the minimum amount that gives good results. An oversample value of x8 uses reasonable CPU with VCV running at 48 kHz, and provides clean output in all but the most extreme cases. Due to float arithmetic limitations, the oscillators would stall at the lowest frequency if the VCV sample rate is set above 48 kHz and high oversample rates are used. To compensate, the maximum allowed oversampling is reduced as the VCV sample rate increases. This enables the oscillators to cover their full range regardless what VCV sample rate is used. ### RUNGLER -The Rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into position one of the ASR. Depending on the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. The rungler produces multiple output signals. +The Rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into the low bit of the ASR. The Rungler produces multiple output signals. Depending on configuration and the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. #### PATTERN knob Controls whether the Rungler repeats a pattern or is chaotic. When fully anticlockwise, the Rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. @@ -157,7 +157,7 @@ When the Pattern knob is fully clockwise, the input is guaranteed to be 1, the r At noon there is a roughly 50-50 chance of 0 or 1, so the rungler output is at its most chaotic, typically with no recognizeable pattern. #### CHAOS button and input -If enabled, the Pattern knob is ignored, and the rungler output is always chaotic. Each press of the button toggles the state of the chaos button. A leading edge of a trigger at the input will also toggle the button state. +If enabled, the Pattern knob is ignored, and the rungler output is always chaotic. Each press of the button toggles the state of the chaos button. The leading edge of a trigger at the input will also toggle the button state. The Chaos button works by converting the 8 step ASR into a 128 step linear ASR, and by ignoring the Pattern button and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. @@ -166,7 +166,7 @@ If Chaos is off, then the rungler may fall into a pattern over time, even if the #### DOUBLE button and input If enabled, the Rungler is triggered at double the rate. Normally the Rungler is triggered by the leading edge of a clock gate. When in Double mode the Rungler is triggered by both the leading and trailing edges of a clock gate. -Each press of the Double button toggles the state of the button. A leading edge of a trigger at the input will also toggle the button state. +Each press of the Double button toggles the state of the button. The leading edge of a trigger at the input will also toggle the button state. #### CLOCK input @@ -180,7 +180,7 @@ This is simply the first bit of the Rungler ASR, scaled and offset to be bipolar #### PWM output -Although this is under the Rungler section, it actually has nothing to do with the Rungler. This bipolar +/-5V output is produced by a comparator that outputs 5V when the TRI2 signal is greater than TRI1, and -5V otherwise. This is the signal that traditionally gets sent to the Benjolin filter input. It was called PWM by Rob Hordijk because it is a series of variable width pulses. +Although this is under the Rungler section, it actually has nothing to do with the Rungler. This bipolar +/-5V output is produced by a comparator that outputs 5V when the TRI2 signal is greater than TRI1, and -5V otherwise. This is the signal that traditionally gets sent to the Benjolin filter input. It was called PWM by Rob Hordijk because it produces a series of variable width pulses, remaniscent of a pulse wave with pulse width modulation. #### RUNG (Rungler) output @@ -258,6 +258,9 @@ The following factory presets are available that emulate the four configurations - Latched Toggled Bernoulli Gate - Toggles constant 10V between A and B - Toggled Bernoulli Gate - Toggles 10V Schmitt trigger gate between A and B +### Patching a Complete Benjolin +A fully functioning Benjolin can be created by pairing the Benjolin Oscillator with a resonant filter. I find the Vult Unstabile filter gives exceptional results. For a minimal setup, patch the Benjolin Oscillator PWM output to the filter input, and the Rungler output to the filter cutoff. Ideally the resonance and cutoff should be constrained such that the filter does not self resonate unless provided feedback from the band pass output. So a more elaborate patch may be desired. Another thing to consider is a crossfade module to allow mixing in a variable amount of external (or self patched) audio input with the PWM input. Also good to have is a mixer for the cutoff input that combines the Rungler signal with external (or self patched) CV input. + ### Standard Venom Context Menus [Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From ecfd51cc0dc0681536b26d9f3b726e8d56911b48 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 5 Jan 2024 11:44:27 -0500 Subject: [PATCH 21/81] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5b85427..ea01e7e 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for ## BENJOLIN OSCILLATOR ![Benjolin Oscillator module image](doc/BenjolinOsc.png) -A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. It produces 7 outputs: 4 basic wave shapes (discounting FM), two varying width pulse outputs, and a stepped voltage output similar to a random sample & hold. Frequency range is very wide, from slow LFO rates to high audio rates. Connect a resonant filter with excellent ping characteristics, and you have a complete functional Benjolin. +A complex chaotic oscillator emulating the oscillator and rungler components of a Benjolin. It produces 7 outputs: two pairs of triangle and pulse waves with exponential FM, two varying width pulse outputs, and a stepped voltage output similar to a random sample & hold. Frequency range is very wide, from slow LFO rates to high audio rates. Connect a resonant filter with excellent ping characteristics, and you have a complete functional Benjolin. The Benjolin was invented by Rob Horkijk in 2009. It is a non-traditional / experimental electronic musical instrument that uses a small number of simple circuits and a minimal number of knobs to create an astonishing range of sounds and patterns. Extensive use of feedback and cross-modulation makes the Benjolin a chaotic sound source, with the ability to create stable patterns as well. @@ -129,7 +129,8 @@ Triangle waveform bipolar output for oscillator two, ranging from -5 to 5 volts. Pulse waveform bipolar output for oscillator two, ranging from -5 to 5 volts. ### OVERSAMPLE switch -This small color coded switch controls how much oversampling is applied to reduce aliasing artifacts in the outputs.- Off (gray) +This small color coded switch controls how much oversampling is applied to reduce aliasing artifacts in the outputs. +- Off (gray) - x2 (yellow) - x4 (green) - x8 (light blue - default) @@ -186,6 +187,11 @@ Although this is under the Rungler section, it actually has nothing to do with t This output is also bipolar varying between +/-5V. It is a stepped voltage signal with 8 possible values created by the digital to analog converter in the Rungler. +### Patching a Complete Benjolin +A minimal complete Benjolin can be patched simply by pairing the Benjolin Oscillator with a resonant filter with good ping characteristics. I find the Vult Stabile filter works extremely well. Simply patch the PWM output to the filter input, and the Rungler output to the filter cuttoff input. + +A Benjolin should not self oscillate unless given feedback from the filter band pass output. So ideally the cutoff frequency and resonance amount should be constrained so as to prevent self oscillation. Other things to consider are a crossfade module to allow a mix of PWM and external CV (or self patched CV) as input to the filter. Also a mixer would be good to allow a mix of external (or self patched) CV and Rungler input to the Cutoff frequency. + ### Standard Venom Context Menus [Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From 29fb464de9ab4c2b79feea66de2a45782b63d997 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 5 Jan 2024 18:15:29 -0500 Subject: [PATCH 22/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea01e7e..ba5b697 100644 --- a/README.md +++ b/README.md @@ -188,7 +188,7 @@ Although this is under the Rungler section, it actually has nothing to do with t This output is also bipolar varying between +/-5V. It is a stepped voltage signal with 8 possible values created by the digital to analog converter in the Rungler. ### Patching a Complete Benjolin -A minimal complete Benjolin can be patched simply by pairing the Benjolin Oscillator with a resonant filter with good ping characteristics. I find the Vult Stabile filter works extremely well. Simply patch the PWM output to the filter input, and the Rungler output to the filter cuttoff input. +A minimal complete Benjolin can be patched simply by pairing the Benjolin Oscillator with a resonant filter with good ping characteristics. I find the Vult Unstabile filter works extremely well. Simply patch the PWM output to the filter input, and the Rungler output to the filter cuttoff input. A Benjolin should not self oscillate unless given feedback from the filter band pass output. So ideally the cutoff frequency and resonance amount should be constrained so as to prevent self oscillation. Other things to consider are a crossfade module to allow a mix of PWM and external CV (or self patched CV) as input to the filter. Also a mixer would be good to allow a mix of external (or self patched) CV and Rungler input to the Cutoff frequency. From 17d02ddfe37913f865215e403ba30d9aabb3cec3 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 5 Jan 2024 18:54:53 -0500 Subject: [PATCH 23/81] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index ba5b697..2ae7cb2 100644 --- a/README.md +++ b/README.md @@ -137,12 +137,12 @@ This small color coded switch controls how much oversampling is applied to reduc - x16 (dark blue) - x32 (purple) -Aliasing might not be noticeable with chaotic and/or low frequency outputs. But the aliasing can become painfully obvious when producing high frequency coherant output unless oversampling is used. But oversampling is rather CPU intensive, so you want to use the minimum amount that gives good results. An oversample value of x8 uses reasonable CPU with VCV running at 48 kHz, and provides clean output in all but the most extreme cases. +Aliasing might not be noticeable with chaotic and/or low frequency outputs. But the aliasing can become painfully obvious when producing high frequency coherent output unless oversampling is used. But oversampling is rather CPU intensive, so you want to use the minimum amount that gives good results. An oversample value of x8 uses reasonable CPU with VCV running at 48 kHz, and provides clean output in all but the most extreme cases. Due to float arithmetic limitations, the oscillators would stall at the lowest frequency if the VCV sample rate is set above 48 kHz and high oversample rates are used. To compensate, the maximum allowed oversampling is reduced as the VCV sample rate increases. This enables the oscillators to cover their full range regardless what VCV sample rate is used. ### RUNGLER -The Rungler consists of a sample and hold 8 step arithmetic shift register (ASR) driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into the low bit of the ASR. The Rungler produces multiple output signals. Depending on configuration and the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. +The Rungler consists of an eight step arithmetic shift register (ASR) driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into the low bit of the ASR. The Rungler produces multiple output signals. Depending on configuration and the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. #### PATTERN knob Controls whether the Rungler repeats a pattern or is chaotic. When fully anticlockwise, the Rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. @@ -181,7 +181,7 @@ This is simply the first bit of the Rungler ASR, scaled and offset to be bipolar #### PWM output -Although this is under the Rungler section, it actually has nothing to do with the Rungler. This bipolar +/-5V output is produced by a comparator that outputs 5V when the TRI2 signal is greater than TRI1, and -5V otherwise. This is the signal that traditionally gets sent to the Benjolin filter input. It was called PWM by Rob Hordijk because it produces a series of variable width pulses, remaniscent of a pulse wave with pulse width modulation. +Although this is under the Rungler section, it actually has nothing to do with the Rungler. This bipolar +/-5V output is produced by a comparator that outputs 5V when the TRI2 signal is greater than TRI1, and -5V otherwise. This is the signal that traditionally gets sent to the Benjolin filter input. It was called PWM by Rob Hordijk because it produces a series of variable width pulses, reminiscent of a pulse wave with pulse width modulation. #### RUNG (Rungler) output From 265b43ef7802768222fc90794d3c24f8190a97c3 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sat, 6 Jan 2024 05:53:34 -0500 Subject: [PATCH 24/81] Fix oversample label list as sample rate changes --- src/BenjolinOsc.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/BenjolinOsc.cpp b/src/BenjolinOsc.cpp index 94895e2..58548d7 100644 --- a/src/BenjolinOsc.cpp +++ b/src/BenjolinOsc.cpp @@ -88,20 +88,33 @@ struct BenjolinOsc : VenomModule { void onSampleRateChange() override { float rate = APP->engine->getSampleRate(); + std::vector< std::string > labels; int maxOver; - if (rate>384000.f) + if (rate>384000.f) { maxOver = 1; - else if (rate>192000.f) + labels = {"Off", "x2"}; + } + else if (rate>192000.f) { maxOver = 2; - else if (rate>96000.f) + labels = {"Off", "x2", "x4"}; + } + else if (rate>96000.f) { maxOver = 3; - else if (rate>48000.f) + labels = {"Off", "x2", "x4", "x8"}; + } + else if (rate>48000.f) { maxOver = 4; - else + labels = {"Off", "x2", "x4", "x8", "x16"}; + } + else { maxOver = 5; + labels = {"Off", "x2", "x4", "x8", "x16", "x32"}; + } if (params[OVER_PARAM].getValue()>maxOver) params[OVER_PARAM].setValue(maxOver); - paramQuantities[OVER_PARAM]->maxValue = maxOver; + SwitchQuantity *switchQuant = static_cast(paramQuantities[OVER_PARAM]); + switchQuant->maxValue = maxOver; + switchQuant->labels = labels; } void process(const ProcessArgs& args) override { From be448ee016d74f1237c1aa4425e7ea8b7d596625 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sat, 6 Jan 2024 05:58:00 -0500 Subject: [PATCH 25/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2ae7cb2..933bafe 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Venom -Venom modules version 2.5.0 for VCV Rack 2 are copyright 2023 Dave Benham and licensed under GNU General Public License version 3. +Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023 Dave Benham and licensed under GNU General Public License version 3. [Color Coded Ports](#color-coded-ports) [Themes](#themes) From 5bb40a519dcfcc20ae92aa6c8c894c5d15fcd873 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 8 Jan 2024 08:25:10 -0500 Subject: [PATCH 26/81] FixedSwitchQuantity --- src/LinearBeatsExpander.cpp | 4 ++-- src/Reformation.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/LinearBeatsExpander.cpp b/src/LinearBeatsExpander.cpp index 9f2591b..da12427 100644 --- a/src/LinearBeatsExpander.cpp +++ b/src/LinearBeatsExpander.cpp @@ -15,10 +15,10 @@ struct LinearBeatsExpander : VenomModule { venomConfig(EXP_PARAMS_LEN, EXP_INPUTS_LEN, EXP_OUTPUTS_LEN, EXP_LIGHTS_LEN); for (int i=0; i<9; i++) { configInput(MUTE_INPUT+i, label[i]+" mute CV"); - configSwitch(MUTE_PARAM+i, 0.f, 1.f, 0.f, label[i]+" mute", {"Unmuted", "Muted"}); + configSwitch(MUTE_PARAM+i, 0.f, 1.f, 0.f, label[i]+" mute", {"Unmuted", "Muted"}); } configInput(BYPASS_INPUT, "Disable linear beats CV"); - configSwitch(BYPASS_PARAM, 0.f, 1.f, 0.f, "Linear beats", {"Enabled", "Disabled"}); + configSwitch(BYPASS_PARAM, 0.f, 1.f, 0.f, "Linear beats", {"Enabled", "Disabled"}); configLight(LEFT_LIGHT, "Left connection indicator"); configLight(RIGHT_LIGHT, "Right connection indicator"); } diff --git a/src/Reformation.cpp b/src/Reformation.cpp index f23c147..6d167dd 100644 --- a/src/Reformation.cpp +++ b/src/Reformation.cpp @@ -53,10 +53,10 @@ struct Reformation : VenomModule { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); configParam(DRIVE_PARAM, 1.f, 10.f, 2.f, "Drive"); configParam(LEVEL_PARAM, 0.f, 1.f, 0.5f, "Level"); - configSwitch(IN_PARAM, 0.f, 1.f, 0.f, "Input polarity", {"Unipolar", "Bipolar"}); - configSwitch(OUT_PARAM, 0.f, 1.f, 0.f, "Output polarity", {"Unipolar", "Bipolar"}); - configSwitch(CLIP_PARAM, 0.f, 2.f, 1.f, "Clipping", {"Off", "Hard CV clipping", "Soft audio clipping"}); - configSwitch(OVER_PARAM, 0.f, 2.f, 0.f, "Oversampling", {"Off", "x4", "x8"}); + configSwitch(IN_PARAM, 0.f, 1.f, 0.f, "Input polarity", {"Unipolar", "Bipolar"}); + configSwitch(OUT_PARAM, 0.f, 1.f, 0.f, "Output polarity", {"Unipolar", "Bipolar"}); + configSwitch(CLIP_PARAM, 0.f, 2.f, 1.f, "Clipping", {"Off", "Hard CV clipping", "Soft audio clipping"}); + configSwitch(OVER_PARAM, 0.f, 2.f, 0.f, "Oversampling", {"Off", "x4", "x8"}); for (int i=0; i Date: Mon, 8 Jan 2024 08:46:41 -0500 Subject: [PATCH 27/81] Started v2.6.0 change log --- changelog.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/changelog.md b/changelog.md index e054eaa..416752f 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,21 @@ # Venom Modules Changelog +## 2.6.0 +### New Modules +- Benjolin Oscillator +- Logic +- NORSIQ Chord To Scale + +### Enhancements +- Improved discrimination of DC offset removal by lowering cutoff frequency to 2 Hz + +### Bug Fixes +- Fixed locked switch context menu + - Linear Beats Expander + - Reformation + - Shaped VCA +- Rhythm Explorer - Fixed some polyphonic port displays + ## 2.5.0 (2023-11-22) ### New Modules - Linear Beats From 1632e689eba2f269ace2f95baddf16868c2f3320 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 8 Jan 2024 13:24:32 -0500 Subject: [PATCH 28/81] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 933bafe..49599a2 100644 --- a/README.md +++ b/README.md @@ -142,14 +142,14 @@ Aliasing might not be noticeable with chaotic and/or low frequency outputs. But Due to float arithmetic limitations, the oscillators would stall at the lowest frequency if the VCV sample rate is set above 48 kHz and high oversample rates are used. To compensate, the maximum allowed oversampling is reduced as the VCV sample rate increases. This enables the oscillators to cover their full range regardless what VCV sample rate is used. ### RUNGLER -The Rungler consists of an eight step arithmetic shift register (ASR) driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into the low bit of the ASR. The Rungler produces multiple output signals. Depending on configuration and the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. +The Rungler consists of an eight step shift register driven by a clock and a data input, along with comparators, logic gates, and a digital to analog converter. The rungler data input is always derived from the oscillator 1 triangle output. The clock input defaults to the oscillator 2 pulse output, but may be overridden at the clock input. When a bit shifts out of the shift register, it is XORed with the data input and fed back into the low bit of the ASR. The Rungler produces multiple output signals. Depending on configuration and the incoming data, the rungler output may be chaotic, or it may have a readily recognized pattern. #### PATTERN knob Controls whether the Rungler repeats a pattern or is chaotic. When fully anticlockwise, the Rungler produces an 8 step pattern. When fully clockwise it produces a 16 step pattern, with the first 8 steps being a mirror image of the second 8 steps. At noon the rungler output is chaotic. Below is a technical discussion of how it works. -The Pattern knob range is from -1 to 1, with a default of 0 at noon. The raw internal triangle signal also ranges from -1 to 1. If the Pattern value is greater than the instantaneous incoming triangle value, then the rungler input is high (1), else the input is low (0). The input is XORed with the recycled ASR bit. So a high input inverts the recycled bit, and a low input preserves the recycled bit. +The Pattern knob range is from -1 to 1, with a default of 0 at noon. The raw internal triangle signal also ranges from -1 to 1. If the Pattern value is greater than the instantaneous incoming triangle value, then the rungler input is high (1), else the input is low (0). The input is XORed with the recycled shift register bit. So a high input inverts the recycled bit, and a low input preserves the recycled bit. When the Pattern knob is fully counterclockwise, the input is guaranteed to be zero, the recycled bit is preserved, and an 8 step pattern is established. @@ -160,7 +160,7 @@ At noon there is a roughly 50-50 chance of 0 or 1, so the rungler output is at i #### CHAOS button and input If enabled, the Pattern knob is ignored, and the rungler output is always chaotic. Each press of the button toggles the state of the chaos button. The leading edge of a trigger at the input will also toggle the button state. -The Chaos button works by converting the 8 step ASR into a 128 step linear ASR, and by ignoring the Pattern button and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. +The Chaos button works by converting the 8 step shift register into a 127 step linear feedback shift register, and by ignoring the Pattern button and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. If Chaos is off, then the rungler may fall into a pattern over time, even if the Pattern knob is at noon. The Chaos button is useful for re-introducing chaos into the output. @@ -177,7 +177,7 @@ The Clock input is normaled to the Oscillator 2 pulse output. #### XOR output -This is simply the first bit of the Rungler ASR, scaled and offset to be bipolar +/-5V. +This is simply the first bit of the Rungler shift register, scaled and offset to be bipolar +/-5V. #### PWM output From 4d7b17f02e5fe4ce945c8df35bca26c9bed96fcf Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 8 Jan 2024 17:42:52 -0500 Subject: [PATCH 29/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 49599a2..dc81bf5 100644 --- a/README.md +++ b/README.md @@ -160,7 +160,7 @@ At noon there is a roughly 50-50 chance of 0 or 1, so the rungler output is at i #### CHAOS button and input If enabled, the Pattern knob is ignored, and the rungler output is always chaotic. Each press of the button toggles the state of the chaos button. The leading edge of a trigger at the input will also toggle the button state. -The Chaos button works by converting the 8 step shift register into a 127 step linear feedback shift register, and by ignoring the Pattern button and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. +The Chaos button works by converting the 8 step shift register into a 127 step linear feedback shift register, and by ignoring the Pattern knob and always comparing against 0, so there is always a 50% chance of inversion of the recycled bit. If Chaos is off, then the rungler may fall into a pattern over time, even if the Pattern knob is at noon. The Chaos button is useful for re-introducing chaos into the output. From c10f529768642f3c2a068103810f11c9d1f45d93 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 11 Jan 2024 09:09:54 -0500 Subject: [PATCH 30/81] Remove some debug code --- src/Logic.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/Logic.cpp b/src/Logic.cpp index 2daf47b..40e8d00 100644 --- a/src/Logic.cpp +++ b/src/Logic.cpp @@ -264,10 +264,6 @@ struct Logic : VenomModule { } outputs[GATE_OUTPUT+c].setChannels(polyCount[c]); } - outputs[GATE_OUTPUT+7].setVoltage(lowThresh); - outputs[GATE_OUTPUT+8].setVoltage(highThresh); - outputs[GATE_OUTPUT+7].setChannels(1); - outputs[GATE_OUTPUT+8].setChannels(1); } for (int c=endChannel; c Date: Thu, 11 Jan 2024 23:23:07 -0500 Subject: [PATCH 31/81] Update README.md --- README.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/README.md b/README.md index dc81bf5..3bb111b 100644 --- a/README.md +++ b/README.md @@ -264,9 +264,6 @@ The following factory presets are available that emulate the four configurations - Latched Toggled Bernoulli Gate - Toggles constant 10V between A and B - Toggled Bernoulli Gate - Toggles 10V Schmitt trigger gate between A and B -### Patching a Complete Benjolin -A fully functioning Benjolin can be created by pairing the Benjolin Oscillator with a resonant filter. I find the Vult Unstabile filter gives exceptional results. For a minimal setup, patch the Benjolin Oscillator PWM output to the filter input, and the Rungler output to the filter cutoff. Ideally the resonance and cutoff should be constrained such that the filter does not self resonate unless provided feedback from the band pass output. So a more elaborate patch may be desired. Another thing to consider is a crossfade module to allow mixing in a variable amount of external (or self patched) audio input with the PWM input. Also good to have is a mixer for the cutoff input that combines the Rungler signal with external (or self patched) CV input. - ### Standard Venom Context Menus [Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From f93a55d8681891a0466900596b098ed05534bc66 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 14 Jan 2024 00:41:30 -0500 Subject: [PATCH 32/81] Add custom name menu option to parameters and ports --- README.md | 10 +- changelog.md | 1 + src/BenjolinOsc.cpp | 28 ++--- src/BernoulliSwitch.cpp | 12 +-- src/BernoulliSwitchExpander.cpp | 14 +-- src/CloneMerge.cpp | 4 +- src/HQ.cpp | 8 +- src/LinearBeats.cpp | 6 +- src/LinearBeatsExpander.cpp | 4 +- src/Logic.cpp | 10 +- src/Mix4.cpp | 10 +- src/Mix4Stereo.cpp | 20 ++-- src/MixFade.cpp | 10 +- src/MixFade2.cpp | 10 +- src/MixMute.cpp | 10 +- src/MixPan.cpp | 8 +- src/MixSend.cpp | 8 +- src/MixSolo.cpp | 8 +- src/NORS-IQ.cpp | 24 ++--- src/NORSIQChord2Scale.cpp | 12 +-- src/PolyClone.cpp | 4 +- src/PolyUnison.cpp | 8 +- src/Recurse.cpp | 12 +-- src/RecurseStereo.cpp | 20 ++-- src/Reformation.cpp | 12 +-- src/ShapedVCA.cpp | 12 +-- src/VCAMix4.cpp | 30 +++--- src/VCAMix4Stereo.cpp | 50 ++++----- src/WinComp.cpp | 18 ++-- src/plugin.hpp | 175 ++++++++++++++++++++++++++++++-- 30 files changed, 361 insertions(+), 197 deletions(-) diff --git a/README.md b/README.md index 3bb111b..2cf4c90 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,8 @@ Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023 Dave Benham and licensed under GNU General Public License version 3. [Color Coded Ports](#color-coded-ports) -[Themes](#themes) +[Themes](#themes) +[Custom Names](#custom-names) [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) [Acknowledgments](#acknowledgments) @@ -50,6 +51,13 @@ The factory default theme is ivory, and the factory default dark theme is coal. [Return to Table Of Contents](#venom) +## Custom Names +Nearly every input or output port, and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. + +If a parameter or port is given a custom name, then an additional option is added to restore the factory default name. + +Custom names are saved with the patch and with presets, and restored upon patch or preset load. Custom names are also preserved when duplicating a module. + ## Parameter Locks and Custom Defaults Nearly every parameter (module knob, switch, or button etc.) within the Venom plugin has its own parameter context menu options to lock the paramenter as well as set a custom default value. In addition, most modules have module context menu options to lock and unlock all parameters within that instance of the module. diff --git a/changelog.md b/changelog.md index 416752f..5dcd6a0 100644 --- a/changelog.md +++ b/changelog.md @@ -8,6 +8,7 @@ ### Enhancements - Improved discrimination of DC offset removal by lowering cutoff frequency to 2 Hz +- All Venom parameters and input/output ports have user configurable names (except Rhythm Explorer) ### Bug Fixes - Fixed locked switch context menu diff --git a/src/BenjolinOsc.cpp b/src/BenjolinOsc.cpp index 58548d7..387bf94 100644 --- a/src/BenjolinOsc.cpp +++ b/src/BenjolinOsc.cpp @@ -51,12 +51,12 @@ struct BenjolinOsc : VenomModule { OversampleFilter_4 upSample, downSampleA, downSampleB; dsp::SchmittTrigger clockTrig; simd::float_4 osc{0.f,0.f,1.f,1.f}, triMask{1.f,1.f,0.f,0.f}, dir{1.f,1.f,0.f,0.f}, - in{}, outA, outB{}; + in{}, outA{}, outB{}; float *tri1=&osc[0], *tri2=&osc[1], *pul1=&osc[2], *pul2=&osc[3], *dir1=&dir[0], *dir2=&dir[1], *tri1Out=&outA[0], *tri2Out=&outA[1], *pul1Out=&outA[2], *pul2Out=&outA[3], *xorOut=&outB[0], *pwmOut=&outB[1], *rungOut=&outB[2], *cv1In=&in[0], *cv2In=&in[1], *clockIn=&in[2], - xorVal, rung; + xorVal=0, rung=0; unsigned char asr = 37; bool chaosIn=false, dblIn=false; @@ -224,18 +224,18 @@ struct BenjolinOscWidget : VenomWidget { addParam(createLockableParamCentered(Vec(63.288,202.602), module, BenjolinOsc::CV2_PARAM)); addParam(createLockableLightParamCentered>>(Vec(101.712,202.602), module, BenjolinOsc::CHAOS_PARAM, BenjolinOsc::CHAOS_LIGHT)); addParam(createLockableLightParamCentered>>(Vec(140.135,202.602), module, BenjolinOsc::DOUBLE_PARAM, BenjolinOsc::DOUBLE_LIGHT)); - addInput(createInputCentered(Vec(24.865,235.665), module, BenjolinOsc::CV1_INPUT)); - addInput(createInputCentered(Vec(63.288,235.665), module, BenjolinOsc::CV2_INPUT)); - addInput(createInputCentered(Vec(101.712,235.665), module, BenjolinOsc::CHAOS_INPUT)); - addInput(createInputCentered(Vec(140.135,235.665), module, BenjolinOsc::DOUBLE_INPUT)); - addOutput(createOutputCentered(Vec(24.865,288.931), module, BenjolinOsc::TRI1_OUTPUT)); - addOutput(createOutputCentered(Vec(63.288,288.931), module, BenjolinOsc::TRI2_OUTPUT)); - addOutput(createOutputCentered(Vec(101.712,288.931), module, BenjolinOsc::XOR_OUTPUT)); - addInput(createInputCentered(Vec(140.135,288.931), module, BenjolinOsc::CLOCK_INPUT)); - addOutput(createOutputCentered(Vec(24.865,330.368), module, BenjolinOsc::PULSE1_OUTPUT)); - addOutput(createOutputCentered(Vec(63.288,330.368), module, BenjolinOsc::PULSE2_OUTPUT)); - addOutput(createOutputCentered(Vec(101.712,330.368), module, BenjolinOsc::PWM_OUTPUT)); - addOutput(createOutputCentered(Vec(140.135,330.368), module, BenjolinOsc::RUNG_OUTPUT)); + addInput(createInputCentered(Vec(24.865,235.665), module, BenjolinOsc::CV1_INPUT)); + addInput(createInputCentered(Vec(63.288,235.665), module, BenjolinOsc::CV2_INPUT)); + addInput(createInputCentered(Vec(101.712,235.665), module, BenjolinOsc::CHAOS_INPUT)); + addInput(createInputCentered(Vec(140.135,235.665), module, BenjolinOsc::DOUBLE_INPUT)); + addOutput(createOutputCentered(Vec(24.865,288.931), module, BenjolinOsc::TRI1_OUTPUT)); + addOutput(createOutputCentered(Vec(63.288,288.931), module, BenjolinOsc::TRI2_OUTPUT)); + addOutput(createOutputCentered(Vec(101.712,288.931), module, BenjolinOsc::XOR_OUTPUT)); + addInput(createInputCentered(Vec(140.135,288.931), module, BenjolinOsc::CLOCK_INPUT)); + addOutput(createOutputCentered(Vec(24.865,330.368), module, BenjolinOsc::PULSE1_OUTPUT)); + addOutput(createOutputCentered(Vec(63.288,330.368), module, BenjolinOsc::PULSE2_OUTPUT)); + addOutput(createOutputCentered(Vec(101.712,330.368), module, BenjolinOsc::PWM_OUTPUT)); + addOutput(createOutputCentered(Vec(140.135,330.368), module, BenjolinOsc::RUNG_OUTPUT)); } void step() override { diff --git a/src/BernoulliSwitch.cpp b/src/BernoulliSwitch.cpp index e00d95f..d5edefd 100644 --- a/src/BernoulliSwitch.cpp +++ b/src/BernoulliSwitch.cpp @@ -322,12 +322,12 @@ struct BernoulliSwitchWidget : VenomWidget { addParam(createLockableParamCentered(mm2px(Vec(7.297, 72.75)), module, BernoulliSwitch::SCALE_A_PARAM)); addParam(createLockableParamCentered(mm2px(Vec(18.136, 72.75)), module, BernoulliSwitch::SCALE_B_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.297, 87.10)), module, BernoulliSwitch::A_INPUT)); - addInput(createInputCentered(mm2px(Vec(18.134, 87.10)), module, BernoulliSwitch::B_INPUT)); - addOutput(createOutputCentered(mm2px(Vec(7.297, 101.55)), module, BernoulliSwitch::A_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 101.55)), module, BernoulliSwitch::B_OUTPUT)); - addInput(createInputCentered(mm2px(Vec(7.297, 116.0)), module, BernoulliSwitch::TRIG_INPUT)); - addInput(createInputCentered(mm2px(Vec(18.134, 116.0)), module, BernoulliSwitch::PROB_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 87.10)), module, BernoulliSwitch::A_INPUT)); + addInput(createInputCentered(mm2px(Vec(18.134, 87.10)), module, BernoulliSwitch::B_INPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.297, 101.55)), module, BernoulliSwitch::A_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 101.55)), module, BernoulliSwitch::B_OUTPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 116.0)), module, BernoulliSwitch::TRIG_INPUT)); + addInput(createInputCentered(mm2px(Vec(18.134, 116.0)), module, BernoulliSwitch::PROB_INPUT)); addParam(createLockableParamCentered(Vec(5.1615,325.3265), module, BernoulliSwitch::NORMAL_PARAM)); addChild(createLightCentered>(mm2px(Vec(12.7155, 83.9)), module, BernoulliSwitch::POLY_SENSE_ALL_LIGHT)); diff --git a/src/BernoulliSwitchExpander.cpp b/src/BernoulliSwitchExpander.cpp index be5a1a1..76870a3 100644 --- a/src/BernoulliSwitchExpander.cpp +++ b/src/BernoulliSwitchExpander.cpp @@ -45,19 +45,19 @@ struct BernoulliSwitchExpanderWidget : VenomWidget { setVenomPanel("BernoulliSwitchExpander"); addChild(createLightCentered>(Vec(10.f, 30.f), module, BernoulliSwitchExpander::EXPAND_LIGHT)); - addInput(createInputCentered(Vec(22.f, 97.f), module, BernoulliSwitchExpander::MODE_CV_INPUT)); + addInput(createInputCentered(Vec(22.f, 97.f), module, BernoulliSwitchExpander::MODE_CV_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 97.f), module, BernoulliSwitchExpander::PROB_CV_PARAM)); - addInput(createInputCentered(Vec(22.f, 137.f), module, BernoulliSwitchExpander::RISE_CV_INPUT)); + addInput(createInputCentered(Vec(22.f, 137.f), module, BernoulliSwitchExpander::RISE_CV_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 137.f), module, BernoulliSwitchExpander::RISE_CV_PARAM)); - addInput(createInputCentered(Vec(22.f, 177.f), module, BernoulliSwitchExpander::FALL_CV_INPUT)); + addInput(createInputCentered(Vec(22.f, 177.f), module, BernoulliSwitchExpander::FALL_CV_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 177.f), module, BernoulliSwitchExpander::FALL_CV_PARAM)); - addInput(createInputCentered(Vec(22.f, 217.f), module, BernoulliSwitchExpander::OFFSET_CV_A_INPUT)); + addInput(createInputCentered(Vec(22.f, 217.f), module, BernoulliSwitchExpander::OFFSET_CV_A_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 217.f), module, BernoulliSwitchExpander::OFFSET_CV_A_PARAM)); - addInput(createInputCentered(Vec(22.f, 257.f), module, BernoulliSwitchExpander::OFFSET_CV_B_INPUT)); + addInput(createInputCentered(Vec(22.f, 257.f), module, BernoulliSwitchExpander::OFFSET_CV_B_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 257.f), module, BernoulliSwitchExpander::OFFSET_CV_B_PARAM)); - addInput(createInputCentered(Vec(22.f, 297.f), module, BernoulliSwitchExpander::SCALE_CV_A_INPUT)); + addInput(createInputCentered(Vec(22.f, 297.f), module, BernoulliSwitchExpander::SCALE_CV_A_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 297.f), module, BernoulliSwitchExpander::SCALE_CV_A_PARAM)); - addInput(createInputCentered(Vec(22.f, 337.f), module, BernoulliSwitchExpander::SCALE_CV_B_INPUT)); + addInput(createInputCentered(Vec(22.f, 337.f), module, BernoulliSwitchExpander::SCALE_CV_B_INPUT)); addParam(createLockableParamCentered(Vec(53.f, 337.f), module, BernoulliSwitchExpander::SCALE_CV_B_PARAM)); } }; diff --git a/src/CloneMerge.cpp b/src/CloneMerge.cpp index 770508f..6e67e93 100644 --- a/src/CloneMerge.cpp +++ b/src/CloneMerge.cpp @@ -81,11 +81,11 @@ struct CloneMergeWidget : VenomWidget { y+=dy*1.25f; for (int i=0; i<8; i++, y+=dy) { - addInput(createInputCentered(Vec(x,y), module, CloneMerge::MONO_INPUTS + i)); + addInput(createInputCentered(Vec(x,y), module, CloneMerge::MONO_INPUTS + i)); addChild(createLightCentered>>(Vec(x+dy*0.5f, y-dy*0.3f), module, CloneMerge::MONO_LIGHTS + i*2)); } y+=dy*0.33f; - addOutput(createOutputCentered(Vec(x,y), module, CloneMerge::POLY_OUTPUT)); + addOutput(createOutputCentered(Vec(x,y), module, CloneMerge::POLY_OUTPUT)); } }; diff --git a/src/HQ.cpp b/src/HQ.cpp index d50cc9f..004454a 100644 --- a/src/HQ.cpp +++ b/src/HQ.cpp @@ -259,10 +259,10 @@ struct HQWidget : VenomWidget { addParam(createLockableParam(mm2px(Vec(2.9, 25.5)), module, HQ::SERIES_PARAM)); addParam(createLockableParamCentered(mm2px(Vec(7.62, 42.9)), module, HQ::PARTIAL_PARAM)); addParam(createLockableParamCentered(mm2px(Vec(7.62, 58)), module, HQ::CV_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.62, 68)), module, HQ::CV_INPUT)); - addInput(createInputCentered(mm2px(Vec(7.62, 83)), module, HQ::ROOT_INPUT)); - addInput(createInputCentered(mm2px(Vec(7.62, 98)), module, HQ::IN_INPUT)); - addOutput(createOutputCentered(mm2px(Vec(7.62, 113)), module, HQ::OUT_OUTPUT)); + addInput(createInputCentered(mm2px(Vec(7.62, 68)), module, HQ::CV_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.62, 83)), module, HQ::ROOT_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.62, 98)), module, HQ::IN_INPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.62, 113)), module, HQ::OUT_OUTPUT)); } void appendContextMenu(Menu* menu) override { diff --git a/src/LinearBeats.cpp b/src/LinearBeats.cpp index 2d0d0ee..728b64f 100644 --- a/src/LinearBeats.cpp +++ b/src/LinearBeats.cpp @@ -156,12 +156,12 @@ struct LinearBeatsWidget : VenomWidget { setVenomPanel("LinearBeats"); float y=56.5f; for(int i=0; i<9; i++){ - addInput(createInputCentered(Vec(16.5f,y), module, LinearBeats::IN_INPUT+i)); + addInput(createInputCentered(Vec(16.5f,y), module, LinearBeats::IN_INPUT+i)); addParam(createLockableParamCentered(Vec(37.5f,y), module, LinearBeats::MODE_PARAM+i)); - addOutput(createOutputCentered(Vec(58.5f,y), module, LinearBeats::OUT_OUTPUT+i)); + addOutput(createOutputCentered(Vec(58.5f,y), module, LinearBeats::OUT_OUTPUT+i)); y+=31.556f; } - addInput(createInputCentered(Vec(16.5f,y), module, LinearBeats::CLOCK_INPUT)); + addInput(createInputCentered(Vec(16.5f,y), module, LinearBeats::CLOCK_INPUT)); } void appendContextMenu(Menu* menu) override { diff --git a/src/LinearBeatsExpander.cpp b/src/LinearBeatsExpander.cpp index da12427..5f8a7b6 100644 --- a/src/LinearBeatsExpander.cpp +++ b/src/LinearBeatsExpander.cpp @@ -67,11 +67,11 @@ struct LinearBeatsExpanderWidget : VenomWidget { setVenomPanel("LinearBeatsExpander"); float y=56.5f; for(int i=0; i<9; i++){ - addInput(createInputCentered(Vec(20.5f,y), module, LinearBeatsExpander::MUTE_INPUT+i)); + addInput(createInputCentered(Vec(20.5f,y), module, LinearBeatsExpander::MUTE_INPUT+i)); addParam(createLockableLightParamCentered>>(Vec(55.5f,y), module, LinearBeatsExpander::MUTE_PARAM+i, LinearBeatsExpander::MUTE_LIGHT+i)); y+=31.556f; } - addInput(createInputCentered(Vec(20.5f,344.85f), module, LinearBeatsExpander::BYPASS_INPUT)); + addInput(createInputCentered(Vec(20.5f,344.85f), module, LinearBeatsExpander::BYPASS_INPUT)); addParam(createLockableLightParamCentered>>(Vec(55.5f,344.85f), module, LinearBeatsExpander::BYPASS_PARAM, LinearBeatsExpander::BYPASS_LIGHT)); addChild(createLightCentered>(Vec(6.f, 21.3f), module, LinearBeatsExpander::LEFT_LIGHT)); addChild(createLightCentered>(Vec(69.f, 21.3f), module, LinearBeatsExpander::RIGHT_LIGHT)); diff --git a/src/Logic.cpp b/src/Logic.cpp index 40e8d00..9774e1a 100644 --- a/src/Logic.cpp +++ b/src/Logic.cpp @@ -351,17 +351,17 @@ struct LogicWidget : VenomWidget { addParam(createLockableParamCentered(Vec(119.33,33.), module, Logic::DC_PARAM)); addParam(createLockableParamCentered(Vec(35.718,61.5), module, Logic::HIGH_PARAM)); - addInput(createInputCentered(Vec(66.265,61.5), module, Logic::HIGH_INPUT)); + addInput(createInputCentered(Vec(66.265,61.5), module, Logic::HIGH_INPUT)); addParam(createLockableParamCentered(Vec(98.582,61.5), module, Logic::LOW_PARAM)); - addInput(createInputCentered(Vec(129.198,61.5), module, Logic::LOW_INPUT)); + addInput(createInputCentered(Vec(129.198,61.5), module, Logic::LOW_INPUT)); float y = 101.5f; for(int i = 0; i < CHANNEL_COUNT; i++, y += 30.0f){ - addInput(createInputCentered(Vec(20.718,y), module, Logic::A_INPUT+i)); - addInput(createInputCentered(Vec(51.109,y), module, Logic::B_INPUT+i)); + addInput(createInputCentered(Vec(20.718,y), module, Logic::A_INPUT+i)); + addInput(createInputCentered(Vec(51.109,y), module, Logic::B_INPUT+i)); addParam(createParamCentered(Vec(82.000,y), module, Logic::RECYCLE_PARAM+i)); addParam(createParamCentered(Vec(113.391,y), module, Logic::OP_PARAM+i)); - addOutput(createOutputCentered(Vec(144.282,y), module, Logic::GATE_OUTPUT+i)); + addOutput(createOutputCentered(Vec(144.282,y), module, Logic::GATE_OUTPUT+i)); } } diff --git a/src/Mix4.cpp b/src/Mix4.cpp index 2aa6f53..5eea0f7 100644 --- a/src/Mix4.cpp +++ b/src/Mix4.cpp @@ -294,11 +294,11 @@ struct Mix4Widget : MixBaseWidget { addParam(createLockableParamCentered(Vec(37.491,82.655), module, Mix4::DCBLOCK_PARAM)); addParam(createLockableParamCentered(Vec(37.491,114.895), module, Mix4::CLIP_PARAM)); - addInput(createInputCentered(Vec(22.337,201.993), module, Mix4::INPUTS+0)); - addInput(createInputCentered(Vec(22.337,235.233), module, Mix4::INPUTS+1)); - addInput(createInputCentered(Vec(22.337,268.473), module, Mix4::INPUTS+2)); - addInput(createInputCentered(Vec(22.337,301.712), module, Mix4::INPUTS+3)); - addOutput(createOutputCentered(Vec(22.337,340.434), module, Mix4::MIX_OUTPUT)); + addInput(createInputCentered(Vec(22.337,201.993), module, Mix4::INPUTS+0)); + addInput(createInputCentered(Vec(22.337,235.233), module, Mix4::INPUTS+1)); + addInput(createInputCentered(Vec(22.337,268.473), module, Mix4::INPUTS+2)); + addInput(createInputCentered(Vec(22.337,301.712), module, Mix4::INPUTS+3)); + addOutput(createOutputCentered(Vec(22.337,340.434), module, Mix4::MIX_OUTPUT)); } }; diff --git a/src/Mix4Stereo.cpp b/src/Mix4Stereo.cpp index 78558ef..7da9486 100644 --- a/src/Mix4Stereo.cpp +++ b/src/Mix4Stereo.cpp @@ -406,17 +406,17 @@ struct Mix4StereoWidget : MixBaseWidget { addParam(createLockableParamCentered(Vec(62.443,82.655), module, Mix4Stereo::DCBLOCK_PARAM)); addParam(createLockableParamCentered(Vec(62.443,114.895), module, Mix4Stereo::CLIP_PARAM)); - addInput(createInputCentered(Vec(21.812,201.993), module, Mix4Stereo::LEFT_INPUT+0)); - addInput(createInputCentered(Vec(21.812,235.233), module, Mix4Stereo::LEFT_INPUT+1)); - addInput(createInputCentered(Vec(21.812,268.473), module, Mix4Stereo::LEFT_INPUT+2)); - addInput(createInputCentered(Vec(21.812,301.712), module, Mix4Stereo::LEFT_INPUT+3)); - addOutput(createOutputCentered(Vec(21.812,340.434), module, Mix4Stereo::LEFT_OUTPUT)); + addInput(createInputCentered(Vec(21.812,201.993), module, Mix4Stereo::LEFT_INPUT+0)); + addInput(createInputCentered(Vec(21.812,235.233), module, Mix4Stereo::LEFT_INPUT+1)); + addInput(createInputCentered(Vec(21.812,268.473), module, Mix4Stereo::LEFT_INPUT+2)); + addInput(createInputCentered(Vec(21.812,301.712), module, Mix4Stereo::LEFT_INPUT+3)); + addOutput(createOutputCentered(Vec(21.812,340.434), module, Mix4Stereo::LEFT_OUTPUT)); - addInput(createInputCentered(Vec(53.189,201.993), module, Mix4Stereo::RIGHT_INPUT+0)); - addInput(createInputCentered(Vec(53.189,235.233), module, Mix4Stereo::RIGHT_INPUT+1)); - addInput(createInputCentered(Vec(53.189,268.473), module, Mix4Stereo::RIGHT_INPUT+2)); - addInput(createInputCentered(Vec(53.189,301.712), module, Mix4Stereo::RIGHT_INPUT+3)); - addOutput(createOutputCentered(Vec(53.189,340.434), module, Mix4Stereo::RIGHT_OUTPUT)); + addInput(createInputCentered(Vec(53.189,201.993), module, Mix4Stereo::RIGHT_INPUT+0)); + addInput(createInputCentered(Vec(53.189,235.233), module, Mix4Stereo::RIGHT_INPUT+1)); + addInput(createInputCentered(Vec(53.189,268.473), module, Mix4Stereo::RIGHT_INPUT+2)); + addInput(createInputCentered(Vec(53.189,301.712), module, Mix4Stereo::RIGHT_INPUT+3)); + addOutput(createOutputCentered(Vec(53.189,340.434), module, Mix4Stereo::RIGHT_OUTPUT)); } }; diff --git a/src/MixFade.cpp b/src/MixFade.cpp index b6baf15..5892e8b 100644 --- a/src/MixFade.cpp +++ b/src/MixFade.cpp @@ -44,11 +44,11 @@ struct MixFadeWidget : MixExpanderWidget { addParam(createLockableParamCentered(Vec(32.77f, 103.775f), module, MixModule::FADE_SHAPE_PARAM+2)); addParam(createLockableParamCentered(Vec(32.77f, 134.514f), module, MixModule::FADE_SHAPE_PARAM+3)); addParam(createLockableParamCentered(Vec(32.77f, 168.254f), module, MixModule::FADE_MIX_SHAPE_PARAM)); - addOutput(createOutputCentered(Vec(22.5f, 209.778f), module, MixModule::FADE_OUTPUT+0)); - addOutput(createOutputCentered(Vec(22.5f, 241.320f), module, MixModule::FADE_OUTPUT+1)); - addOutput(createOutputCentered(Vec(22.5f, 273.239f), module, MixModule::FADE_OUTPUT+2)); - addOutput(createOutputCentered(Vec(22.5f, 305.158f), module, MixModule::FADE_OUTPUT+3)); - addOutput(createOutputCentered(Vec(22.5f, 340.434f), module, MixModule::FADE_MIX_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f, 209.778f), module, MixModule::FADE_OUTPUT+0)); + addOutput(createOutputCentered(Vec(22.5f, 241.320f), module, MixModule::FADE_OUTPUT+1)); + addOutput(createOutputCentered(Vec(22.5f, 273.239f), module, MixModule::FADE_OUTPUT+2)); + addOutput(createOutputCentered(Vec(22.5f, 305.158f), module, MixModule::FADE_OUTPUT+3)); + addOutput(createOutputCentered(Vec(22.5f, 340.434f), module, MixModule::FADE_MIX_OUTPUT)); } }; diff --git a/src/MixFade2.cpp b/src/MixFade2.cpp index c9ad768..eca7a28 100644 --- a/src/MixFade2.cpp +++ b/src/MixFade2.cpp @@ -51,11 +51,11 @@ struct MixFade2Widget : MixExpanderWidget { addParam(createLockableParamCentered(Vec(30.f, 99.025f), module, MixModule::FADE2_SHAPE_PARAM+2)); addParam(createLockableParamCentered(Vec(30.f, 129.764f), module, MixModule::FADE2_SHAPE_PARAM+3)); addParam(createLockableParamCentered(Vec(30.f, 163.504f), module, MixModule::FADE2_MIX_SHAPE_PARAM)); - addOutput(createOutputCentered(Vec(30.f, 209.778f), module, MixModule::FADE2_OUTPUT+0)); - addOutput(createOutputCentered(Vec(30.f, 241.320f), module, MixModule::FADE2_OUTPUT+1)); - addOutput(createOutputCentered(Vec(30.f, 273.239f), module, MixModule::FADE2_OUTPUT+2)); - addOutput(createOutputCentered(Vec(30.f, 305.158f), module, MixModule::FADE2_OUTPUT+3)); - addOutput(createOutputCentered(Vec(30.f, 340.434f), module, MixModule::FADE2_MIX_OUTPUT)); + addOutput(createOutputCentered(Vec(30.f, 209.778f), module, MixModule::FADE2_OUTPUT+0)); + addOutput(createOutputCentered(Vec(30.f, 241.320f), module, MixModule::FADE2_OUTPUT+1)); + addOutput(createOutputCentered(Vec(30.f, 273.239f), module, MixModule::FADE2_OUTPUT+2)); + addOutput(createOutputCentered(Vec(30.f, 305.158f), module, MixModule::FADE2_OUTPUT+3)); + addOutput(createOutputCentered(Vec(30.f, 340.434f), module, MixModule::FADE2_MIX_OUTPUT)); } }; diff --git a/src/MixMute.cpp b/src/MixMute.cpp index 07b7a00..721baa6 100644 --- a/src/MixMute.cpp +++ b/src/MixMute.cpp @@ -40,11 +40,11 @@ struct MixMuteWidget : MixExpanderWidget { addParam(createLockableLightParamCentered>>(Vec(22.5f, 103.775f), module, MixModule::MUTE_PARAM+2, MixModule::MUTE_LIGHT+2)); addParam(createLockableLightParamCentered>>(Vec(22.5f, 134.514f), module, MixModule::MUTE_PARAM+3, MixModule::MUTE_LIGHT+3)); addParam(createLockableLightParamCentered>>(Vec(22.5f, 168.254f), module, MixModule::MUTE_MIX_PARAM, MixModule::MUTE_MIX_LIGHT)); - addInput(createInputCentered(Vec(22.5f, 209.778f), module, MixModule::MUTE_INPUT+0)); - addInput(createInputCentered(Vec(22.5f, 241.320f), module, MixModule::MUTE_INPUT+1)); - addInput(createInputCentered(Vec(22.5f, 273.239f), module, MixModule::MUTE_INPUT+2)); - addInput(createInputCentered(Vec(22.5f, 305.158f), module, MixModule::MUTE_INPUT+3)); - addInput(createInputCentered(Vec(22.5f, 340.434f), module, MixModule::MUTE_MIX_INPUT)); + addInput(createInputCentered(Vec(22.5f, 209.778f), module, MixModule::MUTE_INPUT+0)); + addInput(createInputCentered(Vec(22.5f, 241.320f), module, MixModule::MUTE_INPUT+1)); + addInput(createInputCentered(Vec(22.5f, 273.239f), module, MixModule::MUTE_INPUT+2)); + addInput(createInputCentered(Vec(22.5f, 305.158f), module, MixModule::MUTE_INPUT+3)); + addInput(createInputCentered(Vec(22.5f, 340.434f), module, MixModule::MUTE_MIX_INPUT)); } void step() override { diff --git a/src/MixPan.cpp b/src/MixPan.cpp index d485e1d..bf7c430 100644 --- a/src/MixPan.cpp +++ b/src/MixPan.cpp @@ -38,10 +38,10 @@ struct MixPanWidget : MixExpanderWidget { addParam(createLockableParamCentered(Vec(13.5f, 222.179f), module, MixModule::PAN_CV_PARAM+1)); addParam(createLockableParamCentered(Vec(13.5f, 271.081f), module, MixModule::PAN_CV_PARAM+2)); addParam(createLockableParamCentered(Vec(13.5f, 319.983f), module, MixModule::PAN_CV_PARAM+3)); - addInput(createInputCentered(Vec(28.5f, 195.82f), module, MixModule::PAN_INPUT+0)); - addInput(createInputCentered(Vec(28.5f, 244.721f), module, MixModule::PAN_INPUT+1)); - addInput(createInputCentered(Vec(28.5f, 293.623f), module, MixModule::PAN_INPUT+2)); - addInput(createInputCentered(Vec(28.5f, 342.525f), module, MixModule::PAN_INPUT+3)); + addInput(createInputCentered(Vec(28.5f, 195.82f), module, MixModule::PAN_INPUT+0)); + addInput(createInputCentered(Vec(28.5f, 244.721f), module, MixModule::PAN_INPUT+1)); + addInput(createInputCentered(Vec(28.5f, 293.623f), module, MixModule::PAN_INPUT+2)); + addInput(createInputCentered(Vec(28.5f, 342.525f), module, MixModule::PAN_INPUT+3)); } }; diff --git a/src/MixSend.cpp b/src/MixSend.cpp index b601ace..9eb7fa6 100644 --- a/src/MixSend.cpp +++ b/src/MixSend.cpp @@ -45,10 +45,10 @@ struct MixSendWidget : MixExpanderWidget { addParam(createLockableParamCentered(Vec(22.5f, 134.514f), module, MixModule::SEND_PARAM+3)); addParam(createLockableParamCentered(Vec(22.5f, 169.926f), module, MixModule::RETURN_PARAM)); addParam(createLockableLightParamCentered>>(Vec(22.5f, 203.278f), module, MixModule::SEND_MUTE_PARAM, MixModule::RETURN_MUTE_LIGHT)); - addOutput(createOutputCentered(Vec(22.5f, 240.820f), module, MixModule::LEFT_SEND_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f, 272.820f), module, MixModule::RIGHT_SEND_OUTPUT)); - addInput(createInputCentered(Vec(22.5f, 310.795f), module, MixModule::LEFT_RETURN_INPUT)); - addInput(createInputCentered(Vec(22.5f, 343.925f), module, MixModule::RIGHT_RETURN_INPUT)); + addOutput(createOutputCentered(Vec(22.5f, 240.820f), module, MixModule::LEFT_SEND_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f, 272.820f), module, MixModule::RIGHT_SEND_OUTPUT)); + addInput(createInputCentered(Vec(22.5f, 310.795f), module, MixModule::LEFT_RETURN_INPUT)); + addInput(createInputCentered(Vec(22.5f, 343.925f), module, MixModule::RIGHT_RETURN_INPUT)); } void step() override { diff --git a/src/MixSolo.cpp b/src/MixSolo.cpp index bfc51d7..287a281 100644 --- a/src/MixSolo.cpp +++ b/src/MixSolo.cpp @@ -37,10 +37,10 @@ struct MixSoloWidget : MixExpanderWidget { addParam(createLightParamCentered>>(Vec(22.5f, 73.035f), module, MixModule::SOLO_PARAM+1, MixModule::SOLO_LIGHT+1)); addParam(createLightParamCentered>>(Vec(22.5f, 103.775f), module, MixModule::SOLO_PARAM+2, MixModule::SOLO_LIGHT+2)); addParam(createLightParamCentered>>(Vec(22.5f, 134.514f), module, MixModule::SOLO_PARAM+3, MixModule::SOLO_LIGHT+3)); - addInput(createInputCentered(Vec(22.5f, 209.778f), module, MixModule::SOLO_INPUT+0)); - addInput(createInputCentered(Vec(22.5f, 241.320f), module, MixModule::SOLO_INPUT+1)); - addInput(createInputCentered(Vec(22.5f, 273.239f), module, MixModule::SOLO_INPUT+2)); - addInput(createInputCentered(Vec(22.5f, 305.158f), module, MixModule::SOLO_INPUT+3)); + addInput(createInputCentered(Vec(22.5f, 209.778f), module, MixModule::SOLO_INPUT+0)); + addInput(createInputCentered(Vec(22.5f, 241.320f), module, MixModule::SOLO_INPUT+1)); + addInput(createInputCentered(Vec(22.5f, 273.239f), module, MixModule::SOLO_INPUT+2)); + addInput(createInputCentered(Vec(22.5f, 305.158f), module, MixModule::SOLO_INPUT+3)); } void step() override { diff --git a/src/NORS-IQ.cpp b/src/NORS-IQ.cpp index ce2b40a..f023d4d 100644 --- a/src/NORS-IQ.cpp +++ b/src/NORS-IQ.cpp @@ -464,24 +464,24 @@ struct NORS_IQWidget : VenomWidget { float x = 22.5f, y = 206.0f; for (int i=0; i(Vec(x, y), module, NORS_IQ::INTVL_PARAM+i)); - addInput(createInputCentered(Vec(x, y+32.5f), module, NORS_IQ::INTVL_INPUT+i)); + addInput(createInputCentered(Vec(x, y+32.5f), module, NORS_IQ::INTVL_INPUT+i)); x+=30.f; } - addInput(createInputCentered(Vec(35.603, 312.834), module, NORS_IQ::POLY_INTVL_INPUT)); + addInput(createInputCentered(Vec(35.603, 312.834), module, NORS_IQ::POLY_INTVL_INPUT)); - addInput(createInputCentered(Vec(125.0, 312.834), module, NORS_IQ::POI_INPUT)); - addInput(createInputCentered(Vec(164.1, 312.834), module, NORS_IQ::EDPO_INPUT)); - addInput(createInputCentered(Vec(201.2,312.834), module, NORS_IQ::LENGTH_INPUT)); - addInput(createInputCentered(Vec(239.3,312.834), module, NORS_IQ::ROOT_INPUT)); + addInput(createInputCentered(Vec(125.0, 312.834), module, NORS_IQ::POI_INPUT)); + addInput(createInputCentered(Vec(164.1, 312.834), module, NORS_IQ::EDPO_INPUT)); + addInput(createInputCentered(Vec(201.2,312.834), module, NORS_IQ::LENGTH_INPUT)); + addInput(createInputCentered(Vec(239.3,312.834), module, NORS_IQ::ROOT_INPUT)); - addInput(createInputCentered(Vec(299.279, 289.616), module, NORS_IQ::IN_INPUT)); - addInput(createInputCentered(Vec(333.867, 289.616), module, NORS_IQ::TRIG_INPUT)); - addOutput(createOutputCentered(Vec(368.455, 289.616), module, NORS_IQ::TRIG_OUTPUT)); + addInput(createInputCentered(Vec(299.279, 289.616), module, NORS_IQ::IN_INPUT)); + addInput(createInputCentered(Vec(333.867, 289.616), module, NORS_IQ::TRIG_INPUT)); + addOutput(createOutputCentered(Vec(368.455, 289.616), module, NORS_IQ::TRIG_OUTPUT)); - addOutput(createOutputCentered(Vec(299.279, 336.052), module, NORS_IQ::OUT_OUTPUT)); - addOutput(createOutputCentered(Vec(333.867, 336.052), module, NORS_IQ::POCT_OUTPUT)); - addOutput(createOutputCentered(Vec(368.455, 336.052), module, NORS_IQ::SCALE_OUTPUT)); + addOutput(createOutputCentered(Vec(299.279, 336.052), module, NORS_IQ::OUT_OUTPUT)); + addOutput(createOutputCentered(Vec(333.867, 336.052), module, NORS_IQ::POCT_OUTPUT)); + addOutput(createOutputCentered(Vec(368.455, 336.052), module, NORS_IQ::SCALE_OUTPUT)); NORS_IQDisplay* display = createWidget(Vec(6.83,102.629)); display->box.size = Vec(392.233, 84.847); diff --git a/src/NORSIQChord2Scale.cpp b/src/NORSIQChord2Scale.cpp index 63d959b..70b8bce 100644 --- a/src/NORSIQChord2Scale.cpp +++ b/src/NORSIQChord2Scale.cpp @@ -82,12 +82,12 @@ struct NORSIQChord2ScaleWidget : VenomWidget { setModule(module); setVenomPanel("NORSIQChord2Scale"); addParam(createLockableLightParamCentered>>(Vec(22.5f, 85.f), module, NORSIQChord2Scale::FOLD_PARAM, NORSIQChord2Scale::FOLD_LIGHT)); - addInput(createInputCentered(Vec(22.5f,125.f), module, NORSIQChord2Scale::TRIG_INPUT)); - addInput(createInputCentered(Vec(22.5f,165.f), module, NORSIQChord2Scale::CHORD_INPUT)); - addOutput(createOutputCentered(Vec(22.5f,215.f), module, NORSIQChord2Scale::TRIG_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,255.f), module, NORSIQChord2Scale::ROOT_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,295.f), module, NORSIQChord2Scale::LENGTH_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,335.f), module, NORSIQChord2Scale::INTERVALS_OUTPUT)); + addInput(createInputCentered(Vec(22.5f,125.f), module, NORSIQChord2Scale::TRIG_INPUT)); + addInput(createInputCentered(Vec(22.5f,165.f), module, NORSIQChord2Scale::CHORD_INPUT)); + addOutput(createOutputCentered(Vec(22.5f,215.f), module, NORSIQChord2Scale::TRIG_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,255.f), module, NORSIQChord2Scale::ROOT_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,295.f), module, NORSIQChord2Scale::LENGTH_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,335.f), module, NORSIQChord2Scale::INTERVALS_OUTPUT)); } void step() override { diff --git a/src/PolyClone.cpp b/src/PolyClone.cpp index 5dcdf5f..c8c2332 100644 --- a/src/PolyClone.cpp +++ b/src/PolyClone.cpp @@ -106,10 +106,10 @@ struct PolyCloneWidget : VenomWidget { } y+=dy; - addInput(createInputCentered(Vec(x,y), module, PolyClone::POLY_INPUT)); + addInput(createInputCentered(Vec(x,y), module, PolyClone::POLY_INPUT)); y+=dy*1.75f; - addOutput(createOutputCentered(Vec(x,y), module, PolyClone::POLY_OUTPUT)); + addOutput(createOutputCentered(Vec(x,y), module, PolyClone::POLY_OUTPUT)); } }; diff --git a/src/PolyUnison.cpp b/src/PolyUnison.cpp index 8619719..d767cfc 100644 --- a/src/PolyUnison.cpp +++ b/src/PolyUnison.cpp @@ -159,12 +159,12 @@ struct PolyUnisonWidget : VenomWidget { countDisplay->module = module; addChild(countDisplay); addParam(createLockableParamCentered>(Vec(22.5,91.941), module, PolyUnison::CLONE_PARAM)); - addInput(createInputCentered(Vec(22.5,124.974), module, PolyUnison::CLONE_INPUT)); + addInput(createInputCentered(Vec(22.5,124.974), module, PolyUnison::CLONE_INPUT)); addParam(createLockableParamCentered(Vec(13.012f,161.106f), module, PolyUnison::DIRECTION_PARAM)); addParam(createLockableParamCentered(Vec(31.989f,161.106), module, PolyUnison::RANGE_PARAM)); addParam(createLockableParamCentered(Vec(22.5,192.026), module, PolyUnison::DETUNE_PARAM)); - addInput(createInputCentered(Vec(22.5,225.079), module, PolyUnison::DETUNE_INPUT)); + addInput(createInputCentered(Vec(22.5,225.079), module, PolyUnison::DETUNE_INPUT)); { int li, end; @@ -176,8 +176,8 @@ struct PolyUnisonWidget : VenomWidget { } } - addInput(createInputCentered(Vec(22.5,301.712), module, PolyUnison::POLY_INPUT)); - addOutput(createOutputCentered(Vec(22.5,340.434), module, PolyUnison::POLY_OUTPUT)); + addInput(createInputCentered(Vec(22.5,301.712), module, PolyUnison::POLY_INPUT)); + addOutput(createOutputCentered(Vec(22.5,340.434), module, PolyUnison::POLY_OUTPUT)); } }; diff --git a/src/Recurse.cpp b/src/Recurse.cpp index 0f7f51d..4e22529 100644 --- a/src/Recurse.cpp +++ b/src/Recurse.cpp @@ -162,15 +162,15 @@ struct RecurseWidget : VenomWidget { countDisplay->module = module; addChild(countDisplay); addParam(createLockableParamCentered>(mm2px(Vec(18.134, 43.87)), module, Recurse::COUNT_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.299, 58.3)), module, Recurse::SCALE_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.299, 58.3)), module, Recurse::SCALE_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.136, 58.3)), module, Recurse::SCALE_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.297, 72.75)), module, Recurse::OFFSET_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 72.75)), module, Recurse::OFFSET_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.134, 72.75)), module, Recurse::OFFSET_PARAM)); addParam(createLockableParamCentered>(mm2px(Vec(12.7155, 84.50)), module, Recurse::TIMING_PARAM)); - addOutput(createOutputCentered(mm2px(Vec(7.297, 101.55)), module, Recurse::SEND_OUTPUT)); - addInput(createInputCentered(mm2px(Vec(18.134, 101.55)), module, Recurse::RETURN_INPUT)); - addInput(createInputCentered(mm2px(Vec(7.297, 116.0)), module, Recurse::IN_INPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 116.0)), module, Recurse::OUT_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.297, 101.55)), module, Recurse::SEND_OUTPUT)); + addInput(createInputCentered(mm2px(Vec(18.134, 101.55)), module, Recurse::RETURN_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 116.0)), module, Recurse::IN_INPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 116.0)), module, Recurse::OUT_OUTPUT)); addChild(createLightCentered>>(mm2px(Vec(12.7115, 58.3)), module, Recurse::SCALE_LIGHT)); addChild(createLightCentered>>(mm2px(Vec(12.7115, 72.75)), module, Recurse::OFFSET_LIGHT)); diff --git a/src/RecurseStereo.cpp b/src/RecurseStereo.cpp index 754ba36..b10a5c8 100644 --- a/src/RecurseStereo.cpp +++ b/src/RecurseStereo.cpp @@ -207,20 +207,20 @@ struct RecurseStereoWidget : VenomWidget { countDisplay->module = module; addChild(countDisplay); addParam(createLockableParamCentered>(mm2px(Vec(18.134, 14.97)), module, RecurseStereo::COUNT_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.299, 29.4)), module, RecurseStereo::SCALE_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.299, 29.4)), module, RecurseStereo::SCALE_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.136, 29.4)), module, RecurseStereo::SCALE_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.297, 43.85)), module, RecurseStereo::OFFSET_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 43.85)), module, RecurseStereo::OFFSET_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.134, 43.85)), module, RecurseStereo::OFFSET_PARAM)); addParam(createLockableParamCentered>(mm2px(Vec(12.7155, 55.60)), module, RecurseStereo::TIMING_PARAM)); - addOutput(createOutputCentered(mm2px(Vec(7.297, 72.65)), module, RecurseStereo::SEND_L_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 72.65)), module, RecurseStereo::SEND_R_OUTPUT)); - addInput(createInputCentered(mm2px(Vec(7.297, 87.1)), module, RecurseStereo::RETURN_L_INPUT)); - addInput(createInputCentered(mm2px(Vec(18.134, 87.1)), module, RecurseStereo::RETURN_R_INPUT)); - addInput(createInputCentered(mm2px(Vec(7.297, 101.55)), module, RecurseStereo::IN_L_INPUT)); - addInput(createInputCentered(mm2px(Vec(18.134, 101.55)), module, RecurseStereo::IN_R_INPUT)); - addOutput(createOutputCentered(mm2px(Vec(7.297, 116.0)), module, RecurseStereo::OUT_L_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 116.0)), module, RecurseStereo::OUT_R_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.297, 72.65)), module, RecurseStereo::SEND_L_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 72.65)), module, RecurseStereo::SEND_R_OUTPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 87.1)), module, RecurseStereo::RETURN_L_INPUT)); + addInput(createInputCentered(mm2px(Vec(18.134, 87.1)), module, RecurseStereo::RETURN_R_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.297, 101.55)), module, RecurseStereo::IN_L_INPUT)); + addInput(createInputCentered(mm2px(Vec(18.134, 101.55)), module, RecurseStereo::IN_R_INPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.297, 116.0)), module, RecurseStereo::OUT_L_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 116.0)), module, RecurseStereo::OUT_R_OUTPUT)); addChild(createLightCentered>>(mm2px(Vec(12.7115, 29.4)), module, RecurseStereo::SCALE_LIGHT)); addChild(createLightCentered>>(mm2px(Vec(12.7115, 43.85)), module, RecurseStereo::OFFSET_LIGHT)); diff --git a/src/Reformation.cpp b/src/Reformation.cpp index 6d167dd..997466d 100644 --- a/src/Reformation.cpp +++ b/src/Reformation.cpp @@ -240,14 +240,14 @@ struct ReformationWidget : VenomWidget { for (int i=0; i>(Vec(x,133.5f), module, Reformation::MAP_PARAM+i, Reformation::MAP_LIGHT+i)); addParam(createLockableParamCentered(Vec(x, 192.f), module, Reformation::CV1_PARAM+i)); - addInput(createInputCentered(Vec(x,224.5f), module, Reformation::CV1_INPUT+i)); + addInput(createInputCentered(Vec(x,224.5f), module, Reformation::CV1_INPUT+i)); addParam(createLockableParamCentered(Vec(x, 257.f), module, Reformation::CV2_PARAM+i)); - addInput(createInputCentered(Vec(x,289.5f), module, Reformation::CV2_INPUT+i)); + addInput(createInputCentered(Vec(x,289.5f), module, Reformation::CV2_INPUT+i)); } - addInput(createInputCentered(Vec(33.f,340.5f), module, Reformation::IN_INPUT)); - addInput(createInputCentered(Vec(66.f,340.5f), module, Reformation::DRIVE_INPUT)); - addInput(createInputCentered(Vec(99.f,340.5f), module, Reformation::LEVEL_INPUT)); - addOutput(createOutputCentered(Vec(132.f,340.5f), module, Reformation::OUT_OUTPUT)); + addInput(createInputCentered(Vec(33.f,340.5f), module, Reformation::IN_INPUT)); + addInput(createInputCentered(Vec(66.f,340.5f), module, Reformation::DRIVE_INPUT)); + addInput(createInputCentered(Vec(99.f,340.5f), module, Reformation::LEVEL_INPUT)); + addOutput(createOutputCentered(Vec(132.f,340.5f), module, Reformation::OUT_OUTPUT)); } }; diff --git a/src/ShapedVCA.cpp b/src/ShapedVCA.cpp index 2989d14..3db2059 100644 --- a/src/ShapedVCA.cpp +++ b/src/ShapedVCA.cpp @@ -237,14 +237,14 @@ struct ShapedVCAWidget : VenomWidget { addParam(createLockableParamCentered(Vec(17.243f,41.f), module, ShapedVCA::MODE_PARAM)); addParam(createLockableParamCentered(Vec(27.758f,41.f), module, ShapedVCA::CLIP_PARAM)); addParam(createLockableParamCentered(Vec(38.274f,41.f), module, ShapedVCA::OVER_PARAM)); - addInput(createInputCentered(Vec(22.5f,106.5f), module, ShapedVCA::LEVEL_INPUT)); + addInput(createInputCentered(Vec(22.5f,106.5f), module, ShapedVCA::LEVEL_INPUT)); addParam(createLockableParamCentered(Vec(22.5f,138.5f), module, ShapedVCA::BIAS_PARAM)); addParam(createLockableParamCentered(Vec(22.5f,172.f), module, ShapedVCA::CURVE_PARAM)); - addInput(createInputCentered(Vec(22.5f,202.5f), module, ShapedVCA::CURVE_INPUT)); - addInput(createInputCentered(Vec(22.5f,240.f), module, ShapedVCA::LEFT_INPUT)); - addInput(createInputCentered(Vec(22.5f,270.f), module, ShapedVCA::RIGHT_INPUT)); - addOutput(createOutputCentered(Vec(22.5f,309.f), module, ShapedVCA::LEFT_OUTPUT)); - addOutput(createOutputCentered(Vec(22.5f,339.f), module, ShapedVCA::RIGHT_OUTPUT)); + addInput(createInputCentered(Vec(22.5f,202.5f), module, ShapedVCA::CURVE_INPUT)); + addInput(createInputCentered(Vec(22.5f,240.f), module, ShapedVCA::LEFT_INPUT)); + addInput(createInputCentered(Vec(22.5f,270.f), module, ShapedVCA::RIGHT_INPUT)); + addOutput(createOutputCentered(Vec(22.5f,309.f), module, ShapedVCA::LEFT_OUTPUT)); + addOutput(createOutputCentered(Vec(22.5f,339.f), module, ShapedVCA::RIGHT_OUTPUT)); addParam(createLockableParamCentered(Vec(37.531f,326.013f), module, ShapedVCA::OFFSET_PARAM)); } diff --git a/src/VCAMix4.cpp b/src/VCAMix4.cpp index 630963d..0f86c3e 100644 --- a/src/VCAMix4.cpp +++ b/src/VCAMix4.cpp @@ -340,11 +340,11 @@ struct VCAMix4Widget : MixBaseWidget { setModule(module); setVenomPanel("VCAMix4"); - addInput(createInputCentered(Vec(21.329, 42.295), module, VCAMix4::CV_INPUTS+0)); - addInput(createInputCentered(Vec(21.329, 73.035), module, VCAMix4::CV_INPUTS+1)); - addInput(createInputCentered(Vec(21.329,103.775), module, VCAMix4::CV_INPUTS+2)); - addInput(createInputCentered(Vec(21.329,134.515), module, VCAMix4::CV_INPUTS+3)); - addInput(createInputCentered(Vec(21.329,168.254), module, VCAMix4::MIX_CV_INPUT)); + addInput(createInputCentered(Vec(21.329, 42.295), module, VCAMix4::CV_INPUTS+0)); + addInput(createInputCentered(Vec(21.329, 73.035), module, VCAMix4::CV_INPUTS+1)); + addInput(createInputCentered(Vec(21.329,103.775), module, VCAMix4::CV_INPUTS+2)); + addInput(createInputCentered(Vec(21.329,134.515), module, VCAMix4::CV_INPUTS+3)); + addInput(createInputCentered(Vec(21.329,168.254), module, VCAMix4::MIX_CV_INPUT)); addParam(createLockableParamCentered(Vec(53.671, 42.295), module, VCAMix4::LEVEL_PARAMS+0)); addParam(createLockableParamCentered(Vec(53.671, 73.035), module, VCAMix4::LEVEL_PARAMS+1)); @@ -358,17 +358,17 @@ struct VCAMix4Widget : MixBaseWidget { addParam(createLockableParamCentered(Vec(67.9055,151.8845), module, VCAMix4::CLIP_PARAM)); addParam(createLockableParamCentered(Vec(7.2725,151.8845), module, VCAMix4::EXCLUDE_PARAM)); - addInput(createInputCentered(Vec(21.329,209.400), module, VCAMix4::INPUTS+0)); - addInput(createInputCentered(Vec(21.329,241.320), module, VCAMix4::INPUTS+1)); - addInput(createInputCentered(Vec(21.329,273.240), module, VCAMix4::INPUTS+2)); - addInput(createInputCentered(Vec(21.329,305.160), module, VCAMix4::INPUTS+3)); - addInput(createInputCentered(Vec(21.329,340.434), module, VCAMix4::CHAIN_INPUT)); + addInput(createInputCentered(Vec(21.329,209.400), module, VCAMix4::INPUTS+0)); + addInput(createInputCentered(Vec(21.329,241.320), module, VCAMix4::INPUTS+1)); + addInput(createInputCentered(Vec(21.329,273.240), module, VCAMix4::INPUTS+2)); + addInput(createInputCentered(Vec(21.329,305.160), module, VCAMix4::INPUTS+3)); + addInput(createInputCentered(Vec(21.329,340.434), module, VCAMix4::CHAIN_INPUT)); - addOutput(createOutputCentered(Vec(53.671,209.400), module, VCAMix4::OUTPUTS+0)); - addOutput(createOutputCentered(Vec(53.671,241.320), module, VCAMix4::OUTPUTS+1)); - addOutput(createOutputCentered(Vec(53.671,273.240), module, VCAMix4::OUTPUTS+2)); - addOutput(createOutputCentered(Vec(53.671,305.160), module, VCAMix4::OUTPUTS+3)); - addOutput(createOutputCentered(Vec(53.671,340.434), module, VCAMix4::MIX_OUTPUT)); + addOutput(createOutputCentered(Vec(53.671,209.400), module, VCAMix4::OUTPUTS+0)); + addOutput(createOutputCentered(Vec(53.671,241.320), module, VCAMix4::OUTPUTS+1)); + addOutput(createOutputCentered(Vec(53.671,273.240), module, VCAMix4::OUTPUTS+2)); + addOutput(createOutputCentered(Vec(53.671,305.160), module, VCAMix4::OUTPUTS+3)); + addOutput(createOutputCentered(Vec(53.671,340.434), module, VCAMix4::MIX_OUTPUT)); } }; diff --git a/src/VCAMix4Stereo.cpp b/src/VCAMix4Stereo.cpp index 14b26be..f45f526 100644 --- a/src/VCAMix4Stereo.cpp +++ b/src/VCAMix4Stereo.cpp @@ -515,11 +515,11 @@ struct VCAMix4StereoWidget : MixBaseWidget { setModule(module); setVenomPanel("VCAMix4Stereo"); - addInput(createInputCentered(Vec(51.240, 42.295), module, VCAMix4Stereo::CV_INPUTS+0)); - addInput(createInputCentered(Vec(51.240, 73.035), module, VCAMix4Stereo::CV_INPUTS+1)); - addInput(createInputCentered(Vec(51.240,103.775), module, VCAMix4Stereo::CV_INPUTS+2)); - addInput(createInputCentered(Vec(51.240,134.515), module, VCAMix4Stereo::CV_INPUTS+3)); - addInput(createInputCentered(Vec(51.240,168.254), module, VCAMix4Stereo::MIX_CV_INPUT)); + addInput(createInputCentered(Vec(51.240, 42.295), module, VCAMix4Stereo::CV_INPUTS+0)); + addInput(createInputCentered(Vec(51.240, 73.035), module, VCAMix4Stereo::CV_INPUTS+1)); + addInput(createInputCentered(Vec(51.240,103.775), module, VCAMix4Stereo::CV_INPUTS+2)); + addInput(createInputCentered(Vec(51.240,134.515), module, VCAMix4Stereo::CV_INPUTS+3)); + addInput(createInputCentered(Vec(51.240,168.254), module, VCAMix4Stereo::MIX_CV_INPUT)); addParam(createLockableParamCentered(Vec(83.582, 42.295), module, VCAMix4Stereo::LEVEL_PARAMS+0)); addParam(createLockableParamCentered(Vec(83.582, 73.035), module, VCAMix4Stereo::LEVEL_PARAMS+1)); @@ -533,29 +533,29 @@ struct VCAMix4StereoWidget : MixBaseWidget { addParam(createLockableParamCentered(Vec(114.282,151.7195), module, VCAMix4Stereo::CLIP_PARAM)); addParam(createLockableParamCentered(Vec(20.718,151.7195), module, VCAMix4Stereo::EXCLUDE_PARAM)); - addInput(createInputCentered(Vec(20.718,209.400), module, VCAMix4Stereo::LEFT_INPUTS+0)); - addInput(createInputCentered(Vec(20.718,241.320), module, VCAMix4Stereo::LEFT_INPUTS+1)); - addInput(createInputCentered(Vec(20.718,273.240), module, VCAMix4Stereo::LEFT_INPUTS+2)); - addInput(createInputCentered(Vec(20.718,305.160), module, VCAMix4Stereo::LEFT_INPUTS+3)); - addInput(createInputCentered(Vec(20.718,340.434), module, VCAMix4Stereo::LEFT_CHAIN_INPUT)); + addInput(createInputCentered(Vec(20.718,209.400), module, VCAMix4Stereo::LEFT_INPUTS+0)); + addInput(createInputCentered(Vec(20.718,241.320), module, VCAMix4Stereo::LEFT_INPUTS+1)); + addInput(createInputCentered(Vec(20.718,273.240), module, VCAMix4Stereo::LEFT_INPUTS+2)); + addInput(createInputCentered(Vec(20.718,305.160), module, VCAMix4Stereo::LEFT_INPUTS+3)); + addInput(createInputCentered(Vec(20.718,340.434), module, VCAMix4Stereo::LEFT_CHAIN_INPUT)); - addInput(createInputCentered(Vec(51.240,209.400), module, VCAMix4Stereo::RIGHT_INPUTS+0)); - addInput(createInputCentered(Vec(51.240,241.320), module, VCAMix4Stereo::RIGHT_INPUTS+1)); - addInput(createInputCentered(Vec(51.240,273.240), module, VCAMix4Stereo::RIGHT_INPUTS+2)); - addInput(createInputCentered(Vec(51.240,305.160), module, VCAMix4Stereo::RIGHT_INPUTS+3)); - addInput(createInputCentered(Vec(51.240,340.434), module, VCAMix4Stereo::RIGHT_CHAIN_INPUT)); + addInput(createInputCentered(Vec(51.240,209.400), module, VCAMix4Stereo::RIGHT_INPUTS+0)); + addInput(createInputCentered(Vec(51.240,241.320), module, VCAMix4Stereo::RIGHT_INPUTS+1)); + addInput(createInputCentered(Vec(51.240,273.240), module, VCAMix4Stereo::RIGHT_INPUTS+2)); + addInput(createInputCentered(Vec(51.240,305.160), module, VCAMix4Stereo::RIGHT_INPUTS+3)); + addInput(createInputCentered(Vec(51.240,340.434), module, VCAMix4Stereo::RIGHT_CHAIN_INPUT)); - addOutput(createOutputCentered(Vec(83.582,209.400), module, VCAMix4Stereo::LEFT_OUTPUTS+0)); - addOutput(createOutputCentered(Vec(83.582,241.320), module, VCAMix4Stereo::LEFT_OUTPUTS+1)); - addOutput(createOutputCentered(Vec(83.582,273.240), module, VCAMix4Stereo::LEFT_OUTPUTS+2)); - addOutput(createOutputCentered(Vec(83.582,305.160), module, VCAMix4Stereo::LEFT_OUTPUTS+3)); - addOutput(createOutputCentered(Vec(83.582,340.434), module, VCAMix4Stereo::LEFT_MIX_OUTPUT)); + addOutput(createOutputCentered(Vec(83.582,209.400), module, VCAMix4Stereo::LEFT_OUTPUTS+0)); + addOutput(createOutputCentered(Vec(83.582,241.320), module, VCAMix4Stereo::LEFT_OUTPUTS+1)); + addOutput(createOutputCentered(Vec(83.582,273.240), module, VCAMix4Stereo::LEFT_OUTPUTS+2)); + addOutput(createOutputCentered(Vec(83.582,305.160), module, VCAMix4Stereo::LEFT_OUTPUTS+3)); + addOutput(createOutputCentered(Vec(83.582,340.434), module, VCAMix4Stereo::LEFT_MIX_OUTPUT)); - addOutput(createOutputCentered(Vec(114.282,209.400), module, VCAMix4Stereo::RIGHT_OUTPUTS+0)); - addOutput(createOutputCentered(Vec(114.282,241.320), module, VCAMix4Stereo::RIGHT_OUTPUTS+1)); - addOutput(createOutputCentered(Vec(114.282,273.240), module, VCAMix4Stereo::RIGHT_OUTPUTS+2)); - addOutput(createOutputCentered(Vec(114.282,305.160), module, VCAMix4Stereo::RIGHT_OUTPUTS+3)); - addOutput(createOutputCentered(Vec(114.282,340.434), module, VCAMix4Stereo::RIGHT_MIX_OUTPUT)); + addOutput(createOutputCentered(Vec(114.282,209.400), module, VCAMix4Stereo::RIGHT_OUTPUTS+0)); + addOutput(createOutputCentered(Vec(114.282,241.320), module, VCAMix4Stereo::RIGHT_OUTPUTS+1)); + addOutput(createOutputCentered(Vec(114.282,273.240), module, VCAMix4Stereo::RIGHT_OUTPUTS+2)); + addOutput(createOutputCentered(Vec(114.282,305.160), module, VCAMix4Stereo::RIGHT_OUTPUTS+3)); + addOutput(createOutputCentered(Vec(114.282,340.434), module, VCAMix4Stereo::RIGHT_MIX_OUTPUT)); } }; diff --git a/src/WinComp.cpp b/src/WinComp.cpp index 4b5f3be..7db5239 100644 --- a/src/WinComp.cpp +++ b/src/WinComp.cpp @@ -406,11 +406,11 @@ struct WinCompWidget : VenomWidget { setModule(module); setVenomPanel("WinComp"); - addInput(createInputCentered(mm2px(Vec(7.299, 15.93)), module, WinComp::A_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.299, 15.93)), module, WinComp::A_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.134, 15.93)), module, WinComp::A_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.299, 30.05)), module, WinComp::B_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.299, 30.05)), module, WinComp::B_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.134, 30.05)), module, WinComp::B_PARAM)); - addInput(createInputCentered(mm2px(Vec(7.299, 43.87)), module, WinComp::TOL_INPUT)); + addInput(createInputCentered(mm2px(Vec(7.299, 43.87)), module, WinComp::TOL_INPUT)); addParam(createLockableParamCentered(mm2px(Vec(18.134, 43.87)), module, WinComp::TOL_PARAM)); addOutput(createAbsInvOutputCentered(mm2px(Vec(7.299, 58.3)), module, WinComp::MIN_OUTPUT, WinComp::MIN_PORT)); @@ -418,12 +418,12 @@ struct WinCompWidget : VenomWidget { addOutput(createAbsInvOutputCentered(mm2px(Vec(7.299, 72.75)), module, WinComp::CLAMP_OUTPUT, WinComp::CLAMP_PORT)); addOutput(createAbsInvOutputCentered(mm2px(Vec(18.134, 72.75)), module, WinComp::OVER_OUTPUT, WinComp::OVER_PORT)); - addOutput(createOutputCentered(mm2px(Vec(7.299, 87.10)), module, WinComp::EQ_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 87.10)), module, WinComp::NEQ_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(7.299, 101.55)), module, WinComp::LSEQ_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 101.55)), module, WinComp::GREQ_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(7.299, 116.0)), module, WinComp::LS_OUTPUT)); - addOutput(createOutputCentered(mm2px(Vec(18.134, 116.0)), module, WinComp::GR_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.299, 87.10)), module, WinComp::EQ_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 87.10)), module, WinComp::NEQ_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.299, 101.55)), module, WinComp::LSEQ_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 101.55)), module, WinComp::GREQ_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(7.299, 116.0)), module, WinComp::LS_OUTPUT)); + addOutput(createOutputCentered(mm2px(Vec(18.134, 116.0)), module, WinComp::GR_OUTPUT)); addChild(createLightCentered>>(mm2px(Vec(12.7, 51.5)), module, WinComp::OVERSAMPLE_LIGHT)); diff --git a/src/plugin.hpp b/src/plugin.hpp index 8561985..54d02fe 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -67,6 +67,42 @@ int getDefaultDarkTheme(); void setDefaultTheme(int theme); void setDefaultDarkTheme(int theme); +// MenuTextField extracted from pachde1 components.hpp +// Textfield as menu item, originally adapted from SubmarineFree +struct MenuTextField : ui::TextField { + std::function changeHandler; + std::function commitHandler; + void step() override { + // Keep selected + APP->event->setSelectedWidget(this); + TextField::step(); + } + void setText(const std::string& text) { + this->text = text; + selectAll(); + } + + void onChange(const ChangeEvent& e) override { + ui::TextField::onChange(e); + if (changeHandler) { + changeHandler(text); + } + } + + void onSelectKey(const event::SelectKey &e) override { + if (e.action == GLFW_PRESS && (e.key == GLFW_KEY_ENTER || e.key == GLFW_KEY_KP_ENTER)) { + if (commitHandler) { + commitHandler(text); + } + ui::MenuOverlay *overlay = getAncestorOfType(); + overlay->requestDelete(); + e.consume(this); + } + if (!e.getTarget()) + TextField::onSelectKey(e); + } +}; + struct VenomModule : Module { int currentTheme = 0; @@ -88,6 +124,26 @@ struct VenomModule : Module { ParamQuantity* q = paramQuantities[parmId]; ParamExtension* e = ¶mExtensions[parmId]; menu->addChild(new MenuSeparator); + menu->addChild(createSubmenuItem("Parameter name", "", + [=](Menu *menu){ + MenuTextField *editField = new MenuTextField(); + editField->box.size.x = 250; + editField->setText(rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name); + editField->changeHandler = [=](std::string text) { + q->name = text + (rack::string::endsWith(q->name, " (locked)") ? " (locked)" : ""); + }; + menu->addChild(editField); + } + )); + if (!e->factoryName.size()) + e->factoryName =(rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name); + else if (e->factoryName != (rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name)) { + menu->addChild(createMenuItem("Restore factory name: "+e->factoryName, "", + [=]() { + q->name = e->factoryName + (rack::string::endsWith(q->name, " (locked)") ? " (locked)" : ""); + } + )); + } menu->addChild(createBoolMenuItem("Lock parameter", "", [=]() { return e->locked; @@ -110,6 +166,32 @@ struct VenomModule : Module { } )); } + + void appendPortMenu(Menu *menu, engine::Port::Type type, int portId){ + PortInfo* pi = (type==engine::Port::INPUT ? inputInfos[portId] : outputInfos[portId]); + PortExtension* e = (type==engine::Port::INPUT ? &inputExtensions[portId] : &outputExtensions[portId]); + menu->addChild(new MenuSeparator); + menu->addChild(createSubmenuItem("Port name", "", + [=](Menu *menu){ + MenuTextField *editField = new MenuTextField(); + editField->box.size.x = 250; + editField->setText(pi->name); + editField->changeHandler = [=](std::string text) { + pi->name = text; + }; + menu->addChild(editField); + } + )); + if (!e->factoryName.size()) + e->factoryName = pi->name; + else if (e->factoryName != pi->name) { + menu->addChild(createMenuItem("Restore factory name: "+e->factoryName, "", + [=]() { + pi->name = e->factoryName; + } + )); + } + } struct ParamExtension { bool locked; @@ -117,11 +199,20 @@ struct VenomModule : Module { bool lockable; bool initDfltValid; float min, max, dflt, initDflt, factoryDflt; + std::string factoryName; ParamExtension(){ locked = false; initLocked = false; lockable = false; initDfltValid = false; + factoryName = ""; + } + }; + + struct PortExtension { + std::string factoryName; + PortExtension(){ + factoryName = ""; } }; @@ -152,11 +243,17 @@ struct VenomModule : Module { } std::vector paramExtensions; + std::vector inputExtensions; + std::vector outputExtensions; void venomConfig(int paramCnt, int inCnt, int outCnt, int lightCnt){ config(paramCnt, inCnt, outCnt, lightCnt); for (int i=0; ilocked)); - nm = "paramDflt"+std::to_string(i); - json_object_set_new(rootJ, nm.c_str(), json_real(e->locked ? e->dflt : paramQuantities[i]->defaultValue)); - nm = "paramVal"+std::to_string(i); - json_object_set_new(rootJ, nm.c_str(), json_real(paramQuantities[i]->getImmediateValue())); + nm = "paramDflt"+idStr; + json_object_set_new(rootJ, nm.c_str(), json_real(e->locked ? e->dflt : pq->defaultValue)); + nm = "paramVal"+idStr; + json_object_set_new(rootJ, nm.c_str(), json_real(pq->getImmediateValue())); + nm = "paramName"+idStr; + json_object_set_new(rootJ, nm.c_str(), json_string(rack::string::endsWith(pq->name, " (locked)") ? pq->name.substr(0, pq->name.size()-9).c_str() : pq->name.c_str())); + } + for (int i=0; iname.c_str())); + } + for (int i=0; iname.c_str())); } json_object_set_new(rootJ, "currentTheme", json_integer(currentTheme)); return rootJ; @@ -194,23 +305,48 @@ struct VenomModule : Module { json_t* val; for (int i=0; idefaultValue = json_real_value(val); + pq->defaultValue = json_real_value(val); } else { e->initDflt = json_real_value(val); e->initDfltValid = true; } } - nm = "paramVal"+std::to_string(i); + nm = "paramVal"+idStr; if ((val = json_object_get(rootJ, nm.c_str()))) - paramQuantities[i]->setImmediateValue(json_real_value(val)); - nm = "paramLock"+std::to_string(i); + pq->setImmediateValue(json_real_value(val)); + nm = "paramLock"+idStr; if ((val = json_object_get(rootJ, nm.c_str()))) e->initLocked = json_boolean_value(val); + if (!e->factoryName.size()) + e->factoryName = pq->name; + nm = "paramName"+idStr; + if ((val = json_object_get(rootJ, nm.c_str()))) + pq->name = json_string_value(val); + } + for (int i=0; ifactoryName.size()) + e->factoryName = pi->name; + if ((val = json_object_get(rootJ, nm.c_str()))) + pi->name = json_string_value(val); + } + for (int i=0; ifactoryName.size()) + e->factoryName = pi->name; + if ((val = json_object_get(rootJ, nm.c_str()))) + pi->name = json_string_value(val); } val = json_object_get(rootJ, "currentTheme"); if (val) @@ -625,3 +761,22 @@ struct PolyPJ301MPort : app::SvgPort { setSvg(Svg::load(asset::plugin( pluginInstance, "res/PJ301M-poly.svg"))); } }; + +struct VenomPort : app::SvgPort { + void appendContextMenu(Menu* menu) override { + if (this->module) + dynamic_cast(this->module)->appendPortMenu(menu, this->type, this->portId); + } +}; + +struct MonoPort : VenomPort { + MonoPort() { + setSvg(Svg::load(asset::system("res/ComponentLibrary/PJ301M.svg"))); + } +}; + +struct PolyPort : VenomPort { + PolyPort() { + setSvg(Svg::load(asset::plugin( pluginInstance, "res/PJ301M-poly.svg"))); + } +}; From c59bf1ee7a470c54f7dc97cf0095f521e5765b1c Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 14 Jan 2024 00:45:19 -0500 Subject: [PATCH 33/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2cf4c90..d9c0004 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023 Dave Benham and licensed under GNU General Public License version 3. [Color Coded Ports](#color-coded-ports) -[Themes](#themes) +[Themes](#themes) [Custom Names](#custom-names) [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) [Acknowledgments](#acknowledgments) From bacad4c5b1665c33ff7626f33256eeca12656536 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 14 Jan 2024 09:57:48 -0500 Subject: [PATCH 34/81] Update README.md --- README.md | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 2cf4c90..a514965 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ The factory default theme is ivory, and the factory default dark theme is coal. [Return to Table Of Contents](#venom) ## Custom Names -Nearly every input or output port, and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. +Nearly every port (input or output), and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. If a parameter or port is given a custom name, then an additional option is added to restore the factory default name. @@ -201,7 +201,7 @@ A minimal complete Benjolin can be patched simply by pairing the Benjolin Oscill A Benjolin should not self oscillate unless given feedback from the filter band pass output. So ideally the cutoff frequency and resonance amount should be constrained so as to prevent self oscillation. Other things to consider are a crossfade module to allow a mix of PWM and external CV (or self patched CV) as input to the filter. Also a mixer would be good to allow a mix of external (or self patched) CV and Rungler input to the Cutoff frequency. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -273,7 +273,7 @@ The following factory presets are available that emulate the four configurations - Toggled Bernoulli Gate - Toggles 10V Schmitt trigger gate between A and B ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass Behavior If Bernoulli Switch is bypassed then the A input is passed unchanged to the A output, and likewise the B input to the B output. The B input is still normalled to the A input while bypassed. @@ -319,7 +319,7 @@ An LED glows yellow for each input that is successfully replicated. The LED glow All of the replicated inputs are merged into the single polyphonic output. The poly output starts with all clones from input 1, followed by clones from input 2, etc. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -379,7 +379,7 @@ If this port is patched, then the V/Oct input is quantized to the nearest harmon The final computed partial is converted into a delta V/Oct and added to the ROOT to establish the final output V/Oct value. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -514,7 +514,7 @@ The NAND, NOR, XNOR 1, and XNOR ODD will all function as a NOT operator if there Produces the output for the selected logic operation. The output will be monophonic constant 0V if the operation is deferred, or if there are no inputs. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -571,7 +571,7 @@ The color coded clip button determines how (or if) the final output is clipped. - **Soft oversampled CV audio clipping** (orange): The final mix is soft clipped at +/-10V, with saturation, using an oversampled approximated tanh function. This uses significantly more CPU, but also greatly reduces any audible aliasing that would otherwise occur. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -892,7 +892,7 @@ This polyphonic output produces all the V/Oct values for the scale starting at t This output can also be used as an extended chord rooted at the Scale Root. Simply define the intervals between the notes in your chord, patch the root of the chord to the Scale Root input, and leave the IN input unpatched. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -945,7 +945,7 @@ This monophonic output must be patched to the NORSIQ SCALE LENGTH input to defin This polyphonic output must be patched to the NORSIQ POLY INTERVALS input to define the interval between each of the notes in the scale. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -972,7 +972,7 @@ For each channel appearing at the input, the corresponding LED above glows yello All of the replicated channels are merged into the single polyphonic output. The poly output starts with all clones from input channel 1, followed by clones from input channel 2, etc. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -1020,7 +1020,7 @@ For each channel appearing at the input, the corresponding LED above glows yello All of the replicated channels are merged into the single polyphonic output. The poly output starts with all replications from input channel 1, followed by replications from input channel 2, etc. Detune spread for each input channel goes from low to high (unless the detune CV creates a negative spread) ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -1072,7 +1072,7 @@ The unlabeled Modulation Mode knob determines when the SCALE and OFFSET operatio Since the Return is normalled to the Send, it is possible to generate a polyphonic series of constant voltages using only the RECURSE module. For example, leave all inputs and the Return unpatched, set the Recursion Count to 16, the Scale to 1, the Offset to 1V, and the Mode to nPre. The SEND output will have 16 channels of integral values from 1 to 16. Change the Mode to nPost and the values will range from 0 to 15. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -1180,7 +1180,7 @@ Note that oversampling cannot remove aliasing that may be present in inputs driv The number of output polyphonic channels is set by the maximum number of channels found across all inputs. Monophonic inputs are replicated to match the output polyphony count. Polyphonic inputs with fewer channels are assigned constant 0V for the missing channels. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -1536,7 +1536,7 @@ The output offset is particularly useful when using the Shaped VCA as a wave sha The number of output polyphonic channels is set by the maximum number of channels found across all inputs. Monophonic inputs are replicated to match the output polyphony count. Polyphonic inputs with fewer channels are assigned constant 0V for the missing channels. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass The Left and Right inputs are passed unchanged to the Left and Right outputs when the module is bypassed. The Right input remains normaled to the Left input while bypassed. However, the left input is not normaled to 10V while bypassed. @@ -1625,7 +1625,7 @@ The color coded exclude button determines if patched channel outputs are exclude - **On** (red): patched output channels are excluded from the final mix ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass @@ -1715,7 +1715,7 @@ Oversampling uses significant CPU, so there are multiple options to choose from: An LED glows blue above the output ports if oversampling is enabled. The LED is black when oversampling is off. ### Standard Venom Context Menus -[Venom Themes](#themes) and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. ### Bypass All outputs are monophonic 0V if the module is bypassed. From 26172bb5431f91b61b9e783d0c7c6de00b24c620 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 14 Jan 2024 09:59:18 -0500 Subject: [PATCH 35/81] randomize shift register start value --- src/BenjolinOsc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BenjolinOsc.cpp b/src/BenjolinOsc.cpp index 387bf94..219ff3e 100644 --- a/src/BenjolinOsc.cpp +++ b/src/BenjolinOsc.cpp @@ -57,7 +57,7 @@ struct BenjolinOsc : VenomModule { *xorOut=&outB[0], *pwmOut=&outB[1], *rungOut=&outB[2], *cv1In=&in[0], *cv2In=&in[1], *clockIn=&in[2], xorVal=0, rung=0; - unsigned char asr = 37; + unsigned char asr = rack::random::uniform()*126+1; bool chaosIn=false, dblIn=false; BenjolinOsc() { From da6ab68170c70b6f9d8119f923fb58bf05373dc4 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 14 Jan 2024 10:42:45 -0500 Subject: [PATCH 36/81] Update README.md --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index db173ce..5cd9079 100644 --- a/README.md +++ b/README.md @@ -1193,12 +1193,6 @@ The Input is passed unchanged to the Output when REFORMATION is bypassed. ![Rhythm Explorer module image](doc/RhythmExplorer.PNG) Rhythm Explorer is a trigger sequencer that randomly generates repeating patterns on demand. It is heavily inspired by the Vermona randomRHYTHM Eurorack module, though no attempt was made to exactly replicate that module's features. -*NOTE - the following polyphonic ports are missing their brass core:* -- *RAND* -- *OR (potentially polyphonic)* -- *XOR ODD (potentially polyphonic)* -- *XOR 1 (potentially polyphonic)* - ### Basic Operation Rhythm Explorer looks complicated, but it is very simple to quickly begin creating interesting rhythms. Starting from the default initial settings, patch a 24 ppqn clock into the CLOCK input, and patch any combination of the GATEs, OR, XOR ODD, or XOR 1 outputs to your favorite drum modules. Adjust some of the sliders to something greater than 0, but less than 100, and press the RUN button. A repeating rhythm should emerge, which can be modulated by adjusting the sliders. Each time you press the DICE button you will get a brand new pattern that can be modulated via the sliders. From 685d2e56c79c2ff3c7938d2fe38299c511a5d720 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 15 Jan 2024 16:38:54 -0500 Subject: [PATCH 37/81] Add completed Knob5 and shell of Push5 --- changelog.md | 2 + plugin.json | 22 +++ res/Coal/Knob5_Coal.svg | 359 ++++++++++++++++++++++++++++++++++++ res/Coal/Push5_Coal.svg | 358 +++++++++++++++++++++++++++++++++++ res/Danger/Knob5_Danger.svg | 359 ++++++++++++++++++++++++++++++++++++ res/Danger/Push5_Danger.svg | 358 +++++++++++++++++++++++++++++++++++ res/Earth/Knob5_Earth.svg | 359 ++++++++++++++++++++++++++++++++++++ res/Earth/Push5_Earth.svg | 358 +++++++++++++++++++++++++++++++++++ res/Ivory/Knob5_Ivory.svg | 359 ++++++++++++++++++++++++++++++++++++ res/Ivory/Push5_Ivory.svg | 354 +++++++++++++++++++++++++++++++++++ src/Knob5.cpp | 171 +++++++++++++++++ src/Push5.cpp | 54 ++++++ src/WinComp.cpp | 3 +- src/plugin.cpp | 2 + src/plugin.hpp | 33 +++- 15 files changed, 3148 insertions(+), 3 deletions(-) create mode 100644 res/Coal/Knob5_Coal.svg create mode 100644 res/Coal/Push5_Coal.svg create mode 100644 res/Danger/Knob5_Danger.svg create mode 100644 res/Danger/Push5_Danger.svg create mode 100644 res/Earth/Knob5_Earth.svg create mode 100644 res/Earth/Push5_Earth.svg create mode 100644 res/Ivory/Knob5_Ivory.svg create mode 100644 res/Ivory/Push5_Ivory.svg create mode 100644 src/Knob5.cpp create mode 100644 src/Push5.cpp diff --git a/changelog.md b/changelog.md index 5dcd6a0..cc68544 100644 --- a/changelog.md +++ b/changelog.md @@ -3,8 +3,10 @@ ## 2.6.0 ### New Modules - Benjolin Oscillator +- Knob 5 - Logic - NORSIQ Chord To Scale +- Push 5 ### Enhancements - Improved discrimination of DC offset removal by lowering cutoff frequency to 2 Hz diff --git a/plugin.json b/plugin.json index 26c851b..22d1223 100644 --- a/plugin.json +++ b/plugin.json @@ -70,6 +70,17 @@ "Quantizer" ] }, + { + "slug": "Knob5", + "name": "Knob 5", + "description": "5 configurable constant voltage knobs", + "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#knob-5", + "tags": [ + "Controller", + "Polyphonic", + "Utility" + ] + }, { "slug": "LinearBeats", "name": "Linear Beats", @@ -258,6 +269,17 @@ "Utility" ] }, + { + "slug": "Push5", + "name": "Push 5", + "description": "5 configurable push buttons", + "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#push-5", + "tags": [ + "Controller", + "Polyphonic", + "Utility" + ] + }, { "slug": "Recurse", "name": "Recurse", diff --git a/res/Coal/Knob5_Coal.svg b/res/Coal/Knob5_Coal.svg new file mode 100644 index 0000000..d24b5fd --- /dev/null +++ b/res/Coal/Knob5_Coal.svg @@ -0,0 +1,359 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Coal/Push5_Coal.svg b/res/Coal/Push5_Coal.svg new file mode 100644 index 0000000..4361d6a --- /dev/null +++ b/res/Coal/Push5_Coal.svg @@ -0,0 +1,358 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/Knob5_Danger.svg b/res/Danger/Knob5_Danger.svg new file mode 100644 index 0000000..1557166 --- /dev/null +++ b/res/Danger/Knob5_Danger.svg @@ -0,0 +1,359 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/Push5_Danger.svg b/res/Danger/Push5_Danger.svg new file mode 100644 index 0000000..b4998bf --- /dev/null +++ b/res/Danger/Push5_Danger.svg @@ -0,0 +1,358 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/Knob5_Earth.svg b/res/Earth/Knob5_Earth.svg new file mode 100644 index 0000000..6456d5d --- /dev/null +++ b/res/Earth/Knob5_Earth.svg @@ -0,0 +1,359 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/Push5_Earth.svg b/res/Earth/Push5_Earth.svg new file mode 100644 index 0000000..3316943 --- /dev/null +++ b/res/Earth/Push5_Earth.svg @@ -0,0 +1,358 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/Knob5_Ivory.svg b/res/Ivory/Knob5_Ivory.svg new file mode 100644 index 0000000..f92c095 --- /dev/null +++ b/res/Ivory/Knob5_Ivory.svg @@ -0,0 +1,359 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/Push5_Ivory.svg b/res/Ivory/Push5_Ivory.svg new file mode 100644 index 0000000..701e131 --- /dev/null +++ b/res/Ivory/Push5_Ivory.svg @@ -0,0 +1,354 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Knob5.cpp b/src/Knob5.cpp new file mode 100644 index 0000000..655c98d --- /dev/null +++ b/src/Knob5.cpp @@ -0,0 +1,171 @@ +// Venom Modules (c) 2023 Dave Benham +// Licensed under GNU GPLv3 + +#include "plugin.hpp" + +struct Knob5 : VenomModule { + enum ParamId { + ENUMS(KNOB_PARAM,5), + PARAMS_LEN + }; + enum InputId { + INPUTS_LEN + }; + enum OutputId { + ENUMS(OUTPUT,5), + OUTPUTS_LEN + }; + enum LightId { + LIGHTS_LEN + }; + + int knobRange[5]{7,7,7,7,7}; + + void setRange(int paramId, int range){ + ParamQuantity *q = paramQuantities[paramId]; + knobRange[paramId] = range; + switch (range){ + case 0: + q->defaultValue = 0.f; + q->displayMultiplier = 1.f; + q->displayOffset = 0.f; + break;; + case 1: + q->defaultValue = 0.f; + q->displayMultiplier = 2.f; + q->displayOffset = 0.f; + break; + case 2: + q->defaultValue = 0.f; + q->displayMultiplier = 5.f; + q->displayOffset = 0.f; + break; + case 3: + q->defaultValue = 0.f; + q->displayMultiplier = 10.f; + q->displayOffset = 0.f; + break; + case 4: + q->defaultValue = 0.5f; + q->displayMultiplier = 2.f; + q->displayOffset = -1.f; + break; + case 5: + q->defaultValue = 0.5f; + q->displayMultiplier = 4.f; + q->displayOffset = -2.f; + break; + case 6: + q->defaultValue = 0.5f; + q->displayMultiplier = 10.f; + q->displayOffset = -5.f; + break; + case 7: + q->defaultValue = 0.5f; + q->displayMultiplier = 20.f; + q->displayOffset = -10.f; + break; + } + } + + void appendCustomParamMenu(Menu *menu, int paramId){ + menu->addChild(createIndexSubmenuItem( + "Knob range", + {"0-1 V","0-2 V","0-5 V","0-10 V","+/- 1 V","+/- 2 V","+/- 5 V","+/- 10 V"}, + [=]() { + return knobRange[paramId]; + }, + [=](int range) { + setRange(paramId, range); + } + )); + } + + Knob5() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + for (int i=0; i<5; i++) { + std::string nm = "Knob " + std::to_string(i+1); + configParam(KNOB_PARAM+i, 0.f, 1.f, 0.5f, nm, " V", 0.f, 20.f, -10.f); + configOutput(OUTPUT+i, nm); + paramExtensions[i].inputLink = false; + paramExtensions[i].nameLink = i; + outputExtensions[i].nameLink = i; + } + } + + void process(const ProcessArgs& args) override { + VenomModule::process(args); + for (int i=0; i<5; i++){ + ParamQuantity *q = paramQuantities[i]; + outputs[i].setVoltage(params[i].getValue() * q->displayMultiplier + q->displayOffset); + } + } + + json_t* dataToJson() override { + json_t* rootJ = VenomModule::dataToJson(); + for (int i=0; i<5; i++){ + std::string nm = "knobRange"+std::to_string(i); + json_object_set_new(rootJ, nm.c_str(), json_integer(knobRange[i])); + } + return rootJ; + } + + void dataFromJson(json_t* rootJ) override { + VenomModule::dataFromJson(rootJ); + json_t* val; + for (int i=0; i<5; i++){ + std::string nm = "knobRange"+std::to_string(i); + if ((val = json_object_get(rootJ, nm.c_str()))){ + setRange(i, json_integer_value(val)); + } + } + } +}; + +struct Knob5Widget : VenomWidget { + + struct Knob : RoundSmallBlackKnobLockable { + void appendContextMenu(Menu* menu) override { + if (module) { + RoundSmallBlackKnobLockable::appendContextMenu(menu); + dynamic_cast(this->module)->appendCustomParamMenu(menu, this->paramId); + } + } + }; + + Knob5Widget(Knob5* module) { + setModule(module); + setVenomPanel("Knob5"); + float y=42.5f; + for (int i=0; i<5; i++, y+=31.f){ + addParam(createLockableParamCentered(Vec(22.5f, y), module, Knob5::KNOB_PARAM+i)); + } + y = 209.5f; + for (int i=0; i<5; i++, y+=32.f){ + addOutput(createOutputCentered(Vec(22.5f, y), module, Knob5::OUTPUT+i)); + } + } + + void appendContextMenu(Menu* menu) override { + Knob5* module = dynamic_cast(this->module); + menu->addChild(new MenuSeparator); + menu->addChild(createIndexSubmenuItem( + "Configure all knob ranges", + {"0-1 V","0-2 V","0-5 V","0-10 V","+/- 1 V","+/- 2 V","+/- 5 V","+/- 10 V"}, + [=]() { + return 8; + }, + [=](int range) { + if (range<8) { + for (int i=0; i<5; i++){ + module->setRange(i, range); + } + } + } + )); + VenomWidget::appendContextMenu(menu); + } + +}; + +Model* modelKnob5 = createModel("Knob5"); diff --git a/src/Push5.cpp b/src/Push5.cpp new file mode 100644 index 0000000..2b05566 --- /dev/null +++ b/src/Push5.cpp @@ -0,0 +1,54 @@ +// Venom Modules (c) 2023 Dave Benham +// Licensed under GNU GPLv3 + +#include "plugin.hpp" + +struct Push5 : VenomModule { + enum ParamId { + ENUMS(BUTTON_PARAM,5), + PARAMS_LEN + }; + enum InputId { + INPUTS_LEN + }; + enum OutputId { + ENUMS(OUTPUT,5), + OUTPUTS_LEN + }; + enum LightId { + ENUMS(BUTTON_LIGHT,5*3), + LIGHTS_LEN + }; + + Push5() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + for (int i=0; i<5; i++) { + std::string nm = "Button " + std::to_string(i+1); + configSwitch(BUTTON_PARAM+i, 0.f, 1.f, 0.f, nm, {"Off", "On"}); + configOutput(OUTPUT+i, nm); + } + } + + void process(const ProcessArgs& args) override { + VenomModule::process(args); + } + +}; + +struct Push5Widget : VenomWidget { + + Push5Widget(Push5* module) { + setModule(module); + setVenomPanel("Push5"); + float y=42.5f; + for (int i=0; i<5; i++, y+=31.f){ + addParam(createLockableLightParamCentered>>(Vec(22.5f, y), module, Push5::BUTTON_PARAM+i, Push5::BUTTON_LIGHT+i*3)); + } + y = 209.5f; + for (int i=0; i<5; i++, y+=32.f){ + addOutput(createOutputCentered(Vec(22.5f, y), module, Push5::OUTPUT+i)); + } + } +}; + +Model* modelPush5 = createModel("Push5"); diff --git a/src/WinComp.cpp b/src/WinComp.cpp index 7db5239..6cb1dfa 100644 --- a/src/WinComp.cpp +++ b/src/WinComp.cpp @@ -384,7 +384,7 @@ struct WinComp : VenomModule { struct WinCompWidget : VenomWidget { - struct AbsInvPort : PolyPJ301MPort { + struct AbsInvPort : PolyPort { int modId; void appendContextMenu(Menu* menu) override { WinComp* module = dynamic_cast(this->module); @@ -392,6 +392,7 @@ struct WinCompWidget : VenomWidget { menu->addChild(new MenuSeparator); menu->addChild(createBoolPtrMenuItem("Absolute value", "", &module->absPort[modId])); menu->addChild(createBoolPtrMenuItem("Invert", "", &module->invPort[modId])); + PolyPort::appendContextMenu(menu); } }; diff --git a/src/plugin.cpp b/src/plugin.cpp index 689d004..5276274 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -79,6 +79,7 @@ void init(Plugin* p) { p->addModel(modelBernoulliSwitchExpander); p->addModel(modelCloneMerge); p->addModel(modelHQ); + p->addModel(modelKnob5); p->addModel(modelLinearBeats); p->addModel(modelLinearBeatsExpander); p->addModel(modelLogic); @@ -95,6 +96,7 @@ void init(Plugin* p) { p->addModel(modelNORSIQChord2Scale); p->addModel(modelPolyClone); p->addModel(modelPolyUnison); + p->addModel(modelPush5); p->addModel(modelRecurse); p->addModel(modelRecurseStereo); p->addModel(modelReformation); diff --git a/src/plugin.hpp b/src/plugin.hpp index 54d02fe..462add0 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -15,6 +15,7 @@ extern Model* modelBernoulliSwitch; extern Model* modelBernoulliSwitchExpander; extern Model* modelCloneMerge; extern Model* modelHQ; +extern Model* modelKnob5; extern Model* modelLinearBeats; extern Model* modelLinearBeatsExpander; extern Model* modelLogic; @@ -31,6 +32,7 @@ extern Model* modelNORS_IQ; extern Model* modelNORSIQChord2Scale; extern Model* modelPolyClone; extern Model* modelPolyUnison; +extern Model* modelPush5; extern Model* modelRecurse; extern Model* modelRecurseStereo; extern Model* modelReformation; @@ -123,6 +125,12 @@ struct VenomModule : Module { void appendParamMenu(Menu* menu, int parmId) { ParamQuantity* q = paramQuantities[parmId]; ParamExtension* e = ¶mExtensions[parmId]; + PortInfo* pi = NULL; + PortExtension* pe = NULL; + if (e->nameLink >= 0){ + pi = e->inputLink ? inputInfos[e->nameLink] : outputInfos[e->nameLink]; + pe = e->inputLink ? &inputExtensions[e->nameLink] : &outputExtensions[e->nameLink]; + } menu->addChild(new MenuSeparator); menu->addChild(createSubmenuItem("Parameter name", "", [=](Menu *menu){ @@ -131,19 +139,23 @@ struct VenomModule : Module { editField->setText(rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name); editField->changeHandler = [=](std::string text) { q->name = text + (rack::string::endsWith(q->name, " (locked)") ? " (locked)" : ""); + if (pi) pi->name = text; }; menu->addChild(editField); } )); if (!e->factoryName.size()) - e->factoryName =(rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name); + e->factoryName = (rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name); else if (e->factoryName != (rack::string::endsWith(q->name, " (locked)") ? q->name.substr(0, q->name.size()-9) : q->name)) { menu->addChild(createMenuItem("Restore factory name: "+e->factoryName, "", [=]() { q->name = e->factoryName + (rack::string::endsWith(q->name, " (locked)") ? " (locked)" : ""); + if (pi) pi->name = e->factoryName; } )); } + if (pe && !pe->factoryName.size()) + pe->factoryName = e->factoryName; menu->addChild(createBoolMenuItem("Lock parameter", "", [=]() { return e->locked; @@ -158,18 +170,25 @@ struct VenomModule : Module { else q->defaultValue = q->getImmediateValue(); } )); - if (e->factoryDflt != (e->locked ? e->dflt : q->defaultValue)) + if (e->factoryDflt != (e->locked ? e->dflt : q->defaultValue)){ menu->addChild(createMenuItem("Restore factory default", "", [=]() { if (e->locked) e->dflt = e->factoryDflt; else q->defaultValue = e->factoryDflt; } )); + } } void appendPortMenu(Menu *menu, engine::Port::Type type, int portId){ PortInfo* pi = (type==engine::Port::INPUT ? inputInfos[portId] : outputInfos[portId]); PortExtension* e = (type==engine::Port::INPUT ? &inputExtensions[portId] : &outputExtensions[portId]); + ParamQuantity* q = NULL; + ParamExtension* qe = NULL; + if (e->nameLink >= 0){ + q = paramQuantities[e->nameLink]; + qe = ¶mExtensions[e->nameLink]; + } menu->addChild(new MenuSeparator); menu->addChild(createSubmenuItem("Port name", "", [=](Menu *menu){ @@ -178,16 +197,20 @@ struct VenomModule : Module { editField->setText(pi->name); editField->changeHandler = [=](std::string text) { pi->name = text; + if (q) q->name = text + (rack::string::endsWith(q->name, " (locked)") ? " (locked)" : ""); }; menu->addChild(editField); } )); + if (qe && !qe->factoryName.size()) + qe->factoryName = pi->name; if (!e->factoryName.size()) e->factoryName = pi->name; else if (e->factoryName != pi->name) { menu->addChild(createMenuItem("Restore factory name: "+e->factoryName, "", [=]() { pi->name = e->factoryName; + if (q) q->name = e->factoryName + (rack::string::endsWith(q->name, " (locked)") ? " (locked)" : ""); } )); } @@ -198,6 +221,8 @@ struct VenomModule : Module { bool initLocked; bool lockable; bool initDfltValid; + bool inputLink; + int nameLink; float min, max, dflt, initDflt, factoryDflt; std::string factoryName; ParamExtension(){ @@ -206,13 +231,17 @@ struct VenomModule : Module { lockable = false; initDfltValid = false; factoryName = ""; + inputLink = false; + nameLink = -1; } }; struct PortExtension { + int nameLink; std::string factoryName; PortExtension(){ factoryName = ""; + nameLink = -1; } }; From 66dd174520c3497e0231afdfb0adfa5840e851a8 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 00:10:22 -0500 Subject: [PATCH 38/81] Push 5 almost complete except for global config and save states --- plugin.json | 2 - src/Knob5.cpp | 11 +++- src/Push5.cpp | 152 +++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 157 insertions(+), 8 deletions(-) diff --git a/plugin.json b/plugin.json index 22d1223..966a578 100644 --- a/plugin.json +++ b/plugin.json @@ -77,7 +77,6 @@ "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#knob-5", "tags": [ "Controller", - "Polyphonic", "Utility" ] }, @@ -276,7 +275,6 @@ "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#push-5", "tags": [ "Controller", - "Polyphonic", "Utility" ] }, diff --git a/src/Knob5.cpp b/src/Knob5.cpp index 655c98d..70a3991 100644 --- a/src/Knob5.cpp +++ b/src/Knob5.cpp @@ -126,9 +126,9 @@ struct Knob5Widget : VenomWidget { struct Knob : RoundSmallBlackKnobLockable { void appendContextMenu(Menu* menu) override { - if (module) { + if (this->module) { RoundSmallBlackKnobLockable::appendContextMenu(menu); - dynamic_cast(this->module)->appendCustomParamMenu(menu, this->paramId); + static_cast(this->module)->appendCustomParamMenu(menu, this->paramId); } } }; @@ -148,12 +148,17 @@ struct Knob5Widget : VenomWidget { void appendContextMenu(Menu* menu) override { Knob5* module = dynamic_cast(this->module); + int current=module->knobRange[0]; + for (int i=1; i<5; i++){ + if (current != module->knobRange[i]) + current = 8; + } menu->addChild(new MenuSeparator); menu->addChild(createIndexSubmenuItem( "Configure all knob ranges", {"0-1 V","0-2 V","0-5 V","0-10 V","+/- 1 V","+/- 2 V","+/- 5 V","+/- 10 V"}, [=]() { - return 8; + return current; }, [=](int range) { if (range<8) { diff --git a/src/Push5.cpp b/src/Push5.cpp index 2b05566..aa7ad3a 100644 --- a/src/Push5.cpp +++ b/src/Push5.cpp @@ -20,35 +20,181 @@ struct Push5 : VenomModule { LIGHTS_LEN }; + struct ButtonExtension { + int mode; + int onColor; + int offColor; + int onVal; + int offVal; + bool lightOn; + bool buttonOn; + dsp::PulseGenerator trigGenerator; + ButtonExtension(){ + mode=1; // gate + onColor=6; + offColor=13; + onVal=0; + offVal=3; + lightOn=false; + buttonOn=false; + } + }; + + ButtonExtension buttonExtension[5]{}; + + float buttonVals[7]{10.f,5.f,1.f,0.f,-1.f,-5.f,-10.f}; + float buttonColors[15][3]{ + {1.f,0.f,0.f}, //red + {1.f,1.f,0.f}, //yellow + {0.f,0.f,1.f}, //blue + {0.f,1.f,0.f}, //green + {0.5f,0.f,1.f}, //purple + {1.f,0.5f,0.f}, //orange + {1.f,1.f,1.f}, //white + {0.02f,0.f,0.f}, //darkRed + {0.02f,0.02f,0.f}, //darkYellow + {0.f,0.f,0.02f}, //darkBlue + {0.f,0.02f,0.f}, //darkGreen + {0.01f,0.f,0.02f}, //darkPurple + {0.02f,0.01f,0.f}, //darkOrange + {0.02f,0.02f,0.02f}, //gray + {0.f,0.f,0.f} //off + }; + + void appendCustomParamMenu(Menu *menu, int paramId){ + ButtonExtension *e = buttonExtension + paramId; + menu->addChild(createIndexSubmenuItem( + "Button mode", + {"Trigger","Gate","Toggle"}, + [=]() { + return e->mode; + }, + [=](int mode) { + if (mode) e->trigGenerator.reset(); + e->mode = mode; + } + )); + menu->addChild(createIndexSubmenuItem( + "On value", + {"10 V","5 V","1 V","0 V","-1 V","-5 V","-10 V"}, + [=]() { + return e->onVal; + }, + [=](int val) { + e->onVal = val; + } + )); + menu->addChild(createIndexSubmenuItem( + "Off value", + {"10 V","5 V","1 V","0 V","-1 V","-5 V","-10 V"}, + [=]() { + return e->offVal; + }, + [=](int val) { + e->offVal = val; + } + )); + menu->addChild(createIndexSubmenuItem( + "On Color", + {"Red","Yellow","Blue","Green","Purple","Orange","White", + "Dim Red","Dim Yellow","Dim Blue","Dim Green","Dim Purple","Dim Orange","Dim Gray","Off"}, + [=]() { + return e->onColor; + }, + [=](int val) { + e->onColor = val; + } + )); + menu->addChild(createIndexSubmenuItem( + "Off Color", + {"Red","Yellow","Blue","Green","Purple","Orange","White", + "Dim Red","Dim Yellow","Dim Blue","Dim Green","Dim Purple","Dim Orange","Dim Gray","Off"}, + [=]() { + return e->offColor; + }, + [=](int val) { + e->offColor = val; + } + )); + } + Push5() { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); for (int i=0; i<5; i++) { std::string nm = "Button " + std::to_string(i+1); - configSwitch(BUTTON_PARAM+i, 0.f, 1.f, 0.f, nm, {"Off", "On"}); + configParam(BUTTON_PARAM+i, 0.f, 1.f, 0.f, nm); configOutput(OUTPUT+i, nm); } } void process(const ProcessArgs& args) override { VenomModule::process(args); + for (int i=0; i<5; i++){ + ButtonExtension *e = buttonExtension+i; + float val = params[i].getValue(); + switch (e->mode){ + case 0: //trigger + if (val>0 && !e->lightOn && e->trigGenerator.remaining<=0.f){ + e->trigGenerator.trigger(); + } + e->lightOn = val; + outputs[i].setVoltage(e->trigGenerator.process(args.sampleTime) ? buttonVals[e->onVal] : buttonVals[e->offVal]); + break; + case 1: //gate + e->lightOn = val; + outputs[i].setVoltage(val ? buttonVals[e->onVal] : buttonVals[e->offVal]); + break; + case 2: //toggle + if (val && !e->buttonOn){ + e->lightOn = !e->lightOn; + outputs[i].setVoltage(e->lightOn ? buttonVals[e->onVal] : buttonVals[e->offVal]); + } + break; + } + e->buttonOn = val; + } } }; struct Push5Widget : VenomWidget { + template + struct Button : VCVLightBezelLockable { + void appendContextMenu(Menu* menu) override { + if (this->module) { + VCVLightBezelLockable::appendContextMenu(menu); + static_cast(this->module)->appendCustomParamMenu(menu, this->paramId); + } + } + }; + Push5Widget(Push5* module) { setModule(module); setVenomPanel("Push5"); float y=42.5f; for (int i=0; i<5; i++, y+=31.f){ - addParam(createLockableLightParamCentered>>(Vec(22.5f, y), module, Push5::BUTTON_PARAM+i, Push5::BUTTON_LIGHT+i*3)); + addParam(createLockableLightParamCentered>>(Vec(22.5f, y), module, Push5::BUTTON_PARAM+i, Push5::BUTTON_LIGHT+i*3)); } y = 209.5f; for (int i=0; i<5; i++, y+=32.f){ - addOutput(createOutputCentered(Vec(22.5f, y), module, Push5::OUTPUT+i)); + addOutput(createOutputCentered(Vec(22.5f, y), module, Push5::OUTPUT+i)); } } + + void step() override { + VenomWidget::step(); + Push5* mod = dynamic_cast(this->module); + if(mod) { + for (int i=0, l=0; i<5; i++, l+=3){ + Push5::ButtonExtension *e = mod->buttonExtension+i; + mod->lights[Push5::BUTTON_LIGHT+l+0].setBrightness(e->lightOn ? mod->buttonColors[e->onColor][0] : mod->buttonColors[e->offColor][0]); + mod->lights[Push5::BUTTON_LIGHT+l+1].setBrightness(e->lightOn ? mod->buttonColors[e->onColor][1] : mod->buttonColors[e->offColor][1]); + mod->lights[Push5::BUTTON_LIGHT+l+2].setBrightness(e->lightOn ? mod->buttonColors[e->onColor][2] : mod->buttonColors[e->offColor][2]); + } + } + } + }; Model* modelPush5 = createModel("Push5"); From 1b6c35d52a1cdfbdfa2fed3c7fc8dfb7157ab10b Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 08:34:58 -0500 Subject: [PATCH 39/81] Restore NORSIQ Chord to Scale configuration preset --- .../NORSIQ Chord to Scale configuration.vcvm | 210 ++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 presets/NORS_IQ/NORSIQ Chord to Scale configuration.vcvm diff --git a/presets/NORS_IQ/NORSIQ Chord to Scale configuration.vcvm b/presets/NORS_IQ/NORSIQ Chord to Scale configuration.vcvm new file mode 100644 index 0000000..c5026a8 --- /dev/null +++ b/presets/NORS_IQ/NORSIQ Chord to Scale configuration.vcvm @@ -0,0 +1,210 @@ +{ + "plugin": "Venom", + "model": "NORS_IQ", + "version": "2.6.0dev", + "params": [ + { + "value": 1.0, + "id": 0 + }, + { + "value": 0.0048192772082984447, + "id": 1 + }, + { + "value": 1.0, + "id": 2 + }, + { + "value": 1.0, + "id": 3 + }, + { + "value": 0.0, + "id": 4 + }, + { + "value": 1.0, + "id": 5 + }, + { + "value": 1.0, + "id": 6 + }, + { + "value": 0.0, + "id": 7 + }, + { + "value": 0.0, + "id": 8 + }, + { + "value": 0.0, + "id": 9 + }, + { + "value": 0.0, + "id": 10 + }, + { + "value": 0.0, + "id": 11 + }, + { + "value": 0.0, + "id": 12 + }, + { + "value": 0.0, + "id": 13 + }, + { + "value": 0.0, + "id": 14 + }, + { + "value": 0.0, + "id": 15 + }, + { + "value": 0.0, + "id": 16 + }, + { + "value": 0.0, + "id": 17 + }, + { + "value": 0.0, + "id": 18 + }, + { + "value": 0.0, + "id": 19 + }, + { + "value": 0.0, + "id": 20 + }, + { + "value": 0.0, + "id": 21 + } + ], + "data": { + "paramLock0": false, + "paramDflt0": 1.0, + "paramVal0": 1.0, + "paramName0": "Interval unit", + "paramLock1": true, + "paramDflt1": 1.0, + "paramVal1": 0.0048192772082984447, + "paramName1": "Pseudo-octave interval", + "paramLock2": true, + "paramDflt2": 12.0, + "paramVal2": 1.0, + "paramName2": "Equal divisions per pseudo-octave", + "paramLock3": true, + "paramDflt3": 12.0, + "paramVal3": 1.0, + "paramName3": "Scale length", + "paramLock4": false, + "paramDflt4": 0.0, + "paramVal4": 0.0, + "paramName4": "Scale root", + "paramLock5": false, + "paramDflt5": 2.0, + "paramVal5": 1.0, + "paramName5": "Scale root unit", + "paramLock6": false, + "paramDflt6": 1.0, + "paramVal6": 1.0, + "paramName6": "Round algorithm", + "paramLock7": false, + "paramDflt7": 0.0, + "paramVal7": 0.0, + "paramName7": "Equi-likely", + "paramLock8": true, + "paramDflt8": 0.0, + "paramVal8": 0.0, + "paramName8": "Interval 1", + "paramLock9": true, + "paramDflt9": 0.0, + "paramVal9": 0.0, + "paramName9": "Interval 2", + "paramLock10": true, + "paramDflt10": 0.0, + "paramVal10": 0.0, + "paramName10": "Interval 3", + "paramLock11": true, + "paramDflt11": 0.0, + "paramVal11": 0.0, + "paramName11": "Interval 4", + "paramLock12": true, + "paramDflt12": 0.0, + "paramVal12": 0.0, + "paramName12": "Interval 5", + "paramLock13": true, + "paramDflt13": 0.0, + "paramVal13": 0.0, + "paramName13": "Interval 6", + "paramLock14": true, + "paramDflt14": 0.0, + "paramVal14": 0.0, + "paramName14": "Interval 7", + "paramLock15": true, + "paramDflt15": 0.0, + "paramVal15": 0.0, + "paramName15": "Interval 8", + "paramLock16": true, + "paramDflt16": 0.0, + "paramVal16": 0.0, + "paramName16": "Interval 9", + "paramLock17": true, + "paramDflt17": 0.0, + "paramVal17": 0.0, + "paramName17": "Interval 10", + "paramLock18": true, + "paramDflt18": 0.0, + "paramVal18": 0.0, + "paramName18": "Interval 11", + "paramLock19": true, + "paramDflt19": 0.0, + "paramVal19": 0.0, + "paramName19": "Interval 12", + "paramLock20": true, + "paramDflt20": 0.0, + "paramVal20": 0.0, + "paramName20": "Interval 13", + "paramLock21": true, + "paramDflt21": 1.0, + "paramVal21": 0.0, + "paramName21": "Equal Interval Divisions", + "inputName0": "Interval 1 CV", + "inputName1": "Interval 2 CV", + "inputName2": "Interval 3 CV", + "inputName3": "Interval 4 CV", + "inputName4": "Interval 5 CV", + "inputName5": "Interval 6 CV", + "inputName6": "Interval 7 CV", + "inputName7": "Interval 8 CV", + "inputName8": "Interval 9 CV", + "inputName9": "Interval 10 CV", + "inputName10": "Interval 11 CV", + "inputName11": "Interval 12 CV", + "inputName12": "Interval 13 CV", + "inputName13": "Pseudo-octave interval CV", + "inputName14": "Equal divisions per pseudo-octave CV", + "inputName15": "Scale length CV", + "inputName16": "Scale root CV", + "inputName17": "V/Oct", + "inputName18": "Trigger", + "inputName19": "Polyphonic intervals", + "outputName0": "V/Oct", + "outputName1": "Trigger", + "outputName2": "Scale", + "outputName3": "Pseudo-octave", + "currentTheme": 0 + } +} \ No newline at end of file From cbceb3a9176a9bb99dde839c7bcde9e2abd49b63 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 08:36:01 -0500 Subject: [PATCH 40/81] Complete Push5 --- src/Knob5.cpp | 11 ++-- src/Push5.cpp | 161 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 166 insertions(+), 6 deletions(-) diff --git a/src/Knob5.cpp b/src/Knob5.cpp index 70a3991..dc5323d 100644 --- a/src/Knob5.cpp +++ b/src/Knob5.cpp @@ -120,6 +120,7 @@ struct Knob5 : VenomModule { } } } + }; struct Knob5Widget : VenomWidget { @@ -148,16 +149,16 @@ struct Knob5Widget : VenomWidget { void appendContextMenu(Menu* menu) override { Knob5* module = dynamic_cast(this->module); - int current=module->knobRange[0]; - for (int i=1; i<5; i++){ - if (current != module->knobRange[i]) - current = 8; - } menu->addChild(new MenuSeparator); menu->addChild(createIndexSubmenuItem( "Configure all knob ranges", {"0-1 V","0-2 V","0-5 V","0-10 V","+/- 1 V","+/- 2 V","+/- 5 V","+/- 10 V"}, [=]() { + int current = module->knobRange[0]; + for (int i=1; i<5; i++){ + if (current != module->knobRange[i]) + current = 8; + } return current; }, [=](int range) { diff --git a/src/Push5.cpp b/src/Push5.cpp index aa7ad3a..b8c55fa 100644 --- a/src/Push5.cpp +++ b/src/Push5.cpp @@ -147,14 +147,69 @@ struct Push5 : VenomModule { case 2: //toggle if (val && !e->buttonOn){ e->lightOn = !e->lightOn; - outputs[i].setVoltage(e->lightOn ? buttonVals[e->onVal] : buttonVals[e->offVal]); } + outputs[i].setVoltage(e->lightOn ? buttonVals[e->onVal] : buttonVals[e->offVal]); break; } e->buttonOn = val; } } + json_t* dataToJson() override { + json_t* rootJ = VenomModule::dataToJson(); + for (int i=0; i<5; i++){ + ButtonExtension *e = buttonExtension+i; + std::string iStr = std::to_string(i); + std::string nm = "mode"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_integer(e->mode)); + nm = "onVal"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_integer(e->onVal)); + nm = "offVal"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_integer(e->offVal)); + nm = "onColor"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_integer(e->onColor)); + nm = "offColor"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_integer(e->offColor)); + nm = "lightOn"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_boolean(e->mode==2 ? e->lightOn : false)); + } + return rootJ; + } + + void dataFromJson(json_t* rootJ) override { + VenomModule::dataFromJson(rootJ); + json_t* val; + for (int i=0; i<5; i++){ + ButtonExtension *e = buttonExtension+i; + std::string iStr = std::to_string(i); + std::string nm = "mode"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->mode = json_integer_value(val); + if (e->mode) e->trigGenerator.reset(); + } + nm = "onVal"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->onVal = json_integer_value(val); + } + nm = "offVal"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->offVal = json_integer_value(val); + } + nm = "onColor"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->onColor = json_integer_value(val); + } + nm = "offColor"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->offColor = json_integer_value(val); + } + nm = "lightOn"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->lightOn = json_boolean_value(val); + } + } + } + }; struct Push5Widget : VenomWidget { @@ -182,6 +237,110 @@ struct Push5Widget : VenomWidget { } } + void appendContextMenu(Menu *menu) override { + Push5 *module = static_cast(this->module); + menu->addChild(new MenuSeparator); + menu->addChild(createMenuLabel("Configure all buttons:")); + menu->addChild(createIndexSubmenuItem( + "Button mode", + {"Trigger","Gate","Toggle"}, + [=]() { + int current = module->buttonExtension[0].mode; + for (int i=1; i<5; i++){ + if (module->buttonExtension[i].mode != current) + current = 3; + } + return current; + }, + [=](int mode) { + if (mode<3){ + for (int i=0; i<5; i++){ + if (mode) module->buttonExtension[i].trigGenerator.reset(); + module->buttonExtension[i].mode = mode; + } + } + } + )); + menu->addChild(createIndexSubmenuItem( + "On value", + {"10 V","5 V","1 V","0 V","-1 V","-5 V","-10 V"}, + [=]() { + int current = module->buttonExtension[0].onVal; + for (int i=1; i<5; i++){ + if (module->buttonExtension[i].onVal != current) + current = 7; + } + return current; + }, + [=](int val) { + if (val<7){ + for (int i=0; i<5; i++){ + module->buttonExtension[i].onVal = val; + } + } + } + )); + menu->addChild(createIndexSubmenuItem( + "Off value", + {"10 V","5 V","1 V","0 V","-1 V","-5 V","-10 V"}, + [=]() { + int current = module->buttonExtension[0].offVal; + for (int i=1; i<5; i++){ + if (module->buttonExtension[i].offVal != current) + current = 7; + } + return current; + }, + [=](int val) { + if (val<7){ + for (int i=0; i<5; i++){ + module->buttonExtension[i].offVal = val; + } + } + } + )); + menu->addChild(createIndexSubmenuItem( + "On Color", + {"Red","Yellow","Blue","Green","Purple","Orange","White", + "Dim Red","Dim Yellow","Dim Blue","Dim Green","Dim Purple","Dim Orange","Dim Gray","Off"}, + [=]() { + int current = module->buttonExtension[0].onColor; + for (int i=1; i<5; i++){ + if (module->buttonExtension[i].onColor != current) + current = 15; + } + return current; + }, + [=](int val) { + if (val<15){ + for (int i=0; i<5; i++){ + module->buttonExtension[i].onColor = val; + } + } + } + )); + menu->addChild(createIndexSubmenuItem( + "Off Color", + {"Red","Yellow","Blue","Green","Purple","Orange","White", + "Dim Red","Dim Yellow","Dim Blue","Dim Green","Dim Purple","Dim Orange","Dim Gray","Off"}, + [=]() { + int current = module->buttonExtension[0].offColor; + for (int i=1; i<5; i++){ + if (module->buttonExtension[i].offColor != current) + current = 15; + } + return current; + }, + [=](int val) { + if (val<15){ + for (int i=0; i<5; i++){ + module->buttonExtension[i].offColor = val; + } + } + } + )); + } + void step() override { VenomWidget::step(); Push5* mod = dynamic_cast(this->module); From 66064bcf09b1b4949d09af4006f69ed8d3a86c75 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 08:45:48 -0500 Subject: [PATCH 41/81] Add doc images --- doc/Knob5.png | Bin 0 -> 7755 bytes doc/Push5.png | Bin 0 -> 7335 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/Knob5.png create mode 100644 doc/Push5.png diff --git a/doc/Knob5.png b/doc/Knob5.png new file mode 100644 index 0000000000000000000000000000000000000000..0313c9e22f9b181d891841ebf6e995f046f2a15d GIT binary patch literal 7755 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 Date: Tue, 16 Jan 2024 09:29:06 -0500 Subject: [PATCH 42/81] Update README.md --- README.md | 75 +++++++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 68 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 5cd9079..10b9afb 100644 --- a/README.md +++ b/README.md @@ -7,17 +7,17 @@ Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023 Dave Benham and li [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) [Acknowledgments](#acknowledgments) -|[BENJOLIN
OSCILLATOR](#benjolin-oscillator)|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)| -|----|----|----|----|----|----|----| -|![Benjolin Oscillator module image](doc/BenjolinOsc.png)|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)| +|[BENJOLIN
OSCILLATOR](#benjolin-oscillator)|[BERNOULLI
SWITCH](#bernoulli-switch)|[BERNOULLI
SWITCH
EXPANDER](#bernoulli-switch-expander)|[CLONE
MERGE](#clone-merge)|[HARMONIC
QUANTIZER](#harmonic-quantizer)|[KNOB 5](#knob-5)|[LINEAR
BEATS](#linear-beats)|[LINEAR
BEATS
EXPANDER](#linear-beats-expander)| +|----|----|----|----|----|----|----|----| +|![Benjolin Oscillator module image](doc/BenjolinOsc.png)|![Bernoulli Switch module image](doc/BernoulliSwitch.png)|![Bernoulli Switch Expander image](doc/BernoulliSwitchExpander.png)|![Clone Merge module image](doc/CloneMerge.png)|![Harmonic Quantizer module image](doc/HQ.PNG)|![Knob 5 module image](doc/Knob5.png)|![Linear Beats module image](doc/LinearBeats.png)|![Linear Beats Expander module image](doc/LinearBeatsExpander.png)| |[LOGIC](#logic)|[MIX 4](#mix-4)|[MIX 4
STEREO](#mix-4-stereo)|[MIX EXPANDERS](#mix-expanders)| |----|----|----|----| |![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)| -|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)| -|----|----|----|----| -|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)| +|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)|[PUSH 5](#push-5)| +|----|----|----|----|----| +|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)|![Push 5 module image](doc/Push5.png)| |[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| |----|----|----|----| @@ -387,6 +387,10 @@ The IN input is passed unchanged to the OUT output when the Harmonic Quantizer i [Return to Table Of Contents](#venom) +## KNOB 5 +![Knob 5 module image](doc/Knob5.png) +Five independently configurable constant voltage knobs. + ## LINEAR BEATS ![Linear Beats module image](doc/LinearBeats.png) Only allow one trigger/gate to strike at a time across multiple incoming trigger/gate channels, thus converting coincident drum triggers into a linear drumming pattern. @@ -917,7 +921,7 @@ The NORSIQ module must be configured properly for the CV from the NORSIQ Chord T The PSEUD-OCT INTERVAL and EDPO knobs and inputs are ignored. The INTERVAL UNIT, ROOT UNIT, ROUND, and EQUI LIKELY contols may configured as you see fit. -The NORSIQ has a "NORSIQ Chord To Scale module configuration" factory preset that quickly sets the appropriate configuration. +The NORSIQ has a "NORSIQ Chord To Scale configuration" factory preset that quickly sets the appropriate configuration with some parameters locked to make sure it works properly. ### OCTAVE FOLD button Controls where the scale repeats @@ -1028,6 +1032,63 @@ If Poly Unison is bypassed then the input is passed unchanged to the output. [Return to Table Of Contents](#venom) +## PUSH 5 +![Push 5 module image](doc/Push5.png) +Five independently configurable push buttons. + +### Individual Button configuration +Each button has custom menu options that allow you to tailor the button to your needs + +#### Button Mode +- **Trigger** - A 1 msec On value trigger is output each time the button is pressed +- **Gate (default)** - The On value is output while the button is pressed +- **Toggle** - The button changes state each time the button is pressed + +#### On value +- **10 V (default)** +- **5 V** +- **1 V** +- **0 V** +- **-1 V** +- **-5 V** +- **-10 V** + +#### Off value +Same values as On except the default is 0 V. + +#### On Color +- **Red** +- **Yellow** +- **Blue** +- **Green** +- **Purple** +- **Orange** +- **White (default)** +- **Dim Red** +- **Dim Yellow** +- **Dim Blue** +- **Dim Green** +- **Dim Purple** +- **Dim Orange** +- **Dim Gray** +- **Off** + +#### Off Color +Same values as Off except the default is Dim Gray + +### Global Button configuration +The module context menu includes options that configure all buttons simultaneously. The options and values are the same as for individual buttons. + +If all buttons currently share the same value, then the current value is displayed in the menu. If at least one button is different then the current value is empty. + +### Standard Venom Context Menus +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. However, the rename function is modified slightly. Renameing a button will automatically rename the corresponding output port, and vice versa. + +### Bypass + +All outputs are constant monophonic 0 V when PUSH 5 is bypassed. + +[Return to Table Of Contents](#venom) ## RECURSE ![RECURSE module image](doc/Recurse.PNG) From 609605f31ce3bd955dda2bc0cd2616d5c4de4e27 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 11:07:32 -0500 Subject: [PATCH 43/81] Update README.md --- README.md | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 10b9afb..ea97280 100644 --- a/README.md +++ b/README.md @@ -391,6 +391,33 @@ The IN input is passed unchanged to the OUT output when the Harmonic Quantizer i ![Knob 5 module image](doc/Knob5.png) Five independently configurable constant voltage knobs. +### Individual Button configuration +Each knob has a custom menu option to tailor the knob to your needs. + +#### Knob Range +- **0-1 V** +- **0-2 V** +- **0-5 V** +- **0-10 V** +- **+/- 1 V** +- **+/- 2 V** +- **+/- 5 V** +- **+/- 10 V (default)** + +### Global Knob configuration +The module context menu include an option to configure all buttons simultaneously. The range values are the same as for individual knobs. + +If all knobs currently share the same value, then the current value is displayed in the menu. If at least one button is different, then the current value is empty. + +### Standard Venom Context Menus +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. However, the rename function is modified slightly. Renameing a knob will automatically rename the corresponding output port, and vice versa. + +### Bypass + +All outputs are constant monophonic 0 V when PUSH 5 is bypassed. + +[Return to Table Of Contents](#venom) + ## LINEAR BEATS ![Linear Beats module image](doc/LinearBeats.png) Only allow one trigger/gate to strike at a time across multiple incoming trigger/gate channels, thus converting coincident drum triggers into a linear drumming pattern. @@ -1040,9 +1067,9 @@ Five independently configurable push buttons. Each button has custom menu options that allow you to tailor the button to your needs #### Button Mode -- **Trigger** - A 1 msec On value trigger is output each time the button is pressed -- **Gate (default)** - The On value is output while the button is pressed -- **Toggle** - The button changes state each time the button is pressed +- **Trigger** - A 1 msec On value trigger is output each time the button is pressed. +- **Gate (default)** - The On value is output while the button is pressed. +- **Toggle** - The button changes state each time the button is pressed. Toggle button states are stored with patches, selection sets, and presets, and are restored when the patch, selection set, preset is loaded. #### On value - **10 V (default)** From 33cfbd7d4e3615dddf5f100645245c4009f133dc Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 11:30:16 -0500 Subject: [PATCH 44/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ea97280..5c3876b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # Venom -Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023 Dave Benham and licensed under GNU General Public License version 3. +Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023, 2024 Dave Benham and licensed under GNU General Public License version 3. [Color Coded Ports](#color-coded-ports) [Themes](#themes) From fe6dcd94419b8618a4d49cbb817581c4eeac46b0 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 16 Jan 2024 11:49:30 -0500 Subject: [PATCH 45/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5c3876b..8590b3b 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ The factory default theme is ivory, and the factory default dark theme is coal. [Return to Table Of Contents](#venom) ## Custom Names -Nearly every port (input or output), and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. +Nearly every port (input or output), and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. Custom only appear in context menus and hover text - they do not change the faceplate graphics. If a parameter or port is given a custom name, then an additional option is added to restore the factory default name. From 6e439e3d8fb1244b84c6cc8b958189a55dcd278a Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 21 Jan 2024 19:45:51 -0500 Subject: [PATCH 46/81] Add poly option --- doc/Knob5.png | Bin 7755 -> 7978 bytes doc/Push5.png | Bin 7335 -> 7558 bytes src/Knob5.cpp | 49 +++++++++++++++++++++++++++++++++++++++++++++---- src/Push5.cpp | 50 ++++++++++++++++++++++++++++++++++++++++++++++---- 4 files changed, 91 insertions(+), 8 deletions(-) diff --git a/doc/Knob5.png b/doc/Knob5.png index 0313c9e22f9b181d891841ebf6e995f046f2a15d..f8bc40683b38929a808617e82e74b8cec1907e10 100644 GIT binary patch delta 4219 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 X_$#c2)}B+awPknU=>BK>DA)c2b-D3Y delta 3995 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 + "Polyphony channels", + {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"}, + [=]() { + return poly[paramId]-1; + }, + [=](int val) { + poly[paramId] = val+1; + } + )); } Knob5() { @@ -97,15 +108,21 @@ struct Knob5 : VenomModule { VenomModule::process(args); for (int i=0; i<5; i++){ ParamQuantity *q = paramQuantities[i]; - outputs[i].setVoltage(params[i].getValue() * q->displayMultiplier + q->displayOffset); + float out = params[i].getValue() * q->displayMultiplier + q->displayOffset; + for (int c=0; c(Vec(22.5f, y), module, Knob5::OUTPUT+i)); + addOutput(createOutputCentered(Vec(22.5f, y), module, Knob5::OUTPUT+i)); } } @@ -169,6 +191,25 @@ struct Knob5Widget : VenomWidget { } } )); + menu->addChild(createIndexSubmenuItem( + "Polyphony channels", + {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"}, + [=]() { + int current = module->poly[0]; + for (int i=1; i<5; i++){ + if (module->poly[i] != current) + current = 17; + } + return current-1; + }, + [=](int val) { + if (val<16){ + for (int i=0; i<5; i++){ + module->poly[i] = val+1; + } + } + } + )); VenomWidget::appendContextMenu(menu); } diff --git a/src/Push5.cpp b/src/Push5.cpp index b8c55fa..45e0b61 100644 --- a/src/Push5.cpp +++ b/src/Push5.cpp @@ -26,6 +26,7 @@ struct Push5 : VenomModule { int offColor; int onVal; int offVal; + int poly; bool lightOn; bool buttonOn; dsp::PulseGenerator trigGenerator; @@ -35,6 +36,7 @@ struct Push5 : VenomModule { offColor=13; onVal=0; offVal=3; + poly=1; lightOn=false; buttonOn=false; } @@ -116,6 +118,16 @@ struct Push5 : VenomModule { e->offColor = val; } )); + menu->addChild(createIndexSubmenuItem( + "Polyphony channels", + {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"}, + [=]() { + return e->poly-1; + }, + [=](int val) { + e->poly = val+1; + } + )); } Push5() { @@ -132,26 +144,30 @@ struct Push5 : VenomModule { for (int i=0; i<5; i++){ ButtonExtension *e = buttonExtension+i; float val = params[i].getValue(); + float out = 0.f; switch (e->mode){ case 0: //trigger if (val>0 && !e->lightOn && e->trigGenerator.remaining<=0.f){ e->trigGenerator.trigger(); } e->lightOn = val; - outputs[i].setVoltage(e->trigGenerator.process(args.sampleTime) ? buttonVals[e->onVal] : buttonVals[e->offVal]); + out = e->trigGenerator.process(args.sampleTime) ? buttonVals[e->onVal] : buttonVals[e->offVal]; break; case 1: //gate e->lightOn = val; - outputs[i].setVoltage(val ? buttonVals[e->onVal] : buttonVals[e->offVal]); + out = val ? buttonVals[e->onVal] : buttonVals[e->offVal]; break; case 2: //toggle if (val && !e->buttonOn){ e->lightOn = !e->lightOn; } - outputs[i].setVoltage(e->lightOn ? buttonVals[e->onVal] : buttonVals[e->offVal]); + out = e->lightOn ? buttonVals[e->onVal] : buttonVals[e->offVal]; break; } e->buttonOn = val; + for (int c=0; cpoly; c++) + outputs[i].setVoltage(out,c); + outputs[i].setChannels(e->poly); } } @@ -172,6 +188,8 @@ struct Push5 : VenomModule { json_object_set_new(rootJ, nm.c_str(), json_integer(e->offColor)); nm = "lightOn"+iStr; json_object_set_new(rootJ, nm.c_str(), json_boolean(e->mode==2 ? e->lightOn : false)); + nm = "poly"+iStr; + json_object_set_new(rootJ, nm.c_str(), json_integer(e->poly)); } return rootJ; } @@ -207,6 +225,10 @@ struct Push5 : VenomModule { if ((val = json_object_get(rootJ, nm.c_str()))){ e->lightOn = json_boolean_value(val); } + nm = "poly"+iStr; + if ((val = json_object_get(rootJ, nm.c_str()))){ + e->poly = json_integer_value(val); + } } } @@ -233,7 +255,7 @@ struct Push5Widget : VenomWidget { } y = 209.5f; for (int i=0; i<5; i++, y+=32.f){ - addOutput(createOutputCentered(Vec(22.5f, y), module, Push5::OUTPUT+i)); + addOutput(createOutputCentered(Vec(22.5f, y), module, Push5::OUTPUT+i)); } } @@ -339,6 +361,26 @@ struct Push5Widget : VenomWidget { } } )); + menu->addChild(createIndexSubmenuItem( + "Polyphony channels", + {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"}, + [=]() { + int current = module->buttonExtension[0].poly; + for (int i=1; i<5; i++){ + if (module->buttonExtension[i].poly != current) + current = 17; + } + return current-1; + }, + [=](int val) { + if (val<16){ + for (int i=0; i<5; i++){ + module->buttonExtension[i].poly = val+1; + } + } + } + )); + VenomWidget::appendContextMenu(menu); } void step() override { From 1a64cbfb5861a03c41a8cc68b2ae649de9155836 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 21 Jan 2024 19:52:00 -0500 Subject: [PATCH 47/81] Add polyphony option --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 8590b3b..b501cba 100644 --- a/README.md +++ b/README.md @@ -395,6 +395,7 @@ Five independently configurable constant voltage knobs. Each knob has a custom menu option to tailor the knob to your needs. #### Knob Range +Determines the minimum and maximum voltage of the knob. - **0-1 V** - **0-2 V** - **0-5 V** @@ -403,9 +404,13 @@ Each knob has a custom menu option to tailor the knob to your needs. - **+/- 2 V** - **+/- 5 V** - **+/- 10 V (default)** + +#### Polyphony channels +Determines the number of polyphonic channels to output. All channels will be identical. The default is 1 (mono). + ### Global Knob configuration -The module context menu include an option to configure all buttons simultaneously. The range values are the same as for individual knobs. +The module context menu include an option to configure all buttons simultaneously. The option values are the same as for individual knobs. If all knobs currently share the same value, then the current value is displayed in the menu. If at least one button is different, then the current value is empty. @@ -1103,6 +1108,9 @@ Same values as On except the default is 0 V. #### Off Color Same values as Off except the default is Dim Gray +#### Polyphony channels +Determines the number of channels to output. All channels will be identical. The default is 1 (mono). + ### Global Button configuration The module context menu includes options that configure all buttons simultaneously. The options and values are the same as for individual buttons. From b61b67a098f642bfdca6da0b799f8c66b21c9650 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 21 Jan 2024 19:55:50 -0500 Subject: [PATCH 48/81] Update plugin.json --- plugin.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/plugin.json b/plugin.json index 966a578..22d1223 100644 --- a/plugin.json +++ b/plugin.json @@ -77,6 +77,7 @@ "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#knob-5", "tags": [ "Controller", + "Polyphonic", "Utility" ] }, @@ -275,6 +276,7 @@ "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#push-5", "tags": [ "Controller", + "Polyphonic", "Utility" ] }, From b9a7bcabd6bae684b786723555b457cafba6f64c Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sun, 21 Jan 2024 19:56:36 -0500 Subject: [PATCH 49/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b501cba..a638b1b 100644 --- a/README.md +++ b/README.md @@ -419,7 +419,7 @@ If all knobs currently share the same value, then the current value is displayed ### Bypass -All outputs are constant monophonic 0 V when PUSH 5 is bypassed. +All outputs are constant monophonic 0 V when KNOB 5 is bypassed. [Return to Table Of Contents](#venom) From c3eac7e55a72c6e29567d31db2723931fe9c4a5f Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 22 Jan 2024 07:29:45 -0500 Subject: [PATCH 50/81] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index a638b1b..0a72e2c 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ Also a hearty thanks to Squinky Labs for their [VCV Rack Demo project](https://g Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for advice on the NonOctave Repeating Scale Intervallic Quantizer, as well as help with compiling a representative set of scale presets. +Finally a thanks to Paul Dempsey for his MenuTextField struct from the pachde1 plugin that allows text entry in a menu. In turn that was developed using code/ideas from the SubmarineFree plugin by David O'Rourke. + [Return to Table Of Contents](#venom) ## BENJOLIN OSCILLATOR From 9449ed8ce738a9753892b4455a00b9a4996a9906 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 23 Jan 2024 21:20:59 -0500 Subject: [PATCH 51/81] Add PolySHASR --- README.md | 19 +- doc/PolySHASR.png | Bin 0 -> 14176 bytes plugin.json | 11 + res/Coal/PolySHASR_Coal.svg | 953 ++++++++++++++++++++++++++++++++ res/Danger/PolySHASR_Danger.svg | 953 ++++++++++++++++++++++++++++++++ res/Earth/PolySHASR_Earth.svg | 953 ++++++++++++++++++++++++++++++++ res/Ivory/PolySHASR_Ivory.svg | 927 +++++++++++++++++++++++++++++++ src/PolySHASR.cpp | 160 ++++++ src/plugin.cpp | 1 + src/plugin.hpp | 1 + 10 files changed, 3975 insertions(+), 3 deletions(-) create mode 100644 doc/PolySHASR.png create mode 100644 res/Coal/PolySHASR_Coal.svg create mode 100644 res/Danger/PolySHASR_Danger.svg create mode 100644 res/Earth/PolySHASR_Earth.svg create mode 100644 res/Ivory/PolySHASR_Ivory.svg create mode 100644 src/PolySHASR.cpp diff --git a/README.md b/README.md index 0a72e2c..e57eec9 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023, 2024 Dave Benham |----|----|----|----| |![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)| -|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
UNISON](#poly-unison)|[PUSH 5](#push-5)| -|----|----|----|----|----| -|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Unison module image](doc/PolyUnison.PNG)|![Push 5 module image](doc/Push5.png)| +|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
SAMPLE & HOLD
ANALOG SHIFT
REGISTER](#poly-sample-&-hold-analog-shift-register)|[POLY
UNISON](#poly-unison)|[PUSH 5](#push-5)| +|----|----|----|----|----|----| +|![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Sample & Hold Analog Shift Register module image](doc/PolySHASR.png)|![Poly Unison module image](doc/PolyUnison.PNG)|![Push 5 module image](doc/Push5.png)| |[RECURSE](#recurse)|[RECURSE
STEREO](#recurse-stereo)|[REFORMATION](#reformation)|[RHYTHM EXPLORER](#rhythm-explorer)| |----|----|----|----| @@ -1018,6 +1018,19 @@ If Clone Merge is bypassed then the input is passed unchanged to the output. [Return to Table Of Contents](#venom) +## POLY SAMPLE & HOLD ANALOG SHIFT REGISTER +![Poly Sample & Hold Analog Shift Register module image](doc/PolySHASR.png) +Ten channel sample and hold combined with a shift register + +### Standard Venom Context Menus +[Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. + +### Bypass + +If Poly S&H ASR is bypassed then all outputs are monophonic constant 0 V. + +[Return to Table Of Contents](#venom) + ## POLY UNISON ![Poly Unison module image](doc/PolyUnison.PNG) diff --git a/doc/PolySHASR.png b/doc/PolySHASR.png new file mode 100644 index 0000000000000000000000000000000000000000..94e7a870df5bf3a503c97dc351d2a3010beeba96 GIT binary patch literal 14176 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�B5vI8G(47GOlv*NNm9%Xo9)9K(r?t=N!=!Kxn zBRhGGu1wm(_F^Mv&D+_-$v2Stj)K(b ztY4VCH#Ilz&9UVXZy6YbkdP23@e1XE7;AA~H5zu=17-USW~sUMlWhH^BIaSA(C%T= zef!Yy@swS^<7@-fIf0*qfWC^ezKRvz_;ae{nX2!j#E^#{$ zzLy*ju}~<&=HZ`TF62JBV)Dp|iJSS}$4f)BIL>_rz{{5}8FdmSl#+ZU)}68}@|1iePF|A0KG>73WMcP@G<4aPdlP5=7kcyz0;uMgY*Hcp|RO|uV+gc?dceEO6( zAAfmueiw^;_Bs0g##dDNjd{i`_J_T>=wu!vT zD)Fplh*+yb5~Zszt*q{YE6f8Nl>{MdGk=UP24le0ts|rVlMp!7+d*6#lp=DG_pGn{ zQDBWtE1-AFRO-$Q#Gyf^w;0;bW5

xVAM$ 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 + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/PolySHASR_Danger.svg b/res/Danger/PolySHASR_Danger.svg new file mode 100644 index 0000000..d9f0e10 --- /dev/null +++ b/res/Danger/PolySHASR_Danger.svg @@ -0,0 +1,953 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/PolySHASR_Earth.svg b/res/Earth/PolySHASR_Earth.svg new file mode 100644 index 0000000..4443991 --- /dev/null +++ b/res/Earth/PolySHASR_Earth.svg @@ -0,0 +1,953 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/PolySHASR_Ivory.svg b/res/Ivory/PolySHASR_Ivory.svg new file mode 100644 index 0000000..b070e7c --- /dev/null +++ b/res/Ivory/PolySHASR_Ivory.svg @@ -0,0 +1,927 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp new file mode 100644 index 0000000..2e1aeb2 --- /dev/null +++ b/src/PolySHASR.cpp @@ -0,0 +1,160 @@ +// Venom Modules (c) 2023, 2024 Dave Benham +// Licensed under GNU GPLv3 + +#include "plugin.hpp" +#include "Filter.hpp" + +#define CHANNEL_COUNT 10 + +struct PolySHASR : VenomModule { + + enum ParamId { + OVER_PARAM, + RANGE_PARAM, + PARAMS_LEN + }; + enum InputId { + ENUMS(TRIG_INPUT, CHANNEL_COUNT), + ENUMS(DATA_INPUT, CHANNEL_COUNT), + INPUTS_LEN + }; + enum OutputId { + ENUMS(OUTPUT, CHANNEL_COUNT), + OUTPUTS_LEN + }; + enum LightId { + LIGHTS_LEN + }; + + int oversample = -1; + int oversampleValues[6] {1,2,4,8,16,32}; + float rangeScale[6] {1.f,5.f,10.f,2.f,10.f,20.f}; + float rangeOffset[6] {0.f,0.f,0.f,-1.f,-5.f,-10.f}; + simd::float_4 trigState[CHANNEL_COUNT][4]{}, out[CHANNEL_COUNT][4]{}, finalOut[CHANNEL_COUNT][4]{}; + int outCnt[CHANNEL_COUNT]{}; + + OversampleFilter_4 trigUpSample[CHANNEL_COUNT][4], inUpSample[CHANNEL_COUNT][4], outDownSample[CHANNEL_COUNT][4]; + + PolySHASR() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + configSwitch(OVER_PARAM, 0.f, 5.f, 0.f, "Oversample", {"Off", "x2", "x4", "x8", "x16", "x32"}); + configSwitch(RANGE_PARAM, 0.f, 5.f, 2.f, "Random range", {"0-1", "0-5", "0-10", "+/- 1", "+/- 5", "+/- 10"}); + for (int i=0; i(params[OVER_PARAM].getValue())]) { + oversample = oversampleValues[static_cast(params[OVER_PARAM].getValue())]; + for (int c=0; c(p); + if (oversample>1) + trigIn = trigUpSample[c][pi].process(o ? float_4::zero() : trigIn * oversample); + oldState = trigState[c][pi]; + trigState[c][pi] = simd::ifelse(trigIn>2.f, 2.f, simd::ifelse(trigIn<=0.1f, 0.f, trigState[c][pi])); + trig[c][pi] = simd::ifelse(oldState>float_4::zero(), 0.f, simd::ifelse(trigState[c][pi]>float_4::zero(), 1.f, 0.f)); + } + } else if (c) { + trigCnt[c] = trigCnt[c-1]; + for (int p=0, pi=0; p=0; c--){ + if (!o) outCnt[c] = std::max(trigCnt[c], inputs[DATA_INPUT+c].isConnected() ? inputs[DATA_INPUT+c].getChannels() : (inputs[TRIG_INPUT+c].isConnected() || !c ? 1 : outCnt[c-1])); + for (int p=0, pi=0; p= pi ? trig[c][pi] : float_4::zero()); + float_4 data{}; + if (inputs[DATA_INPUT+c].isConnected()){ + data = inputs[DATA_INPUT+c].getPolyVoltageSimd(p); + if (oversample>1) + data = inUpSample[c][pi].process(o ? float_4::zero() : data * oversample); + } else if (inputs[TRIG_INPUT+c].isConnected()){ + float_4 rnd{random::uniform(),random::uniform(),random::uniform(),random::uniform()}; + data = rnd * scale + offset; + } else { + data = c==0 ? float_4::zero() : out[c-1][pi]; + } + out[c][pi] = simd::ifelse(tempTrig>0.f, data, out[c][pi]); + finalOut[c][pi] = oversample>1 ? outDownSample[c][pi].process(out[c][pi]) : out[c][pi]; + } + } + } + for (int c=0; c(Vec(36.5,34.5), module, PolySHASR::OVER_PARAM)); + addParam(createLockableParamCentered(Vec(68.5,34.5), module, PolySHASR::RANGE_PARAM)); + float y=66.5f; + for (int i=0; i(Vec(20.5,y), module, PolySHASR::TRIG_INPUT+i)); + addInput(createInputCentered(Vec(52.5,y), module, PolySHASR::DATA_INPUT+i)); + addOutput(createOutputCentered(Vec(84.5,y), module, PolySHASR::OUTPUT+i)); + y+=31.f; + } + } + +}; + +Model* modelPolySHASR = createModel("PolySHASR"); diff --git a/src/plugin.cpp b/src/plugin.cpp index 5276274..3647e87 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -95,6 +95,7 @@ void init(Plugin* p) { p->addModel(modelNORS_IQ); p->addModel(modelNORSIQChord2Scale); p->addModel(modelPolyClone); + p->addModel(modelPolySHASR); p->addModel(modelPolyUnison); p->addModel(modelPush5); p->addModel(modelRecurse); diff --git a/src/plugin.hpp b/src/plugin.hpp index 462add0..241c35d 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -31,6 +31,7 @@ extern Model* modelMixSolo; extern Model* modelNORS_IQ; extern Model* modelNORSIQChord2Scale; extern Model* modelPolyClone; +extern Model* modelPolySHASR; extern Model* modelPolyUnison; extern Model* modelPush5; extern Model* modelRecurse; From 8eb9b25fc84501612acc091b78906245a15ab122 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 23 Jan 2024 21:49:08 -0500 Subject: [PATCH 52/81] Update PolySHASR.cpp --- src/PolySHASR.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index 2e1aeb2..0cd9d12 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -75,7 +75,7 @@ struct PolySHASR : VenomModule { if (oversample>1) trigIn = trigUpSample[c][pi].process(o ? float_4::zero() : trigIn * oversample); oldState = trigState[c][pi]; - trigState[c][pi] = simd::ifelse(trigIn>2.f, 2.f, simd::ifelse(trigIn<=0.1f, 0.f, trigState[c][pi])); + trigState[c][pi] = simd::ifelse(trigIn>2.f, 1.f, simd::ifelse(trigIn<=0.1f, 0.f, trigState[c][pi])); trig[c][pi] = simd::ifelse(oldState>float_4::zero(), 0.f, simd::ifelse(trigState[c][pi]>float_4::zero(), 1.f, 0.f)); } } else if (c) { From 7d6236f54f82df1885a4ce203eb353e7bae65f6f Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 23 Jan 2024 23:28:59 -0500 Subject: [PATCH 53/81] Update README.md --- README.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e57eec9..4b3a2f8 100644 --- a/README.md +++ b/README.md @@ -1020,7 +1020,29 @@ If Clone Merge is bypassed then the input is passed unchanged to the output. ## POLY SAMPLE & HOLD ANALOG SHIFT REGISTER ![Poly Sample & Hold Analog Shift Register module image](doc/PolySHASR.png) -Ten channel sample and hold combined with a shift register +Ten row polyphonic sample and hold combined with a shift register. + +Each row has its own polyphonic Trigger and Data inputs, and a polyphonic Sample & Hold output. In total that is 10 independent polyphonic sample and hold circuits. However, the inputs are normaled in a way that enables consecutive rows to function as a shift register. + +If no input is provided, then random values are sampled. + +### OVER (Oversample) button +This color coded button controls how much oversampling is applied to minimize aliasing when triggering the sample & hold at audio rates. Oversampling is CPU expensive, so should only be applied when needed. +- **Off (gray - default)** +- **2x (yellow)** +- **4x (green)** +- **8x (light blue)** +- **16x (dark blue)** +- **32x (purple)** + +### RND (Random Range) button +This color coded button controls the output range of the internal random number generator +- **0-1 V (yellow)** +- **0-5 V (green)** +- **0-10 V (dark blue - default)** +- **+/- 1 V (pink)** +- **+/- 5 V (orange)** +- **+/- 10 V (purple)** ### Standard Venom Context Menus [Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From b2660645b5d53f5374f3a181012ca92712f7e949 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 23 Jan 2024 23:30:01 -0500 Subject: [PATCH 54/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4b3a2f8..612733b 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023, 2024 Dave Benham |----|----|----|----| |![Logic module image](doc/Logic.png)|![Mix 4 module image](doc/Mix4.png)|![Mix 4 Stereo module image](doc/Mix4Stereo.png)|![Mix Offset Expander module image](doc/MixOffset.png)  ![Mix Mute Expander module image](doc/MixMute.png)  ![Mix Solo Expander module image](doc/MixSolo.png)  ![Mix Fade Expander module image](doc/MixFade.png)  ![Mix Fade2 Expander module image](doc/MixFade2.png)  ![Mix Pan Expander module image](doc/MixPan.png)  ![Mix Send Expander module image](doc/MixSend.png)| -|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
SAMPLE & HOLD
ANALOG SHIFT
REGISTER](#poly-sample-&-hold-analog-shift-register)|[POLY
UNISON](#poly-unison)|[PUSH 5](#push-5)| +|[NON-OCTAVE REPEATING SCALE
INTERVALLIC QUANTIZER](#non-octave-repeating-scale-intervallic-quantizer)|[NORSIQ
CHORD
TO
SCALE](#norsiq-chord-to-scale)|[POLY
CLONE](#poly-clone)|[POLY
SAMPLE & HOLD
ANALOG SHIFT
REGISTER](#poly-sample--hold-analog-shift-register)|[POLY
UNISON](#poly-unison)|[PUSH 5](#push-5)| |----|----|----|----|----|----| |![Non-Octave Repeating Scale Intervallic Quantizer image](doc/NORS_IQ.png)|![NORSIQ Chord To Scale module image](doc/NORSIQChord2Scale.png)|![Poly Clone module image](doc/PolyClone.png)|![Poly Sample & Hold Analog Shift Register module image](doc/PolySHASR.png)|![Poly Unison module image](doc/PolyUnison.PNG)|![Push 5 module image](doc/Push5.png)| From 0ad64d72a23a5fb8048902f0c44c51ff23c8eba9 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 24 Jan 2024 08:37:06 -0500 Subject: [PATCH 55/81] Save held values --- src/PolySHASR.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index 0cd9d12..5d278bd 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -26,6 +26,7 @@ struct PolySHASR : VenomModule { LIGHTS_LEN }; + bool saveHolds = false; int oversample = -1; int oversampleValues[6] {1,2,4,8,16,32}; float rangeScale[6] {1.f,5.f,10.f,2.f,10.f,20.f}; @@ -115,6 +116,43 @@ struct PolySHASR : VenomModule { } } + json_t* dataToJson() override { + json_t* rootJ = VenomModule::dataToJson(); + json_object_set_new(rootJ, "saveHolds", json_boolean(saveHolds)); + if (saveHolds){ + for (int i=0; i(this->module); + menu->addChild(new MenuSeparator); + menu->addChild(createBoolMenuItem("Save held values", "", + [=]() { + return module->saveHolds; + }, + [=](bool val){ + module->saveHolds = val; + } + )); + } + }; Model* modelPolySHASR = createModel("PolySHASR"); From ee2e3e0f306ae6d78de73dcf9a6589325a92d028 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 24 Jan 2024 18:23:09 -0500 Subject: [PATCH 56/81] Add Trig and Clear buttons --- res/Coal/PolySHASR_Coal.svg | 128 ++++++++++++++++------ res/Danger/PolySHASR_Danger.svg | 126 ++++++++++++++++------ res/Earth/PolySHASR_Earth.svg | 184 +++++++++++++++++++++----------- res/Ivory/PolySHASR_Ivory.svg | 112 ++++++++++++++----- src/PolySHASR.cpp | 39 +++++-- src/plugin.hpp | 15 +++ 6 files changed, 445 insertions(+), 159 deletions(-) diff --git a/res/Coal/PolySHASR_Coal.svg b/res/Coal/PolySHASR_Coal.svg index ccf3efc..050f986 100644 --- a/res/Coal/PolySHASR_Coal.svg +++ b/res/Coal/PolySHASR_Coal.svg @@ -38,9 +38,9 @@ inkscape:window-height="1057" id="namedview102" showgrid="true" - inkscape:zoom="1.5798254" - inkscape:cx="32.91503" - inkscape:cy="202.23754" + inkscape:zoom="2.2342105" + inkscape:cx="-8.0565372" + inkscape:cy="190" inkscape:window-x="1592" inkscape:window-y="-8" inkscape:window-maximized="1" @@ -194,19 +194,6 @@ id="path41314" style="fill:#ede7dc;fill-opacity:1" /> - - - - + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#ede7dc;fill-opacity:1" + transform="translate(-3.3333282,0.005972)"> + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#ede7dc;fill-opacity:1" + transform="translate(3.2845074)"> + + + + + + + + + + + + + + + + + + aria-label="HOLD" + id="text13941-6" + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#252525;fill-opacity:1"> + @@ -739,13 +791,13 @@ id="path16742-4" sodipodi:nodetypes="cc" /> + + diff --git a/res/Danger/PolySHASR_Danger.svg b/res/Danger/PolySHASR_Danger.svg index d9f0e10..6f557ef 100644 --- a/res/Danger/PolySHASR_Danger.svg +++ b/res/Danger/PolySHASR_Danger.svg @@ -39,12 +39,12 @@ id="namedview102" showgrid="true" inkscape:zoom="2.2342105" - inkscape:cx="52.367491" + inkscape:cx="-8.0565372" inkscape:cy="190" inkscape:window-x="1592" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="layer6" + inkscape:current-layer="layer7" inkscape:pagecheckerboard="0" units="px" inkscape:showpageshadow="false"> @@ -194,19 +194,6 @@ id="path41314" style="fill:#000000;fill-opacity:1" /> - - - - + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1" + transform="translate(-3.3333282,0.005972)"> + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#000000;fill-opacity:1" + transform="translate(3.2845074)"> + + + + + + + + + + + + + + + + + + aria-label="HOLD" + id="text13941-6" + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#f2f2f2;fill-opacity:1"> + @@ -739,13 +791,13 @@ id="path16742-4" sodipodi:nodetypes="cc" /> + + diff --git a/res/Earth/PolySHASR_Earth.svg b/res/Earth/PolySHASR_Earth.svg index 4443991..c10a3cd 100644 --- a/res/Earth/PolySHASR_Earth.svg +++ b/res/Earth/PolySHASR_Earth.svg @@ -39,12 +39,12 @@ id="namedview102" showgrid="true" inkscape:zoom="2.2342105" - inkscape:cx="52.367492" + inkscape:cx="-8.0565372" inkscape:cy="190" inkscape:window-x="1592" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="layer9" + inkscape:current-layer="layer6" inkscape:pagecheckerboard="0" units="px" inkscape:showpageshadow="false"> @@ -194,19 +194,6 @@ id="path41314" style="fill:#d2ac95;fill-opacity:1" /> - - - - + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#d2ac95;fill-opacity:1" + transform="translate(-3.3333282,0.005972)"> + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#d2ac95;fill-opacity:1" + transform="translate(3.2845074)"> + + + + + + + + + + + + + + + + + + aria-label="HOLD" + id="text13941-6" + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#423932;fill-opacity:1"> + @@ -348,7 +400,7 @@ style="display:inline"> + + diff --git a/res/Ivory/PolySHASR_Ivory.svg b/res/Ivory/PolySHASR_Ivory.svg index b070e7c..b54a19a 100644 --- a/res/Ivory/PolySHASR_Ivory.svg +++ b/res/Ivory/PolySHASR_Ivory.svg @@ -39,12 +39,12 @@ id="namedview102" showgrid="true" inkscape:zoom="2.2342105" - inkscape:cx="52.367491" + inkscape:cx="-8.0565372" inkscape:cy="190" inkscape:window-x="1592" inkscape:window-y="-8" inkscape:window-maximized="1" - inkscape:current-layer="layer7" + inkscape:current-layer="layer5" inkscape:pagecheckerboard="0" units="px" inkscape:showpageshadow="false"> @@ -184,17 +184,6 @@ d="M 89.151989,16.322731 V 7.7328873 h 3.650391 q 1.376953,0 1.998046,0.234375 0.626954,0.2285156 1.001954,0.8203125 0.375,0.5917968 0.375,1.3535152 0,0.966797 -0.56836,1.59961 -0.568359,0.626953 -1.699219,0.791015 0.5625,0.328125 0.925782,0.720704 0.36914,0.392578 0.990234,1.394531 l 1.048828,1.675781 H 94.800426 L 93.54652,14.45359 q -0.667969,-1.001953 -0.914062,-1.259765 -0.246094,-0.263672 -0.521485,-0.357422 -0.27539,-0.09961 -0.873047,-0.09961 H 90.886364 V 16.32273 Z M 90.886364,11.3657 h 1.283203 q 1.248047,0 1.558594,-0.105469 0.310547,-0.105469 0.486328,-0.363281 0.175781,-0.257813 0.175781,-0.644531 0,-0.4335942 -0.234375,-0.6972661 Q 93.92738,9.2856216 93.505505,9.2153091 93.294567,9.1860123 92.23988,9.1860123 h -1.353516 z" id="path41314" /> - - - - + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#252525" + transform="translate(-3.3333282,0.005972)"> @@ -229,7 +219,8 @@ + style="font-weight:bold;font-size:6.66667px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;fill:#252525" + transform="translate(3.2845074)"> @@ -243,6 +234,54 @@ d="M 41.54232,26.986217 V 22.21408 h 2.027996 q 0.764975,0 1.110027,0.130208 0.348307,0.126953 0.556641,0.45573 0.208333,0.328776 0.208333,0.751953 0,0.53711 -0.315755,0.888672 -0.315756,0.348308 -0.944011,0.439454 0.3125,0.182291 0.514323,0.400391 0.205078,0.218099 0.55013,0.774739 l 0.582683,0.93099 h -1.152344 l -0.696615,-1.038411 q -0.371094,-0.556641 -0.507813,-0.699871 -0.136719,-0.146484 -0.289714,-0.198567 -0.152994,-0.05534 -0.485026,-0.05534 h -0.195312 v 1.992188 z m 0.963543,-2.753907 h 0.712891 q 0.693359,0 0.865885,-0.05859 0.172526,-0.05859 0.270183,-0.201823 0.09766,-0.143229 0.09766,-0.358073 0,-0.240885 -0.130208,-0.38737 -0.126954,-0.14974 -0.361329,-0.188802 -0.117187,-0.01628 -0.703125,-0.01628 h -0.751953 z" id="path41272" /> + + + + + + + + + + + + + + + + + + aria-label="HOLD" + id="text13941-6" + style="font-weight:bold;font-size:8px;line-height:1.25;font-family:Arial;-inkscape-font-specification:'Arial, Bold';font-variant-ligatures:none;text-align:center;text-anchor:middle;display:inline;fill:#ede7dc"> + d="m 73.660156,52.384354 v -5.726563 h 1.15625 v 2.253906 h 2.265625 v -2.253906 h 1.15625 v 5.726563 h -1.15625 v -2.503907 h -2.265625 v 2.503907 z" + id="path18844" /> + d="m 79.199219,49.556229 q 0,-0.875 0.261718,-1.46875 0.195313,-0.4375 0.53125,-0.785157 0.339844,-0.347656 0.742188,-0.515625 0.535156,-0.226562 1.234375,-0.226562 1.265625,0 2.023437,0.785156 0.761719,0.785156 0.761719,2.183594 0,1.386719 -0.753906,2.171875 -0.753906,0.78125 -2.015625,0.78125 -1.277344,0 -2.03125,-0.777344 -0.753906,-0.78125 -0.753906,-2.148437 z m 1.191406,-0.03906 q 0,0.972656 0.449219,1.476563 0.449218,0.5 1.140625,0.5 0.691406,0 1.132812,-0.496094 0.445313,-0.5 0.445313,-1.496094 0,-0.984375 -0.433594,-1.46875 -0.429688,-0.484375 -1.144531,-0.484375 -0.714844,0 -1.152344,0.492188 -0.4375,0.488281 -0.4375,1.476562 z" + id="path18846" /> + d="m 85.6875,52.384354 v -5.679688 h 1.15625 v 4.714844 h 2.875 v 0.964844 z" + id="path18848" /> + + + diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index 5d278bd..ecebba8 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -11,6 +11,8 @@ struct PolySHASR : VenomModule { enum ParamId { OVER_PARAM, RANGE_PARAM, + TRIG_PARAM, + CLEAR_PARAM, PARAMS_LEN }; enum InputId { @@ -26,11 +28,12 @@ struct PolySHASR : VenomModule { LIGHTS_LEN }; - bool saveHolds = false; + bool saveHolds = true; int oversample = -1; int oversampleValues[6] {1,2,4,8,16,32}; float rangeScale[6] {1.f,5.f,10.f,2.f,10.f,20.f}; float rangeOffset[6] {0.f,0.f,0.f,-1.f,-5.f,-10.f}; + float clearState = 0.f, trigBtnState = 0.f; simd::float_4 trigState[CHANNEL_COUNT][4]{}, out[CHANNEL_COUNT][4]{}, finalOut[CHANNEL_COUNT][4]{}; int outCnt[CHANNEL_COUNT]{}; @@ -38,13 +41,15 @@ struct PolySHASR : VenomModule { PolySHASR() { venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + configButton(TRIG_PARAM, "Manual row 1 trigger"); configSwitch(OVER_PARAM, 0.f, 5.f, 0.f, "Oversample", {"Off", "x2", "x4", "x8", "x16", "x32"}); configSwitch(RANGE_PARAM, 0.f, 5.f, 2.f, "Random range", {"0-1", "0-5", "0-10", "+/- 1", "+/- 5", "+/- 10"}); + configButton(CLEAR_PARAM, "Clear all"); for (int i=0; i2.f, 1.f, simd::ifelse(trigIn<=0.1f, 0.f, trigState[c][pi])); trig[c][pi] = simd::ifelse(oldState>float_4::zero(), 0.f, simd::ifelse(trigState[c][pi]>float_4::zero(), 1.f, 0.f)); - } + } + if (!c && !trigBtnState && params[TRIG_PARAM].getValue()){ + for (int p=0; p(Vec(36.5,34.5), module, PolySHASR::OVER_PARAM)); - addParam(createLockableParamCentered(Vec(68.5,34.5), module, PolySHASR::RANGE_PARAM)); + addParam(createLockableParamCentered(Vec(14.5, 34.5), module, PolySHASR::TRIG_PARAM)); + addParam(createLockableParamCentered(Vec(39.833,34.5), module, PolySHASR::OVER_PARAM)); + addParam(createLockableParamCentered(Vec(65.167,34.5), module, PolySHASR::RANGE_PARAM)); + addParam(createLockableParamCentered(Vec(90.5, 34.5), module, PolySHASR::CLEAR_PARAM)); float y=66.5f; for (int i=0; i(Vec(20.5,y), module, PolySHASR::TRIG_INPUT+i)); @@ -204,6 +228,7 @@ struct PolySHASRWidget : VenomWidget { module->saveHolds = val; } )); + VenomWidget::appendContextMenu(menu); } }; diff --git a/src/plugin.hpp b/src/plugin.hpp index 241c35d..aae8dd7 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -779,6 +779,21 @@ struct VCVLightButtonLatchLockable : VCVLightLatch { } }; +struct GlowingTinyButtonLockable : GlowingSvgSwitchLockable { + GlowingTinyButtonLockable() { + momentary = true; + addFrame(Svg::load(asset::plugin( pluginInstance, "res/smallOffButtonSwitch.svg"))); + addFrame(Svg::load(asset::plugin( pluginInstance, "res/smallWhiteButtonSwitch.svg"))); + } +}; + +struct GlowingTinyButtonLatchLockable : GlowingTinyButtonLockable { + GlowingTinyButtonLatchLockable() { + momentary = false; + latch = true; + } +}; + struct ShapeQuantity : ParamQuantity { std::string getUnit() override { float val = this->getValue(); From f9e9de59cdeda39466c93bef3c8e0c9840dabe37 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 24 Jan 2024 19:50:27 -0500 Subject: [PATCH 57/81] Update PolySHASR.png --- doc/PolySHASR.png | Bin 14176 -> 15593 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/doc/PolySHASR.png b/doc/PolySHASR.png index 94e7a870df5bf3a503c97dc351d2a3010beeba96..26c46164cd917ff0d388c2cc0146d540a1c400f4 100644 GIT binary patch delta 12774 zcmZ{K2|QHa-~Vi8$hB`X_AO)``_9O&g*Jp3`+Q4GiIliArX~>v6=fURs6?ARMx!V~ zB~g~4q#`C;cF$G6=Xrj==k@=4d7an2=iWKzbKd83-k6boTVG_on;j`vlTwf87_}Uwx4IYVS3Y_`jqkhpycY0Z9|1m@+(-TP^|3tNOe_2K zAQLEVUPnD`3R#k-55@}_kdGZl6S_K;yXV+Vv`UJIPH#$xa0g< zxaImhoWb!O%}#v$eEJlpvI{?x*^{<0%i8w)e1+ot?$?!I2izx%j0yr@T=K8XQg<)X zSG_$>?N34=2%x%QAHrFSTdNSh`|aBvqSO>> zy9fP+c6%@jH}(;eU}@D<5bZJzAFm^zt>d`4fo>p%R(}_1AOFDty_Z!H(1aV^cbviw z9b@rEh4%61KZAX5N?6fN(O00n)6VPF4NXo5LURp*1?{xRUsbzH5fLHq9y{8up#$%q zP+DIGl{~{PE-7Uveux@C{dSz2KS7z*OyK1ITKu&SeTt|qmBSB44%c=OnHBuI|6vxI zYmr+J1AM6TGetatLrE45v*Ei@Ux(^}SxH@F@K#P-paB^#W>lMdIp78C2k&k5RuQ>$ zW`4b>*;y4G9Uj?0FW3Y!#zIQ>(1jp$>Fm+K$Y>uW@drSN|h8hUkGVor6`eLIOnlKR|s z?$4!)E2?R3Iq@zY?V-McBb!)OSIXXvRkDNAukKsH4k4V42-gkHPAXzunT7ft3@MhY zl}Erc`H5#*_Hfc#kM(lxt%0s_XNK&Lz$*eVgjd4tgB%;9a?%XMC33DJ9%_P7EM zUYfH&^IRjeM?o+qzxF9SUmD{m>0;YAqA{S zWZo-Q+uSvH4=)wBIIAv0tKFkY1JkSE&o`TOk>L0i?L`}g$*C%y`XC%*g>`V;NJ?#TFBunBFUWj3?qSQ@kHOpQEEFBS zU~kD{N|?3j=z26E_rIVyN&jh&GcE?Z?>vsujSoZJFAAp1@c4wREE^jlNq&qBud|~r zCD5?tT$!G-ZDUO1*dnS{5aS<)*=CDW&zKpw7Yd{*fB)Q?0VrBFB0qT1`k3j(@?>kc zMv2A)My166M z3ZMwRBH$`kQ2t9;Uu`y~=E&K!kq>tj0MDI2fFwkcxUcgTqp5$EX9a#zJI=u4ZV}37krYwNKUu#DM}JX3yK)}lF`PJmNixnr zK|$z%GGEW)9xwf1So(K_SN1wjC-s3oFUU_as3}P7V!l#u;bLl5bM~f|O893KH7=T# zdht__3tPXKBQB8PAO6`uPSr1GW_IAcSv6U#|B-MF&sQC?vzv+kXV(8fVJ7Eq14eC;BHp&(VvBqx&V%k?&DI<9Vi!Jv|{%GdLqbR!TNO zlFkX16%L)`;N$pkBw3*lHPQzJ*a39wZs``)@3z_2?Xv92Nw@57RLZp?9V%3-OzyAz zM~hZ>O%s{C>*AWCEk&6(M1eFW6k%^j+J++)^Ob%R;q)r%0?h^bX59XDAVWJ37`6hya5t6k6(f+9>q1!FZhy#b@n$HvQ z3^;;fx#iK@Z0rIu`hZ&)+$@VAlWdn)>z6NwmDKimQArv)!MQ4Uh^3SJ2$znm{^nlL z$5U0tQ}YWDx09k+ezFrO6|~|#%Mc^nO<}yJh;B8owNS>^jLq=cJO5U#BnKbD*>8_9 zVjB>B^JhPqh12HDg3ct`FSY=u50*zlRYL_R;ndc2ZUe%d+>;k3mZGx^`QT>u$leVtHoJ(XMrSvhhi3 zJ@-LDXHujH>5x20s@UwrPo;;}eX@?16SMB8OR~3f?8KPM2qRs3L}peAg8g(QgSFj; zb?75=pW75+0)PB7-~KO2y*1Py1&*xuw@s62Si86BFrP%ji+=%%t8#I7wzyc6T8mS%5Pn)3$C5<(lpYa|7!zt| zUi*%QQObJjkaCrKybg6R0`?0Gv_&9Js+VT*99`AXyc^8O%nX8+|Ef~2B*^8cS0k!d zhil_A0*BYxES2cDtneku@n7Gs$2U9vr~>8caRf}P_*i%`7M{}9FnNM*^ernys!NfJ z{!ZisD&o)WWSuLzSHFN?y|_ii;wKcV->IL3-yZC5RXwecKHl7YG1MU=NkvADPxkD7uLE$4bOFB>YOH))`^%&*a}f6P zF3+yFWp}qho}^_+samVAH#4Ak)+Tvo($6i@+}#2dMJP_J%gynzp;*FNDu-ap-AnX6 zvV)rmVG zOcOA22VrlKKELK9bK~u>XNd39J`s&8h8vKPBpWt93V!%A&*Mwdz6@Y_4;d{Dcj6>1 zZ6q-cICrp0a!ie`j9|E5#Bbf!!!n$kbtbKF-*|S*eoTL_c_%%I2KppS+nx!EgIm2F zLvr)wy0@P}TOjsMhVxVj)?Tx~=2DMzo}yjHHX^$mmNT!pWFE0o;XT8;K1PVqB~b;9 zy&mk{ubzM^{29CULXQ4n+6LkNZ8Vqz*PTTiz~<%Ry^&p)kv{?0dq<|cF-aBicoegL zswr_kWdzS98QMgep!ad!^tSniwZ$0UggQ4ZrA~&S3Tr_YU`0=(wzwdccKG_{HFtf; zX@2%rv@cL9ko6TbH8n*uHiYCXS}KFbchiq}RT!+kh`uL#pQ~t|MX;A%5iAUw176KAl_>&o9!#z72YLaGA$<)AwzRw15=hbmzFHB7vbDmJ zRbV?y4BWbb{ieSPuQJ$xnWj>eCv3Ts3PA%XpL^dYKC^`-Bpe@aB&@AsJ33zDuITu_ zs0?0-rB@8Qv>#A)e2XC#Jo?RXMVkt_bEPreZiN^j1%t`KN0`11v)A0;zfIARu}<`^ z;SGKA@n8Dh-rjh#`Wl#TLKeVOD|>X;lFMa*1%P~~C(ssrq{RtqJULtyDMxF)$_A|V zimKig^FTQ|IpEKpJD)wa(bKb^J5>JuuGjT^1J^bsNb`^azE7>S;`{~%n(x}$6*LRT znBXTrJ-J}#x`?sQPgSPfxnje1=d2$z;XGTO$eF_D*EOUS|KiA_n^<_XkdP2LdJt@W zb0Ki0a1emo=mHVlvj;Em=^XBl64EZI`l&LQ=pi!x{rgK{aoL@j8}{4nAxUM6kN8w2 zFn!@#Tj2H+s?_w)rpDE9dS)AHvh zs)6zJ!a(nbk-A)uPo}_w2M;*uMfbBWh--lgROc%ROY1Umey|%+4?-tA>Eot?_z<;z z{5R|bO$E})G5}L>__KNiH8@6;^_|y|9Nzo#!#S!KBPZ}hQVdJy(px~6HR`^1Z`R1G zv3AzOB}=5~97FZY{hJroyppRG_P5s6*YA73v9PcJ{GJ{TUvzE3-E(k!%fsctM1G~OUusmS1-zecFrOTwk<1*oV7L#k-tAtM4J^5a(+oMZ@q{WvM1W^HRM|@ z-e|Gixq<7eQHu8(ZdhyK&PuIkrwli&baFqd-iWr^~|!45ZUpjYaLrBh`fnsi<7TGaGB! zBkTzwV0x%2I9YI>r|45!JFMGi>DsRNZ$Y+FWJ?Xwo$Xpy*vWiX7CXwWAl7F|;e@0} zX{pL%m2*Tk+)8nILl4@Y3GP4T~TT0}J%%tY%>JOY+ zJlFi{Em{`F{AD8<=7e@~T8&ZH`5C_TSz`Bca{bBaw=Gb35UV!LA*xa}P2o0?^wtao zn*F<;o{J;4*$DPj!ujSM_l&a7VHLpv=KMvt(G69_Qh|nV_Nnm4nsf5xMSs8j$?y=H zMpDVmwIGK+p^wMlTXy;^ZYYrlvUBC+P^p$43B~tsp{$6Xt!O1B$~BiIrA6EE@w+XN zU3Z=U&D3?k&Fu$ZUH+CeH0#CDKVnNcFL~UcGMWqfAV-F){N`g@a0*1croczAt`6kX zD6)_~|Lu(mb5RBDh2d|Q7txqOe@ygHOtPrVp{l6%%xxUtJmx7qvc2Q0WzrE@LOLpR z=>seEu0PVNy6x2~gw&-r7zSsKjg>QdO`cdjh9;K5{n`};w0luhtymOA$25}T*{Z;r zKXx8_rDCXqyksL|zu#L8B-acj!Hte5j<)cjl@cS-5}`avQr2(YC3@lrKodY4VYL z2HteadP~U#!*+2G9z3XTW@d)?{n$<4DsfIYjy_;acb@h)Ts^Zc=iPHm-$m0EZ+7P& z_;fNO7?$>q>XTg{tpLXDl-;^+o49Jmu8n3GhF%y9-??9vnj+gRx{dL9fMR&J{t@m26g&o=rFmZ$C{c+nQE41Y80%6wm3`J~&X zFddN6I~3km7s`*+5EZ|Ci8AryEGs*Z8DyC0Ohj^4%-W79| z?bssD^H2f(D$#_9ih-{+^WBK1?9&dQ+MC^WFG5#)Ps8%MH8nMXv#X#`-`OTagoYKk zE-UZU@>Lo1z%q;ybW!<1i$Yeei%6~_5Nt1p?$%`bo|MP?)y1X5ALsL*xW=oUMYtWn z$H#@IT5dzjL|dc#7V}};4n>AJ5CS{>sf(w9b66RlWP@}+(Fwo8+e9s}2;(5!Jd{z! zFYTy_g5KL*TwV2(;h228N7eWZ+Sdz&a#Myh=y9Kx)jzrqOM;jt=ZIcL9rQfrHjAaxT_8h0I5Gd8#(=O-oM3$I&E9r`g^8T`Yqm zHb~M=*%O=-zFyVaYIquX@79h4M&c(Tqr3M0=^&h14K1mWdyB1-rDSU`Oyl`rnids~j= z^Ni=G0BHSw)9=QzCdW&%4#~34Ey?synKxRl$NCh~2-6$b5E!V1vaZsD%Sq}zrB(AhHT6`U zxDD;HOryH_bA+s0KYFE(@Y8Ksc?X@U8!tvCP@~pxgUj2$^ya-O*Sqc;z&U5!SZ)hl zBoCf8teX!#F~MK_=f1RIJ`B2{s{MxgM5B{}PhJOo1Nv}ItGzixeDApO;ww@$odoyc zT&kyU6yxV_xc~4PU(K1H-QyM9RqML>u>~EjtIuL&+bY^3C!Ox=PEbG9JSkOo<{TAi zriX6YAs5#$4zIw(xmgN3K#wc&8finzGpT`dy*ajVkG3@LA^Qw3za4nfMcGh8IdQ;KqgRYR zEhj~Q-52%&3bnPkg~l^Tp~q13ta3fcTXf*tZEIz9EpEX*qXFo(CV=aM2;>xeYr6Nk zd3WE_-!N!+In7n`V{OMEE6t@aWYzb^G0@m>Pv=ADdZm)8J0YVDAp3@Vqad>a)u(%} z{`C{cdj`N7$9msz=t@|hW%&nNF9_Ss`^)<`%d6L+auZ_Bvi}7d6_9TRHJGVm+nuHd z4N_Rd8~PEJgofUQ(PANt*&O8GX7JpZ8H377j|xUfo9gkXL&cs$(og4k++Fsbp4f6T z(+Gsxp$gxa>y_~0JQ+CCU=`9T_WqBP%w$lrQ!|=_py`1|_#fM-fxq}mOGABdd-p(P za_KYYzji{{Lk97d{2d~eaA9+P6^EDi4t5K6v~L{y8m{IPhW53@TsxXzS7i&X&K;x+ z`S}5s3O4lmO(!8wq~6X`L0ZaKcDf)2hv&u>khJ?%ChYO90POlhvf-JPd9i!`u6t6b zd8wC2CaQ~Pn%jxY+Zb6`Xjsj;u%=g^P6D=PQ8=>%MX3~7 z^V7#6dn`GUbr1waxPoDhsmG}vRp>W^%@%+ z0naN}fM;f_(_g>7fGunk+XI%dQz136^P22wThL{}_N4%3Z*^hiqeq4{2)UJ+u^sf+ zpMD#H-SHFrb$@dRQ9}l+#qWBh7;BA*i7a;F|KYN#6}uR~HJXY1y=q<(rnk zZQZC~l2r|OzF7}{v6;eEi={ z{hOcvy{TVQDlP_~1QfBa>ZnZ3X+<@Ak%DY!=|c0KWNHUFfRb|4UpLr}zq+|9A*O+* z2mG@D;JSiqv*C=Wgl)PNnEM9HsfMsPg+*~AALPCx-VpLZp@O+R-eWWfeH{-M<=>Q*ynMDR;Lg)53l7~TqxZ` z_LrAO>v9CGoh_s3gDdIOlV09`b+dts+aKM`pkDEHM}J(0x=eO)%dXQ=68jroAoQOR zw6UAzAAb+kCcjcMP)<_Pw#vU(Zi{T3KiB8$MSAjwb?N_#1RmVY`6&sJ&$inpvx^d| zySkPNdFi)@A_@Vve;Mfe#~AuaSy@1))BkMFX85M~20S#(V%?VctQj+mJb9oY;deop zZvf+`SH4N!NKP`IcG_FG&pew?-BznTvHP&9{vMGUU&8wKq2=vIH*BF}{nAIWyiTGr zGF-yN4G?FOxXSA(Kd_U?Vl3Oc}`rtW~% ze4^!zOnguPR)l1Oyc>LlmN70x^8vxZ*GUsyzdpC( zItwf@RiNbKn{@2Tg;%Z@Ay&m3A);zWmgiH8=Q(!t`hZ48%*5-meYdf?aNk2-yjBr|Cd=r+--GL%ebwxM=~w;}1>f{2!VC|7T(0w)h5Qy`62| zaf2L6+Pzzs&R}@_^~cYhhv?N%9_y}(MBU8h3ld|YI8yCAPk*9~zdzazo>=4SP0%;~ zD@gYgeE$n8G{b)ZP14Za#7lnw%q0v4?2txB)Axmvu4E``;HpicLznst^irqOZ8?Yz+PArz(*c7hR35VuS7$ zu`^b*vRa&89^Kv zVXKZ&H*01MAX3Wyjb6dcX#PJ;z_Z6^Q!qmQRyl95&YLl+kp{6G^}G_txh3v7B-R04cRa6!Rpn5Vva0oteo&KdHd zakIc%rtNY#1SD@x-a-W*Sn_XN5+eC!>xJ4&t^sAu! zQFM7pe`O$&-FPSud+98Q7mlBJ`By@6TcD3K+I!1^t|(bz+s=o9-TJ+lt`WcbMB2#E z+Ib+Os3FW_KZEGuxfj(rqG4zTF4f_=TV@P8yere~e0;7oKYxDC?q3;hAfPD$b3gjC zYVHK&$-;Z^{{r>jgY;k2p~Z)IHi{$2+&mUa^5?9HY*Fbcn~KU)wktj zC&U??-kfuf)D0<;0i!85aw@=KykG4CMYSTl8ATblHX}zkkEC@3D<2h&(YW<5kPnBD{*cnjP>K z3GrZMD$Dh3AMV2?62`O8`=B`WUY}K)3vH1BnjEF7ku}hEW%yPZFY6TeN{Anf>Y2G&9fQSwX|J;*HxI~21$RoHOvnlbrAiJ!+3pdpm z6wKuZg1KBS5mp|EEN|>@iZZpQWbh+Np@I*TjD;6``%XP8XhlZ|FJ^Oe_kwoke|`-K z-{e}Q7097r)r}GU_1Ni{TU`N-L1xiYY7h}{9x3#=FV9a%A=x1MTECD<5#h2u`A$-H zLBTCw_uO2rWgzn>B!)IaRO$V>zX<%DZ;w+G{HOa3!`Js#3X|ybpFUIoB_$=m!-o$6 z0|NurEO^-r8@q?NasN;~)+S-O1$H-kpJ;HUWWwf$FwQ+1i?_RqaD~=j^Jc6@8^`QI zA31V_dsBX8;b&;yNunjYwK@lPHf{so=E{%fl8+gj`M3P%=7z?grZufN}L6*&}o zjKhM{!`&71Yb-zElaUokpF!l5uKIqw(51D?J!D4x2C~Ag^5H`$MSAjf-v*TF4l|4S zAs%NWC+RAlkt8(Nn@xSFAWmWOBHlpf3TTWrNe-DTkb=ixoH^#Mdw~oE>yVmb6VmMK zCo6D?Hqb_`v-!DVnQAkq^wx7lbuG-!z8{=M&Zc5aSFr6QPk{sGiN5Noz{x+Tu0G2hL7;}Lx|~wHP}v9#r59`w%EwQQ!MV6 z@BH-N3O4Y4qN9gp)zqBON^l!uY)+8J0Z$?^JRB*b1Z&vG_t=m|-AQm?nI3rB#b8`( zr8F4vpZF;>`9r}YQdm+ljFFWUBrGNt40}D4qzsCx3SFyBT$+ zflk4yvkmP8&)wTiBraVe+%>l2cZ7~|Qjq52`6ZMxI*nEU?~z8F;?3ESTL^FehxmM@ z=)6ot@YTYnMB?f~+K6;TiYU_fXSkv$#q;J+V?xG=8u_3>=?=<0f$VMrIncV_oUfng zR$WNmS;S_|arKey1@(X}n}%x~4==9CGgUiB{r*Ob-ehqNs!hTxU-;-7K<1IwAjD83 zVS#81q$C}V9=>*@S(g(r9ZK|lAh|UwSKc~|I2cbEnVneznl5NaV(Ht6(%S3G65rZc zs~ja{do4d%{lU?pPLS)qH)*8$sQ}vrO;gKSKU}K6`sPg#(cS_&cz3mBBXE>(RlQ&6(Ov*u7B8~gmer3E&LsE3ngGk9@tsoZ&)d7-OOtI$C4cobAaAt zW^qbo+o(4>JA4D)`fB~#cYI~Vr#9A^F$=bymviN8+*|5XFwroWzLD>Od5X+iWcDgX zIask3q75OP5Nw{gHuLFi{zy@Y6_O2oM%=-=qB1+52W+%BP|F>NnRPMh-K%#2rn01& z_-n3Ih@OWvc?fpz%2?0A%00{}_~)Do)~>JvNa>y0G#$tF1#&2{s5+VY{k1PWYS(+> zc*5O^AP#uvNFdQXK@y7#0(P>Z4^r)=Ich5(8h4|scKPCJG=JdM;VT{;)zb#B)?-*3 zy#oGp)uC?==quUbxb?$F4Dg8aj|k@TvnBliI2VJBV}Dlq`ZVq(i+7;lw?fU4q+g%a zD{VX;ZTR|Hv!jl*!-bS@*-5#^dUAM|g(knP>4QBO%V`C2-m8FJ#`NJTPaq&{C(3yU zB#w(b{w<;UyS0TeQgO$C-J0Nwvytt8&Q++*Zfoh_K5bx(yu0!qP@qN!TnuQ^UmgD( zx_I|yGdI8?cf{8h$vz+Lj3bz5h?ot`|625?XT(>-qIEFrC>10f42j4rj?ERU%b#-& z4#j&ieK8*70t z9`)z`(=DM*1c62ugayA5YR=0}a4T~ImMVWs-5s}B(4geVJZr}O@X{J3W=+z#5InUV zZ8Pmb2TPOzTiV)rztm%7r>u)cY+FUAbhyXbuk{h*dzmv{j#sHvTqghew||f;J{!%4 zL7qkEz{4bs*=dLrQ~f}7GFgA=2C^?xrA0PEZlE1snrh7cwlzO^(dC(x4^t(29jPuB zcz8V*tB&VU;m!Gqm|g+=h+0`B1{ZULz{YeAC-BxC`@ zaJTa%9x8nIg-jZa&1n@jt^T$RRCU?il~)$ox(Vg{{LGgN;=Bc=q65K<2VyGDf{XE- z5oO>$i~8Xl>&%1IUvfOw@!Y%W&{jP6LTsCuly zDe0YO{n^8?k|;{87tOnqFw6N+nu76>evWZPBzX|w&&5p5^KTq@$Ag=uUO3@%H49cP zprqT@qJvEJp!6XWKA~Dqor-osiC>LRR1_S~OV}Y!jJwBY)e|N)gpHFTe=g}Utx4(X z`uZaIG{h;>QT-$DxFbWLkOa+)u!MEh&2NxYmICCEVm?d!Ge(sCgrI?x53CQ!(>8>U z(pW24;F-nSgu8M9Z&(r5aojS20LM6Zo}vs~?ghsxW5}1o{$q68r3u*MTI{XevJcJ2 z8tX=m^a-L&0?*-b#s{-*xWAFi&1&uV)G3;8?C0Yn(2mg2*#hEQyejhwnFz6YyrGdH zMsXaDCho&5QT`mc+#$96>FyEKwy`YhMrDS%v99@sykU~*yBB!NDcT4326j_C%^Ob=~{-Q6Qsna`3or3&Rb+`DH% zn)7-UDPCC$j_ES}=WkN8cV?07-{+7HzfGp9%*p)jrR_DDd2}LYnYiNv#YBl%V(P2`FF!3&#=@1UAl|G4r({t}D*v!{ z)O~MO0vIk4&Q}rk-QSxhS+f%W@JitgfD~Jw<7UqsOE8H+f!VhNax=7#2vFEN4wdR z{WQpkq9Elp<>|}ymnS=yP5XB!{?t4qCU!brc%~ z4T=R77%Uwld+1}YXd)s66exlxD{i3k#89(ei_(j_5MuCIbmq_<%#d%LkU0114r!|M z)GgCn-g@Dp5-;{BIbUecdoEciIHDK6bN9Am!wxB$9RZ#l_c!NUWZc&YLbLnNrTxrd z6a!!6MZRDJzZB^LVBaI*FY_V;!)JdegjapnL2c*iql2Gr=&qSprClvY#pY@%S}4XU zv`ODG61G$BXIK3JH29`Bju6G$e;;7_3-T8!8=+HZ{oFJsRpo< zyL(}MYR3+`zJ;Zzc1R&)I<9V2{k%Wz%-C7tC8I!Osvb;lS_JmwSc38i*dt$}V(T|b zplO!;DCI>2h%o8@d^j7=d~S@~mNy?a5M8{QPg6QB0u1{`y4 zs5tv`6OV*tc!o2ShJVPz2N=NfZ!ESi>m}BezFFoA+lH|?NpTyteEN(d@3#YqvXW6K-eYp2H`Tu#0pj&p%G%- zH%7aE#xBj6(WMxtXfo8QDH<{klk%H@=?qJl++S9Thd&wQ3t8ECPnRBIy%#-+>V_-U zfVafRQ418U#y(CdOFDOZquhaegvX+L_lZ)``zUj*bpeOGuWQ4*n)<8Ogj#0dzdoRD z?T!<}N_Ys0s8 zi6*=DT+H;lt{D#7?|DejLoFdvVoV5jhN~~^tStEDu;>@DCr|DJeT7e3U|;5@#67G4 zb7y4PZesvLVPx(v!Wy1udHxt@aqeqUwVqM>;K7~=J3f;(D``45>Tlu>x}Ikn0< zYTXQ14e516iIchzM91|U2Y4>L%YGua@;dA)*3dLSk5rEb~Mm%Ss*mxwx$hHLx_9;S`e>QZ_rP%nbzQiR7{xs!dJ)7OI2DVq*Bq9N|!`)zQ49wgY_lN2v>Tp%FqOu zO^@z9tb>_LUHI}a1N7h@rS2?v_Oyq^stw0-y7FD=UM$+9#t6kRKg>pdf0Uk{9{Gf$ z#30BGccl{GitBQ9{A|h~p2=ptZAJB|-beo;xF~=}v%a*8gj7@dSVF+w0Npq> zn_tMqJ?`$g?Dno~cHIZ**vmJCklWU(UcNM>EQ4bmYIJ3b7$c9Wv)2Yq@~>;?pL4jX z*};5MOM8F``8kOd5D>%?C!_|DPU7$@_HoM#QZ49P?}Wy?sVT5+ToUyO@onw-#SHI1 zb1T3TM^`<7k&@q+T=*&8$t518#=V#U0yCIZn8e8?-_SaikfrLdHE$B<(^t>oaJZRQ zM8XNxF`(@HlFuEqrPrLB!{?dD-5i{n3IqBkF9QXy z*L=C(hJ2Y!COQ0c1Uxh@%MZ47=Pl2EY7+XFA1}NdQP5-?Z0EvRJvq^77@KF-!qV7C ziZqAYJNwxQ*dB>BJ-X_&Z=YbnOzGL#U@+^zCSkJ+W4jPr2{BXFZQP*|ajP_mEZVk^ zZWc4FYZGeYAP$JoPXQjeEdkclE9h;G;`E8^U--ON)mLs$b5&5US$LF$gaj}70_~0r zXKs5H7IEGKv#SSTtH=LIwf|Heceht!%aG;v?bw6_+UDQjt{`n*&<6>ixBR5afYy3K*_RcncWVlGntW9Py?f1UI65&+S3Q!{MkMcmMo4NbOZFp$;D%y_)ZR zq%>5Y=iF-oJbU(xRlC80mN|vd1sTWYvZr2ClQs!c#QIB5>2UriqA^C9A(-gPvuvrD zpG#t>j>=ENT2HCIr=)>*yHmJr#hFh+S6&^t}dgeO$)wh#0u3{N0BSh4V@0!KIna9O}u( z*us_1n6fJ~tZUqNTXV4^y5?;>?z9Q_Q9H=$tE*?+uWwGfHY8vv_2CLzsM14+*P}z< zH<4|K!D0=C5Q<8{DwdSJHY{18 z>fGYeb|h{F;AtdD5E?}{ zU)GNdQOgUIyTSH5*Vb-OcNQi{!*9E)u<4w`YzriNzqxfATw85s+=rX5 zq+88Zc~;i*u%^|gmZz*^uRgf9_E6d(WRkV-E-UlSDUixhWi)I6k5*!9SC)k5C>e#a zyezUSIbvQhu>4xaH-AYfX;d=^QyH&sWH*x;575Q!In=kEeLj+Ma%8eU`<81wOd>Im zac6}=`T$yb@J@)c_;-VXte0waL*Nd0tq8<(eskATOg_@E5m{F!4RnQC`7tXNk=1g< zJdoYFJKy_lzJ;kq(;FLcj8q|a!`80Q?ScdD-fg^Y!9VN(C(T_bRNOG9+D2wZl6b{rg>FIUmR@X7yz!~&jMQw#6QOixcITT1EvBF-khx+%?5z5EAANlD?lx&`gh;rN<%PPM=KOK(F!iGxItjH;wG05FS^}<9uW1e<{eMCfZpb0x_CP9FaP3Ji(ICF-L&6 zuZ9RLWsAm6xJ|HWKn%4Dmo~h1;DIANrX2J_Bx#6>zJG29*gY2LuTmBAM13Fr(HK7c z;S{~Zy&O+bC%HIWB<r@_ZgTFdhi9$#b$EdkXS9rO|PWz@Fp8&rAw1ZlM*2XT>^ zD3-L%?%gRQz?2KztVvwN8H0vG!8O!Rlt|@}^WvHkb$4S65fbm{8Yhl>pKTNl zD^(Z19!%Vcr$x#w7%#WQqplzQgC+V7wXlW;og$Txw)Rq$e|Co;sj?Cjb)}y84x4M% z9Yn-~AaVlS^NC=vQD(69=!_ZgmD+sSJ?0n4`JtJ1gIOpl=hA2rknqi0s-CDuzWoW7 zW=lK)!%(}jeGAyl;GYBPSYT&EVsA6#b?1j-gyf!N(|Phw#PxL1!#=Q z>^)laBL~N_pK4(pvSnnMW~nD*D<57l(L_}~R=-C5G5wr08a=M!jA0eyMwKjA2nLubrqKt`oPUmA;aA(VHp$adjMMtpK4$EK4t47a3wU3Ep`4= z_tI~{*umAXKy;~kQ1paoKKaf_Cnzt+U3q?Y$A_^_dBpLXkKDZ|Xs=~M#r`FuSF?i0 zC)%NU^@@SZp>f#$C4@oo^vM!Sh6}6PM5dXx1 ziIkFW{JCK?Qm>+x(Q6RBD1t+9u65mdHteIL)}TosEWSmY19Get-EhGX6)SCDNPu^)JDdAj_{~V97_QdbZ(9 zhWAWo_Ir0P=knEmeAlt?XD6D+N(^Ex4%~sjz3)=0nf0IPluu~#gGvO+`0RwJCKb$DK4FgAz21!+xsZm#!Kvk8|1890(J zM@s}Bsv(z-r#3c?>+tH1xrN4&D!fp!Td8;+k?YmT8h$aaLSAPU12JaS2K%z4K03s5 z?)qf*Y8}WrTA=}R!ha~kYOpns-Iv`1p=GbL;3aAZwSx!^qeCqrglscQBM5W)o?+<5 z+YeK-X*Myr-sUOfJ`i=zD5#$#Hh$e=Sg3)T(KBciwc7_3GQADtLBZIXK_}kqAXCwB z^S=AC8)Ci(!QWU%AZZ8v4?=(7 zmzDaL>WD!LL9B|}gC=DJN*KUSzjFg~0~_*FDX4r_uz!{JF%WAN9$`3negQLC2#w7u zF~|?S3QUGfnu>aMtn33<4e?{aCkW?PmlFpKL`^sqUe@gKYqIw+l`oHAYvcJ>4!q9N zG@vD?;g76x=BI$mO4R`Bto2zySGNVIV0J(KJ*Ui(P$QunaZYrNolaLn1S@TQb?3^uef)khefwhvSn|u!i+^X9?XsJv2TN zs=7R|RL6^gj0I8DNrM&~?pnBRiDV>Hu9I?Y|9W}j4l{K7;&dkU%8eV;E7`g5*ch=s z&5lDSs#zx<2~u~mDW}!&&hT~Gj3l8zTfZ=W4QY_t?Vxo#YJdqRw=W7?e*OHZK8x*U zCr~*)sui217`>=k6ebW{NW1#;{OtG!&fxF^%tB=kX780*%G*oN_Is?l1Y1wAHOMA- zM5_3`Z=Ld9US24jJ$q2zN~OVa{yyX1HVMP7b{wA&ZH)J_w&r@j9s!!K>-ly+i?cv3cpQ~3Ou4&ji8m<2 z8K7xl`z$Tl@t7pcwhtgpcLjUK_v;cRnj-RP7V{Z&@XNo?X{j!gl3mG0(k#A=&U=+@b;$GGaZ~oP5ee>kH zTAXS_&DHF=^U-$=VLmvDYI-&Y4$*7u5TNNxw#)p%W~Aj&MoK0viVJ@wz{$-6g0Yk~wHDsxz( z5vwcwx3D^fe+YxY=g%7;g*4C_LALOqi;6#X#z}9=1d_0oqBEGtT^j z2I)SuaZ^RQ zE5+Tbl#oHG+87=dcSfS`(Da;af6PA%MtljOd#Tp}f82=Y1yr6|F-0;z`K4uKpyVDW03IF)R=-Lg;PrZy z+zoOiIln*WV)efU`X-As3*=|{vtj0CJ7qgwtJ?M>3R4@XNhtf(m-JB&N-yUq_>ffTkOJvlGP_jDO)gSx zh|>vi-JLRT>XcBcFBGvkl$fM7q_}guZkz8ydqV^91YQcV#RW+f2t(C3({*!}XPz{~ z9*4A~^zXK;bn(ImXz%-LI>D*GDG{Zjtw=gz0w{s>@AO0~B)*rEjrJefnaN(7b*D$| zY{%;!HOU@q&HZ~21~B$Kh@J(oZFw~GWY2yf|~b62^3eg z!FL^bc^-h8+HK?BrG!xM&8;dRtfvR#in9_wy`If+JF{=TQ%C7LI_4$*f*z_c`IhIL z{$>JuobulA6itsGm)r10QYF(IT1oUoO5SB-e0C$ZKIL~QP}Tw%gzE=I2Br~8BdWf(kH zpSzHQ)XaY8$I#K51FuS>x*SmwfjX#T$5b-hWpP&LeY(%_G-T1P9Mm{z?aKml!2 z-DPRKQk+QfODn}prJat(9& zryh1eP=NAKG2N`FX4a4K69;k6;I2oqT`LsB>ol8RNs;P9+&U0tMceKu7H+8S}yU%xqpgK zNPh#d{V#t0NtkG1<+|Y1hp(}bblW6xYAREuA6!bfx8=Lw+%=-bC*_|l*wa%MD69Rf zckfczP|_)H7etjKCfs}kh2rvhBAxJn1bIaw)%3pwyKG)xcDmWW;FmAVcn85l4YB{3 z3z$LdO;sWA1a}xMqgBfJhxa9V>J0+zjvZ54BuC^mIe+^XLbQ8B7e_} zfk#{30gko$Ky^YjK#(i;O}l~=?r{57Z7%p{fry}O||D3&MOG6ta- ztDN;8oNNLZ4cV3IKfX_x0EeG!XY_Q+NAnkZ&tg_nE*V|WdP^`pv;MpWKN&YTGU5Z% z>#9o>TwDx-y7$MslBYSS76;XNigeq5%-2&OfdA0_BO*at@4uYuNX&Ww7M_7J@bA{* zw!>91fXD0g$lRxYCsW@*74%kB0V+xiiY?~x=M5Tt7LMh;Wx=*TyyP6To(U3hFzES} zut`ap1kljX;P5wszdN&WtTUQ)5-O)?T!m}d(p4)?XN&)z1199{fhOl}e*Uk9?S5}P z?Q z>!;RQFV6~@W6Eaz|I8t|B?gQEtDq94-<|S`1TG>@&!1kvvR??vQv$jS`n^q0Et+xq z4~GEpRBu28_ z?bv~e1#6|z9DR|=uP;u>a~?PqV92K;cl!XHg;UcX<=2uG1lML32^{DXD9pOzGVVWV zg1wp*hz@J0jXQ^(Q|@l#P5<;qsSQ{IkslC%rAHo6PAQ6jQ%^n22B+aM*)m&l(C^~AwM`rQ8MaS}**TR}RR<>5 z`m16HdFH1?EN_Zm(oEUOMxUK%BKAm#5S<06LC%E&g1TB-TJ{xfO6!MueJ`W9(ZZKh zZS*_}?{C>L-YGA5<|yyBD?>7|RgJnk0s8vNs2UlXXt-@#K*xs=S^J_hnqIyl_E)v%;UpwiQ@Qv~ADU_eAV865US|^pmLlaA9omF7?YD7kPAU2~rcsRXNjyc{dGycBkB>k*B`LD+Wn3-^I(_@!`nA4@bU2h7(MPeYa~LKfmbakuoKYkVzjtP#IP6RD-{qKGhgH|y zSD=xb0G^r2g~;#T0P9CO-WyK_`yXv+d3 z(awHsw|LcvZyt0dGu2uAc6@|$f}Vb(U-)U}MvScAcTK+oq=!E&cpZm3Y|^b+rI>Hd z;VFpw3gY6YdG?8_5`&S#9|>eLvEtaZKjFitHtK$SE)QIWzWZA~e;slwyfYcT;81y2nhohuqyMuWvb@Jsc(U7COt@D}f_0`(8Hl2$ng6 z=i=p3A_sD0QTKN`VOGb3jFth>x@67WKee`H5aEwRqme>{4lEN7;1@bQL{Gy5&lw3NhK^=fC|DGe0&(7YYejgJ?&F$;Ou0DEfwA}E%Nzp;-tx=98U&7RNZl_Zc zHLiaLYDA|C8~@TAOt|$nQ+#qZ7fVjwha zJE*VFm%VC@&Yvh!=pg%GLpJ}eNYX*_tL=fkVFOV0BNS*cIdDv4F+5F=3KbO%7}UL%RAN~mv){+cal$STsGYFDu;LGhex>P^bRc}W}am;@34C& zRmwC^@ZG}#`PP7iJ5M<*MHLCdsfInM9c1e<>+mjt;kQoYI7Yx)Mfq9!*Usxm6}!DO z{fxweGoEs{7rV9nij?e)!I;PuH8Ol?b!(ADZSR+~o9l+LbSsTb8aUWfeY zsr+)I^QNVj2CXBt(l6c^Ja_=*?J~C(qE}IM}DTS{kAo6Et z%ux4#yV1X1Jq=j@Ho~kTlWuk(zZFy~RqnEtTa)Mu7aKudYFyK8$?yp5R{6WIQL@62T4MoDqK{m}A~&e`is@HYw_^I@#n6PJB~IxTs>B zRc{!hhAfED=2*K((F@qCwoe*NO*I^L+#JM7-jO}ZS{h#AoH(NK-GC>eiVCpPU%2x? zZ1Thk`tiyJE(ccEZJc1<4(v_yKr8etXn{Inhf%?H%bDpu7=Y|NG6hDKV$v@dFjqx+ zgk`kjrn*ndhK4@mvrAdzg;n^r2@ Date: Wed, 24 Jan 2024 21:09:45 -0500 Subject: [PATCH 58/81] Update README.md --- README.md | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 612733b..03a9ddd 100644 --- a/README.md +++ b/README.md @@ -1022,9 +1022,12 @@ If Clone Merge is bypassed then the input is passed unchanged to the output. ![Poly Sample & Hold Analog Shift Register module image](doc/PolySHASR.png) Ten row polyphonic sample and hold combined with a shift register. -Each row has its own polyphonic Trigger and Data inputs, and a polyphonic Sample & Hold output. In total that is 10 independent polyphonic sample and hold circuits. However, the inputs are normaled in a way that enables consecutive rows to function as a shift register. +Each row has its own polyphonic Trigger and Data inputs, and a polyphonic Hold output. In total that is 10 independent polyphonic sample and hold circuits. However, the inputs are normaled in a way that enables consecutive rows to function as a shift register. -If no input is provided, then random values are sampled. +If no input is provided, then random values are sampled from an internal random number generator. + +### TRIG (Trigger) button +Manually triggers the first row only ### OVER (Oversample) button This color coded button controls how much oversampling is applied to minimize aliasing when triggering the sample & hold at audio rates. Oversampling is CPU expensive, so should only be applied when needed. @@ -1044,6 +1047,48 @@ This color coded button controls the output range of the internal random number - **+/- 5 V (orange)** - **+/- 10 V (purple)** +### CLR (Clear) button +Resets all all polyphonic channels of all 10 Hold outputs to 0 V. + +### Sample & Hold row + +Each row functions as an independent sample and hold circuit. + +#### TRIG (Trigger) input +The rising edge of a trigger input causes the row to sample and hold the current value at the Data input. The trigger is a Schmitt trigger that goes high above 2V and goes low below 0.1 V. + +The Trig input is polyphonic - each polyphonic channel can be triggered independently. + +For the first row only the sample can be triggered by the Trig input or the Trig button. + +All TRIG inputs from the 2nd row onward are normaled to the TRIG input from the row above. So a trigger at row one can trigger all rows if none of the other rows are patched. + +#### DATA input +This is the source that is sampled. + +If the Trig input for the row is patched, then the Data input is normaled to the internal random number generator. Every row gets its own random value. Also each polyphonic channel gets its own random value. + +If the Trig input is not patched, then the Data input is normaled to the Hold output from the row above. This is what enables the module to function as a shift register. + +#### HOLD output +This output holds the last value that was sampled. Normally the value remains constant until the next trigger. However, when oversampling is enabled the value will wobble a bit for a few samples before stabilizing. + +The number of polyphonic channels that are sampled and held at the output depends on the number of polyphonic channels found at the row inputs. The output polyphony count is the maximum count found between the Trig and Data inputs. + +#### Polyphony behavior +If the Trig input is monophonic, and the Data input is polyphonic, then all Data channels will be sampled simultaneously upon receipt of a trigger. + +If the Trig input is polyphonic, and the Data input is monophonic, then each channel will sample the input when the channel receives a trigger. If normaled to the random number generator, then each channel will receive its own random value. + +If both Trig and Input are polyphonic with the same number of channels, then each channel trigger will sample the appropriate data channel. + +If both are polyphonic but the Data has fewer channels, then the missing data channels will be treated as constant 0 V. + +If both are polyphonic but the Trig input has fewer channels, then the extra channels at the Data will never be sampled. + +### Save Held Values context menu option +By default all held values are stored with the patch and restored upon patch load. This feature can be disabled via the "Save held values" module context menu option. + ### Standard Venom Context Menus [Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From 66ee82c405c0735f8580315276e495155ec1343e Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 25 Jan 2024 18:50:10 -0500 Subject: [PATCH 59/81] bug fix --- src/PolySHASR.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index ecebba8..5d3dd6a 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -101,13 +101,10 @@ struct PolySHASR : VenomModule { } } trigBtnState = params[TRIG_PARAM].getValue(); - } else if (c) { + } else { trigCnt[c] = trigCnt[c-1]; for (int p=0, pi=0; p=0; c--){ @@ -120,7 +117,7 @@ struct PolySHASR : VenomModule { if (oversample>1) data = inUpSample[c][pi].process(o ? float_4::zero() : data * oversample); } else if (inputs[TRIG_INPUT+c].isConnected()){ - float_4 rnd{random::uniform(),random::uniform(),random::uniform(),random::uniform()}; + float_4 rnd{tempTrig[0]?random::uniform():0.f, tempTrig[1]?random::uniform():0.f, tempTrig[2]?random::uniform():0.f, tempTrig[3]?random::uniform():0.f,}; data = rnd * scale + offset; } else { data = c==0 ? float_4::zero() : out[c-1][pi]; @@ -131,7 +128,7 @@ struct PolySHASR : VenomModule { } } for (int c=0; c Date: Sat, 27 Jan 2024 17:28:04 -0500 Subject: [PATCH 60/81] Update PolySHASR.cpp --- src/PolySHASR.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index 5d3dd6a..6ab86bd 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -78,6 +78,9 @@ struct PolySHASR : VenomModule { } } clearState = params[CLEAR_PARAM].getValue(); + float_4 channelOne{1.f,0.f,0.f,0.f}; + bool btnTrig = !trigBtnState && params[TRIG_PARAM].getValue(); + trigBtnState = params[TRIG_PARAM].getValue(); for (int o=0; o2.f, 1.f, simd::ifelse(trigIn<=0.1f, 0.f, trigState[c][pi])); trig[c][pi] = simd::ifelse(oldState>float_4::zero(), 0.f, simd::ifelse(trigState[c][pi]>float_4::zero(), 1.f, 0.f)); } - if (!c && !trigBtnState && params[TRIG_PARAM].getValue()){ + if (btnTrig){ for (int p=0; p=0; c--){ if (!o) outCnt[c] = std::max(trigCnt[c], inputs[DATA_INPUT+c].isConnected() ? inputs[DATA_INPUT+c].getChannels() : (inputs[TRIG_INPUT+c].isConnected() || !c ? 1 : outCnt[c-1])); for (int p=0, pi=0; p= pi ? trig[c][pi] : float_4::zero()); + float_4 tempTrig = outCnt[c] == 1 ? simd::ifelse(channelOne,trig[c][0],float_4::zero()) : trigCnt[c] == 1 ? trig[c][0] : (trigCnt[c]/4 >= pi ? trig[c][pi] : float_4::zero()); float_4 data{}; if (inputs[DATA_INPUT+c].isConnected()){ data = inputs[DATA_INPUT+c].getPolyVoltageSimd(p); From 8af06c8f5dcd3a77dede6285d2dd6bd0e728c00f Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 30 Jan 2024 10:03:24 -0500 Subject: [PATCH 61/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 03a9ddd..35e4331 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ The factory default theme is ivory, and the factory default dark theme is coal. [Return to Table Of Contents](#venom) ## Custom Names -Nearly every port (input or output), and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. Custom only appear in context menus and hover text - they do not change the faceplate graphics. +Nearly every port (input or output), and every parameter (module knob, switch, or button etc.) within the Venom plugin has its own context menu option to set a custom name. Custom names only appear in context menus and hover text - they do not change the faceplate graphics. If a parameter or port is given a custom name, then an additional option is added to restore the factory default name. From 5fe7cf3722c37a61c1364cfea97d3f09c237f0c1 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 31 Jan 2024 07:36:27 -0500 Subject: [PATCH 62/81] Fix button/output name link and trigger button light --- src/Push5.cpp | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/Push5.cpp b/src/Push5.cpp index 45e0b61..0218a4a 100644 --- a/src/Push5.cpp +++ b/src/Push5.cpp @@ -27,7 +27,7 @@ struct Push5 : VenomModule { int onVal; int offVal; int poly; - bool lightOn; + float lightOn; bool buttonOn; dsp::PulseGenerator trigGenerator; ButtonExtension(){ @@ -37,7 +37,7 @@ struct Push5 : VenomModule { onVal=0; offVal=3; poly=1; - lightOn=false; + lightOn=0.f; buttonOn=false; } }; @@ -136,6 +136,9 @@ struct Push5 : VenomModule { std::string nm = "Button " + std::to_string(i+1); configParam(BUTTON_PARAM+i, 0.f, 1.f, 0.f, nm); configOutput(OUTPUT+i, nm); + paramExtensions[i].inputLink = false; + paramExtensions[i].nameLink = i; + outputExtensions[i].nameLink = i; } } @@ -147,11 +150,11 @@ struct Push5 : VenomModule { float out = 0.f; switch (e->mode){ case 0: //trigger - if (val>0 && !e->lightOn && e->trigGenerator.remaining<=0.f){ + if (val>0 && !e->buttonOn && !e->lightOn && e->trigGenerator.remaining<=0.f){ e->trigGenerator.trigger(); } - e->lightOn = val; out = e->trigGenerator.process(args.sampleTime) ? buttonVals[e->onVal] : buttonVals[e->offVal]; + e->lightOn = math::clamp(out>0.f ? 1.f : e->lightOn - args.sampleTime/0.1f); break; case 1: //gate e->lightOn = val; @@ -389,9 +392,9 @@ struct Push5Widget : VenomWidget { if(mod) { for (int i=0, l=0; i<5; i++, l+=3){ Push5::ButtonExtension *e = mod->buttonExtension+i; - mod->lights[Push5::BUTTON_LIGHT+l+0].setBrightness(e->lightOn ? mod->buttonColors[e->onColor][0] : mod->buttonColors[e->offColor][0]); - mod->lights[Push5::BUTTON_LIGHT+l+1].setBrightness(e->lightOn ? mod->buttonColors[e->onColor][1] : mod->buttonColors[e->offColor][1]); - mod->lights[Push5::BUTTON_LIGHT+l+2].setBrightness(e->lightOn ? mod->buttonColors[e->onColor][2] : mod->buttonColors[e->offColor][2]); + mod->lights[Push5::BUTTON_LIGHT+l+0].setBrightness(e->lightOn*mod->buttonColors[e->onColor][0] + (1-e->lightOn)*mod->buttonColors[e->offColor][0]); + mod->lights[Push5::BUTTON_LIGHT+l+1].setBrightness(e->lightOn*mod->buttonColors[e->onColor][1] + (1-e->lightOn)*mod->buttonColors[e->offColor][1]); + mod->lights[Push5::BUTTON_LIGHT+l+2].setBrightness(e->lightOn*mod->buttonColors[e->onColor][2] + (1-e->lightOn)*mod->buttonColors[e->offColor][2]); } } } From d33626015e480f97106fac5f76769925a1a65cac Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 31 Jan 2024 08:28:58 -0500 Subject: [PATCH 63/81] update copyright --- src/BernoulliSwitch.cpp | 2 +- src/BernoulliSwitchExpander.cpp | 2 +- src/CloneMerge.cpp | 2 +- src/Filter.hpp | 2 +- src/HQ.cpp | 2 +- src/Knob5.cpp | 2 +- src/LinearBeats.cpp | 2 +- src/LinearBeatsExpander.cpp | 2 +- src/Logic.cpp | 2 +- src/Mix4.cpp | 2 +- src/Mix4Stereo.cpp | 2 +- src/MixFade.cpp | 2 +- src/MixFade2.cpp | 2 +- src/MixMute.cpp | 2 +- src/MixOffset.cpp | 2 +- src/MixPan.cpp | 2 +- src/MixSend.cpp | 2 +- src/MixSolo.cpp | 2 +- src/NORS-IQ.cpp | 2 +- src/NORSIQChord2Scale.cpp | 2 +- src/PolyClone.cpp | 2 +- src/PolyUnison.cpp | 2 +- src/Push5.cpp | 2 +- src/Recurse.cpp | 2 +- src/RecurseStereo.cpp | 2 +- src/Reformation.cpp | 2 +- src/RhythmExplorer.cpp | 2 +- src/ShapedVCA.cpp | 2 +- src/VCAMix4.cpp | 2 +- src/VCAMix4Stereo.cpp | 2 +- src/VenomBlank.cpp | 2 +- src/WinComp.cpp | 2 +- src/plugin.cpp | 2 +- src/plugin.hpp | 2 +- 34 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/BernoulliSwitch.cpp b/src/BernoulliSwitch.cpp index d5edefd..4f23268 100644 --- a/src/BernoulliSwitch.cpp +++ b/src/BernoulliSwitch.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/BernoulliSwitchExpander.cpp b/src/BernoulliSwitchExpander.cpp index 76870a3..00eb2e7 100644 --- a/src/BernoulliSwitchExpander.cpp +++ b/src/BernoulliSwitchExpander.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/CloneMerge.cpp b/src/CloneMerge.cpp index 6e67e93..220f7cc 100644 --- a/src/CloneMerge.cpp +++ b/src/CloneMerge.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Filter.hpp b/src/Filter.hpp index 971373b..977f34b 100644 --- a/src/Filter.hpp +++ b/src/Filter.hpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #pragma once diff --git a/src/HQ.cpp b/src/HQ.cpp index 004454a..9e31ddd 100644 --- a/src/HQ.cpp +++ b/src/HQ.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Knob5.cpp b/src/Knob5.cpp index b45f941..6a0531e 100644 --- a/src/Knob5.cpp +++ b/src/Knob5.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/LinearBeats.cpp b/src/LinearBeats.cpp index 728b64f..2ab21c5 100644 --- a/src/LinearBeats.cpp +++ b/src/LinearBeats.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/LinearBeatsExpander.cpp b/src/LinearBeatsExpander.cpp index 5f8a7b6..e7f9a1c 100644 --- a/src/LinearBeatsExpander.cpp +++ b/src/LinearBeatsExpander.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Logic.cpp b/src/Logic.cpp index 9774e1a..aac3f8f 100644 --- a/src/Logic.cpp +++ b/src/Logic.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "Filter.hpp" diff --git a/src/Mix4.cpp b/src/Mix4.cpp index 5eea0f7..265d9b0 100644 --- a/src/Mix4.cpp +++ b/src/Mix4.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Mix4Stereo.cpp b/src/Mix4Stereo.cpp index 7da9486..e9a7dbc 100644 --- a/src/Mix4Stereo.cpp +++ b/src/Mix4Stereo.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixFade.cpp b/src/MixFade.cpp index 5892e8b..03ffafe 100644 --- a/src/MixFade.cpp +++ b/src/MixFade.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixFade2.cpp b/src/MixFade2.cpp index eca7a28..6de9fe4 100644 --- a/src/MixFade2.cpp +++ b/src/MixFade2.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixMute.cpp b/src/MixMute.cpp index 721baa6..745b858 100644 --- a/src/MixMute.cpp +++ b/src/MixMute.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixOffset.cpp b/src/MixOffset.cpp index 3b13c7d..b10ace2 100644 --- a/src/MixOffset.cpp +++ b/src/MixOffset.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixPan.cpp b/src/MixPan.cpp index bf7c430..030b19a 100644 --- a/src/MixPan.cpp +++ b/src/MixPan.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixSend.cpp b/src/MixSend.cpp index 9eb7fa6..efd5404 100644 --- a/src/MixSend.cpp +++ b/src/MixSend.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/MixSolo.cpp b/src/MixSolo.cpp index 287a281..39b496a 100644 --- a/src/MixSolo.cpp +++ b/src/MixSolo.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/NORS-IQ.cpp b/src/NORS-IQ.cpp index f023d4d..552aa90 100644 --- a/src/NORS-IQ.cpp +++ b/src/NORS-IQ.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/NORSIQChord2Scale.cpp b/src/NORSIQChord2Scale.cpp index 70b8bce..4703865 100644 --- a/src/NORSIQChord2Scale.cpp +++ b/src/NORSIQChord2Scale.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/PolyClone.cpp b/src/PolyClone.cpp index c8c2332..728130a 100644 --- a/src/PolyClone.cpp +++ b/src/PolyClone.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/PolyUnison.cpp b/src/PolyUnison.cpp index d767cfc..dd8240d 100644 --- a/src/PolyUnison.cpp +++ b/src/PolyUnison.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Push5.cpp b/src/Push5.cpp index 0218a4a..bb1dbdd 100644 --- a/src/Push5.cpp +++ b/src/Push5.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Recurse.cpp b/src/Recurse.cpp index 4e22529..641f86b 100644 --- a/src/Recurse.cpp +++ b/src/Recurse.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/RecurseStereo.cpp b/src/RecurseStereo.cpp index b10a5c8..0d20ae2 100644 --- a/src/RecurseStereo.cpp +++ b/src/RecurseStereo.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/Reformation.cpp b/src/Reformation.cpp index 997466d..e19e5be 100644 --- a/src/Reformation.cpp +++ b/src/Reformation.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/RhythmExplorer.cpp b/src/RhythmExplorer.cpp index 8ee3efb..f6be7de 100644 --- a/src/RhythmExplorer.cpp +++ b/src/RhythmExplorer.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 // Thanks to Andrew Hanson for the initial prototype code diff --git a/src/ShapedVCA.cpp b/src/ShapedVCA.cpp index 3db2059..5376ae5 100644 --- a/src/ShapedVCA.cpp +++ b/src/ShapedVCA.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/VCAMix4.cpp b/src/VCAMix4.cpp index 0f86c3e..3c59756 100644 --- a/src/VCAMix4.cpp +++ b/src/VCAMix4.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/VCAMix4Stereo.cpp b/src/VCAMix4Stereo.cpp index f45f526..ffead11 100644 --- a/src/VCAMix4Stereo.cpp +++ b/src/VCAMix4Stereo.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/VenomBlank.cpp b/src/VenomBlank.cpp index c012abf..afe4aa5 100644 --- a/src/VenomBlank.cpp +++ b/src/VenomBlank.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/WinComp.cpp b/src/WinComp.cpp index 6cb1dfa..6cb7563 100644 --- a/src/WinComp.cpp +++ b/src/WinComp.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "Filter.hpp" diff --git a/src/plugin.cpp b/src/plugin.cpp index 3647e87..7e4692b 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #include "plugin.hpp" diff --git a/src/plugin.hpp b/src/plugin.hpp index aae8dd7..5a46821 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -1,4 +1,4 @@ -// Venom Modules (c) 2023 Dave Benham +// Venom Modules (c) 2023, 2024 Dave Benham // Licensed under GNU GPLv3 #pragma once From 695c728e8bd14c7540c80553b368938fb736c5e1 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Sat, 3 Feb 2024 16:32:15 -0500 Subject: [PATCH 64/81] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 35e4331..d4181d3 100644 --- a/README.md +++ b/README.md @@ -1020,7 +1020,7 @@ If Clone Merge is bypassed then the input is passed unchanged to the output. ## POLY SAMPLE & HOLD ANALOG SHIFT REGISTER ![Poly Sample & Hold Analog Shift Register module image](doc/PolySHASR.png) -Ten row polyphonic sample and hold combined with a shift register. +Ten row polyphonic sample and hold combined with a shift register, with oversampling options. Each row has its own polyphonic Trigger and Data inputs, and a polyphonic Hold output. In total that is 10 independent polyphonic sample and hold circuits. However, the inputs are normaled in a way that enables consecutive rows to function as a shift register. @@ -1075,6 +1075,9 @@ This output holds the last value that was sampled. Normally the value remains co The number of polyphonic channels that are sampled and held at the output depends on the number of polyphonic channels found at the row inputs. The output polyphony count is the maximum count found between the Trig and Data inputs. +#### Performance optimization +To minimize CPU usage you should batch from the bottom and work your way up. For example, if you only need a 4 step shift register, then patch the trigger and data signals to the 7th row. If you patch the top row, then all 10 rows are triggered, and the module needs to do more work and consumes more CPU. The CPU usage can be dramatically different when polyphony and/or oversampling is involved. + #### Polyphony behavior If the Trig input is monophonic, and the Data input is polyphonic, then all Data channels will be sampled simultaneously upon receipt of a trigger. From 7dfb7e241d71fd6bfa11d8a15df524f7fe54bb99 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 5 Feb 2024 23:21:27 -0500 Subject: [PATCH 65/81] Add WidgetMenuExtender module (complete!) --- README.md | 12 +- changelog.md | 1 + doc/WidgetMenuExtender.png | Bin 0 -> 5553 bytes plugin.json | 9 + res/Coal/WidgetMenuExtender_Coal.svg | 285 +++++++++++++++ res/Danger/WidgetMenuExtender_Danger.svg | 285 +++++++++++++++ res/Earth/WidgetMenuExtender_Earth.svg | 285 +++++++++++++++ res/Ivory/WidgetMenuExtender_Ivory.svg | 285 +++++++++++++++ src/WidgetMenuExtender.cpp | 444 +++++++++++++++++++++++ src/plugin.cpp | 1 + src/plugin.hpp | 4 + 11 files changed, 1608 insertions(+), 3 deletions(-) create mode 100644 doc/WidgetMenuExtender.png create mode 100644 res/Coal/WidgetMenuExtender_Coal.svg create mode 100644 res/Danger/WidgetMenuExtender_Danger.svg create mode 100644 res/Earth/WidgetMenuExtender_Earth.svg create mode 100644 res/Ivory/WidgetMenuExtender_Ivory.svg create mode 100644 src/WidgetMenuExtender.cpp diff --git a/README.md b/README.md index d4181d3..4671a98 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,9 @@ Venom modules version 2.6.0 for VCV Rack 2 are copyright 2023, 2024 Dave Benham |----|----|----|----| |![RECURSE module image](doc/Recurse.PNG)|![RECURSE STEREO module image](doc/RecurseStereo.PNG)|![Reformation module image](doc/Reformation.PNG)|![Rhthm Explorer module image](doc/RhythmExplorer.PNG)| -|[SHAPED
VCA](#shaped-vca)|[VCA MIX 4](#vca-mix-4)|[VCA MIX 4 STEREO](#vca-mix-4-stereo)|[VENOM
BLANK](#venom-blank)|[WINCOMP](#wincomp)| -|----|----|----|----|----| -|![SHAPED VCA module image](doc/ShapedVCA.png)|![VCA MIX 4 module image](doc/VCAMix4.png)|![VCA Mix 4 Stereo module image](doc/VCAMix4Stereo.png)|![VENOM BLANK module image](doc/VenomBlank.PNG)|![WINCOMP module image](doc/WinComp.PNG)| +|[SHAPED
VCA](#shaped-vca)|[VCA MIX 4](#vca-mix-4)|[VCA MIX 4 STEREO](#vca-mix-4-stereo)|[VENOM
BLANK](#venom-blank)|[WIDGET
MENU
EXTENDER](#widget-menu-extender)|[WINCOMP](#wincomp)| +|----|----|----|----|----|----| +|![SHAPED VCA module image](doc/ShapedVCA.png)|![VCA MIX 4 module image](doc/VCAMix4.png)|![VCA Mix 4 Stereo module image](doc/VCAMix4Stereo.png)|![VENOM BLANK module image](doc/VenomBlank.PNG)|![WIDGET MENU EXTENDER module imiage](doc/WidgetMenuExtender.png)|![WINCOMP module image](doc/WinComp.PNG)| ## Color Coded Ports All polyphonic ports use brass cores, while monophonic ports use steel cores. @@ -1831,6 +1831,12 @@ A 3hp blank with standard Venom themes. [Return to Table Of Contents](#venom) +## WIDGET MENU EXTENDER +![WIDGET MENU EXTENDER module image](doc/WidgetMenuExtender.png) +Extend context menus to support parameter/port renaming and parameter custom defaults. + +[Return to Table Of Contents](#venom) + ## WINCOMP ![WINCOMP module image](doc/WinComp.PNG) diff --git a/changelog.md b/changelog.md index cc68544..2599a21 100644 --- a/changelog.md +++ b/changelog.md @@ -7,6 +7,7 @@ - Logic - NORSIQ Chord To Scale - Push 5 +- Widget Menu Extender ### Enhancements - Improved discrimination of DC offset removal by lowering cutoff frequency to 2 Hz diff --git a/doc/WidgetMenuExtender.png b/doc/WidgetMenuExtender.png new file mode 100644 index 0000000000000000000000000000000000000000..367d3d10da5e339e0f137d222af3bc85b9fd4609 GIT binary patch literal 5553 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 N_OSh-ii70%{{yaI7JL8z literal 0 HcmV?d00001 diff --git a/plugin.json b/plugin.json index 3c64f84..e6dbe98 100644 --- a/plugin.json +++ b/plugin.json @@ -391,6 +391,15 @@ "Blank" ] }, + { + "slug": "WidgetMenuExtender", + "name": "Widget Menu Extender", + "description": "Extend context menus to support parameter/port renaming and parameter custom defaults", + "manualUrl": "https://github.com/DaveBenham/VenomModules/blob/main/README.md#widget-menu-expander", + "tags": [ + "Blank" + ] + }, { "slug": "WinComp", "name": "WinComp", diff --git a/res/Coal/WidgetMenuExtender_Coal.svg b/res/Coal/WidgetMenuExtender_Coal.svg new file mode 100644 index 0000000..f40e7b3 --- /dev/null +++ b/res/Coal/WidgetMenuExtender_Coal.svg @@ -0,0 +1,285 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Danger/WidgetMenuExtender_Danger.svg b/res/Danger/WidgetMenuExtender_Danger.svg new file mode 100644 index 0000000..53e3128 --- /dev/null +++ b/res/Danger/WidgetMenuExtender_Danger.svg @@ -0,0 +1,285 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Earth/WidgetMenuExtender_Earth.svg b/res/Earth/WidgetMenuExtender_Earth.svg new file mode 100644 index 0000000..97572de --- /dev/null +++ b/res/Earth/WidgetMenuExtender_Earth.svg @@ -0,0 +1,285 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/res/Ivory/WidgetMenuExtender_Ivory.svg b/res/Ivory/WidgetMenuExtender_Ivory.svg new file mode 100644 index 0000000..75c87cc --- /dev/null +++ b/res/Ivory/WidgetMenuExtender_Ivory.svg @@ -0,0 +1,285 @@ + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/WidgetMenuExtender.cpp b/src/WidgetMenuExtender.cpp new file mode 100644 index 0000000..cb3cb5f --- /dev/null +++ b/src/WidgetMenuExtender.cpp @@ -0,0 +1,444 @@ +// Venom Modules (c) 2023, 2024 Dave Benham +// Licensed under GNU GPLv3 + +#include "plugin.hpp" + +#define LIGHT_ON 1.f +#define LIGHT_OFF 0.02f + +struct WidgetMenuExtender : VenomModule { + + enum ParamId { + ENABLE_PARAM, + PARAMS_LEN + }; + enum InputId { +// TEST_INPUT, + INPUTS_LEN + }; + enum OutputId { + OUTPUTS_LEN + }; + enum LightId { + ENABLE_RED_LIGHT, + ENABLE_BLUE_LIGHT, + LIGHTS_LEN + }; + + bool disable = false; + dsp::SchmittTrigger trigIn; + + struct ParamDefault { + int64_t modId; + int id; + float dflt; + float factoryDflt; + + ParamDefault(int64_t pModId=-1, int pId=-1, float pFactoryDflt=0.f, float pDflt=0.f) { + modId = pModId; + id = pId; + factoryDflt = pFactoryDflt; + dflt = pDflt; + } + }; + ParamDefault* currentDefault = NULL; + + typedef std::vector DefaultVector; + + DefaultVector defaults{}; + + struct WidgetRename { + int64_t modId; + int id; + std::string factoryName; + std::string name; + + WidgetRename(int64_t pModId=-1, int pId=-1, std::string pFactoryName="", std::string pName="") { + modId = pModId; + id = pId; + factoryName = pFactoryName; + name = pName; + } + }; + WidgetRename* currentRename = NULL; + + typedef std::vector RenameVector; + + RenameVector paramRenames{}; + RenameVector inputRenames{}; + RenameVector outputRenames{}; + + WidgetMenuExtender() { + venomConfig(PARAMS_LEN, INPUTS_LEN, OUTPUTS_LEN, LIGHTS_LEN); + std::vector mods = APP->engine->getModuleIds(); + for (uint64_t i=0; i(APP->engine->getModule(mods[i])); + if (mod && !mod->disable) { + disable = true; + break; + } + } + if (disable) + configSwitch(ENABLE_PARAM, 0.f, 0.f, 0.f, "Enable", {"Permanently disabled"}); + else + configSwitch(ENABLE_PARAM, 0.f, 1.f, 1.f, "Enable", {"Off", "On"}); +// configInput(TEST_INPUT, "lint test"); + } + + ~WidgetMenuExtender() { + for (uint64_t i=0; iengine->getModule(d->modId); + if (!mod) continue; + ParamQuantity* pq = mod->getParamQuantity(d->id); + if (!pq || pq->defaultValue != d->dflt) continue; + pq->defaultValue = d->factoryDflt; + } + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + ParamQuantity* pq = mod->getParamQuantity(wr->id); + if (!pq || pq->name != wr->name) continue; + pq->name = wr->factoryName; + } + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + PortInfo* pi = mod->getInputInfo(wr->id); + if (!pi || pi->name != wr->name) continue; + pi->name = wr->factoryName; + } + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + PortInfo* pi = mod->getOutputInfo(wr->id); + if (!pi || pi->name != wr->name) continue; + pi->name = wr->factoryName; + } + } + + void process(const ProcessArgs& args) override { + VenomModule::process(args); + } + + void extendForeignParameterMenu(plugin::Model* model, ParamWidget* paramWidget, Menu* menu) { + ParamQuantity* paramQuantity = paramWidget->getParamQuantity(); + currentRename = NULL; + for (uint64_t i=0; imodule->id && paramRenames[i].id==paramWidget->paramId) currentRename = ¶mRenames[i]; + } + if (currentRename && currentRename->name != paramQuantity->name) { + currentRename->name = paramQuantity->name; + currentRename->factoryName = paramQuantity->name; + } + currentDefault = NULL; + for (uint64_t i=0; imodule->id && defaults[i].id==paramWidget->paramId) currentDefault = &defaults[i]; + } + if (currentDefault && currentDefault->dflt != paramQuantity->defaultValue) { + currentDefault->dflt = paramQuantity->defaultValue; + currentDefault->factoryDflt = paramQuantity->defaultValue; + } + menu->addChild(new MenuSeparator); + menu->addChild(createSubmenuItem("Parameter name", "", + [=](Menu *menu){ + MenuTextField *editField = new MenuTextField(); + editField->box.size.x = 250; + editField->setText(paramQuantity->name); + editField->changeHandler = [=](std::string text) { + if (!currentRename) { + WidgetRename* newRename = new WidgetRename(paramWidget->module->id, paramWidget->paramId, paramQuantity->name, text); + paramRenames.push_back(*newRename); + currentRename = ¶mRenames.back(); + delete newRename; + } + else currentRename->name = text; + paramQuantity->name = text; + }; + menu->addChild(editField); + } + )); + if (currentRename && currentRename->name != currentRename->factoryName) { + menu->addChild(createMenuItem("Restore factory name: "+currentRename->factoryName, "", + [=]() { + currentRename->name = currentRename->factoryName; + paramQuantity->name = currentRename->factoryName; + } + )); + } + menu->addChild(createMenuItem("Set default to current value", "", + [=]() { + if (!currentDefault) { + ParamDefault* newDefault = new ParamDefault(paramWidget->module->id, paramWidget->paramId, paramQuantity->defaultValue, paramQuantity->getImmediateValue()); + defaults.push_back(*newDefault); + currentDefault = &defaults.back(); + delete newDefault; + } + else currentDefault->dflt = paramQuantity->getImmediateValue(); + paramQuantity->defaultValue = paramQuantity->getImmediateValue(); + } + )); + if (currentDefault && currentDefault->dflt != currentDefault->factoryDflt){ + menu->addChild(createMenuItem("Restore factory default", "", + [=]() { + currentDefault->dflt = currentDefault->factoryDflt; + paramQuantity->defaultValue = currentDefault->factoryDflt; + } + )); + } + } + + void extendForeignPortMenu(PortWidget* portWidget, Menu* menu) { + PortInfo* portInfo = portWidget->getPortInfo(); + RenameVector* renames = portInfo->type==engine::Port::INPUT ? &inputRenames : &outputRenames; + currentRename = NULL; + for (uint64_t i=0; isize(); i++){ + if ((*renames)[i].modId==portInfo->module->id && (*renames)[i].id==portInfo->portId) currentRename = &(*renames)[i]; + } + if (currentRename && currentRename->name != portInfo->name) { + currentRename->name = portInfo->name; + currentRename->factoryName = portInfo->name; + } + menu->addChild(new MenuSeparator); + menu->addChild(createSubmenuItem("Port name", "", + [=](Menu *menu){ + MenuTextField *editField = new MenuTextField(); + editField->box.size.x = 250; + editField->setText(portInfo->name); + editField->changeHandler = [=](std::string text) { + if (!currentRename) { + WidgetRename* newRename = new WidgetRename(portInfo->module->id, portInfo->portId, portInfo->name, text); + renames->push_back(*newRename); + currentRename = &renames->back(); + delete newRename; + } + else currentRename->name = text; + portInfo->name = text; + }; + menu->addChild(editField); + } + )); + if (currentRename && currentRename->name != currentRename->factoryName) { + menu->addChild(createMenuItem("Restore factory name: "+currentRename->factoryName, "", + [=]() { + currentRename->name = currentRename->factoryName; + portInfo->name = currentRename->factoryName; + } + )); + } + } + + void initialPostDrawnProcess() override { + for (uint64_t i=0; iengine->getModule(d->modId); + if (!mod) continue; + ParamQuantity* pq = mod->getParamQuantity(d->id); + if (pq) pq->defaultValue = d->dflt; + } + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + ParamQuantity* pq = mod->getParamQuantity(wr->id); + if (pq) pq->name = wr->name; + } + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + PortInfo* pi = mod->getInputInfo(wr->id); + if (pi) pi->name = wr->name; + } + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + PortInfo* pi = mod->getOutputInfo(wr->id); + if (pi) pi->name = wr->name; + } + } + + json_t* json_rename(WidgetRename* wr) { + json_t* obj = json_object(); + json_object_set_new(obj, "modId", json_integer(wr->modId)); + json_object_set_new(obj, "id", json_integer(wr->id)); + json_object_set_new(obj, "factoryName", json_string(wr->factoryName.c_str())); + json_object_set_new(obj, "name", json_string(wr->name.c_str())); + return obj; + } + + json_t* dataToJson() override { + json_t* rootJ = VenomModule::dataToJson(); + if (disable) { + json_object_set_new(rootJ, "disable", json_boolean(true)); + return rootJ; + } + json_t* array = NULL; + for (uint64_t i=0; iengine->getModule(defaults[i].modId); + if (!mod) continue; + ParamQuantity* pq = mod->getParamQuantity(defaults[i].id); + if (!pq || pq->defaultValue != defaults[i].dflt) continue; + if (!array) array = json_array(); + json_t* obj = json_object(); + json_object_set_new(obj, "modId", json_integer(defaults[i].modId)); + json_object_set_new(obj, "id", json_integer(defaults[i].id)); + json_object_set_new(obj, "factoryDflt", json_real(defaults[i].factoryDflt)); + json_object_set_new(obj, "dflt", json_real(defaults[i].dflt)); + json_array_append_new(array, obj); + } + if(array) json_object_set_new(rootJ, "defaults", array); + array = NULL; + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + ParamQuantity* pq = mod->getParamQuantity(wr->id); + if (!pq || pq->name != wr->name) continue; + if (!array) array = json_array(); + json_array_append_new(array, json_rename(wr)); + } + if(array) json_object_set_new(rootJ, "paramRenames", array); + array = NULL; + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + PortInfo* pi = mod->getInputInfo(wr->id); + if (!pi || pi->name != wr->name) continue; + if (!array) array = json_array(); + json_array_append_new(array, json_rename(wr)); + } + if(array) json_object_set_new(rootJ, "inputRenames", array); + array = NULL; + for (uint64_t i=0; iengine->getModule(wr->modId); + if (!mod) continue; + PortInfo* pi = mod->getOutputInfo(wr->id); + if (!pi || pi->name != wr->name) continue; + if (!array) array = json_array(); + json_array_append_new(array, json_rename(wr)); + } + if(array) json_object_set_new(rootJ, "outputRenames", array); + return rootJ; + } + + void loadRename(json_t* rootJ, std::string key, RenameVector* renameVector){ + json_t* array; + json_t* obj; + size_t index; + if ((array = json_object_get(rootJ, key.c_str()))){ + json_array_foreach(array, index, obj){ + json_t* modId = json_object_get(obj, "modId"); + json_t* id = json_object_get(obj, "id"); + json_t* factoryName = json_object_get(obj, "factoryName"); + json_t* name = json_object_get(obj, "name"); + if (modId && id && factoryName && name){ + WidgetRename* rename = new WidgetRename(json_integer_value(modId), json_integer_value(id), json_string_value(factoryName), json_string_value(name)); + renameVector->push_back(*rename); + delete rename; + } + } + } + } + + void dataFromJson(json_t* rootJ) override { + VenomModule::dataFromJson(rootJ); + if (!disable) { + json_t* val = json_object_get(rootJ, "disable"); + if (val && json_boolean_value(val)) { + std::vector< std::string > labels {"Permanently disabled"}; + SwitchQuantity* pq = static_cast(paramQuantities[ENABLE_PARAM]); + pq->defaultValue = 0.f; + pq->maxValue = 0.f; + pq->labels = labels; + disable = true; + } + } + if (disable) return; + json_t* array; + json_t* obj; + size_t index; + if ((array = json_object_get(rootJ, "defaults"))){ + json_array_foreach(array, index, obj){ + json_t* modId = json_object_get(obj, "modId"); + json_t* id = json_object_get(obj, "id"); + json_t* factoryDflt = json_object_get(obj, "factoryDflt"); + json_t* dflt = json_object_get(obj, "dflt"); + if (modId && id && factoryDflt && dflt){ + ParamDefault* paramDefault = new ParamDefault(json_integer_value(modId), json_integer_value(id), json_real_value(factoryDflt), json_real_value(dflt)); + defaults.push_back(*paramDefault); + delete paramDefault; + } + } + } + loadRename(rootJ, "paramRenames", ¶mRenames); + loadRename(rootJ, "inputRenames", &inputRenames); + loadRename(rootJ, "outputRenames", &outputRenames); + } + +}; + +struct WidgetMenuExtenderWidget : VenomWidget { + Widget* lastSelectedWidget = NULL; + + WidgetMenuExtenderWidget(WidgetMenuExtender* module) { + setModule(module); + setVenomPanel("WidgetMenuExtender"); + addParam(createLockableLightParamCentered>>>(Vec(22.5f, 100.f), module, WidgetMenuExtender::ENABLE_PARAM, WidgetMenuExtender::ENABLE_RED_LIGHT)); +// addInput(createInputCentered(Vec(22.5F, 140.f), module, WidgetMenuExtender::TEST_INPUT)); + } + + void step() override { + VenomWidget::step(); + WidgetMenuExtender* mod = dynamic_cast(this->module); + if (!mod) return; + bool enabled = mod->params[WidgetMenuExtender::ENABLE_PARAM].getValue(); + mod->lights[WidgetMenuExtender::ENABLE_RED_LIGHT].setBrightness(mod->disable ? LIGHT_ON : 0.f); + mod->lights[WidgetMenuExtender::ENABLE_BLUE_LIGHT].setBrightness(enabled ? LIGHT_ON : mod->disable ? 0.f : LIGHT_OFF); + if (!enabled) return; + + // Remainder of code inspired by Stoermelder Packone ui/ParamWidgetContextExtender.hpp + Widget* widget = APP->event->getDraggedWidget(); + if (!widget) return; + + if (APP->event->dragButton != GLFW_MOUSE_BUTTON_RIGHT) { + lastSelectedWidget = NULL; + return; + } + + if (widget != lastSelectedWidget) { + lastSelectedWidget = widget; + + ParamWidget* paramWidget = dynamic_cast(widget); + PortWidget* portWidget = dynamic_cast(widget); + if (!paramWidget && !portWidget) return; + + MenuOverlay* overlay = NULL; + for (auto rit = APP->scene->children.rbegin(); rit != APP->scene->children.rend(); rit++) { + overlay = dynamic_cast(*rit); + if (overlay) break; + } + if (!overlay) return; + Menu* menu = overlay->getFirstDescendantOfType

(); + if (!menu) return; + + Module* foreignMod = (paramWidget) ? paramWidget->module : portWidget->module; + if (!foreignMod) return; + plugin::Model* model = foreignMod->getModel(); + if (!model) return; + if (model->plugin->slug == "Venom" && model->slug != "RhythmExplorer") return; + + if (paramWidget) mod->extendForeignParameterMenu(model, paramWidget, menu); + else /*portWidget*/ mod->extendForeignPortMenu(portWidget, menu); + } + } + +}; + +Model* modelWidgetMenuExtender = createModel("WidgetMenuExtender"); diff --git a/src/plugin.cpp b/src/plugin.cpp index 7e4692b..ca8a642 100644 --- a/src/plugin.cpp +++ b/src/plugin.cpp @@ -106,6 +106,7 @@ void init(Plugin* p) { p->addModel(modelVCAMix4); p->addModel(modelVCAMix4Stereo); p->addModel(modelVenomBlank); + p->addModel(modelWidgetMenuExtender); p->addModel(modelWinComp); // Any other plugin initialization may go here. diff --git a/src/plugin.hpp b/src/plugin.hpp index 5a46821..2b9d5a9 100644 --- a/src/plugin.hpp +++ b/src/plugin.hpp @@ -42,6 +42,7 @@ extern Model* modelShapedVCA; extern Model* modelVCAMix4; extern Model* modelVCAMix4Stereo; extern Model* modelVenomBlank; +extern Model* modelWidgetMenuExtender; extern Model* modelWinComp; //////////////////////////////// @@ -297,10 +298,13 @@ struct VenomModule : Module { } setLock(e->initLocked, i); } + initialPostDrawnProcess(); paramsInitialized = true; extProcNeeded = false; } } + + virtual void initialPostDrawnProcess(){} json_t* dataToJson() override { json_t* rootJ = json_object(); From 2d17bfe0efd4d2ccd66d8493e04d8e79bd005a70 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Mon, 5 Feb 2024 23:25:36 -0500 Subject: [PATCH 66/81] Update changelog.md --- changelog.md | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.md b/changelog.md index 2599a21..85d0451 100644 --- a/changelog.md +++ b/changelog.md @@ -6,6 +6,7 @@ - Knob 5 - Logic - NORSIQ Chord To Scale +- Poly Sample & Hold Analog Shift Register - Push 5 - Widget Menu Extender From 2f0b18e9c10e933a9b3018680482dc6ae48233e2 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 6 Feb 2024 08:13:15 -0500 Subject: [PATCH 67/81] honor bypass state --- src/WidgetMenuExtender.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/WidgetMenuExtender.cpp b/src/WidgetMenuExtender.cpp index cb3cb5f..c0b2b60 100644 --- a/src/WidgetMenuExtender.cpp +++ b/src/WidgetMenuExtender.cpp @@ -231,7 +231,7 @@ struct WidgetMenuExtender : VenomModule { } } - void initialPostDrawnProcess() override { + void initialPostDrawnProcess() override { // Called once from VenomModule process() for (uint64_t i=0; iengine->getModule(d->modId); @@ -397,7 +397,7 @@ struct WidgetMenuExtenderWidget : VenomWidget { void step() override { VenomWidget::step(); WidgetMenuExtender* mod = dynamic_cast(this->module); - if (!mod) return; + if (!mod || mod->isBypassed()) return; bool enabled = mod->params[WidgetMenuExtender::ENABLE_PARAM].getValue(); mod->lights[WidgetMenuExtender::ENABLE_RED_LIGHT].setBrightness(mod->disable ? LIGHT_ON : 0.f); mod->lights[WidgetMenuExtender::ENABLE_BLUE_LIGHT].setBrightness(enabled ? LIGHT_ON : mod->disable ? 0.f : LIGHT_OFF); From 1cd1e2bc8d914d90e921c1a8b70423833bbd11a0 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 6 Feb 2024 08:43:18 -0500 Subject: [PATCH 68/81] Update build-plugin.yml --- .github/workflows/build-plugin.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-plugin.yml b/.github/workflows/build-plugin.yml index 655227f..73b62e3 100644 --- a/.github/workflows/build-plugin.yml +++ b/.github/workflows/build-plugin.yml @@ -16,8 +16,8 @@ jobs: name: Modify plugin version runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/cache@v3 + - uses: actions/checkout@v4 + - uses: actions/cache@v4 id: plugin-version-cache with: path: plugin.json @@ -42,10 +42,10 @@ jobs: matrix: platform: [win-x64, lin-x64] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - - uses: actions/cache@v3 + - uses: actions/cache@v4 id: plugin-version-cache with: path: plugin.json @@ -56,7 +56,7 @@ jobs: pushd ${{ env.rack-plugin-toolchain-dir }} make plugin-build-${{ matrix.platform }} - name: Upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: ${{ env.rack-plugin-toolchain-dir }}/plugin-build name: ${{ matrix.platform }} @@ -70,10 +70,10 @@ jobs: matrix: platform: [x64, arm64] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: submodules: recursive - - uses: actions/cache@v3 + - uses: actions/cache@v4 id: plugin-version-cache with: path: plugin.json @@ -92,7 +92,7 @@ jobs: make dep make dist - name: Upload artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: path: dist/*.vcvplugin name: mac-${{ matrix.platform }} @@ -105,7 +105,7 @@ jobs: runs-on: ubuntu-latest needs: [build, build-mac] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: FranzDiebold/github-env-vars-action@v2 - name: Check if plugin version matches tag run: | @@ -123,7 +123,7 @@ jobs: ${{ env.CI_REPOSITORY_NAME }} VCV Rack Plugin ${{ env.CI_REF_NAME }} draft: false prerelease: false - - uses: actions/download-artifact@v3 + - uses: actions/download-artifact@v4 with: path: _artifacts - name: Upload release assets From 00ef3b27a0e3d51785522ca1474f2780c459d38a Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 6 Feb 2024 12:24:08 -0500 Subject: [PATCH 69/81] Update README.md --- README.md | 39 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4671a98..e79940e 100644 --- a/README.md +++ b/README.md @@ -1076,7 +1076,7 @@ This output holds the last value that was sampled. Normally the value remains co The number of polyphonic channels that are sampled and held at the output depends on the number of polyphonic channels found at the row inputs. The output polyphony count is the maximum count found between the Trig and Data inputs. #### Performance optimization -To minimize CPU usage you should batch from the bottom and work your way up. For example, if you only need a 4 step shift register, then patch the trigger and data signals to the 7th row. If you patch the top row, then all 10 rows are triggered, and the module needs to do more work and consumes more CPU. The CPU usage can be dramatically different when polyphony and/or oversampling is involved. +To minimize CPU usage you should patch from the bottom and work your way up. For example, if you only need a 4 step shift register, then patch the trigger and data signals to the 7th row. If you patch the top row, then all 10 rows are triggered, and the module needs to do more work and consumes more CPU. The CPU usage can be dramatically different when polyphony and/or oversampling is involved. #### Polyphony behavior If the Trig input is monophonic, and the Data input is polyphonic, then all Data channels will be sampled simultaneously upon receipt of a trigger. @@ -1835,6 +1835,43 @@ A 3hp blank with standard Venom themes. ![WIDGET MENU EXTENDER module image](doc/WidgetMenuExtender.png) Extend context menus to support parameter/port renaming and parameter custom defaults. +Custom names and defaults are stored with the patch and restored upon patch load as long as the Widget Menu Extender remains with the patch. + +Factory names and defaults are restored whenever the Widget Menu Extender is removed from the patch. + +Note that custom names and defaults are built into all of the Venom plugin modules (except for Rhythm Explorer). Widget Menu Extender brings that functionality to modules from foreign plugins (as well as Rhythm Explorer). The Venom module custom names and defaults are mainained independently from Widget Menu Extender. + +### ENABLE button +Controls whether extended context menus are enabled or not. The button is bright blue when extended menus are On. + +Extended context menu options will only be available if the Enable button is On. + +Any existing custom names and defaults remain in effect when the extended menus are Off. + +### Custom Names +When enabled, the context menu for every foreign input port, output port, and parameter control is extended with an option to rename the parameter or port with a custom name. Once set, the custom name only appears in hover text and context menus - it does not update the module faceplate. + +If a parameter or port has been given a custom name, then an additional menu option is added to restore the factory name. + +If a module dynamically updates the parameter or port name, then that overrides any customm name from Widget Menu Extender. + +### Custom Defaults +When enabled, the context menu for every foreign parameter control is extended with an option to set the default value to the current value. The parameter is set to the default value whenever it is initialized, whether by double click, or menu option, etc. + +If a custom default value has been established, then an additional menu option is added to restore the factory default value. + +If a module dynamically updates the parameter default value, then that overrides any custom default value from Widget Menu Extender. + +### Multiple Instances +Only one instance of Widget Menu Extender can be active per patch. If another instance is inserted, then it will be permanently disabled and the Enable button will be bright red. Since permanently disabled Widget Menu Extenders serve no purpose, they probably should be deleted from the patch. + +If using VCV Pro within a DAW, each instance of the VCV plugin is regarded as a separate patch, and can have its own active Widget Menu Extender. + +When importing a selection set containing Widget Menu Extender, custom names and defaults are preserved as long as the patch does not already have an active Widget Menu Extender. But if an active Widget Menu Extender already exists, then the selection set Widget Menu Extender will be permanently disabled, and selection set custom names and defaults will be lost. + +### Bypass +When bypassed, Widget Menu Extender behaves the same as if the Enable button is off - the extended context menu options will not be available, but existing custom names and defaults are preserved. + [Return to Table Of Contents](#venom) From a2fe62ca9f5733bfe92321339321e767ef365526 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Tue, 6 Feb 2024 18:26:58 -0500 Subject: [PATCH 70/81] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e79940e..4646319 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ Also a hearty thanks to Squinky Labs for their [VCV Rack Demo project](https://g Thanks to Jacky Ligon and Andreya Ek Frisk over on the Surge Discord server for advice on the NonOctave Repeating Scale Intervallic Quantizer, as well as help with compiling a representative set of scale presets. +Super thanks to Benjamin Dill for his open source Stoermelder PackOne plugin. I could never have developed the Widget Menu Extender module without his tips and source code to study. + Finally a thanks to Paul Dempsey for his MenuTextField struct from the pachde1 plugin that allows text entry in a menu. In turn that was developed using code/ideas from the SubmarineFree plugin by David O'Rourke. [Return to Table Of Contents](#venom) From 6668171897d77b1eabd7473ad160b1f7e3aa0ec8 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 7 Feb 2024 07:32:35 -0500 Subject: [PATCH 71/81] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 4646319..78dd18f 100644 --- a/README.md +++ b/README.md @@ -1857,6 +1857,8 @@ If a parameter or port has been given a custom name, then an additional menu opt If a module dynamically updates the parameter or port name, then that overrides any customm name from Widget Menu Extender. +Do not include "input" or "output" in your custom port name - VCV will automatically append input or output to the name you provide. + ### Custom Defaults When enabled, the context menu for every foreign parameter control is extended with an option to set the default value to the current value. The parameter is set to the default value whenever it is initialized, whether by double click, or menu option, etc. From 2535ae590b7cd4576b56d2f3b9c1e4b8adaa3b4a Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Wed, 7 Feb 2024 13:55:08 -0500 Subject: [PATCH 72/81] Don't write json record if current name == factory name or current default == factory default --- src/WidgetMenuExtender.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/WidgetMenuExtender.cpp b/src/WidgetMenuExtender.cpp index c0b2b60..941b0c7 100644 --- a/src/WidgetMenuExtender.cpp +++ b/src/WidgetMenuExtender.cpp @@ -282,7 +282,7 @@ struct WidgetMenuExtender : VenomModule { Module* mod = APP->engine->getModule(defaults[i].modId); if (!mod) continue; ParamQuantity* pq = mod->getParamQuantity(defaults[i].id); - if (!pq || pq->defaultValue != defaults[i].dflt) continue; + if (!pq || pq->defaultValue != defaults[i].dflt || pq->defaultValue == defaults[i].factoryDflt) continue; if (!array) array = json_array(); json_t* obj = json_object(); json_object_set_new(obj, "modId", json_integer(defaults[i].modId)); @@ -298,7 +298,7 @@ struct WidgetMenuExtender : VenomModule { Module* mod = APP->engine->getModule(wr->modId); if (!mod) continue; ParamQuantity* pq = mod->getParamQuantity(wr->id); - if (!pq || pq->name != wr->name) continue; + if (!pq || pq->name != wr->name || pq->name == wr->factoryName) continue; if (!array) array = json_array(); json_array_append_new(array, json_rename(wr)); } @@ -309,7 +309,7 @@ struct WidgetMenuExtender : VenomModule { Module* mod = APP->engine->getModule(wr->modId); if (!mod) continue; PortInfo* pi = mod->getInputInfo(wr->id); - if (!pi || pi->name != wr->name) continue; + if (!pi || pi->name != wr->name || pi->name == wr->factoryName) continue; if (!array) array = json_array(); json_array_append_new(array, json_rename(wr)); } @@ -320,7 +320,7 @@ struct WidgetMenuExtender : VenomModule { Module* mod = APP->engine->getModule(wr->modId); if (!mod) continue; PortInfo* pi = mod->getOutputInfo(wr->id); - if (!pi || pi->name != wr->name) continue; + if (!pi || pi->name != wr->name || pi->name == wr->factoryName) continue; if (!array) array = json_array(); json_array_append_new(array, json_rename(wr)); } From 2403e27534278860ae8e6bd32846c5ed2ba4677e Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 8 Feb 2024 14:50:07 -0500 Subject: [PATCH 73/81] CPU optimization - No downsample if no output --- src/PolySHASR.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index 6ab86bd..80c6429 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -126,7 +126,7 @@ struct PolySHASR : VenomModule { data = c==0 ? float_4::zero() : out[c-1][pi]; } out[c][pi] = simd::ifelse(tempTrig>0.f, data, out[c][pi]); - finalOut[c][pi] = oversample>1 ? outDownSample[c][pi].process(out[c][pi]) : out[c][pi]; + finalOut[c][pi] = oversample>1 && outputs[OUTPUT+c].isConnected() ? outDownSample[c][pi].process(out[c][pi]) : out[c][pi]; } } } From 9604c0fa4d16750d13df4843318b6954c2ac3fae Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 8 Feb 2024 21:48:52 -0500 Subject: [PATCH 74/81] Simplify json read/write --- src/PolySHASR.cpp | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/PolySHASR.cpp b/src/PolySHASR.cpp index 80c6429..80876b4 100644 --- a/src/PolySHASR.cpp +++ b/src/PolySHASR.cpp @@ -142,34 +142,30 @@ struct PolySHASR : VenomModule { json_t* rootJ = VenomModule::dataToJson(); json_object_set_new(rootJ, "saveHolds", json_boolean(saveHolds)); if (saveHolds){ - for (int i=0; i Date: Thu, 8 Feb 2024 23:17:55 -0500 Subject: [PATCH 75/81] Ignore JSON from any preset (would be silly anyway) --- src/WidgetMenuExtender.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/WidgetMenuExtender.cpp b/src/WidgetMenuExtender.cpp index 941b0c7..887618d 100644 --- a/src/WidgetMenuExtender.cpp +++ b/src/WidgetMenuExtender.cpp @@ -349,6 +349,7 @@ struct WidgetMenuExtender : VenomModule { void dataFromJson(json_t* rootJ) override { VenomModule::dataFromJson(rootJ); + if (paramsInitialized) return; if (!disable) { json_t* val = json_object_get(rootJ, "disable"); if (val && json_boolean_value(val)) { From cc3b257cc8ed47da44f6c5b4cbc12e4ab3f0df81 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Thu, 8 Feb 2024 23:45:24 -0500 Subject: [PATCH 76/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 78dd18f..634df1e 100644 --- a/README.md +++ b/README.md @@ -1078,7 +1078,7 @@ This output holds the last value that was sampled. Normally the value remains co The number of polyphonic channels that are sampled and held at the output depends on the number of polyphonic channels found at the row inputs. The output polyphony count is the maximum count found between the Trig and Data inputs. #### Performance optimization -To minimize CPU usage you should patch from the bottom and work your way up. For example, if you only need a 4 step shift register, then patch the trigger and data signals to the 7th row. If you patch the top row, then all 10 rows are triggered, and the module needs to do more work and consumes more CPU. The CPU usage can be dramatically different when polyphony and/or oversampling is involved. +If you are using oversampling and you do not require the Trigger button, then consider patching from the bottom and work your way up. For example, if you only need a 4 step shift register, then patch the trigger and data signals to the 7th row. If you patch the top row, then all 10 rows are triggered, and the module needs to do more work and consumes more CPU. The CPU usage can be dramatically different when oversampling is involved. #### Polyphony behavior If the Trig input is monophonic, and the Data input is polyphonic, then all Data channels will be sampled simultaneously upon receipt of a trigger. From a9e0c2f24b1caedbd6348aa44ec342552aa538b5 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 9 Feb 2024 21:50:04 -0500 Subject: [PATCH 77/81] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 634df1e..15f985a 100644 --- a/README.md +++ b/README.md @@ -204,6 +204,10 @@ A minimal complete Benjolin can be patched simply by pairing the Benjolin Oscill A Benjolin should not self oscillate unless given feedback from the filter band pass output. So ideally the cutoff frequency and resonance amount should be constrained so as to prevent self oscillation. Other things to consider are a crossfade module to allow a mix of PWM and external CV (or self patched CV) as input to the filter. Also a mixer would be good to allow a mix of external (or self patched) CV and Rungler input to the Cutoff frequency. +The patch below closely emulates the features of the Benjolin version 2 from After Later Audio, and is available at https://patchstorage.com/complete-benjolin-using-the-venom-benjolin-oscillator/ + +![Complete Benjolin patch example image](doc/Venom Benjolin.vcv) + ### Standard Venom Context Menus [Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From 89e83b29bb219a2bc43269ba0aa7d8c56d92bf4f Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 9 Feb 2024 21:52:57 -0500 Subject: [PATCH 78/81] Add Venom Benjolin patch image for documentation --- doc/Venom Benjolin.JPG | Bin 0 -> 136677 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 doc/Venom Benjolin.JPG diff --git a/doc/Venom Benjolin.JPG b/doc/Venom Benjolin.JPG new file mode 100644 index 0000000000000000000000000000000000000000..12c7a5bddf308cedcda03f77c3459b515bff2431 GIT binary patch literal 136677 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 Date: Fri, 9 Feb 2024 21:56:38 -0500 Subject: [PATCH 79/81] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 15f985a..aa8d779 100644 --- a/README.md +++ b/README.md @@ -206,7 +206,7 @@ A Benjolin should not self oscillate unless given feedback from the filter band The patch below closely emulates the features of the Benjolin version 2 from After Later Audio, and is available at https://patchstorage.com/complete-benjolin-using-the-venom-benjolin-oscillator/ -![Complete Benjolin patch example image](doc/Venom Benjolin.vcv) +![Complete Benjolin patch example image](doc/Venom Benjolin.JPG) ### Standard Venom Context Menus [Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. From bc2ab55a2a08443b90ca95e7065211cf9f5ea5d4 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 9 Feb 2024 22:03:33 -0500 Subject: [PATCH 80/81] Fix Venom Benjolin image for documentation (I hope) --- README.md | 2 +- doc/Venom Benjolin.JPG | Bin 136677 -> 0 bytes doc/VenomBenjolin.PNG | Bin 0 -> 333060 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 doc/Venom Benjolin.JPG create mode 100644 doc/VenomBenjolin.PNG diff --git a/README.md b/README.md index aa8d779..b03ea7e 100644 --- a/README.md +++ b/README.md @@ -206,7 +206,7 @@ A Benjolin should not self oscillate unless given feedback from the filter band The patch below closely emulates the features of the Benjolin version 2 from After Later Audio, and is available at https://patchstorage.com/complete-benjolin-using-the-venom-benjolin-oscillator/ -![Complete Benjolin patch example image](doc/Venom Benjolin.JPG) +![Complete Benjolin patch example image](doc/VenomBenjolin.PNG) ### Standard Venom Context Menus [Venom Themes](#themes), [Custom Names](#custom-names), and [Parameter Locks and Custom Defaults](#parameter-locks-and-custom-defaults) are available via standard Venom context menus. diff --git a/doc/Venom Benjolin.JPG b/doc/Venom Benjolin.JPG deleted file mode 100644 index 12c7a5bddf308cedcda03f77c3459b515bff2431..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136677 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

*(of+LB?thtbKd)91M-s-e72QDC3nE5^3IX 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%0D3X-iN!}`VnuxUS@Wg7$A(Ktck^{%l<&8*kx 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 ws~Q`h%nHzopr0IFgP!2kdN literal 0 HcmV?d00001 From b615704f326bc9374344c1650c651ef5b80bfcf1 Mon Sep 17 00:00:00 2001 From: Dave Benham Date: Fri, 9 Feb 2024 22:43:21 -0500 Subject: [PATCH 81/81] First 2.6 candidate release --- plugin.json | 2 +- src/WidgetMenuExtender.cpp | 3 --- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/plugin.json b/plugin.json index e6dbe98..97fd1d6 100644 --- a/plugin.json +++ b/plugin.json @@ -1,7 +1,7 @@ { "slug": "Venom", "name": "Venom", - "version": "2.6.0dev", + "version": "2.6.0", "license": "GPL-3.0-or-later", "brand": "", "author": "David Benham", diff --git a/src/WidgetMenuExtender.cpp b/src/WidgetMenuExtender.cpp index 887618d..2e00590 100644 --- a/src/WidgetMenuExtender.cpp +++ b/src/WidgetMenuExtender.cpp @@ -13,7 +13,6 @@ struct WidgetMenuExtender : VenomModule { PARAMS_LEN }; enum InputId { -// TEST_INPUT, INPUTS_LEN }; enum OutputId { @@ -82,7 +81,6 @@ struct WidgetMenuExtender : VenomModule { configSwitch(ENABLE_PARAM, 0.f, 0.f, 0.f, "Enable", {"Permanently disabled"}); else configSwitch(ENABLE_PARAM, 0.f, 1.f, 1.f, "Enable", {"Off", "On"}); -// configInput(TEST_INPUT, "lint test"); } ~WidgetMenuExtender() { @@ -392,7 +390,6 @@ struct WidgetMenuExtenderWidget : VenomWidget { setModule(module); setVenomPanel("WidgetMenuExtender"); addParam(createLockableLightParamCentered>>>(Vec(22.5f, 100.f), module, WidgetMenuExtender::ENABLE_PARAM, WidgetMenuExtender::ENABLE_RED_LIGHT)); -// addInput(createInputCentered(Vec(22.5F, 140.f), module, WidgetMenuExtender::TEST_INPUT)); } void step() override {