diff --git a/changelog.md b/changelog.md index d6281958..238ea0d0 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ # Changelog +## v1.1.10 +- 10-Dec-2020 Update images in manual +- 26-Nov-2020 Add exponential response to VM-needle +- 26-Nov-2020 Fix bug rendering WM-102 in module browser + ## v1.1.9 - 23-Nov-2020 Add DS-2 series polyphonic logic gates - 22-Nov-2020 Add OA-1xx Operation Amplifiers diff --git a/manual/AG-104.m.png b/manual/AG-104.m.png new file mode 100644 index 00000000..3547cc3b Binary files /dev/null and b/manual/AG-104.m.png differ diff --git a/manual/AG-106.m.png b/manual/AG-106.m.png new file mode 100644 index 00000000..715fd301 Binary files /dev/null and b/manual/AG-106.m.png differ diff --git a/manual/AG-202.m.png b/manual/AG-202.m.png new file mode 100644 index 00000000..37e513d5 Binary files /dev/null and b/manual/AG-202.m.png differ diff --git a/manual/AG.md b/manual/AG.md index 9d1655b3..010de337 100755 --- a/manual/AG.md +++ b/manual/AG.md @@ -1,11 +1,11 @@ # Logical AND Gates ### [Part of the Digital Suite](DS.md) #### AG-104 AND Gates +![View of the AND Gates](AG-104.m.png "AND Gates") #### AG-106 AND Gates +![View of the AND Gates](AG-106.m.png "AND Gates") #### AG-202 Polyphonic AND Gates - - -![View of the AND Gates](AG.png "AND Gates") +![View of the AND Gates](AG-202.m.png "AND Gates") ## Basic Operation diff --git a/manual/AG.png b/manual/AG.png deleted file mode 100755 index fea9ed18..00000000 Binary files a/manual/AG.png and /dev/null differ diff --git a/manual/AO-106.m.png b/manual/AO-106.m.png new file mode 100644 index 00000000..c7beaa84 Binary files /dev/null and b/manual/AO-106.m.png differ diff --git a/manual/AO-112.m.png b/manual/AO-112.m.png new file mode 100644 index 00000000..deb248be Binary files /dev/null and b/manual/AO-112.m.png differ diff --git a/manual/AO-118.m.png b/manual/AO-118.m.png new file mode 100644 index 00000000..8dda2ca4 Binary files /dev/null and b/manual/AO-118.m.png differ diff --git a/manual/AO-118.png b/manual/AO-118.png deleted file mode 100755 index 4c72e0be..00000000 Binary files a/manual/AO-118.png and /dev/null differ diff --git a/manual/AO-124.m.png b/manual/AO-124.m.png new file mode 100644 index 00000000..7bbf8fb9 Binary files /dev/null and b/manual/AO-124.m.png differ diff --git a/manual/AO-136.m.png b/manual/AO-136.m.png new file mode 100644 index 00000000..b95d23e5 Binary files /dev/null and b/manual/AO-136.m.png differ diff --git a/manual/AO.md b/manual/AO.md index 39bae5da..e1da3fe6 100755 --- a/manual/AO.md +++ b/manual/AO.md @@ -1,11 +1,14 @@ # Arithmetic Operators #### AO-106 6 Algorithm Arithmetic Operators +![View of the AO-106 - Arithmetic Operators](AO-106.m.png "Arithmetic Operators") #### AO-112 12 Algorithm Arithmetic Operators +![View of the AO-112 - Arithmetic Operators](AO-112.m.png "Arithmetic Operators") #### AO-118 18 Algorithm Arithmetic Operators +![View of the AO-118 - Arithmetic Operators](AO-118.m.png "Arithmetic Operators") #### AO-124 24 Algorithm Arithmetic Operators +![View of the AO-124 - Arithmetic Operators](AO-124.m.png "Arithmetic Operators") #### AO-136 36 Algorithm Arithmetic Operators - -![View of the AO-118 - Arithmetic Operators](AO-118.png "Arithmetic Operators") +![View of the AO-136 - Arithmetic Operators](AO-136.m.png "Arithmetic Operators") ## Basic Operation diff --git a/manual/BB-120.m.png b/manual/BB-120.m.png new file mode 100644 index 00000000..036b3ab6 Binary files /dev/null and b/manual/BB-120.m.png differ diff --git a/manual/BB-120.png b/manual/BB-120.png deleted file mode 100755 index d22f8452..00000000 Binary files a/manual/BB-120.png and /dev/null differ diff --git a/manual/BB.md b/manual/BB.md index 587d3c00..2c852220 100755 --- a/manual/BB.md +++ b/manual/BB.md @@ -3,7 +3,7 @@ #### BB-120 20-Stage Bucket Brigade Sample and Hold -![View of the Sample and Hold Latches](BB-120.png "Sample and Hold Latches") +![View of the Sample and Hold Latches](BB-120.m.png "Sample and Hold Latches") ## Basic Operation diff --git a/manual/BP-101.m.png b/manual/BP-101.m.png new file mode 100644 index 00000000..22eeba0a Binary files /dev/null and b/manual/BP-101.m.png differ diff --git a/manual/BP-102.m.png b/manual/BP-102.m.png new file mode 100644 index 00000000..43aaaeb1 Binary files /dev/null and b/manual/BP-102.m.png differ diff --git a/manual/BP-104.m.png b/manual/BP-104.m.png new file mode 100644 index 00000000..3f6e93d0 Binary files /dev/null and b/manual/BP-104.m.png differ diff --git a/manual/BP-108.m.png b/manual/BP-108.m.png new file mode 100644 index 00000000..f4321780 Binary files /dev/null and b/manual/BP-108.m.png differ diff --git a/manual/BP-110.m.png b/manual/BP-110.m.png new file mode 100644 index 00000000..5e027ae6 Binary files /dev/null and b/manual/BP-110.m.png differ diff --git a/manual/BP-112.m.png b/manual/BP-112.m.png new file mode 100644 index 00000000..535bfe76 Binary files /dev/null and b/manual/BP-112.m.png differ diff --git a/manual/BP-116.m.png b/manual/BP-116.m.png new file mode 100644 index 00000000..3cb9c732 Binary files /dev/null and b/manual/BP-116.m.png differ diff --git a/manual/BP-120.m.png b/manual/BP-120.m.png new file mode 100644 index 00000000..2340180b Binary files /dev/null and b/manual/BP-120.m.png differ diff --git a/manual/BP-124.m.png b/manual/BP-124.m.png new file mode 100644 index 00000000..5fdbec1b Binary files /dev/null and b/manual/BP-124.m.png differ diff --git a/manual/BP-132.m.png b/manual/BP-132.m.png new file mode 100644 index 00000000..7774e6c2 Binary files /dev/null and b/manual/BP-132.m.png differ diff --git a/manual/BP.md b/manual/BP.md index bded1c30..679b612a 100755 --- a/manual/BP.md +++ b/manual/BP.md @@ -1,16 +1,24 @@ # Blanking Plates #### BP-101 +![View of the Blanking Plates](BP-101.m.png "Blanking Plates") #### BP-102 +![View of the Blanking Plates](BP-102.m.png "Blanking Plates") #### BP-104 +![View of the Blanking Plates](BP-104.m.png "Blanking Plates") #### BP-108 +![View of the Blanking Plates](BP-108.m.png "Blanking Plates") #### BP-110 +![View of the Blanking Plates](BP-110.m.png "Blanking Plates") #### BP-112 +![View of the Blanking Plates](BP-112.m.png "Blanking Plates") #### BP-116 +![View of the Blanking Plates](BP-116.m.png "Blanking Plates") #### BP-120 +![View of the Blanking Plates](BP-120.m.png "Blanking Plates") #### BP-124 +![View of the Blanking Plates](BP-124.m.png "Blanking Plates") #### BP-132 - -![View of the Blanking Plates](BP.png "Blanking Plates") +![View of the Blanking Plates](BP-132.m.png "Blanking Plates") A range of Blanking Plates in convenient sizes to keep the dust out of your rack. Designed to match the aesthetic of the Submarine range of modules, the Blanking Plates are made of Titanium-Unobtanium alloy, bevelled edges, and fully concealed fixings for durability and peace of mind. diff --git a/manual/BP.png b/manual/BP.png deleted file mode 100755 index 6263c357..00000000 Binary files a/manual/BP.png and /dev/null differ diff --git a/manual/DN-112.m.png b/manual/DN-112.m.png new file mode 100644 index 00000000..108cdaa0 Binary files /dev/null and b/manual/DN-112.m.png differ diff --git a/manual/DN.md b/manual/DN.md index 18acde9a..39c2c31e 100644 --- a/manual/DN.md +++ b/manual/DN.md @@ -3,7 +3,7 @@ #### DN-112 Digital Noise Source -![View of the Digital Noise Source](DN.png "Digital Noise Source") +![View of the Digital Noise Source](DN-112.m.png "Digital Noise Source") ## Basic Operation diff --git a/manual/DN.png b/manual/DN.png deleted file mode 100644 index 14dc62e5..00000000 Binary files a/manual/DN.png and /dev/null differ diff --git a/manual/DO-105.m.png b/manual/DO-105.m.png new file mode 100644 index 00000000..ee5e1b87 Binary files /dev/null and b/manual/DO-105.m.png differ diff --git a/manual/DO-110.m.png b/manual/DO-110.m.png new file mode 100644 index 00000000..eb29f8d8 Binary files /dev/null and b/manual/DO-110.m.png differ diff --git a/manual/DO-115.m.png b/manual/DO-115.m.png new file mode 100644 index 00000000..6e027e07 Binary files /dev/null and b/manual/DO-115.m.png differ diff --git a/manual/DO-120.m.png b/manual/DO-120.m.png new file mode 100644 index 00000000..cc86dd42 Binary files /dev/null and b/manual/DO-120.m.png differ diff --git a/manual/DO.md b/manual/DO.md index d2b27af2..39f1d2e8 100644 --- a/manual/DO.md +++ b/manual/DO.md @@ -1,12 +1,13 @@ # Digital Operators ### [Part of the Digital Suite](DS.md) #### DO-105 5 Gate Digital Operators +![View of the Digital Operators](DO-105.m.png "Digital Operators") #### DO-110 10 Gate Digital Operators +![View of the Digital Operators](DO-110.m.png "Digital Operators") #### DO-115 15 Gate Digital Operators +![View of the Digital Operators](DO-115.m.png "Digital Operators") #### DO-120 20 Gate Digital Operators - - -![View of the Digital Operators](DO.png "Digital Operators") +![View of the Digital Operators](DO-120.m.png "Digital Operators") ## Basic Operation diff --git a/manual/DO.png b/manual/DO.png deleted file mode 100644 index 2f9a02b6..00000000 Binary files a/manual/DO.png and /dev/null differ diff --git a/manual/DS.md b/manual/DS.md index 7635a632..b7c0d18d 100755 --- a/manual/DS.md +++ b/manual/DS.md @@ -1,17 +1,15 @@ # Digital Suite -#### [AG-106 AND Gates](AG.md) +#### [AG-104, AG-106, AG-202 AND Gates](AG.md) #### [BB-120 Sample and Hold](BB.md) -#### [DO-105 Digital Operators](DO.md) -#### [FF-110 Flip-Flops](FF.md) -#### [FF-120 Flip-Flops](FF.md) -#### [FF-212 Flip-Flops](FF.md) +#### [DO-105, DO-110, DO-115, DO-120 Digital Operators](DO.md) +#### [FF-110, FF-120, FF-206, FF-212 Flip-Flops](FF.md) #### [LA-108 8-Channel Logic Analyser](LA.md) -#### [LD-106 Line Drivers](LD.md) -#### [NG-112 NOT Gates](NG.md) -#### [OA-105 Op-Amps](OA.md) -#### [OG-106 OR Gates](OG.md) -#### [PG-112 Pulse Generators](PG.md) -#### [XG-106 XOR Gates](XG.md) +#### [LD-103, LD-106 Line Drivers](LD.md) +#### [NG-106, NG-112, NG-202 NOT Gates](NG.md) +#### [OA-103, OA-105 Op-Amps](OA.md) +#### [OG-104, OG-106, OG-202 OR Gates](OG.md) +#### [PG-104, PG-112 Pulse Generators](PG.md) +#### [XG-104, XG-106, XG-202 XOR Gates](XG.md) ![View of the DS Suite Menu](DS.png "DS Modules") diff --git a/manual/DS.png b/manual/DS.png old mode 100755 new mode 100644 diff --git a/manual/EN-104.m.png b/manual/EN-104.m.png new file mode 100644 index 00000000..07add096 Binary files /dev/null and b/manual/EN-104.m.png differ diff --git a/manual/EN.md b/manual/EN.md index 257767df..85a43213 100755 --- a/manual/EN.md +++ b/manual/EN.md @@ -2,7 +2,7 @@ #### EN-104 Envelope Generator -![View of the Envelope Generator](EN.png "Envelope Generator") +![View of the Envelope Generator](EN-104.m.png "Envelope Generator") ## Basic Operation diff --git a/manual/EN.png b/manual/EN.png deleted file mode 100644 index db92794d..00000000 Binary files a/manual/EN.png and /dev/null differ diff --git a/manual/EO-102.m.png b/manual/EO-102.m.png new file mode 100644 index 00000000..5f483ac2 Binary files /dev/null and b/manual/EO-102.m.png differ diff --git a/manual/EO.md b/manual/EO.md index 7813dd24..368b6adf 100755 --- a/manual/EO.md +++ b/manual/EO.md @@ -1,7 +1,7 @@ # Envelope Oscilloscope #### EO-102 2-Channel Envelope Oscilloscope -![View of the Envelope Oscilloscope](EO.png "Envelope Oscilloscope") +![View of the Envelope Oscilloscope](EO-102.m.png "Envelope Oscilloscope") ## Basic Operation diff --git a/manual/EO.png b/manual/EO.png deleted file mode 100755 index d2a8e82a..00000000 Binary files a/manual/EO.png and /dev/null differ diff --git a/manual/FF-110.m.png b/manual/FF-110.m.png new file mode 100644 index 00000000..316c5e25 Binary files /dev/null and b/manual/FF-110.m.png differ diff --git a/manual/FF-120.m.png b/manual/FF-120.m.png new file mode 100644 index 00000000..12c99924 Binary files /dev/null and b/manual/FF-120.m.png differ diff --git a/manual/FF-206.m.png b/manual/FF-206.m.png new file mode 100644 index 00000000..1b743b80 Binary files /dev/null and b/manual/FF-206.m.png differ diff --git a/manual/FF-212.m.png b/manual/FF-212.m.png new file mode 100644 index 00000000..b6951806 Binary files /dev/null and b/manual/FF-212.m.png differ diff --git a/manual/FF.md b/manual/FF.md index 74b26ffe..c0c0a913 100755 --- a/manual/FF.md +++ b/manual/FF.md @@ -1,11 +1,13 @@ # Flip-Flops ### [Part of the Digital Suite](DS.md) #### FF-110 10-Stage Flip-Flop Cascade +![View of the Flip-Flop modules](FF-110.m.png "Flip-Flop Range") #### FF-120 20-Stage Flip-Flop Cascade +![View of the Flip-Flop modules](FF-120.m.png "Flip-Flop Range") #### FF-206 6 Edge Triggered Flip-Flops +![View of the Flip-Flop modules](FF-206.m.png "Flip-Flop Range") #### FF-212 12 Edge Triggered Flip-Flops - -![View of the Flip-Flop modules](FF.png "Flip-Flop Range") +![View of the Flip-Flop modules](FF-212.m.png "Flip-Flop Range") ## Basic Operation diff --git a/manual/FF.png b/manual/FF.png deleted file mode 100755 index b401d1d9..00000000 Binary files a/manual/FF.png and /dev/null differ diff --git a/manual/HS-101.m.png b/manual/HS-101.m.png new file mode 100644 index 00000000..073e70da Binary files /dev/null and b/manual/HS-101.m.png differ diff --git a/manual/HS.md b/manual/HS.md index f6c7771d..fb2e1cda 100755 --- a/manual/HS.md +++ b/manual/HS.md @@ -1,7 +1,7 @@ # Hi-Resolution Storage Scope #### HS-101 Hi-Res Storage Scope -![View of the Storage Scope](HS.png "Hi-Res Storage Scope") +![View of the Storage Scope](HS-101.m.png "Hi-Res Storage Scope") ## Basic Operation diff --git a/manual/HS.png b/manual/HS.png deleted file mode 100644 index 7a07586a..00000000 Binary files a/manual/HS.png and /dev/null differ diff --git a/manual/LA-108.m.png b/manual/LA-108.m.png new file mode 100644 index 00000000..93e87f79 Binary files /dev/null and b/manual/LA-108.m.png differ diff --git a/manual/LA.md b/manual/LA.md index eb924e94..2e585d2a 100755 --- a/manual/LA.md +++ b/manual/LA.md @@ -2,7 +2,7 @@ ### [Part of the Digital Suite](DS.md) #### LA-108 8-Channel Logic Analyser -![View of the Logic Analyser](LA.png "Logic Analyser") +![View of the Logic Analyser](LA-108.m.png "Logic Analyser") ## Basic Operation diff --git a/manual/LA.png b/manual/LA.png deleted file mode 100755 index e7554a05..00000000 Binary files a/manual/LA.png and /dev/null differ diff --git a/manual/LD-103.m.png b/manual/LD-103.m.png new file mode 100644 index 00000000..dc50b899 Binary files /dev/null and b/manual/LD-103.m.png differ diff --git a/manual/LD-106.m.png b/manual/LD-106.m.png new file mode 100644 index 00000000..fe1f16dc Binary files /dev/null and b/manual/LD-106.m.png differ diff --git a/manual/LD.md b/manual/LD.md index 14f43f5b..3b4934d5 100755 --- a/manual/LD.md +++ b/manual/LD.md @@ -1,9 +1,9 @@ # Schmitt Trigger Line Drivers ### [Part of the Digital Suite](DS.md) #### LD-103 Line Drivers +![View of the Line Drivers](LD-103.m.png "Line Drivers") #### LD-106 Line Drivers - -![View of the Line Drivers](LD.png "Line Drivers") +![View of the Line Drivers](LD-106.m.png "Line Drivers") ## Basic Operation diff --git a/manual/LD.png b/manual/LD.png deleted file mode 100755 index 199c80a2..00000000 Binary files a/manual/LD.png and /dev/null differ diff --git a/manual/LT-116.m.png b/manual/LT-116.m.png new file mode 100644 index 00000000..ea4ae27c Binary files /dev/null and b/manual/LT-116.m.png differ diff --git a/manual/LT.md b/manual/LT.md index f23e1e81..d659fa8b 100755 --- a/manual/LT.md +++ b/manual/LT.md @@ -1,7 +1,7 @@ # Linear Transformations #### LT-116 Linear Transformations -![View of the Linear Transformations](LT.png "Linear Transformations") +![View of the Linear Transformations](LT-116.m.png "Linear Transformations") ## Basic Operation diff --git a/manual/LT.png b/manual/LT.png deleted file mode 100644 index bfbeb158..00000000 Binary files a/manual/LT.png and /dev/null differ diff --git a/manual/MZ-909.m.png b/manual/MZ-909.m.png new file mode 100644 index 00000000..8d760aa1 Binary files /dev/null and b/manual/MZ-909.m.png differ diff --git a/manual/MZ.md b/manual/MZ.md index 6ac9e491..a55139c3 100755 --- a/manual/MZ.md +++ b/manual/MZ.md @@ -1,7 +1,7 @@ # Masterizer #### MZ-909 Masterizer -![View of the Masterizer](MZ.png "Masterizer") +![View of the Masterizer](MZ-909.m.png "Masterizer") ## Features diff --git a/manual/MZ.png b/manual/MZ.png deleted file mode 100644 index adb46c78..00000000 Binary files a/manual/MZ.png and /dev/null differ diff --git a/manual/NG-106.m.png b/manual/NG-106.m.png new file mode 100644 index 00000000..50bb1c5f Binary files /dev/null and b/manual/NG-106.m.png differ diff --git a/manual/NG-112.m.png b/manual/NG-112.m.png new file mode 100644 index 00000000..0a5605f3 Binary files /dev/null and b/manual/NG-112.m.png differ diff --git a/manual/NG-206.m.png b/manual/NG-206.m.png new file mode 100644 index 00000000..edd03d56 Binary files /dev/null and b/manual/NG-206.m.png differ diff --git a/manual/NG.md b/manual/NG.md index 5c72d100..45bccad3 100755 --- a/manual/NG.md +++ b/manual/NG.md @@ -1,10 +1,11 @@ # Logical NOT Gates ### [Part of the Digital Suite](DS.md) #### NG-106 NOT Gates +![View of the NOT Gates](NG-106.m.png "NOT Gates") #### NG-112 NOT Gates +![View of the NOT Gates](NG-112.m.png "NOT Gates") #### NG-206 NOT Gates - -![View of the NOT Gates](NG.png "NOT Gates") +![View of the NOT Gates](NG-206.m.png "NOT Gates") ## Basic Operation diff --git a/manual/NG.png b/manual/NG.png deleted file mode 100755 index e54f6374..00000000 Binary files a/manual/NG.png and /dev/null differ diff --git a/manual/OA-103.m.png b/manual/OA-103.m.png new file mode 100644 index 00000000..8f1aaa8d Binary files /dev/null and b/manual/OA-103.m.png differ diff --git a/manual/OA-105.m.png b/manual/OA-105.m.png new file mode 100644 index 00000000..b1ab6e64 Binary files /dev/null and b/manual/OA-105.m.png differ diff --git a/manual/OA.md b/manual/OA.md index 27ffe1ca..589f97a0 100755 --- a/manual/OA.md +++ b/manual/OA.md @@ -1,10 +1,9 @@ # Logical Operational Amplifiers ### [Part of the Digital Suite](DS.md) #### OA-103 OP-Amps +![View of the Op-Amps](OA-103.m.png "Operation Amplifiers") #### OA-105 OP-Amps - - -![View of the Op-Amps](OA.png "Operation Amplifiers") +![View of the Op-Amps](OA-105.m.png "Operation Amplifiers") ## Basic Operation diff --git a/manual/OA.png b/manual/OA.png deleted file mode 100644 index 1784f182..00000000 Binary files a/manual/OA.png and /dev/null differ diff --git a/manual/OG-104.m.png b/manual/OG-104.m.png new file mode 100644 index 00000000..5f50362e Binary files /dev/null and b/manual/OG-104.m.png differ diff --git a/manual/OG-106.m.png b/manual/OG-106.m.png new file mode 100644 index 00000000..06c6dc7e Binary files /dev/null and b/manual/OG-106.m.png differ diff --git a/manual/OG-202.m.png b/manual/OG-202.m.png new file mode 100644 index 00000000..d44792eb Binary files /dev/null and b/manual/OG-202.m.png differ diff --git a/manual/OG.md b/manual/OG.md index 8c6ee0cc..9be0348e 100755 --- a/manual/OG.md +++ b/manual/OG.md @@ -1,10 +1,11 @@ # Logical OR Gates ### [Part of the Digital Suite](DS.md) #### OG-104 OR Gates +![View of the OR Gates](OG-104.m.png "OR Gates") #### OG-106 OR Gates +![View of the OR Gates](OG-106.m.png "OR Gates") #### OG-202 OR Gates - -![View of the OR Gates](OG.png "OR Gates") +![View of the OR Gates](OG-202.m.png "OR Gates") ## Basic Operation diff --git a/manual/OG.png b/manual/OG.png deleted file mode 100755 index 35faaf38..00000000 Binary files a/manual/OG.png and /dev/null differ diff --git a/manual/PG-104.m.png b/manual/PG-104.m.png new file mode 100644 index 00000000..dc59b6ac Binary files /dev/null and b/manual/PG-104.m.png differ diff --git a/manual/PG-112.m.png b/manual/PG-112.m.png new file mode 100644 index 00000000..a917a6dd Binary files /dev/null and b/manual/PG-112.m.png differ diff --git a/manual/PG.md b/manual/PG.md index 1ccee274..0d0009f6 100755 --- a/manual/PG.md +++ b/manual/PG.md @@ -1,10 +1,9 @@ # Pulse Generators ### [Part of the Digital Suite](DS.md) #### PG-104 Pulse Generators +![View of the Pulse Generators](PG-104.m.png "Pulse Generators") #### PG-112 Pulse Generators - - -![View of the Pulse Generators](PG.png "Pulse Generators") +![View of the Pulse Generators](PG-112.m.png "Pulse Generators") ## Basic Operation diff --git a/manual/PG.png b/manual/PG.png deleted file mode 100755 index 113382a6..00000000 Binary files a/manual/PG.png and /dev/null differ diff --git a/manual/PO-101.m.png b/manual/PO-101.m.png new file mode 100644 index 00000000..f2d55ba5 Binary files /dev/null and b/manual/PO-101.m.png differ diff --git a/manual/PO-101.png b/manual/PO-101.png deleted file mode 100755 index a76654b6..00000000 Binary files a/manual/PO-101.png and /dev/null differ diff --git a/manual/PO-102.m.png b/manual/PO-102.m.png new file mode 100644 index 00000000..906a8998 Binary files /dev/null and b/manual/PO-102.m.png differ diff --git a/manual/PO-102.png b/manual/PO-102.png deleted file mode 100755 index 03f3580d..00000000 Binary files a/manual/PO-102.png and /dev/null differ diff --git a/manual/PO-204.m.png b/manual/PO-204.m.png new file mode 100644 index 00000000..98687f5a Binary files /dev/null and b/manual/PO-204.m.png differ diff --git a/manual/PO-204.png b/manual/PO-204.png deleted file mode 100755 index 33fafa1a..00000000 Binary files a/manual/PO-204.png and /dev/null differ diff --git a/manual/PO.md b/manual/PO.md index 35b01065..2deaefc1 100755 --- a/manual/PO.md +++ b/manual/PO.md @@ -1,8 +1,8 @@ # Phase Oscillators #### PO-101 Phased VCO +![View of the Phased VCO](PO-101.m.png "Phased VCO") #### PO-102 Phased LFO - -![View of the Phased VCO](PO-101.png "Phased VCO") +![View of the Phased LFO](PO-102.m.png "Phased LFO") ## Basic Operation @@ -11,8 +11,7 @@ The PO-101 and PO-102 devices are digital oscillators which offer a choice of 5 16 fixed phase outputs are provided, dividing the cycle into 12 and 8 equal parts. In addition 4 further adjustable phase outputs are provided. The phase of these outputs can be controlled using a control knob, and/or an associated CV input. #### PO-204 Phase Modulation Engine - -![View of the Phase Modulation Engine](PO-204.png "Phase Modulation Engine") +![View of the Phase Modulation Engine](PO-204.m.png "Phase Modulation Engine") ## Basic Operation diff --git a/manual/SN-101.m.png b/manual/SN-101.m.png new file mode 100644 index 00000000..fef498d6 Binary files /dev/null and b/manual/SN-101.m.png differ diff --git a/manual/SN.md b/manual/SN.md index 52d336d0..c5ba442d 100755 --- a/manual/SN.md +++ b/manual/SN.md @@ -1,7 +1,6 @@ # Smooth Noise #### SN-101 Smooth Noise Oscillator - -![View of the Smooth Noise Oscillator](SN.png "Smooth Noise Oscillator") +![View of the Smooth Noise Oscillator](SN-101.m.png "Smooth Noise Oscillator") ## Basic Operation diff --git a/manual/SN.png b/manual/SN.png deleted file mode 100644 index d1621069..00000000 Binary files a/manual/SN.png and /dev/null differ diff --git a/manual/SS-112.m.png b/manual/SS-112.m.png new file mode 100644 index 00000000..73d74a03 Binary files /dev/null and b/manual/SS-112.m.png differ diff --git a/manual/SS-208.m.png b/manual/SS-208.m.png new file mode 100644 index 00000000..6e89d287 Binary files /dev/null and b/manual/SS-208.m.png differ diff --git a/manual/SS-212.m.png b/manual/SS-212.m.png new file mode 100644 index 00000000..c6cac7e2 Binary files /dev/null and b/manual/SS-212.m.png differ diff --git a/manual/SS-220.m.png b/manual/SS-220.m.png new file mode 100644 index 00000000..4dab0b13 Binary files /dev/null and b/manual/SS-220.m.png differ diff --git a/manual/SS-221.m.png b/manual/SS-221.m.png new file mode 100644 index 00000000..da10787d Binary files /dev/null and b/manual/SS-221.m.png differ diff --git a/manual/SS.md b/manual/SS.md index 6498cc80..e1232a56 100755 --- a/manual/SS.md +++ b/manual/SS.md @@ -1,11 +1,14 @@ # Sources and Sinks - Lightweight voltage sources #### SS-112 - 12 Voltage Sinks +![View of the Sources and Sinks Range](SS-112.m.png "Sources and Sinks") #### SS-208 - 8 Irrational Voltage Sources +![View of the Sources and Sinks Range](SS-208.m.png "Sources and Sinks") #### SS-212 - 12 Chromatic Voltage Sources +![View of the Sources and Sinks Range](SS-212.m.png "Sources and Sinks") #### SS-220 - 120 Chromatic Voltage Sources +![View of the Sources and Sinks Range](SS-220.m.png "Sources and Sinks") #### SS-221 - 21 Voltage Sources - -![View of the Sources and Sinks Range](SS.png "Sources and Sinks") +![View of the Sources and Sinks Range](SS-221.m.png "Sources and Sinks") ## Basic Operation diff --git a/manual/SS.png b/manual/SS.png deleted file mode 100755 index 35a7abac..00000000 Binary files a/manual/SS.png and /dev/null differ diff --git a/manual/TD-116.m.png b/manual/TD-116.m.png new file mode 100644 index 00000000..3b26956a Binary files /dev/null and b/manual/TD-116.m.png differ diff --git a/manual/TD-202.m.png b/manual/TD-202.m.png new file mode 100644 index 00000000..faf0775e Binary files /dev/null and b/manual/TD-202.m.png differ diff --git a/manual/TD-202.png b/manual/TD-202.png deleted file mode 100755 index fe568018..00000000 Binary files a/manual/TD-202.png and /dev/null differ diff --git a/manual/TD-316.m.png b/manual/TD-316.m.png new file mode 100644 index 00000000..ab9fe763 Binary files /dev/null and b/manual/TD-316.m.png differ diff --git a/manual/TD-316.png b/manual/TD-316.png deleted file mode 100644 index 67881784..00000000 Binary files a/manual/TD-316.png and /dev/null differ diff --git a/manual/TD-410.m.png b/manual/TD-410.m.png new file mode 100644 index 00000000..0f7c7bcf Binary files /dev/null and b/manual/TD-410.m.png differ diff --git a/manual/TD-410.png b/manual/TD-410.png deleted file mode 100644 index 969b2cc8..00000000 Binary files a/manual/TD-410.png and /dev/null differ diff --git a/manual/TD-510.m.png b/manual/TD-510.m.png new file mode 100644 index 00000000..05160abb Binary files /dev/null and b/manual/TD-510.m.png differ diff --git a/manual/TD-510.png b/manual/TD-510.png deleted file mode 100644 index a09e9b09..00000000 Binary files a/manual/TD-510.png and /dev/null differ diff --git a/manual/TD.md b/manual/TD.md index fa0339c2..5333b14e 100755 --- a/manual/TD.md +++ b/manual/TD.md @@ -1,8 +1,7 @@ # Formattable Text Display #### TD-116 Formattable Text Display - -![View of the Formattable Text Display](TD.png "Formattable Text Display") -![View of the Formattable Text Display](TD-316.png "Formattable Text Display") +![View of the Formattable Text Display](TD-116.m.png "Formattable Text Display") +![View of the Formattable Text Display](TD-316.m.png "Formattable Text Display") ## Basic Operation @@ -19,8 +18,7 @@ The TD-316 is resizable using the drag handles in the top corners of the device. The [TF-101](TF.md) or [TF-102](TF.md) are suitable devices to control the formatting. #### TD-202 Vertical Text Display - -![View of the Vertical Text Display](TD-202.png "Vertical Text Display") +![View of the Vertical Text Display](TD-202.m.png "Vertical Text Display") ## Basic Operation @@ -30,8 +28,7 @@ sections of a patch. The colors of the TD-202 can be adjusted using the context menu. Or by using an extension device such as the [TF-101](TF.md) or [TF-102](TF.md). #### TD-410 Multiple Label Display - -![View of the Multiple Label Display](TD-410.png "Multiple Label Display") +![View of the Multiple Label Display](TD-410.m.png "Multiple Label Display") ## Basic Operation @@ -46,8 +43,7 @@ The labels can be dragged up and down the device to the position that you need. The TD-410 is resizable using the drag handles in the top corners of the device. #### TD-510 Vertical Multiple Label Display - -![View of the Vertical Multiple Lable Display](TD-510.png "Vertical Multiple Label Display") +![View of the Vertical Multiple Lable Display](TD-510.m.png "Vertical Multiple Label Display") ## Basic Operation diff --git a/manual/TD.png b/manual/TD.png deleted file mode 100755 index 1813ae73..00000000 Binary files a/manual/TD.png and /dev/null differ diff --git a/manual/TF-101.m.png b/manual/TF-101.m.png new file mode 100644 index 00000000..d77b61ee Binary files /dev/null and b/manual/TF-101.m.png differ diff --git a/manual/TF-102.m.png b/manual/TF-102.m.png new file mode 100644 index 00000000..f8399bcd Binary files /dev/null and b/manual/TF-102.m.png differ diff --git a/manual/TF-102.png b/manual/TF-102.png deleted file mode 100644 index b27c217f..00000000 Binary files a/manual/TF-102.png and /dev/null differ diff --git a/manual/TF.md b/manual/TF.md index 5520f78e..5506f1dc 100755 --- a/manual/TF.md +++ b/manual/TF.md @@ -1,8 +1,8 @@ # Text Display Formatter #### TF-101 Text Display Formatter - -![View of the Text Display Formatter](TF.png "Text Display Formatter") -![View of the Text Dispaly Formatter](TF-102.png "Text Display Formatter") +![View of the Text Display Formatter](TF-101.m.png "Text Display Formatter") +#### TF-102 Text Display Formatter +![View of the Text Dispaly Formatter](TF-102.m.png "Text Display Formatter") ## Basic Operation diff --git a/manual/TF.png b/manual/TF.png deleted file mode 100755 index baff7d40..00000000 Binary files a/manual/TF.png and /dev/null differ diff --git a/manual/TM-105.m.png b/manual/TM-105.m.png new file mode 100644 index 00000000..3f986c99 Binary files /dev/null and b/manual/TM-105.m.png differ diff --git a/manual/TM.md b/manual/TM.md index 295525c3..af7996c9 100755 --- a/manual/TM.md +++ b/manual/TM.md @@ -1,7 +1,6 @@ # Torpedo Message Merge #### TM-105 - 5 port Torpedo Message Merge - -![View of the Torpedo Message Merge](TM.png "Torpedo Message Merge") +![View of the Torpedo Message Merge](TM-105.m.png "Torpedo Message Merge") ## Basic Operation diff --git a/manual/TM.png b/manual/TM.png deleted file mode 100755 index 47ca4960..00000000 Binary files a/manual/TM.png and /dev/null differ diff --git a/manual/VM-101.m.png b/manual/VM-101.m.png new file mode 100644 index 00000000..5c1e41bc Binary files /dev/null and b/manual/VM-101.m.png differ diff --git a/manual/VM-102.m.png b/manual/VM-102.m.png new file mode 100644 index 00000000..7b48c664 Binary files /dev/null and b/manual/VM-102.m.png differ diff --git a/manual/VM-201.m.png b/manual/VM-201.m.png new file mode 100644 index 00000000..9f667bed Binary files /dev/null and b/manual/VM-201.m.png differ diff --git a/manual/VM-202.m.png b/manual/VM-202.m.png new file mode 100644 index 00000000..b39502fa Binary files /dev/null and b/manual/VM-202.m.png differ diff --git a/manual/VM.md b/manual/VM.md index 7e894ada..e0e422d8 100755 --- a/manual/VM.md +++ b/manual/VM.md @@ -1,10 +1,12 @@ # VU Meter #### VM-101 Compact VU Meter +![View of the Dual Vintage VU Meter](VM-101.m.png "VU Meter") #### VM-102 Compact Dual VU Meter +![View of the Dual Vintage VU Meter](VM-102.m.png "VU Meter") #### VM-201 Vintage VU Meter +![View of the Dual Vintage VU Meter](VM-201.m.png "VU Meter") #### VM-202 Dual Vintage VU Meter - -![View of the Dual Vintage VU Meter](VM.png "VU Meter") +![View of the Dual Vintage VU Meter](VM-202.m.png "VU Meter") ## Basic Operation @@ -22,6 +24,8 @@ The default load resistor can be swapped out for either a 150Ω or 1000Ω resist An attenuator circuit is applied to the input signal, before the meter. So that by applying an attenuation, the signal range to be metered can be adjusted. Applying a 4x attenuation to the input, will allow signals of 4 times the voltage to be measured. +For a sinusoidal bipolar wave with a peak of 5V, the RMS is approximately 3.5V. So selecting an attenuation of 3.5 and a load of 1000Ω will measure roughly 0dbVU. Most audio waveforms have more power than a pure sine wave. + ## Inputs The VM-102 and VM-202 meters will accept a two-channel polyphonic input. The VM-202 has two inputs, and if the second input is connected, the lower meter will display measure the second input. When only the first input is connected, the lower meter is connected to the second channel of the first (polyphonic) input. diff --git a/manual/VM.png b/manual/VM.png deleted file mode 100644 index 53d62336..00000000 Binary files a/manual/VM.png and /dev/null differ diff --git a/manual/Vis_B3.png b/manual/Vis_B3.png new file mode 100644 index 00000000..f6ee21ba Binary files /dev/null and b/manual/Vis_B3.png differ diff --git a/manual/Vis_BF.png b/manual/Vis_BF.png new file mode 100644 index 00000000..699f5177 Binary files /dev/null and b/manual/Vis_BF.png differ diff --git a/manual/Vis_D3.png b/manual/Vis_D3.png new file mode 100644 index 00000000..e444bd62 Binary files /dev/null and b/manual/Vis_D3.png differ diff --git a/manual/Vis_DF.png b/manual/Vis_DF.png new file mode 100644 index 00000000..3866db44 Binary files /dev/null and b/manual/Vis_DF.png differ diff --git a/manual/Vis_L3.png b/manual/Vis_L3.png new file mode 100644 index 00000000..296dc608 Binary files /dev/null and b/manual/Vis_L3.png differ diff --git a/manual/Vis_LF.png b/manual/Vis_LF.png new file mode 100644 index 00000000..1993718f Binary files /dev/null and b/manual/Vis_LF.png differ diff --git a/manual/Visual.md b/manual/Visual.md new file mode 100755 index 00000000..0a2466fc --- /dev/null +++ b/manual/Visual.md @@ -0,0 +1,15 @@ +# Visual menu (skins) + +![View of the Blue skin](Vis_B3.png "Blue") +![View of the Dark skin](Vis_D3.png "Dark") +![View of the Light skin](Vis_L3.png "Light") + +![View of the Flat Blue skin](Vis_BF.png "Blue Flat") +![View of the Flat Dark skin](Vis_DF.png "Dark Flat") +![View of the Flat Light skin](Vis_LF.png "Light Flat") + +All Submarine Free modules have a Visual menu. This allows you to skin the module. + +Three colour schemes are available, default blue, dark and light. + +Also you can have the default 3d look, or a flatter look if you prefer. diff --git a/manual/WK-101.m.png b/manual/WK-101.m.png new file mode 100644 index 00000000..a2503df4 Binary files /dev/null and b/manual/WK-101.m.png differ diff --git a/manual/WK-101.png b/manual/WK-101.png deleted file mode 100755 index f75edf33..00000000 Binary files a/manual/WK-101.png and /dev/null differ diff --git a/manual/WK-205.m.png b/manual/WK-205.m.png new file mode 100644 index 00000000..6f022bfe Binary files /dev/null and b/manual/WK-205.m.png differ diff --git a/manual/WK-205.png b/manual/WK-205.png deleted file mode 100755 index 8e34fb5d..00000000 Binary files a/manual/WK-205.png and /dev/null differ diff --git a/manual/WK.md b/manual/WK.md index 4eea1c3b..29973106 100755 --- a/manual/WK.md +++ b/manual/WK.md @@ -1,7 +1,6 @@ # Das Wohltemperierte Klavier - Unequal Temperament Quantizer #### WK-101 Das Wohltemperierte Klavier - -![View of the Das Wohltemperierte Klavier](WK-101.png "Das Wohltemperierte Klavier") +![View of the Das Wohltemperierte Klavier](WK-101.m.png "Das Wohltemperierte Klavier") ## Basic Operation @@ -12,8 +11,7 @@ The currently recognized pitch is indicated by a small blue led in the centre of The context menu offers presets which you can configure. See below for more details #### WK-205 Das Wohltemperierte Klavier Nano - -![View of the Das Wohltemperierte Klavier nano](WK-205.png "Das Wohltemperierte Klavier nano") +![View of the Das Wohltemperierte Klavier nano](WK-205.m.png "Das Wohltemperierte Klavier nano") ## Basic Operation diff --git a/manual/WM-101.m.png b/manual/WM-101.m.png new file mode 100644 index 00000000..c66e62c3 Binary files /dev/null and b/manual/WM-101.m.png differ diff --git a/manual/WM-102.m.png b/manual/WM-102.m.png new file mode 100644 index 00000000..a9153bf8 Binary files /dev/null and b/manual/WM-102.m.png differ diff --git a/manual/WM-Billboard.png b/manual/WM-Billboard.png deleted file mode 100644 index bd82ea2f..00000000 Binary files a/manual/WM-Billboard.png and /dev/null differ diff --git a/manual/WM.md b/manual/WM.md index 98864c03..f04404d9 100644 --- a/manual/WM.md +++ b/manual/WM.md @@ -1,8 +1,8 @@ # Wire Manager #### WM-101 Wire Manager +![View of the Wire Manager](WM-101.m.png "Wire Manager") #### WM-102 Wire Manager Billboard - -![View of the Wire Manager](WM.png "Wire Manager") +![View of the Wire Manager](WM-102.m.png "Wire Manager") The wire manager offers the ability to choose more colors for the patch cables that you use in your patches. It also has highlighting options which some users may find useful in tracing wires around the patch. @@ -88,8 +88,6 @@ In this way you can keep the WM-101 Wire Manager in your patch for ready access, ## Billboard -![View of the Wire Manager Billboard](WM-Billboard.png "Billboard View") - The billboard control at the top right of the module will switch to a billboard display, suitable for use as a key when recording videos. By default the billboard displays wires with a rounded effect but you can have flat colors by adjusting the "3D billboard?" setting. You can switch back to the standard view by clicking on the arrow at the top left of the module. diff --git a/manual/WM.png b/manual/WM.png deleted file mode 100644 index 8a9350b6..00000000 Binary files a/manual/WM.png and /dev/null differ diff --git a/manual/XF-101.m.png b/manual/XF-101.m.png new file mode 100644 index 00000000..f1e71753 Binary files /dev/null and b/manual/XF-101.m.png differ diff --git a/manual/XF-102.m.png b/manual/XF-102.m.png new file mode 100644 index 00000000..ffde32a9 Binary files /dev/null and b/manual/XF-102.m.png differ diff --git a/manual/XF-104.m.png b/manual/XF-104.m.png new file mode 100644 index 00000000..47ed8ad0 Binary files /dev/null and b/manual/XF-104.m.png differ diff --git a/manual/XF-201.m.png b/manual/XF-201.m.png new file mode 100644 index 00000000..790557bf Binary files /dev/null and b/manual/XF-201.m.png differ diff --git a/manual/XF-202.m.png b/manual/XF-202.m.png new file mode 100644 index 00000000..877262ff Binary files /dev/null and b/manual/XF-202.m.png differ diff --git a/manual/XF-301.m.png b/manual/XF-301.m.png new file mode 100644 index 00000000..9be312b0 Binary files /dev/null and b/manual/XF-301.m.png differ diff --git a/manual/XF.md b/manual/XF.md index c363e41d..bb258d6a 100755 --- a/manual/XF.md +++ b/manual/XF.md @@ -1,12 +1,16 @@ # Equal Power Cross-Fader #### XF-101 Single Monophonic Cross-Fader +![View of the Cross-Fader modules](XF-101.m.png "Cross-Fader Range") #### XF-102 Dual Monophonic Cross-Fader with LINK option +![View of the Cross-Fader modules](XF-102.m.png "Cross-Fader Range") #### XF-104 Quad Monophonic Cross-Fader with LINK option +![View of the Cross-Fader modules](XF-104.m.png "Cross-Fader Range") #### XF-201 Single Stereophonic Cross-Fader +![View of the Cross-Fader modules](XF-201.m.png "Cross-Fader Range") #### XF-202 Dual Stereophonic Cross-Fader +![View of the Cross-Fader modules](XF-202.m.png "Cross-Fader Range") #### XF-301 Small Form Factor Stereophonic Cross-Fader - -![View of the Cross-Fader modules](XF.png "Cross-Fader Range") +![View of the Cross-Fader modules](XF-301.m.png "Cross-Fader Range") ## Basic Operation diff --git a/manual/XF.png b/manual/XF.png deleted file mode 100755 index 5758d95e..00000000 Binary files a/manual/XF.png and /dev/null differ diff --git a/manual/XG-104.m.png b/manual/XG-104.m.png new file mode 100644 index 00000000..d2d0de94 Binary files /dev/null and b/manual/XG-104.m.png differ diff --git a/manual/XG-106.m.png b/manual/XG-106.m.png new file mode 100644 index 00000000..2abd9d8c Binary files /dev/null and b/manual/XG-106.m.png differ diff --git a/manual/XG-202.m.png b/manual/XG-202.m.png new file mode 100644 index 00000000..dffa6835 Binary files /dev/null and b/manual/XG-202.m.png differ diff --git a/manual/XG.md b/manual/XG.md index c7694d6c..feb1760c 100755 --- a/manual/XG.md +++ b/manual/XG.md @@ -1,10 +1,11 @@ # Logical XOR Gates ### [Part of the Digital Suite](DS.md) #### XG-104 XOR Gates +![View of the XOR Gates](XG-104.m.png "XOR Gates") #### XG-106 XOR Gates +![View of the XOR Gates](XG-106.m.png "XOR Gates") #### XG-202 XOR Gates - -![View of the XOR Gates](XG.png "XOR Gates") +![View of the XOR Gates](XG-202.m.png "XOR Gates") ## Basic Operation diff --git a/manual/XG.png b/manual/XG.png deleted file mode 100755 index f171d41e..00000000 Binary files a/manual/XG.png and /dev/null differ diff --git a/manual/XX-219.m.png b/manual/XX-219.m.png new file mode 100644 index 00000000..4a9bfb1c Binary files /dev/null and b/manual/XX-219.m.png differ diff --git a/manual/index.md b/manual/index.md index d3a5ae6e..461ec1ae 100755 --- a/manual/index.md +++ b/manual/index.md @@ -1,5 +1,7 @@ ## [Get Latest Builds](https://github.com/david-c14/SubmarineFree/releases) +## [Visual menu (skins)](Visual.md) + # [AG](AG.md) Logical AND gates diff --git a/plugin.json b/plugin.json index 02dd35bd..cc542088 100644 --- a/plugin.json +++ b/plugin.json @@ -11,7 +11,7 @@ "donateUrl": "https://www.paypal.me/SubmarineFree", "pluginUrl": "https://github.com/david-c14/SubmarineFree/blob/main/README.md", "changelogUrl": "https://github.com/david-c14/SubmarineFree/blob/main/changelog.md", - "version": "1.1.9", + "version": "1.1.10", "modules": [ { "slug":"AG-104", diff --git a/src/VMX.cpp b/src/VMX.cpp index 4121ac24..cdf6715a 100755 --- a/src/VMX.cpp +++ b/src/VMX.cpp @@ -8,6 +8,9 @@ Difference function for mass-damped spring needle VU-meter a₀⋅y₀ = b₀⋅x₀ + b₁⋅x₋₁ + b₂⋅x₋₂ - a₁⋅y₋₁ - a₂⋅y₋₂ +ζ = 0.81272 (damping ratio) +ωn = 13.5119 (undamped natural frequency) + a₀ = 4 + 4⋅ζ⋅ωn⋅Td + ωn²⋅Td² a₁ = -8 + 2⋅ωn²⋅Td a₂ = 4 - 4⋅ζ⋅ωn⋅Td + ωn²⋅Td² @@ -15,6 +18,11 @@ b₀ = ωn²⋅Td² b₁ = 2⋅ωn²⋅Td² b₂ = ωn²⋅Td² +Derived from work by Bryce E. Lobdell and Jont B. Allen + +Lobdell, B. E., and Allen, J. B. (2007). "A model of the VU (volume-unit) meter, with speech applications" J. Acoust. Soc. Am., February 2007, 279-285 +[DOI: 10.1121/1.2387130] + */ namespace { @@ -76,28 +84,30 @@ namespace { } }; + float squareScale(float x, float min, float max) { + x = rescale(x, -20.0f, 3.0f, 0.0f, 1.0f); + x *= x * x; + return rescale(x, 0.0f, 1.0f, min, max); + } + struct VM_LinearDisplay : LightWidget { float value = 0.0f; void draw(const DrawArgs &args) override { - float meter = rescale(value, -20.0f, 3.0f, 0.0f, box.size.y); - if (value > 0.0f) { - nvgBeginPath(args.vg); - nvgFillColor(args.vg, SUBLIGHTRED); - nvgRect(args.vg, 0, box.size.y - meter, box.size.x, meter); - nvgFill(args.vg); - meter = rescale(0, -20.0f, 3.0f, 0.0f, box.size.y); - } + float zeroPoint = squareScale(0, box.size.y, 0); + float meter = squareScale(value, 0.0f, box.size.y); + + NVGpaint grad = nvgLinearGradient(args.vg, 0, zeroPoint - 10.0f, 0, zeroPoint + 10.0f, SUBLIGHTRED, nvgRGB(30,255,0)); + nvgFillPaint(args.vg, grad); + nvgBeginPath(args.vg); - nvgFillColor(args.vg, SUBLIGHTBLUE); nvgRect(args.vg, 0, box.size.y - meter, box.size.x, meter); nvgFill(args.vg); Widget::draw(args); } }; - struct VM_NeedleDisplay : LightWidget { - float value = 0.0f; + struct VM_NeedleCanvas : Widget { void drawText(NVGcontext *vg, float x, float y, int align, float size, NVGcolor col, const char *txt) { nvgFontFaceId(vg, gScheme.font(vg)); @@ -106,84 +116,108 @@ namespace { nvgFillColor(vg, col); nvgText(vg, x, y, txt, NULL); } + void drawText(NVGcontext *vg, float point, NVGcolor col, const char *txt) { + float tick = squareScale(point, M_PI * 0.75, M_PI * 0.25); + drawText(vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.75f, box.size.y - sin(tick) * box.size.y * 0.77f, + NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, col, txt); + } + + void addTick(const DrawArgs &args, float point) { + float tick = squareScale(point, M_PI * 0.75, M_PI * 0.25); + nvgMoveTo(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.85f, box.size.y - sin(tick) * box.size.y * 0.85f); + nvgLineTo(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.9f, box.size.y - sin(tick) * box.size.y * 0.9f); + } void draw(const DrawArgs &args) override { - - float meter = rescale(value, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); + // White backpanel nvgBeginPath(args.vg); nvgFillColor(args.vg, nvgRGB(255,255,255)); nvgRect(args.vg, 0, 0, box.size.x, box.size.y); nvgFill(args.vg); - float zeroPoint = rescale(0.0f, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); + // Change from black to red scale + float zeroPoint = squareScale(0.0f, M_PI * 0.75, M_PI * 0.25); + // Red arc nvgLineCap(args.vg, NVG_ROUND); nvgStrokeColor(args.vg, SUBLIGHTRED); nvgBeginPath(args.vg); nvgArc(args.vg, box.size.x * 0.5f, box.size.y, - box.size.y * 0.8f, + box.size.y * 0.9f, -zeroPoint, M_PI * -0.25f, NVG_CW); - for (int i = 1; i <= 3; i++) { - float tick = rescale(i, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - nvgMoveTo(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.75f, box.size.y - sin(tick) * box.size.y * 0.75f); - nvgLineTo(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.8f, box.size.y - sin(tick) * box.size.y * 0.8f); - } + addTick(args, 1.0f); + addTick(args, 2.0f); + addTick(args, 3.0f); nvgStroke(args.vg); + // Black arc nvgStrokeColor(args.vg, nvgRGB(0,0,0)); nvgBeginPath(args.vg); nvgArc(args.vg, box.size.x * 0.5f, box.size.y, - box.size.y * 0.8f, + box.size.y * 0.9f, M_PI * -0.75f, -zeroPoint, NVG_CW); - for (int i = -20; i <= 0; i++) { - float tick = rescale(i, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - nvgMoveTo(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.75f, box.size.y - sin(tick) * box.size.y * 0.75f); - nvgLineTo(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.8f, box.size.y - sin(tick) * box.size.y * 0.8f); - } + addTick(args, 0.0f); + addTick(args, -1.0f); + addTick(args, -2.0f); + addTick(args, -3.0f); + addTick(args, -4.0f); + addTick(args, -5.0f); + addTick(args, -6.0f); + addTick(args, -7.0f); + addTick(args, -8.0f); + addTick(args, -9.0f); + addTick(args, -10.0f); + addTick(args, -20.0f); nvgStroke(args.vg); - drawText(args.vg, box.size.x * 0.5, box.size.y * 0.9, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 12, nvgRGB(0,0,0), "VU"); - drawText(args.vg, 10, 30, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 10, nvgRGB(0,0,0), "-"); - drawText(args.vg, box.size.x - 10, 30, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 10, SUBLIGHTRED, "+"); - float tick = rescale(-20, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - drawText(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.65f, box.size.y - sin(tick) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "20"); - tick = rescale(-15, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - drawText(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.65f, box.size.y - sin(tick) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "15"); - tick = rescale(-10, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - drawText(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.65f, box.size.y - sin(tick) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "10"); - tick = rescale(-6, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - drawText(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.65f, box.size.y - sin(tick) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "6"); - tick = rescale(-3, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - drawText(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.65f, box.size.y - sin(tick) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "3"); - drawText(args.vg, box.size.x * 0.5 + cos(zeroPoint) * box.size.y * 0.65f, box.size.y - sin(zeroPoint) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "0"); - tick = rescale(3, -20.0f, 3.0f, M_PI * 0.75, M_PI * 0.25); - drawText(args.vg, box.size.x * 0.5 + cos(tick) * box.size.y * 0.65f, box.size.y - sin(tick) * box.size.y * 0.7f, - NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, nvgRGB(0,0,0), "3"); + drawText(args.vg, box.size.x * 0.5, box.size.y * 0.7, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 12, nvgRGB(0,0,0), "VU"); + drawText(args.vg, 10, 20, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 10, nvgRGB(0,0,0), "-"); + drawText(args.vg, box.size.x - 10, 20, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 10, SUBLIGHTRED, "+"); + drawText(args.vg, -27, nvgRGB(0,0,0), "20"); + drawText(args.vg, -10, nvgRGB(0,0,0), "10"); + drawText(args.vg, -7, nvgRGB(0,0,0), "7"); + drawText(args.vg, -5, nvgRGB(0,0,0), "5"); + drawText(args.vg, -3, nvgRGB(0,0,0), "3"); + drawText(args.vg, -1, nvgRGB(0,0,0), "1"); + drawText(args.vg, 0, nvgRGB(0,0,0), "0"); + drawText(args.vg, 1, SUBLIGHTRED, "1"); + drawText(args.vg, 2, SUBLIGHTRED, "2"); + drawText(args.vg, 3.3, SUBLIGHTRED, "3"); + + Widget::draw(args); + } + }; + struct VM_NeedleDisplay : LightWidget { + float value = 0.0f; + FramebufferWidget *fb; + VM_NeedleDisplay(float width, float height) : LightWidget() { + box.size = Vec(width, height); + fb = new FramebufferWidget(); + VM_NeedleCanvas *canvas = new VM_NeedleCanvas(); + canvas->box.size = box.size; + fb->addChild(canvas); + addChild(fb); + } + void draw(const DrawArgs &args) override { + Widget::draw(args); + float meter = squareScale(value, M_PI * 0.75, M_PI * 0.25); nvgStrokeColor(args.vg, nvgRGB(0,0,0)); nvgBeginPath(args.vg); nvgMoveTo(args.vg, box.size.x * 0.5f, box.size.y); - nvgLineTo(args.vg, box.size.x * 0.5f + cos(meter) * box.size.y * 0.8f, box.size.y - sin(meter) * box.size.y * 0.8f); + nvgLineTo(args.vg, box.size.x * 0.5f + cos(meter) * box.size.y * 0.9f, box.size.y - sin(meter) * box.size.y * 0.9f); nvgStrokeWidth(args.vg, 1); nvgStroke(args.vg); - Widget::draw(args); } }; - } struct VM_Base : Module { @@ -307,8 +341,8 @@ struct VMxxx : SchemeModuleWidget { }; struct VM101 : VMxxx { - const float displayHeight = 12; - const float displayPos = 19.5; + const float displayHeight = 276.0f; + const float displayPos = 19.5f; VM_LinearDisplay *display; VM101(VM_xx1 *module) : VMxxx() { setModule(module); @@ -317,38 +351,54 @@ struct VM101 : VMxxx { display = new VM_LinearDisplay(); display->box.pos = Vec(10, displayPos); - display->box.size = Vec(10, displayHeight * 23.0f); + display->box.size = Vec(10, displayHeight); addChild(display); addInput(createInputCentered(Vec(15,350), module, VM_xx1::INPUT_1)); addParam(createParamCentered>(Vec(15, 315), module, PARAM_ATTENUATOR)); } + void addTick(NVGcontext *vg, float point) { + float tick = displayPos + squareScale(point, displayHeight, 0.0f); + nvgMoveTo(vg, 10, tick); + nvgLineTo(vg, 28, tick); + } + void addText(NVGcontext *vg, float point, NVGcolor col, const char *txt) { + float tick = displayPos + squareScale(point, displayHeight, 0.0f); + drawText(vg, 5.0f, tick, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8.0f, col, txt); + } void render(NVGcontext *vg, SchemeCanvasWidget *canvas) override { drawBase(vg, "VM-101"); - drawText(vg, 25, 332, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE, 8, gScheme.getContrast(module), "\xe2\x84\xa6"); - for(unsigned int i = 0; i <= 23; i++) { - nvgBeginPath(vg); - nvgStrokeColor(vg, (i < 3)?SUBLIGHTRED:gScheme.getContrast(module)); - nvgStrokeWidth(vg, 1); - nvgMoveTo(vg, 10, displayPos + i * displayHeight); - nvgLineTo(vg, 20, displayPos + i * displayHeight); - if (i % 2) { - if (i > 2) { - nvgLineTo(vg, 28, displayPos + i * displayHeight); - } - } - nvgStroke(vg); - } - drawText(vg, 5, displayPos, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, SUBLIGHTRED, "3"); - drawText(vg, 5, displayPos + 2 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, SUBLIGHTRED, "+"); - drawText(vg, 25, displayPos + 2.5 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "%"); - drawText(vg, 5, displayPos + 3 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "0"); - drawText(vg, 5, displayPos + 4 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "-"); - drawText(vg, 5, displayPos + 6 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "3"); - drawText(vg, 5, displayPos + 9 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "6"); - drawText(vg, 5, displayPos + 13 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "10"); - drawText(vg, 5, displayPos + 18 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "15"); - drawText(vg, 5, displayPos + 23 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "20"); + nvgStrokeWidth(vg, 1); + nvgBeginPath(vg); + nvgStrokeColor(vg, SUBLIGHTRED); + addTick(vg, 3); + addTick(vg, 2); + addTick(vg, 1); + nvgStroke(vg); + + nvgBeginPath(vg); + nvgStrokeColor(vg, gScheme.getContrast(module)); + addTick(vg, 0); + addTick(vg, -1); + addTick(vg, -2); + addTick(vg, -3); + addTick(vg, -4); + addTick(vg, -5); + addTick(vg, -6); + addTick(vg, -7); + addTick(vg, -8); + addTick(vg, -9); + addTick(vg, -10); + addTick(vg, -20); + nvgStroke(vg); + addText(vg, 3, SUBLIGHTRED, "3"); + addText(vg, 1, SUBLIGHTRED, "+"); + addText(vg, 0, gScheme.getContrast(module), "0"); + addText(vg, -1, gScheme.getContrast(module), "-"); + addText(vg, -3, gScheme.getContrast(module), "3"); + addText(vg, -6, gScheme.getContrast(module), "6"); + addText(vg, -10, gScheme.getContrast(module), "10"); + addText(vg, -20, gScheme.getContrast(module), "20"); } void step() override { if (module) { @@ -360,8 +410,8 @@ struct VM101 : VMxxx { }; struct VM102 : VMxxx { - const float displayHeight = 12; - const float displayPos = 19.5; + const float displayHeight = 276.0f; + const float displayPos = 19.5f; VM_LinearDisplay *display1; VM_LinearDisplay *display2; VM102(VM_102 *module) : VMxxx() { @@ -371,39 +421,60 @@ struct VM102 : VMxxx { display1 = new VM_LinearDisplay(); display1->box.pos = Vec(2, displayPos); - display1->box.size = Vec(8, displayHeight * 23.0f); + display1->box.size = Vec(8, displayHeight); addChild(display1); display2 = new VM_LinearDisplay(); display2->box.pos = Vec(20, displayPos); - display2->box.size = Vec(8, displayHeight * 23.0f); + display2->box.size = Vec(8, displayHeight); addChild(display2); addInput(createInputCentered(Vec(15,350), module, VM_102::INPUT_1)); addParam(createParamCentered>(Vec(15, 315), module, PARAM_ATTENUATOR)); } + void addTick(NVGcontext *vg, float point) { + float tick = displayPos + squareScale(point, displayHeight, 0.0f); + nvgMoveTo(vg, 2, tick); + nvgLineTo(vg, 10, tick); + nvgMoveTo(vg, 20, tick); + nvgLineTo(vg, 28, tick); + } + void addText(NVGcontext *vg, float point, NVGcolor col, const char *txt) { + float tick = displayPos + squareScale(point, displayHeight, 0.0f); + drawText(vg, 15.0f, tick, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8.0f, col, txt); + } void render(NVGcontext *vg, SchemeCanvasWidget *canvas) override { drawBase(vg, "VM-102"); - drawText(vg, 25, 332, NVG_ALIGN_CENTER | NVG_ALIGN_BASELINE, 8, gScheme.getContrast(module), "\xe2\x84\xa6"); - for(unsigned int i = 0; i <= 23; i++) { - nvgBeginPath(vg); - nvgStrokeColor(vg, (i < 3)?SUBLIGHTRED:gScheme.getContrast(module)); - nvgStrokeWidth(vg, 1); - nvgMoveTo(vg, 2, displayPos + i * displayHeight); - nvgLineTo(vg, 10, displayPos + i * displayHeight); - nvgMoveTo(vg, 20, displayPos + i * displayHeight); - nvgLineTo(vg, 28, displayPos + i * displayHeight); - nvgStroke(vg); - } - drawText(vg, 15, displayPos, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, SUBLIGHTRED, "3"); - drawText(vg, 15, displayPos + 2 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, SUBLIGHTRED, "+"); - drawText(vg, 15, displayPos + 3 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "0"); - drawText(vg, 15, displayPos + 4 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "-"); - drawText(vg, 15, displayPos + 6 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "3"); - drawText(vg, 15, displayPos + 9 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "6"); - drawText(vg, 15, displayPos + 13 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "10"); - drawText(vg, 15, displayPos + 18 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "15"); - drawText(vg, 15, displayPos + 23 * displayHeight, NVG_ALIGN_CENTER | NVG_ALIGN_MIDDLE, 8, gScheme.getContrast(module), "20"); + nvgStrokeWidth(vg, 1); + nvgBeginPath(vg); + nvgStrokeColor(vg, SUBLIGHTRED); + addTick(vg, 1); + addTick(vg, 2); + addTick(vg, 3); + nvgStroke(vg); + nvgBeginPath(vg); + nvgStrokeColor(vg, gScheme.getContrast(module)); + addTick(vg, 0); + addTick(vg, -1); + addTick(vg, -2); + addTick(vg, -3); + addTick(vg, -4); + addTick(vg, -5); + addTick(vg, -6); + addTick(vg, -7); + addTick(vg, -8); + addTick(vg, -9); + addTick(vg, -10); + addTick(vg, -20); + nvgStroke(vg); + addText(vg, 3.0f, SUBLIGHTRED, "3"); + addText(vg, 1.0f, SUBLIGHTRED, "+"); + addText(vg, 0.0f, gScheme.getContrast(module), "0"); + addText(vg, -1.0f, gScheme.getContrast(module), "-"); + addText(vg, -3.0f, gScheme.getContrast(module), "3"); + addText(vg, -6.0f, gScheme.getContrast(module), "6"); + addText(vg, -10.0f, gScheme.getContrast(module), "10"); + addText(vg, -20.0f, gScheme.getContrast(module), "20"); } void step() override { if (module) { @@ -422,9 +493,8 @@ struct VM201 : VMxxx { this->box.size = Vec(150, 380); addChild(new SchemePanel(this->box.size)); - display = new VM_NeedleDisplay(); + display = new VM_NeedleDisplay(130, 90); display->box.pos = Vec(10, 20); - display->box.size = Vec(130, 90); addChild(display); addInput(createInputCentered(Vec(20,330), module, VM_xx1::INPUT_1)); @@ -452,14 +522,12 @@ struct VM202 : VMxxx { this->box.size = Vec(150, 380); addChild(new SchemePanel(this->box.size)); - display1 = new VM_NeedleDisplay(); + display1 = new VM_NeedleDisplay(130, 90); display1->box.pos = Vec(10, 20); - display1->box.size = Vec(130, 90); addChild(display1); - display2 = new VM_NeedleDisplay(); + display2 = new VM_NeedleDisplay(130, 90); display2->box.pos = Vec(10, 120); - display2->box.size = Vec(130, 90); addChild(display2); addInput(createInputCentered(Vec(20,330), module, VM_202::INPUT_1)); diff --git a/src/WM1.cpp b/src/WM1.cpp index a4737c8c..e027265d 100755 --- a/src/WM1.cpp +++ b/src/WM1.cpp @@ -2496,8 +2496,10 @@ struct WM102 : SchemeModuleWidget, WM_Base { addChild(schemePanel); } void render(NVGcontext *vg, SchemeCanvasWidget *canvas) override { - if (!module) + if (!module) { + drawBase(vg, "WM-102"); return; + } WM_102 *wm = dynamic_cast(module); bool draw3d = module->params[WM_102::PARAM_DRAW_3D].getValue(); drawBase(vg, "WM-102");