diff --git a/plugins/community/repos/CatroModulo/.gitattributes b/plugins/community/repos/CatroModulo/.gitattributes new file mode 100644 index 00000000..dfe07704 --- /dev/null +++ b/plugins/community/repos/CatroModulo/.gitattributes @@ -0,0 +1,2 @@ +# Auto detect text files and perform LF normalization +* text=auto diff --git a/plugins/community/repos/CatroModulo/LICENCES/CF.txt b/plugins/community/repos/CatroModulo/LICENCES/CF.txt new file mode 100644 index 00000000..66ea3eae --- /dev/null +++ b/plugins/community/repos/CatroModulo/LICENCES/CF.txt @@ -0,0 +1,7 @@ +Copyright (c) 2018 clément foulc + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/LICENCES/FUNDAMENTAL.txt b/plugins/community/repos/CatroModulo/LICENCES/FUNDAMENTAL.txt new file mode 100644 index 00000000..18835632 --- /dev/null +++ b/plugins/community/repos/CatroModulo/LICENCES/FUNDAMENTAL.txt @@ -0,0 +1,7 @@ +Copyright (c) 2016 Andrew Belt + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/LICENCES/IMPROMPTUMODULAR.txt b/plugins/community/repos/CatroModulo/LICENCES/IMPROMPTUMODULAR.txt new file mode 100644 index 00000000..83e0b60f --- /dev/null +++ b/plugins/community/repos/CatroModulo/LICENCES/IMPROMPTUMODULAR.txt @@ -0,0 +1,14 @@ +#### IMPROMPTU MODULAR #### + +Copyright (c) 2018 Marc Boulé. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/plugins/community/repos/CatroModulo/LICENCES/VCV.txt b/plugins/community/repos/CatroModulo/LICENCES/VCV.txt new file mode 100644 index 00000000..18835632 --- /dev/null +++ b/plugins/community/repos/CatroModulo/LICENCES/VCV.txt @@ -0,0 +1,7 @@ +Copyright (c) 2016 Andrew Belt + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/LICENSE b/plugins/community/repos/CatroModulo/LICENSE new file mode 100644 index 00000000..3419719a --- /dev/null +++ b/plugins/community/repos/CatroModulo/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2019, catronomix +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/LICENSE.txt b/plugins/community/repos/CatroModulo/LICENSE.txt new file mode 100644 index 00000000..400e4cac --- /dev/null +++ b/plugins/community/repos/CatroModulo/LICENSE.txt @@ -0,0 +1,12 @@ +Copyright (c) 2019 Innocent Coppieters. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/plugins/community/repos/CatroModulo/make.objects b/plugins/community/repos/CatroModulo/make.objects new file mode 100644 index 00000000..f6065569 --- /dev/null +++ b/plugins/community/repos/CatroModulo/make.objects @@ -0,0 +1,13 @@ +ALL_OBJ= \ + src/CatroModulo.o \ + src/CatroModulo_CM-1.o \ + src/CatroModulo_CM-10.o \ + src/CatroModulo_CM-2.o \ + src/CatroModulo_CM-3.o \ + src/CatroModulo_CM-4.o \ + src/CatroModulo_CM-5.o \ + src/CatroModulo_CM-6.o \ + src/CatroModulo_CM-7.o \ + src/CatroModulo_CM-8.o \ + src/CatroModulo_CM-9.o \ + src/CM_helpers.o diff --git a/plugins/community/repos/CatroModulo/makefile.linux b/plugins/community/repos/CatroModulo/makefile.linux new file mode 100644 index 00000000..4000e49d --- /dev/null +++ b/plugins/community/repos/CatroModulo/makefile.linux @@ -0,0 +1,12 @@ +SLUG=CatroModulo + +include ../../../build_shared_plugin_pre_linux.mk + +include make.objects + +define BIN_POST_FXN + cp -f $(SLUG).so ../../../../vst2_bin/plugins/$(SLUG)/plugin.so.fx + cp -f $(SLUG).so ../../../../vst2_bin/plugins/$(SLUG)/plugin.so.instr +endef + +include ../../../build_shared_plugin_post_linux.mk diff --git a/plugins/community/repos/CatroModulo/makefile.msvc b/plugins/community/repos/CatroModulo/makefile.msvc new file mode 100644 index 00000000..52f1131a --- /dev/null +++ b/plugins/community/repos/CatroModulo/makefile.msvc @@ -0,0 +1,12 @@ +SLUG=CatroModulo + +include ../../../build_shared_plugin_pre_msvc.mk + +include make.objects + +define BIN_POST_FXN + cp -f $(SLUG).dll ../../../../vst2_bin/plugins/$(SLUG)/plugin.dll.fx + cp -f $(SLUG).dll ../../../../vst2_bin/plugins/$(SLUG)/plugin.dll.instr +endef + +include ../../../build_shared_plugin_post_msvc.mk diff --git a/plugins/community/repos/CatroModulo/res/CM-1.svg b/plugins/community/repos/CatroModulo/res/CM-1.svg new file mode 100644 index 00000000..5c855b30 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-1.svg @@ -0,0 +1,2282 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-10.svg b/plugins/community/repos/CatroModulo/res/CM-10.svg new file mode 100644 index 00000000..218279c2 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-10.svg @@ -0,0 +1,1363 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-2.svg b/plugins/community/repos/CatroModulo/res/CM-2.svg new file mode 100644 index 00000000..722c770a --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-2.svg @@ -0,0 +1,3173 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-2_new.svg b/plugins/community/repos/CatroModulo/res/CM-2_new.svg new file mode 100644 index 00000000..31e8fd2f --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-2_new.svg @@ -0,0 +1,3764 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-3.svg b/plugins/community/repos/CatroModulo/res/CM-3.svg new file mode 100644 index 00000000..1a63fb29 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-3.svg @@ -0,0 +1,3754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-4.svg b/plugins/community/repos/CatroModulo/res/CM-4.svg new file mode 100644 index 00000000..598df2c9 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-4.svg @@ -0,0 +1,1434 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-5.svg b/plugins/community/repos/CatroModulo/res/CM-5.svg new file mode 100644 index 00000000..798dd397 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-5.svg @@ -0,0 +1,1609 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-6.svg b/plugins/community/repos/CatroModulo/res/CM-6.svg new file mode 100644 index 00000000..cf7f6d2a --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-6.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-7.svg b/plugins/community/repos/CatroModulo/res/CM-7.svg new file mode 100644 index 00000000..4863cc56 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-7.svg @@ -0,0 +1,1560 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-8.svg b/plugins/community/repos/CatroModulo/res/CM-8.svg new file mode 100644 index 00000000..fcf1e33a --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-8.svg @@ -0,0 +1,2136 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-9.svg b/plugins/community/repos/CatroModulo/res/CM-9.svg new file mode 100644 index 00000000..f5fc15c5 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-9.svg @@ -0,0 +1,1836 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-TS_small_0.svg b/plugins/community/repos/CatroModulo/res/CM-TS_small_0.svg new file mode 100644 index 00000000..8e366975 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-TS_small_0.svg @@ -0,0 +1,218 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-TS_small_1.svg b/plugins/community/repos/CatroModulo/res/CM-TS_small_1.svg new file mode 100644 index 00000000..2d8224d2 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-TS_small_1.svg @@ -0,0 +1,215 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-TS_small_3_0.svg b/plugins/community/repos/CatroModulo/res/CM-TS_small_3_0.svg new file mode 100644 index 00000000..c6b4dfb7 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-TS_small_3_0.svg @@ -0,0 +1,212 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-TS_small_3_1.svg b/plugins/community/repos/CatroModulo/res/CM-TS_small_3_1.svg new file mode 100644 index 00000000..e9d55f6a --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-TS_small_3_1.svg @@ -0,0 +1,216 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-TS_small_3_2.svg b/plugins/community/repos/CatroModulo/res/CM-TS_small_3_2.svg new file mode 100644 index 00000000..52605a65 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-TS_small_3_2.svg @@ -0,0 +1,216 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-button_small_red.svg b/plugins/community/repos/CatroModulo/res/CM-button_small_red.svg new file mode 100644 index 00000000..c5c85590 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-button_small_red.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-button_small_red_dn.svg b/plugins/community/repos/CatroModulo/res/CM-button_small_red_dn.svg new file mode 100644 index 00000000..5d9386d9 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-button_small_red_dn.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-indicator_bigeye.svg b/plugins/community/repos/CatroModulo/res/CM-indicator_bigeye.svg new file mode 100644 index 00000000..ef53ac9b --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-indicator_bigeye.svg @@ -0,0 +1,104 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_bpm.svg b/plugins/community/repos/CatroModulo/res/CM-input_bpm.svg new file mode 100644 index 00000000..fccb6b68 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_bpm.svg @@ -0,0 +1,139 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_def.svg b/plugins/community/repos/CatroModulo/res/CM-input_def.svg new file mode 100644 index 00000000..31866598 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_def.svg @@ -0,0 +1,119 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonL.svg b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonL.svg new file mode 100644 index 00000000..984f06b4 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonL.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonL_dn.svg b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonL_dn.svg new file mode 100644 index 00000000..bf5ac615 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonL_dn.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonR.svg b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonR.svg new file mode 100644 index 00000000..c78a9da7 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonR.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonR_dn.svg b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonR_dn.svg new file mode 100644 index 00000000..06c2baf6 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_def_tinybuttonR_dn.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_small.svg b/plugins/community/repos/CatroModulo/res/CM-input_small.svg new file mode 100644 index 00000000..93dd0a5f --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_small.svg @@ -0,0 +1,104 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_small_tinybuttonL.svg b/plugins/community/repos/CatroModulo/res/CM-input_small_tinybuttonL.svg new file mode 100644 index 00000000..21caba64 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_small_tinybuttonL.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-input_small_tinybuttonL_dn.svg b/plugins/community/repos/CatroModulo/res/CM-input_small_tinybuttonL_dn.svg new file mode 100644 index 00000000..d2215eb5 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-input_small_tinybuttonL_dn.svg @@ -0,0 +1,80 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_big_attn.svg b/plugins/community/repos/CatroModulo/res/CM-knob_big_attn.svg new file mode 100644 index 00000000..6466252b --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_big_attn.svg @@ -0,0 +1,207 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_big_def.svg b/plugins/community/repos/CatroModulo/res/CM-knob_big_def.svg new file mode 100644 index 00000000..9fa02ce3 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_big_def.svg @@ -0,0 +1,176 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_big_offset.svg b/plugins/community/repos/CatroModulo/res/CM-knob_big_offset.svg new file mode 100644 index 00000000..f9e6cb1e --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_big_offset.svg @@ -0,0 +1,209 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_big_red.svg b/plugins/community/repos/CatroModulo/res/CM-knob_big_red.svg new file mode 100644 index 00000000..96867cd1 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_big_red.svg @@ -0,0 +1,175 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_bigeye.svg b/plugins/community/repos/CatroModulo/res/CM-knob_bigeye.svg new file mode 100644 index 00000000..5009c743 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_bigeye.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_huge_red.svg b/plugins/community/repos/CatroModulo/res/CM-knob_huge_red.svg new file mode 100644 index 00000000..714b5b3b --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_huge_red.svg @@ -0,0 +1,115 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_small_def.svg b/plugins/community/repos/CatroModulo/res/CM-knob_small_def.svg new file mode 100644 index 00000000..0ff20739 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_small_def.svg @@ -0,0 +1,184 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-knob_small_red.svg b/plugins/community/repos/CatroModulo/res/CM-knob_small_red.svg new file mode 100644 index 00000000..4bfefc87 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-knob_small_red.svg @@ -0,0 +1,184 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-output_bpm.svg b/plugins/community/repos/CatroModulo/res/CM-output_bpm.svg new file mode 100644 index 00000000..34c7606e --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-output_bpm.svg @@ -0,0 +1,140 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-output_def.svg b/plugins/community/repos/CatroModulo/res/CM-output_def.svg new file mode 100644 index 00000000..f59835de --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-output_def.svg @@ -0,0 +1,115 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-output_def_dark.svg b/plugins/community/repos/CatroModulo/res/CM-output_def_dark.svg new file mode 100644 index 00000000..e3b03c65 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-output_def_dark.svg @@ -0,0 +1,116 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-output_small.svg b/plugins/community/repos/CatroModulo/res/CM-output_small.svg new file mode 100644 index 00000000..190c6591 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-output_small.svg @@ -0,0 +1,117 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-pot1_big.svg b/plugins/community/repos/CatroModulo/res/CM-pot1_big.svg new file mode 100644 index 00000000..6fb151a2 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-pot1_big.svg @@ -0,0 +1,164 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-pot1_huge.svg b/plugins/community/repos/CatroModulo/res/CM-pot1_huge.svg new file mode 100644 index 00000000..6f98cf61 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-pot1_huge.svg @@ -0,0 +1,166 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-pot1_small.svg b/plugins/community/repos/CatroModulo/res/CM-pot1_small.svg new file mode 100644 index 00000000..6eb4b86f --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-pot1_small.svg @@ -0,0 +1,165 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-recbutton.svg b/plugins/community/repos/CatroModulo/res/CM-recbutton.svg new file mode 100644 index 00000000..e9326617 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-recbutton.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-recbutton_dn.svg b/plugins/community/repos/CatroModulo/res/CM-recbutton_dn.svg new file mode 100644 index 00000000..d1996815 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-recbutton_dn.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-slider_big_red.svg b/plugins/community/repos/CatroModulo/res/CM-slider_big_red.svg new file mode 100644 index 00000000..f756f78c --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-slider_big_red.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-slider_big_red_bg.svg b/plugins/community/repos/CatroModulo/res/CM-slider_big_red_bg.svg new file mode 100644 index 00000000..e10b852e --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-slider_big_red_bg.svg @@ -0,0 +1,97 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-tryme_button.svg b/plugins/community/repos/CatroModulo/res/CM-tryme_button.svg new file mode 100644 index 00000000..15494ffd --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-tryme_button.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM-tryme_button_dn.svg b/plugins/community/repos/CatroModulo/res/CM-tryme_button_dn.svg new file mode 100644 index 00000000..f5f59a50 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM-tryme_button_dn.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/CM9_ledinc.svg b/plugins/community/repos/CatroModulo/res/CM9_ledinc.svg new file mode 100644 index 00000000..cbdf6f52 --- /dev/null +++ b/plugins/community/repos/CatroModulo/res/CM9_ledinc.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/plugins/community/repos/CatroModulo/res/Segment7Standard.ttf b/plugins/community/repos/CatroModulo/res/Segment7Standard.ttf new file mode 100644 index 00000000..bdd6e2af Binary files /dev/null and b/plugins/community/repos/CatroModulo/res/Segment7Standard.ttf differ diff --git a/plugins/community/repos/CatroModulo/src/CM_helpers.cpp b/plugins/community/repos/CatroModulo/src/CM_helpers.cpp new file mode 100644 index 00000000..a7aa8bdb --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CM_helpers.cpp @@ -0,0 +1,55 @@ +#include "CM_helpers.hpp" +#include "algorithm" +#include + +//helper functions + +//math and logic +float cm_clamp(float val, float lo = -10.0, float hi = 10.0){ + if (lo > hi) return 0; + return std::min(std::max(val, lo), hi); +} + +float cm_fold(float val, float lo = -10.0, float hi = 10.0){ + + if (lo == hi){ + return lo; + }else if (lo < hi){ + int i = 0; + while ((val < lo || val > hi) && i < 50){ + i++; + if (val < lo){ + val = -(val - lo) + lo; + }else if (val > hi){ + val = hi + (hi - val); + } + } + val = std::max(lo, std::min(val, hi)); + return val; + } + return 0.0; + + // faster implementation, thanks Paul! + + //this still has a bug on approaching zero. + // float turns = (hi - lo == 0.0) ? 0.0 : (val - lo) / ( hi - lo ); + // int iturns = (int)turns; + // float fracTurn = turns - iturns; + // if( fracTurn < 0 ) + // { + // fracTurn = fracTurn + 1; + // iturns = iturns - 1; + // } + // if( iturns % 2 ) + // fracTurn = 1.0 - fracTurn; + // return (hi-lo) * fracTurn + lo; + +} + +float cm_gauss(float size){ + return (((float)rand() / (RAND_MAX)) * 2.0 - 1.0) * size; +} +float cm_gauss(float size, float offset){ + return cm_gauss(size) + offset; +} + diff --git a/plugins/community/repos/CatroModulo/src/CM_helpers.hpp b/plugins/community/repos/CatroModulo/src/CM_helpers.hpp new file mode 100644 index 00000000..2ead0de8 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CM_helpers.hpp @@ -0,0 +1,13 @@ +#ifndef CM_HELPERS +#define CM_HELPERS + +//helper functions header + +//math and logic +float cm_clamp(float val, float lo, float hi); +float cm_fold(float val, float lo, float hi); +float cm_gauss(float size); +float cm_gauss(float size, float offset); + + +#endif \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo.cpp new file mode 100644 index 00000000..8b98e8f2 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo.cpp @@ -0,0 +1,65 @@ +#include "CatroModulo.hpp" + +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM1Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM2Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM3Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM4Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM5Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM6Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM7Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM8Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM9Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CM10Module); +RACK_PLUGIN_MODEL_DECLARE(CatroModulo, CatroModulo_CM7); + +RACK_PLUGIN_INIT(CatroModulo) { + RACK_PLUGIN_INIT_ID(); + RACK_PLUGIN_INIT_VERSION("0.6.5"); + RACK_PLUGIN_INIT_WEBSITE("https://github.com/catronomix/catro-modulo"); + RACK_PLUGIN_INIT_MANUAL("https://github.com/catronomix/catro-modulo/blob/master/CM-manual-v0.6.4.pdf"); + + // Add all Models defined throughout the plugin + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM1Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM2Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM3Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM4Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM5Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM6Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM7Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM8Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM9Module); + RACK_PLUGIN_MODEL_ADD(CatroModulo, CM10Module); + + // Any other plugin initialization may go here. + // As an alternative, consider lazy-loading assets and lookup tables when your module is created to reduce startup times of Rack. + printf("Catro has gone Modulo\n"); +} + +// void init(Plugin *p) { +// plugin = p; +// p->slug = TOSTRING(SLUG); +// p->version = TOSTRING(VERSION); +// +// // Add all Models defined throughout the plugin +// p->addModel(modelCM1Module); +// p->addModel(modelCM2Module); +// p->addModel(modelCM3Module); +// p->addModel(modelCM4Module); +// p->addModel(modelCM5Module); +// p->addModel(modelCM6Module); +// p->addModel(modelCM7Module); +// p->addModel(modelCM8Module); +// p->addModel(modelCM9Module); +// p->addModel(modelCM10Module); +// +// // Any other plugin initialization may go here. +// // As an alternative, consider lazy-loading assets and lookup tables when your module is created to reduce startup times of Rack. +// } + +//horizontal slider +void CM_Slider_big_red::onDragMove(EventDragMove& e) { + std::swap(e.mouseRel.x, e.mouseRel.y); + e.mouseRel.y = -e.mouseRel.y; + Knob::onDragMove(e); +} + diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo.hpp b/plugins/community/repos/CatroModulo/src/CatroModulo.hpp new file mode 100644 index 00000000..b129275a --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo.hpp @@ -0,0 +1,884 @@ +#include "rack.hpp" +#include "dsp/digital.hpp" +#include "CM_helpers.hpp" + +using namespace rack; + +RACK_PLUGIN_DECLARE(CatroModulo); + +#if defined(USE_VST2) && !defined(RACK_PLUGIN_SHARED) +#define plugin "CatroModulo" +#endif // USE_VST2 + + +//// Forward-declare the Plugin, defined in Template.cpp +//extern Plugin *plugin; +// +//// Forward-declare each Model, defined in each module source file +//extern Model *modelCM1Module; +//extern Model *modelCM2Module; +//extern Model *modelCM3Module; +//extern Model *modelCM4Module; +//extern Model *modelCM5Module; +//extern Model *modelCM6Module; +//extern Model *modelCM7Module; +//extern Model *modelCM8Module; +//extern Model *modelCM9Module; +//extern Model *modelCM10Module; + +//interface elements +struct CM_Knob_small_def : SVGKnob { + CM_Knob_small_def() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_small_def.svg"))); + shadow->opacity = 0; + + } +}; + +struct CM_Knob_small_def_half : CM_Knob_small_def { + CM_Knob_small_def_half() { + minAngle = -0.5*M_PI; + maxAngle = 0.5*M_PI; + } +}; + +struct CM_Knob_small_red : SVGKnob { + CM_Knob_small_red() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_small_red.svg"))); + shadow->opacity = 0; + + } +}; + +struct CM_Knob_big_def : SVGKnob { + CM_Knob_big_def() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_big_def.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Knob_big_attn : SVGKnob { + CM_Knob_big_attn() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_big_attn.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Knob_big_offset : SVGKnob { + CM_Knob_big_offset() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_big_offset.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Knob_big_def_tt : CM_Knob_big_def { + CM_Knob_big_def_tt() { + minAngle = -0.75*M_PI; + maxAngle = 0.75*M_PI; + } +}; + +struct CM_Knob_big_red : SVGKnob { + CM_Knob_big_red() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_big_red.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Knob_huge_red : SVGKnob { + CM_Knob_huge_red() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_huge_red.svg"))); + shadow->opacity = 0; + } +}; +struct CM_Knob_huge_red_os : CM_Knob_huge_red { + CM_Knob_huge_red_os() { + minAngle = 0.0*M_PI; + maxAngle = 2.0*M_PI; + } +}; + +struct CM_Knob_bigeye : SVGKnob { + CM_Knob_bigeye() { + minAngle = -1.0*M_PI; + maxAngle = 1.0*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/CM-knob_bigeye.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Pot1_small : SVGScrew { + CM_Pot1_small() { + sw->setSVG(SVG::load(assetPlugin(plugin, "res/CM-pot1_small.svg"))); + box.size = sw->box.size; + } +}; + +struct CM_Pot1_big : SVGScrew { + CM_Pot1_big() { + sw->setSVG(SVG::load(assetPlugin(plugin, "res/CM-pot1_big.svg"))); + box.size = sw->box.size; + + } +}; + +struct CM_Input_def : SVGPort { + CM_Input_def() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-input_def.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_I_def_tinybuttonL : SVGSwitch, MomentarySwitch { + CM_I_def_tinybuttonL() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-input_def_tinybuttonL.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-input_def_tinybuttonL_dn.svg"))); + } +}; + +struct CM_I_def_tinybuttonR : SVGSwitch, MomentarySwitch { + CM_I_def_tinybuttonR() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-input_def_tinybuttonR.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-input_def_tinybuttonR_dn.svg"))); + } +}; + +struct CM_Input_small : SVGPort { + CM_Input_small() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-input_small.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_I_small_tinybuttonL : SVGSwitch, MomentarySwitch { + CM_I_small_tinybuttonL() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-input_small_tinybuttonL.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-input_small_tinybuttonL_dn.svg"))); + } +}; + +struct CM_Input_bpm : SVGPort { + CM_Input_bpm() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-input_bpm.svg"))); + shadow->opacity = 0; + } +}; + + +struct CM_Output_def : SVGPort { + CM_Output_def() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-output_def.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Output_def_dark : SVGPort { + CM_Output_def_dark() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-output_def)dark.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Output_small : SVGPort { + CM_Output_small() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-output_small.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Output_bpm : SVGPort { + CM_Output_bpm() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM-output_bpm.svg"))); + shadow->opacity = 0; + } +}; + +struct CM_Switch_small : SVGSwitch, ToggleSwitch { + CM_Switch_small() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-TS_small_0.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-TS_small_1.svg"))); + } +}; + +struct CM_TryMe_button : SVGSwitch, MomentarySwitch { + CM_TryMe_button() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-tryme_button.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-tryme_button_dn.svg"))); + } +}; + +struct CM_Recbutton : SVGSwitch, MomentarySwitch { + CM_Recbutton() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-recbutton.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-recbutton_dn.svg"))); + } +}; + +struct CM_Button_small_red : SVGSwitch, MomentarySwitch { + CM_Button_small_red() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-button_small_red.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-button_small_red_dn.svg"))); + } +}; + +struct CM_Slider_big_red : SVGSlider { + CM_Slider_big_red() { + minHandlePos = Vec(-4, 0); + maxHandlePos = Vec(58, 0); + setSVGs(SVG::load(assetPlugin(plugin, "res/CM-slider_big_red_bg.svg")), SVG::load(assetPlugin(plugin, "res/CM-slider_big_red.svg"))); + } + void onDragMove(EventDragMove& e) override; +}; + +struct CM_Switch_small_3 : SVGSwitch, ToggleSwitch { + CM_Switch_small_3() { + addFrame(SVG::load(assetPlugin(plugin, "res/CM-TS_small_3_0.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-TS_small_3_1.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/CM-TS_small_3_2.svg"))); + } +}; + + + +//mechanisms + +//SELECT sequencer +struct CM_SelSeq { + private: + SchmittTrigger stepTrigger; + SchmittTrigger resetTrigger; + int patterns[16][16] = {}; + bool dostep; + float recsel; + int astep; + + public: + bool patternized; + + CM_SelSeq(){ + dostep = true; + recsel = 0.0f; + astep = 0; + patternized = false; + patternize(); + } + //sequencer built-in patterns + void patternize(){ + + int pat0[16] = {0,1,2,3,4,5,6,7,0,1,2,3,4,5,6,7}; + int pat1[16] = {0,7,6,5,4,3,2,1,0,7,6,5,4,3,2,1}; + int pat2[16] = {0,-1,1,-1,2,-1,3,-1,4,-1,5,-1,6,-1,7,-1}; + int pat3[16] = {0,-1,7,-1,6,-1,5,-1,4,-1,3,-1,2,-1,1,-1}; + + int pat4[16] = {0,2,6,4,1,3,7,5,0,2,6,4,1,3,7,5}; + int pat5[16] = {0,2,4,6,1,3,5,7,0,2,4,6,1,3,5,7}; + int pat6[16] = {0,2,1,3,2,4,3,5,4,6,5,7,6,0,7,1}; + int pat7[16] = {0,3,1,4,2,5,3,6,4,7,5,0,6,1,7,2}; + + int pat8[16] = {0,1,2,3,4,5,6,7,7,6,5,4,3,2,1,0}; + int pat9[16] = {0,1,2,3,4,3,2,1,0,1,2,3,4,3,2,1}; + int pat10[16] = {0,1,2,3,2,1,0,1,2,3,2,1,0,1,2,3}; + int pat11[16] = {0,4,1,5,2,6,3,7,4,0,5,1,6,2,7,3}; + + int pat12[16] = {0,1,2,3,1,2,3,4,2,3,4,5,3,4,5,6}; + int pat13[16] = {0,1,2,1,2,3,2,3,4,3,4,5,4,5,6,5}; + int pat14[16] = {7,5,6,4,5,3,4,2,1,3,2,4,3,5,4,6}; + int pat15[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + + + for (int i = 0; i < 16; i++){ + patterns[0][i] = pat0[i]; + } + for (int i = 0; i < 16; i++){ + patterns[1][i] = pat1[i]; + } + for (int i = 0; i < 16; i++){ + patterns[2][i] = pat2[i]; + } + for (int i = 0; i < 16; i++){ + patterns[3][i] = pat3[i]; + } + for (int i = 0; i < 16; i++){ + patterns[4][i] = pat4[i]; + } + for (int i = 0; i < 16; i++){ + patterns[5][i] = pat5[i]; + } + for (int i = 0; i < 16; i++){ + patterns[6][i] = pat6[i]; + } + for (int i = 0; i < 16; i++){ + patterns[7][i] = pat7[i]; + } + for (int i = 0; i < 16; i++){ + patterns[8][i] = pat8[i]; + } + for (int i = 0; i < 16; i++){ + patterns[9][i] = pat9[i]; + } + for (int i = 0; i < 16; i++){ + patterns[10][i] = pat10[i]; + } + for (int i = 0; i < 16; i++){ + patterns[11][i] = pat11[i]; + } + for (int i = 0; i < 16; i++){ + patterns[12][i] = pat12[i]; + } + for (int i = 0; i < 16; i++){ + patterns[13][i] = pat13[i]; + } + for (int i = 0; i < 16; i++){ + patterns[14][i] = pat14[i]; + } + for (int i = 0; i < 16; i++){ + patterns[15][i] = pat15[i]; + } + patternized = true; + } + + void reset(float ireset){ + if (resetTrigger.process(ireset)) { + astep = 0; + dostep = true; + } + } + + void step(float istep, float len){ + if (stepTrigger.process(istep)) { + if(astep < len && len <= 16){astep++;}else{astep = 0;} + dostep = true; + } + } + + //Main sequencer function + float sequence(int pat){ + if (dostep == true){ + if (pat == 15){ + recsel = cm_gauss(4.0, 4.0); + }else{ + recsel = patterns[pat][astep]; + } + dostep = false; + } + return recsel; + } + +}; + +//CV recorder order: scan, mix, output +struct CM_Recorder { + private: + float store[8][8] = {}; + float call[8] = {}; + float out[8] = {}; + float lastselect = -1.0; + float lastscan = -1.0; + SchmittTrigger randomTrigger; + + public: + + CM_Recorder(){ + randomize(); + } + + void reset(){ + lastselect = -1.0; + } + + void randomize(){ + srand(time(NULL)); + } + + //Save + float save(int i, int j){ + return store[i][j]; + } + + //Load + void load(int i, int j, float val){ + store[i][j] = val; + } + + //store recording + void record(float *eyeval, int i){ + for (int j = 0; j < 8; j++) { + store[i][j] = eyeval[j]; + } + reset(); + } + + //randomize recordings + void tryme(float dotry){ + if (randomTrigger.process(dotry)){ + for (int i = 0; i < 8; i++){ + for (int j = 0; j < 8; j++) { + rand(); rand(); //call random twice to get more random + store[i][j] = ((double) rand() / (RAND_MAX)); + } + } + reset(); + } + } + + //selector scanning + void scan(float select, float scanner){ + if (scanner == 0.0){ + if (select > 7.5){ + select = 0.0; + }else{ + select = roundf(select); + } + } + if (scanner != lastscan){ + reset(); + } + + if (select != lastselect){ + for (int i = 0; i < 8; i++) { + if (select < (i + 1.0)){ + if (i == 7){ + for (int j = 0; j < 8; j++) { + call[j] = (store[i][j] * (1.0f - (select - i)) + (store[0][j] * (select - i))); + } + i = 9; + }else{ + for (int j = 0; j < 8; j++) { + call[j] = (store[i][j] * (1.0f - (select - i)) + (store[i+1][j] * (select - i))); + } + i = 9; + } + } + } + lastselect = select; + } + lastscan = scanner; + } + + float callget(int eye){ + return call[eye]; + } + + //mix amount is between -1.0 and 1.0 + void mix(float *eyeval, float amount){ + if (amount >= 0.0f){ + for (int i = 0; i < 8; i++) { + out[i] = (eyeval[i] * (1.0f - amount) + call[i] * amount); + } + }else{ + for (int i = 0; i < 8; i++) { + out[i] = (eyeval[i] * call[i] * (0.0 - amount)) + (eyeval[i] * (1.0f + amount)); + } + } + } + + float output(int index){ + return out[index] * 10.0f; + } +}; + +//try something else? +// struct CM_BpmStreamer { +// int mcount = 0; +// float bpm_cv = 0; +// float reset = 0; +// float demuxbuffer[4] = {}; + +// CM_BpmStreamer(){} + +// void step(){ +// mcount = (mcount < 3) ? mcount + 1 : 0; +// } + +// float mux(){ +// float muxed = 0.0; +// if (mcount == 0){ +// muxed = -5.1; +// } +// if (mcount == 1){ +// muxed = bpm_cv; +// } +// if (mcount == 2){ +// muxed = reset; +// } +// if (mcount == 3){ +// muxed = -10.1; +// } +// return muxed; +// } + +// float mux(float signal){ +// float muxed = 0.0; +// if (mcount == 0){ +// muxed = -5.1; +// } +// if (mcount == 1){ +// muxed = signal; +// } +// if (mcount == 2){ +// muxed = reset; +// } +// if (mcount == 3){ +// muxed = -10.1; +// } +// return muxed; +// } + +// bool demux(float signal){ +// demuxbuffer[3] = demuxbuffer[2]; +// demuxbuffer[2] = demuxbuffer[1]; +// demuxbuffer[1] = demuxbuffer[0]; +// demuxbuffer[0] = signal; +// if (demuxbuffer[0] == -10.1 && demuxbuffer[3] == -5.1){ +// bpm_cv = demuxbuffer[2]; +// reset = demuxbuffer[1]; +// return true; +// }else{ +// return false; +// } +// } + +// float test(){ +// return (demuxbuffer[0] < -10.0 && demuxbuffer[0] > -11.0) * 10.0; +// } + +// void setcv(float cv){ +// bpm_cv = cv; +// } + +// void setreset(float rst){ +// reset = (rst >= 5.0) ? 10.0 : 0.0; +// } + +// float getcv(){ +// return bpm_cv; +// } + +// float getreset(){ +// return reset; +// } + +// }; + +//BPM system +struct CM_BpmClock { + private: + + float clk_bpm; + float bpm_cv; + float phase; + float pw; + float freq; + SchmittTrigger resetTrigger; + SchmittTrigger trackingTrigger[3]; + float bpm_out[3] = {}; + float clk_out[3] = {}; + + public: + + CM_BpmClock(){ + clk_bpm = 0.0f; + bpm_cv = 0.0f; + phase = 0.0f; + pw = 0.5f; + freq = 1.0f; + } + + //between 0 and 1000 + void setbpm(float bpm){ + bpm = max(bpm, 0.0f); + clk_bpm = bpm; + bpm_cv = bpmtocv(bpm); + // freq = clk_bpm / 30.0; //double freq! -for halfstep + } + void setcv(float cv){ + setbpm(cvtobpm(cv)); + } + + float addcv(float cv){ + setbpm(clk_bpm + cvtobpm(cv)); + return bpm_cv; + } + + float getcv(){ + return bpm_cv; + } + + float getbpm(){ + return clk_bpm; + } + + void step(float dt){ + pulsegen(); + freq = clk_bpm / 30.0; //double freq! -for halfstep + float deltaPhase = fminf(freq * dt, 0.5f); //delta is halftime + phase += deltaPhase; + if (phase >= 1.0f){phase -= 1.0f;} + + } + + void setReset(float reset) { + if (resetTrigger.process(reset)) { + phase = 0.0f; + clk_out[0] = 1.0; + clk_out[1] = 1.0; + clk_out[2] = 1.0; + trackingTrigger[0].reset(); + trackingTrigger[1].reset(); + trackingTrigger[2].reset(); + } + } + + float track(int out){ + return clk_out[out]; + } + + float bpmtocv(float bpm){ + return bpm * 0.01; + } + + float cvtobpm(float cv){ + return cv * 100.0; + } + + private: + + float sqr(){ + float sqr = phase < pw ? 1.0f : -1.0f; + return sqr; + } + + void pulsegen(){ + if (trackingTrigger[0].process(sqr())){ + clk_out[0] = !(clk_out[0]); + } + if (trackingTrigger[1].process(clk_out[0])){ + clk_out[1] = !(clk_out[1]); + } + if (trackingTrigger[2].process(clk_out[1])){ + clk_out[2] = !(clk_out[2]); + } + } +}; + +//simple stepper (count start at 0) +struct CM_stepper { + private: + int step_active = 0; + int step_max = 8; + bool isreset = false; + int cooldown = 0; + + public: + + CM_stepper(){} + + void reset(){ + isreset = true; + } + + //advance step, return to 0 on reaching max; + int step(int max){ + step_max = max; + if (step_active < step_max && isreset == false){ + step_active++; + }else{ + step_active = 0; + isreset = false; + } + return step_active; + } +}; + +//LCD display (from cf modules) +struct NumDisplayWidget : TransparentWidget { + + float *value; + std::shared_ptr font; + + NumDisplayWidget() { + font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); + }; + + void draw(NVGcontext *vg) override { + // Background + NVGcolor backgroundColor = nvgRGB(0x25, 0x2f, 0x24); + NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); + nvgBeginPath(vg); + nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); + nvgFillColor(vg, backgroundColor); + nvgFill(vg); + nvgStrokeWidth(vg, 1.0); + nvgStrokeColor(vg, borderColor); + nvgStroke(vg); + + nvgFontSize(vg, 16); + nvgFontFaceId(vg, font->handle); + nvgTextLetterSpacing(vg, 2.2); + + std::string to_display = std::to_string(*value).substr(0,5); + while(to_display.length()< 5 ) to_display = ' ' + to_display; + + Vec textPos = Vec(3.0f, 17.0f); + + NVGcolor textColor = nvgRGB(0xff, 0xf4, 0x00); + nvgFillColor(vg, nvgTransRGBA(textColor, 16)); + nvgText(vg, textPos.x, textPos.y, "~~~~~", NULL); + nvgText(vg, textPos.x, textPos.y, ".....", NULL); + nvgText(vg, textPos.x, textPos.y, "\\\\\\\\\\", NULL); + + nvgFillColor(vg, textColor); + nvgText(vg, textPos.x, textPos.y, to_display.c_str(), NULL); + } +}; + +//TEXT LCD display +struct TxtDisplayWidget : TransparentWidget { + + std::string *txt; + std::shared_ptr font; + + TxtDisplayWidget() { + font = Font::load(assetPlugin(plugin, "res/Segment7Standard.ttf")); + }; + + void draw(NVGcontext *vg) override { + // Background + NVGcolor backgroundColor = nvgRGB(0x25, 0x2f, 0x24); + NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); + nvgBeginPath(vg); + nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 4.0); + nvgFillColor(vg, backgroundColor); + nvgFill(vg); + nvgStrokeWidth(vg, 1.0); + nvgStrokeColor(vg, borderColor); + nvgStroke(vg); + + nvgFontSize(vg, 16); + nvgFontFaceId(vg, font->handle); + nvgTextLetterSpacing(vg, 2.2); + + std::string to_display = *txt; + while(to_display.length()< 3 ) to_display = ' ' + to_display; + + Vec textPos = Vec(3.0f, 17.0f); + + NVGcolor textColor = nvgRGB(0xff, 0xf4, 0x00); + nvgFillColor(vg, nvgTransRGBA(textColor, 16)); + nvgText(vg, textPos.x, textPos.y, "~~~", NULL); + nvgText(vg, textPos.x, textPos.y, "...", NULL); + nvgText(vg, textPos.x, textPos.y, "\\\\\\", NULL); + + nvgFillColor(vg, textColor); + nvgText(vg, textPos.x, textPos.y, to_display.c_str(), NULL); + } +}; + +//recorder buttons for CM3 +struct CM3_RecBall : TransparentWidget { + + float *recball_x; + float *recball_y; + + CM3_RecBall() {}; + + void draw(NVGcontext *vg) override { + //position + box.pos.x = *recball_x; + box.pos.y = *recball_y; + // circle + NVGcolor yellow = nvgRGB(0xff, 0xf4, 0x00); + nvgBeginPath(vg); + nvgCircle(vg, 7.0, 7.0, 8.0); + nvgFillColor(vg, yellow); + nvgFill(vg); + } +}; + +//bigeye indicators +struct CM3_EyePatch : TransparentWidget { + + float *eyepatch_val; + float dd; + float rr; + + CM3_EyePatch(float x, float y, float d, float r) { + box.pos.x = x; + box.pos.y = y; + dd = d; + rr = r; + }; + + void draw(NVGcontext *vg) override { + + //position + float relx = -dd * -sin(*eyepatch_val * M_PI); + float rely = dd * -cos(*eyepatch_val * M_PI); + + // circle + nvgBeginPath(vg); + nvgCircle(vg, relx, rely, rr); + nvgFillColor(vg, COLOR_WHITE); + nvgFill(vg); + + } +}; + +//yellow led in CM9 +struct CM9_LedIndicator : SVGWidget { + + float *posx; + float *posy; + + CM9_LedIndicator() { + setSVG(SVG::load(assetPlugin(plugin, "res/CM9_ledinc.svg"))); + wrap(); + }; + + void draw(NVGcontext *vg) override { + box.pos.x = *posx; + box.pos.y = *posy; + SVGWidget::draw(vg); + } +}; + +//yellow big led indicator +struct BigLedIndicator : TransparentWidget { + + bool *lit; + + BigLedIndicator() {}; + + void draw(NVGcontext *vg) override { + // Background + NVGcolor backgroundColor = nvgRGB(0x25, 0x2f, 0x24); + NVGcolor borderColor = nvgRGB(0x10, 0x10, 0x10); + nvgBeginPath(vg); + nvgRoundedRect(vg, 0.0, 0.0, box.size.x, box.size.y, 5.0); + nvgFillColor(vg, backgroundColor); + nvgFill(vg); + nvgStrokeWidth(vg, 1.5); + nvgStrokeColor(vg, borderColor); + nvgStroke(vg); + if (*lit == true){ + nvgBeginPath(vg); + nvgRoundedRect(vg, 4.0, 4.0, box.size.x - 8.0, box.size.y - 8.0, 4.0); + nvgFillColor(vg, nvgRGB(0xff, 0xf4, 0x00)); + nvgFill(vg);; + } + } +}; diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-1.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-1.cpp new file mode 100644 index 00000000..151eb933 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-1.cpp @@ -0,0 +1,283 @@ +#include "CatroModulo.hpp" +#include "dsp/digital.hpp" +//#include "dsp/minblep.hpp" //got to figure this out... + +//Catro-Module 8xlfo + +struct LowFrequencyOscillator { + + float phase = 0.0f; + float pshift = 0.0f; + float typemix = 0.0f; + float pw = 0.5f; + float freq = 1.0f; + bool invert = false; + SchmittTrigger resetTrigger; + + LowFrequencyOscillator() {} + void setPitch(float pitch) { + pitch = fminf(pitch, 13.0f); + freq = powf(2.0f, pitch); + } + void setPulseWidth(float pw_) { + const float pwMin = 0.01f; + pw = clamp(pw_, pwMin, 1.0f - pwMin); + } + void setShift(float ps){ + pshift = ps; + } + void setMix(float sm){ + typemix = sm; + } + void setReset(float reset) { + if (resetTrigger.process(reset * 100)) { + phase = 0.0f; + } + } + void step(float dt) { + float deltaPhase = fminf(freq * dt, 0.5f); + phase += deltaPhase; + if (phase >= 1.0f) + phase -= 1.0f; + + pshift += phase; + if(pshift >= 1.0f){ + pshift -= 1.0f; + } + } + + float sin() { + return sinf(2*M_PI * pshift) * (invert ? -1.0f : 1.0f); + } + + float tri(float x) { + return 4.0f * fabsf(x - roundf(x)); + } + float tri() { + return -1.0f + tri(invert ? pshift - 0.25f : pshift - 0.75f); + } + float saw(float x) { + return 2.0f * (x - roundf(x)); + } + float saw() { + return saw(pshift) * (invert ? -1.0f : 1.0f); + } + float sqr() { + float sqr = (pshift < pw) ^ invert ? 1.0f : -1.0f; + return sqr; + } + + //mixing the types + float tmix() { + float tmr = 0.0f; + if (typemix < 1.0f){ + tmr = (1.0f - typemix) * sin() + typemix * tri(); + }else + if (typemix < 2.0f){ + typemix -= 1.0f; + tmr = (1.0f - typemix) * tri() + typemix * saw(); + }else { + typemix -= 2.0f; + tmr = (1.0f - typemix) * saw() + typemix * sqr(); + } + return tmr; + } + + // float light() { + // return sinf(2*M_PI * pshift); + // } +}; + + + +struct CM1Module : Module { + enum ParamIds { + NUM_PARAMS = 33 + }; + enum InputIds { + NUM_INPUTS = 33 + }; + enum OutputIds { + NUM_OUTPUTS = 9 + }; + enum LightIds { + NUM_LIGHTS = 16 + }; + + //generate 8 lfos + LowFrequencyOscillator lfo[8]; + CM1Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + void step() override; + + // For more advanced Module features, read Rack's engine.hpp header file + // - toJson, fromJson: serialization of internal data + // - onSampleRateChange: event triggered by a change of sample rate + // - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu +}; + +//Tarzan - this is for TJ :) + +void CM1Module::step() { + float mixOut = 0.0f; + float offset = 5.0f * params[33].value; + float reset = (inputs[32].value || params[32].value); + + for (int i = 0; i < 8; i++) { + if (outputs[i].active == true){ + //merge modulations + float mod_one = clamp((inputs[i].active) ? params[i].value * inputs[i].value * 0.1f : params[i].value, 0.0f, 3.0f); //TYPE + float mod_two = clamp((inputs[i+8].active) ? (params[i+8].value -8) + (clamp(inputs[i+8].value * 0.1, -1.0f, 1.0f) * 21) : params[i+8].value -8.0 , -8.0f, 13.0f); //RATE + float mod_thr = clamp((inputs[i+16].active) ? params[i+16].value * (1.0 + inputs[i+16].value) * 0.05f : params[i+16].value, 0.0f, 1.0f); //PW + float mod_fou = clamp((inputs[i+24].active) ? params[i+24].value + inputs[i+24].value * 0.1f : params[i+24].value, 0.0f, 1.0f); //PHASE + + + //set lfo mods + lfo[i].setMix(mod_one); + lfo[i].setPitch(mod_two); + lfo[i].setPulseWidth(mod_thr); + lfo[i].setShift(mod_fou); + + //run lfo + lfo[i].step(engineGetSampleTime()); + lfo[i].setReset(reset); + + //render output + float out = 5.0f * lfo[i].tmix() + offset; + outputs[i].value = clamp(out, -10.0f, 10.0f) ; + mixOut += out; + + //output lights + lights[2*i + 0].setBrightnessSmooth(fmaxf(0.0f, out * 0.2f)); + lights[2*i + 1].setBrightnessSmooth(fmaxf(0.0f, -out * 0.2f)); + }else{ + outputs[i].value = 0; + } + } + //mixed output + outputs[8].value = mixOut * 0.125f; +} + + +struct CM1ModuleWidget : ModuleWidget { + CM1ModuleWidget(CM1Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-1.svg"))); + + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + + //GRID + const float gridrowjacks[8] = {35.5, 74.3, 113.1, 151.9, 190.7, 229.5, 268.2, 307}; + const float gridcoljacks[10] = {3.7, 29.9, 64.8, 94.1, 126.0, 155.1, 186.4, 215.8, 249.2, 278.5}; + + //COL 1 IN TYPE + int i = -1; + while(++i < 8){ + addInput(Port::create(Vec(gridcoljacks[0], gridrowjacks[i]), Port::INPUT, module, i)); + } + + //COL 2 IN RATE + i = -1; + while(++i < 8){ + addInput(Port::create(Vec(gridcoljacks[2], gridrowjacks[i]), Port::INPUT, module, i+8)); + } + + //COL 3 IN PW + i = -1; + while(++i < 8){ + addInput(Port::create(Vec(gridcoljacks[4], gridrowjacks[i]), Port::INPUT, module, i+16)); + } + + //COL 4 IN PHASE + i = -1; + while(++i < 8){ + addInput(Port::create(Vec(gridcoljacks[6], gridrowjacks[i]), Port::INPUT, module, i+24)); + } + + //COL 1 POTS + i = -1; + while(++i < 8){ + addChild(Widget::create(Vec(gridcoljacks[1], gridrowjacks[i] - 15.0))); + } + + //COL 2 POTS + i = -1; + while(++i < 8){ + addChild(Widget::create(Vec(gridcoljacks[3], gridrowjacks[i] + 7.0))); + } + + //COL 3 POTS + i = -1; + while(++i < 8){ + addChild(Widget::create(Vec(gridcoljacks[5], gridrowjacks[i] - 15.0))); + } + + //COL 4 POTS + i = -1; + while(++i < 8){ + addChild(Widget::create(Vec(gridcoljacks[7], gridrowjacks[i] - 15.0))); + } + + //COL 1 KNOBS TYPE + i = -1; + while(++i < 8){ + addParam(ParamWidget::create(Vec(gridcoljacks[1], gridrowjacks[i] - 15.0), module, i, 0.0f, 3.0f, 0.0f)); + } + + //COL 2 KNOBS RATE + i = -1; + while(++i < 8){ + addParam(ParamWidget::create(Vec(gridcoljacks[3], gridrowjacks[i] + 7.0), module, i+8, 0.0f, 21.0f, 9.0f)); + } + + //COL 3 KNOBS PW + i = -1; + while(++i < 8){ + addParam(ParamWidget::create(Vec(gridcoljacks[5], gridrowjacks[i] - 15.0), module, i+16,0.001f, 1.0f, 0.5f)); + } + + //COL 4 KNOBS PHASE + i = -1; + while(++i < 8){ + addParam(ParamWidget::create(Vec(gridcoljacks[7], gridrowjacks[i] - 15.0), module, i+24, 0.0f , 1.0f, 0.5f)); + } + + //COL 5 OUTPUTS + i = -1; + while(++i < 8){ + addOutput(Port::create(Vec(gridcoljacks[8], gridrowjacks[i]), Port::OUTPUT, module, i)); + } + + //LIGHTS + i = -1; + while(++i < 8){ + addChild(ModuleLightWidget::create>(Vec(gridcoljacks[9], gridrowjacks[i] + 10), module, 2 * i)); + } + + //RESET + addParam(ParamWidget::create(Vec(8.5, 339.2), module, 32, 0.0f, 1.0f, 0.0f)); + addInput(Port::create(Vec(17.4, 339.2), Port::INPUT, module, 32)); + + //OFFSET (+5V) + addParam(ParamWidget::create(Vec(58.3, 338.7), module, 33, 0.0f, 1.0f, 0.0f)); + + // + //MIXOUT + addOutput(Port::create(Vec(188.0, 342.5), Port::OUTPUT, module, 8)); + + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM1Module = Model::create("CatroModulo", "CatroModulo_CM-1", "C/M1 : 8xlfo", LFO_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM1Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM1", "C/M1 : 8xlfo", LFO_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-10.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-10.cpp new file mode 100644 index 00000000..3b848489 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-10.cpp @@ -0,0 +1,143 @@ +#include "CatroModulo.hpp" + +//Catro-Module CM-10: bitStep + +struct CM10Module : Module { + + enum ParamIds { + ENUMS(PARAM_REC, 2), + ENUMS(PARAM_PLAY, 2), + NUM_PARAMS + }; + enum InputIds { + ENUMS(INPUT_IN, 2), + ENUMS(INPUT_STEP, 2), + ENUMS(INPUT_REC, 2), + ENUMS(INPUT_PLAY, 2), + NUM_INPUTS + }; + enum OutputIds { + ENUMS(OUTPUT_OUT, 2), + ENUMS(OUTPUT_STEP, 2), + ENUMS(OUTPUT_CURRENT, 2), + NUM_OUTPUTS + }; + + enum LightIds { + NUM_LIGHTS + }; + + //initializations + SchmittTrigger stepTrigger[2]; + SchmittTrigger recTrigger[2]; + SchmittTrigger playTrigger[2]; + bool lit[2] = {}; + bool currentin[2] = {}; + bool out[2] = {}; + bool rec[2] = {}; + bool play[2] = {}; + + CM10Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + } + + void step() override; + +}; + +void CM10Module::step() { + for (int i = 0; i < 2; i++){ + if (stepTrigger[i].process(inputs[INPUT_STEP + i].value)){ + out[i] = currentin[i]; + if (play[i] == true){ + currentin[i] = rec[i]; + play[i] = false; + }else{ + currentin[i] = inputs[INPUT_IN + i].value; + } + + lit[i] = currentin[i]; + } + + if (recTrigger[i].process((inputs[INPUT_REC + i].value || params[PARAM_REC + i].value) * 10.0)){ + rec[i] = currentin[i]; + } + + if (playTrigger[i].process((inputs[INPUT_PLAY + i].value || params[PARAM_PLAY + i].value) * 10.0)){ + play[i] = true; + } + + //set outputs + outputs[OUTPUT_OUT + i].value = out[i] * 10.0; + outputs[OUTPUT_STEP + i].value = (bool)(inputs[INPUT_STEP + i].value) * 10.0; + outputs[OUTPUT_CURRENT + i].value = currentin[i] * 10.0; + } +} + +struct CM10ModuleWidget : ModuleWidget { + + CM10ModuleWidget(CM10Module *module) : ModuleWidget(module) { + //positionings + float c1 = 3.2; + float c2 = 33.2; + float rr[6] = {50.7, 102.2, 163.1, 219.6, 271.1, 331.9}; //update positions + + setPanel(SVG::load(assetPlugin(plugin, "res/CM-10.svg"))); + + //addChild(Widget::create(Vec(30, 0))); + addChild(Widget::create(Vec(box.size.x - 16, 0))); + addChild(Widget::create(Vec(5, 365))); + // addChild(Widget::create(Vec(box.size.x - 60, 365))); + + //Step 1 + addParam(ParamWidget::create(Vec(4.7 , 130.1), module, CM10Module::PARAM_REC, 0.0, 1.0, 0.0f)); + addParam(ParamWidget::create(Vec(34.7 , 130.1), module, CM10Module::PARAM_PLAY, 0.0, 1.0, 0.0f)); + addInput(Port::create(Vec(c1, rr[0]), Port::INPUT, module, CM10Module::INPUT_IN)); + addInput(Port::create(Vec(c1, rr[1]), Port::INPUT, module, CM10Module::INPUT_STEP)); + addInput(Port::create(Vec(c1, rr[2]), Port::INPUT, module, CM10Module::INPUT_REC)); + addInput(Port::create(Vec(c2, rr[2]), Port::INPUT, module, CM10Module::INPUT_PLAY)); + + addOutput(Port::create(Vec(c2 , rr[0]), Port::OUTPUT, module, CM10Module::OUTPUT_OUT)); + addOutput(Port::create(Vec(c2 , rr[1]), Port::OUTPUT, module, CM10Module::OUTPUT_STEP)); + addOutput(Port::create(Vec(18.2 , 72.6 ), Port::OUTPUT, module, CM10Module::OUTPUT_CURRENT)); + + + //LCD displays + BigLedIndicator *display1 = new BigLedIndicator(); + display1->box.pos = Vec(5.3 , 22.1); + display1->box.size = Vec(49.6 , 19.0); + display1->lit = &module->lit[0]; + addChild(display1); + + //Step 2 + addParam(ParamWidget::create(Vec(4.7 , 300.4), module, CM10Module::PARAM_REC + 1, 0.0, 1.0, 0.0f)); + addParam(ParamWidget::create(Vec(34.7 , 300.4), module, CM10Module::PARAM_PLAY + 1, 0.0, 1.0, 0.0f)); + addInput(Port::create(Vec(c1, rr[3]), Port::INPUT, module, CM10Module::INPUT_IN + 1)); + addInput(Port::create(Vec(c1, rr[4]), Port::INPUT, module, CM10Module::INPUT_STEP + 1)); + addInput(Port::create(Vec(c1, rr[5]), Port::INPUT, module, CM10Module::INPUT_REC + 1)); + addInput(Port::create(Vec(c2, rr[5]), Port::INPUT, module, CM10Module::INPUT_PLAY + 1)); + + addOutput(Port::create(Vec(c2 , rr[3]), Port::OUTPUT, module, CM10Module::OUTPUT_OUT + 1)); + addOutput(Port::create(Vec(c2 , rr[4]), Port::OUTPUT, module, CM10Module::OUTPUT_STEP + 1)); + addOutput(Port::create(Vec(18.2 , 241.4 ), Port::OUTPUT, module, CM10Module::OUTPUT_CURRENT)); //update pos + + //LCD displays + BigLedIndicator *display2 = new BigLedIndicator(); + display2->box.pos = Vec(5.3 , 190.9); + display2->box.size = Vec(49.6 , 19.0); + display2->lit = &module->lit[1]; + addChild(display2); + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +Model *modelCM10Module = Model::create("CatroModulo", "CatroModulo_CM-10", "C/M10 : bitStep", SAMPLE_AND_HOLD_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM10Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM10", "C/M10 : bitStep", SAMPLE_AND_HOLD_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-2.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-2.cpp new file mode 100644 index 00000000..04e539d9 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-2.cpp @@ -0,0 +1,165 @@ +#include "CatroModulo.hpp" + +//Catro-Module 8xatn +//parts of code copied from VCV's 8VERT module from the Fundamental pack by Andew Belt. + + +struct CM2Module : Module { + enum ParamIds { + ENUMS(PARAMS_ATN, 8), + ENUMS(PARAMS_OFF, 8), + NUM_PARAMS + }; + enum InputIds { + ENUMS(INPUTS_IN, 8), + ENUMS(INPUTS_ATN, 8), + ENUMS(INPUTS_OFF, 8), + NUM_INPUTS + }; + enum OutputIds { + NUM_OUTPUTS = 9 + }; + enum LightIds { + NUM_LIGHTS = 16 + }; + + CM2Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + void step() override; + + // For more advanced Module features, read Rack's engine.hpp header file + // - toJson, fromJson: serialization of internal data + // - onSampleRateChange: event triggered by a change of sample rate + // - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu +}; + +void CM2Module::step() { + float mixOut = 0.0f; + int numconnect = 0; + + for (int i = 0; i < 8; i++) { + numconnect += (inputs[INPUTS_IN + i].active) ? 1 : 0; + float out = 0.0f; + + //cv process + float attn = (inputs[INPUTS_ATN + i].active) ? clamp(inputs[INPUTS_ATN].value, -10.0, 10.0) * 0.1 * params[PARAMS_ATN + i].value : params[PARAMS_ATN + i].value; + float offset = (inputs[INPUTS_OFF + i].active) ? clamp(inputs[INPUTS_OFF].value, -10.0, 10.0) * 0.1 * params[PARAMS_OFF + i].value : params[PARAMS_OFF + i].value; + + if (inputs[INPUTS_IN + i].active == true || outputs[i].active == true) { + if (inputs[INPUTS_IN + i].active == true) { + out = clamp((inputs[INPUTS_IN + i].value * attn + offset), -10.0f, 10.0f); + mixOut += out; + } else { + out = clamp(attn * offset * 10.0f, -10.0f, 10.0f); + } + outputs[i].value = out; + + lights[2*i + 0].setBrightnessSmooth(fmaxf(0.0f, out * 0.1f)); + lights[2*i + 1].setBrightnessSmooth(fmaxf(0.0f, -out * 0.1f)); + } else { + lights[2*i + 0].setBrightnessSmooth(0.0f); + lights[2*i + 1].setBrightnessSmooth(0.0f); + } + if (numconnect > 0) { + outputs[8].value = mixOut / numconnect; + }else{ + outputs[8].value = 0.0f; + } + } +} + +struct CM2ModuleWidget : ModuleWidget { + CM2ModuleWidget(CM2Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-2_new.svg"))); + + addChild(Widget::create(Vec(15, 0))); + addChild(Widget::create(Vec(box.size.x - 30, 0))); + addChild(Widget::create(Vec(15, 365))); + addChild(Widget::create(Vec(box.size.x - 30, 365))); + //grid + const float gridrowjacks[8] = {38.4, 77.2, 116.0, 154.7, 193.5, 232.3, 271.0, 309.8}; + + //ATN knobs + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[0] - 16.5), module, 0, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[1] - 16.5), module, 1, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[2] - 16.5), module, 2, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[3] - 16.5), module, 3, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[4] - 16.5), module, 4, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[5] - 16.5), module, 5, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[6] - 16.5), module, 6, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(49.0, gridrowjacks[7] - 16.5), module, 7, -1.0f, 1.0f, 0.0f)); + + //ATN CV + addInput(Port::create(Vec(32.0, gridrowjacks[0] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 0)); + addInput(Port::create(Vec(32.0, gridrowjacks[1] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 1)); + addInput(Port::create(Vec(32.0, gridrowjacks[2] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 2)); + addInput(Port::create(Vec(32.0, gridrowjacks[3] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 3)); + addInput(Port::create(Vec(32.0, gridrowjacks[4] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 4)); + addInput(Port::create(Vec(32.0, gridrowjacks[5] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 5)); + addInput(Port::create(Vec(32.0, gridrowjacks[6] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 6)); + addInput(Port::create(Vec(32.0, gridrowjacks[7] + 5.1), Port::INPUT, module, CM2Module::INPUTS_ATN + 7)); + + //OFFSET knobs + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[0] - 16.5), module, 8, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[1] - 16.5), module, 9, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[2] - 16.5), module, 10, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[3] - 16.5), module, 11, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[4] - 16.5), module, 12, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[5] - 16.5), module, 13, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[6] - 16.5), module, 14, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(98.5, gridrowjacks[7] - 16.5), module, 15, -1.0f, 1.0f, 0.0f)); + + //OFFSET CV + addInput(Port::create(Vec(81.3, gridrowjacks[0] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 0)); + addInput(Port::create(Vec(81.3, gridrowjacks[1] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 1)); + addInput(Port::create(Vec(81.3, gridrowjacks[2] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 2)); + addInput(Port::create(Vec(81.3, gridrowjacks[3] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 3)); + addInput(Port::create(Vec(81.3, gridrowjacks[4] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 4)); + addInput(Port::create(Vec(81.3, gridrowjacks[5] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 5)); + addInput(Port::create(Vec(81.3, gridrowjacks[6] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 6)); + addInput(Port::create(Vec(81.3, gridrowjacks[7] + 5.1), Port::INPUT, module, CM2Module::INPUTS_OFF + 7)); + + //Signal IN + addInput(Port::create(Vec(5.0, gridrowjacks[0]), Port::INPUT, module, CM2Module::INPUTS_IN + 0)); + addInput(Port::create(Vec(5.0, gridrowjacks[1]), Port::INPUT, module, CM2Module::INPUTS_IN + 1)); + addInput(Port::create(Vec(5.0, gridrowjacks[2]), Port::INPUT, module, CM2Module::INPUTS_IN + 2)); + addInput(Port::create(Vec(5.0, gridrowjacks[3]), Port::INPUT, module, CM2Module::INPUTS_IN + 3)); + addInput(Port::create(Vec(5.0, gridrowjacks[4]), Port::INPUT, module, CM2Module::INPUTS_IN + 4)); + addInput(Port::create(Vec(5.0, gridrowjacks[5]), Port::INPUT, module, CM2Module::INPUTS_IN + 5)); + addInput(Port::create(Vec(5.0, gridrowjacks[6]), Port::INPUT, module, CM2Module::INPUTS_IN + 6)); + addInput(Port::create(Vec(5.0, gridrowjacks[7]), Port::INPUT, module, CM2Module::INPUTS_IN + 7)); + + //Signal OUT + addOutput(Port::create(Vec(134.6, gridrowjacks[0]), Port::OUTPUT, module, 0)); + addOutput(Port::create(Vec(134.6, gridrowjacks[1]), Port::OUTPUT, module, 1)); + addOutput(Port::create(Vec(134.6, gridrowjacks[2]), Port::OUTPUT, module, 2)); + addOutput(Port::create(Vec(134.6, gridrowjacks[3]), Port::OUTPUT, module, 3)); + addOutput(Port::create(Vec(134.6, gridrowjacks[4]), Port::OUTPUT, module, 4)); + addOutput(Port::create(Vec(134.6, gridrowjacks[5]), Port::OUTPUT, module, 5)); + addOutput(Port::create(Vec(134.6, gridrowjacks[6]), Port::OUTPUT, module, 6)); + addOutput(Port::create(Vec(134.6, gridrowjacks[7]), Port::OUTPUT, module, 7)); + + addOutput(Port::create(Vec(98.1, 336.3), Port::OUTPUT, module, 8)); + + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[0] + 10), module, 0)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[1] + 10), module, 2)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[2] + 10), module, 4)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[3] + 10), module, 6)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[4] + 10), module, 8)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[5] + 10), module, 10)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[6] + 10), module, 12)); + addChild(ModuleLightWidget::create>(Vec(163.5, gridrowjacks[7] + 10), module, 14)); + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM2Module = Model::create("CatroModulo", "CatroModulo_CM-2", "C/M2 : 8xatn", ATTENUATOR_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM2Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM2", "C/M2 : 8xatn", ATTENUATOR_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-3.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-3.cpp new file mode 100644 index 00000000..171dc72f --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-3.cpp @@ -0,0 +1,349 @@ +#include "CatroModulo.hpp" + +//Catro-Modulo CM3: PreSetSeq + +struct CM3Module : Module { + + enum ParamIds { + ENUMS(PARAM_REC, 8), + ENUMS(PARAM_EYE, 8), + PARAM_PATTERN, + PARAM_MORPH, + PARAM_LENGTH, + PARAM_TRYME, + PARAM_SCAN, + PARAM_SELECT, + PARAM_Q, + PARAM_SEQ, + PARAM_RESET, + PARAM_STEP, + NUM_PARAMS, + }; + enum InputIds { + ENUMS(INPUT_REC, 8), + ENUMS(INPUT_EYE, 8), + INPUT_PATTERN, + INPUT_STEP, + INPUT_MORPH, + INPUT_RESET, + INPUT_LENGTH, + INPUT_SELECT, + INPUT_BPM, + NUM_INPUTS + }; + enum OutputIds { + ENUMS(OUTPUT_EYE, 8), + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + //initializations + std::string display_pat = ""; + std::string display_len = ""; + std::string strings_pat[16] = {"SEQ", "REV", "S0Q", "R0V", "NZN", "CUC", "ZZ1", "ZZ2", "U7D", "U4D", "U3D", ">-<", "/\\/", ".-.", "\\/\\", "RND"}; + std::string strings_len[16] = {" 01", " 02", " 03", " 04", " 05", " 06", " 07", " 08", " 09", " 10", " 11", " 12", " 13", " 14", "15", "16"}; + SchmittTrigger recordTrigger[16]; + float iselect = 0.0f; + float recsel = 0.0f; + float recball_x = 178.8; + float recball_y = 89.5; + float recball_xarray[8] = {178.8f , 212.4f , 242.7f , 212.4f , 178.8f , 145.3f , 115.0f , 145.3f}; + float recball_yarray[8] = {89.5f , 119.9f , 153.4f , 186.9f , 217.2f , 186.9f , 153.4f , 119.9f }; + float eyepatch_val[8] = {}; + + CM_SelSeq sequencer; + CM_Recorder recorder; + CM_BpmClock bpmclock; + + + CM3Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + + void step() override; + + + json_t *toJson() override { + + json_t *rootJ = json_object(); + + json_t *recordsJ = json_array(); + for (int i = 0; i < 8; i++){ + for (int j = 0; j < 8; j++){ + json_array_append_new(recordsJ, json_real(recorder.save(i,j))); + } + } + json_object_set_new(rootJ, "recorder", recordsJ); + + return rootJ; + } + + + void fromJson(json_t *rootJ) override { + // running + json_t *recorderJ = json_object_get(rootJ, "recorder"); + for (int i = 0; i < 8; i++){ + for (int j = 0; j < 8; j++){ + recorder.load(i, j, json_real_value(json_array_get(recorderJ, 8 * i + j))); + } + } + + } + + // For more advanced Module features, read Rack's engine.hpp header file + // - toJson, fromJson: serialization of internal data + // - onSampleRateChange: event triggered by a change of sample rate + // - onReset, onRandomize, onCreate, onDelete: implements special behavior when user clicks these from the context menu +}; + +void CM3Module::step() { + + + //mix params and inputs + float morph = (inputs[INPUT_MORPH].active) ? inputs[INPUT_MORPH].value * 0.1f + params[PARAM_MORPH].value : params[PARAM_MORPH].value; + float seq_active = 1.0 - params[PARAM_SEQ].value; + float seq_reset = (inputs[INPUT_RESET].value || params[PARAM_RESET].value); + float seq_pattern = clamp(roundf((inputs[INPUT_PATTERN].active) ? inputs[INPUT_PATTERN].value * 0.1f * params[PARAM_PATTERN].value : params[PARAM_PATTERN].value), 0.0, 15.0); + float seq_len = clamp(roundf((inputs[INPUT_LENGTH].active) ? inputs[INPUT_LENGTH].value * 0.1f * params[PARAM_LENGTH].value : params[PARAM_LENGTH].value), 0.0, 15.0); + float doscan = (params[PARAM_SCAN].value && params[PARAM_SEQ].value); + + //check for bpm cv + float seq_step = 0; + if (inputs[INPUT_BPM].active){ + bpmclock.setcv(inputs[INPUT_BPM].value); + } + + bpmclock.setReset(inputs[INPUT_RESET].value || params[PARAM_RESET].value); + + if (inputs[INPUT_BPM].active){ + bpmclock.step(engineGetSampleTime()); + seq_step = bpmclock.track(1); + }else{ + seq_step = (inputs[INPUT_STEP].value || params[PARAM_STEP].value); + } + + //process tryme button + recorder.tryme(params[PARAM_TRYME].value); + + + //process eyes + float eyeval[8] = {}; + for (int i = 0; i < 8; i++) { + float in = 1.0f; + float eye = params[i+PARAM_EYE].value; + if (inputs[i+PARAM_EYE].active){ + in = inputs[i+PARAM_EYE].value * 0.1f; + } + eyeval[i] = clamp(in * eye, -1.0f, 1.0f); + } + + //record when requested + for (int i = 0; i < 8; i++) { + if (recordTrigger[i].process((inputs[INPUT_REC+i].value || params[PARAM_REC+i].value))){ + recorder.record(eyeval, i); + } + } + + //process sequencer + if (seq_active == 1.0){ + sequencer.reset(seq_reset); + sequencer.step(seq_step, seq_len); + if (sequencer.patternized == true) { + iselect = sequencer.sequence(seq_pattern); + } + }else{ + iselect = clamp((inputs[INPUT_SELECT].active) ? inputs[INPUT_SELECT].value * 0.1f * params[PARAM_SELECT].value : params[PARAM_SELECT].value, 0.0, 7.99999f); + } + recorder.scan(iselect, doscan); + recorder.mix(eyeval,morph); + for (int i = 0; i < 8; i++) { + if (iselect != -1.0){ + outputs[OUTPUT_EYE + i].value = recorder.output(i); + }else{ + outputs[OUTPUT_EYE + i].value = 0.0f; + } + + } + + //set eyepatches + for (int i = 0; i < 8; i++) { + eyepatch_val[i] = recorder.callget(i); + } + + //set displays + display_pat = (seq_active) ? strings_pat[int(seq_pattern)] : "OFF"; + display_len = strings_len[int(seq_len)]; + + //recball + if (iselect != -1.0){ + recball_x = recball_xarray[int(iselect)] + 9.0; + recball_y = recball_yarray[int(iselect)] + 9.0; + } + +} + +struct CM3ModuleWidget : ModuleWidget { + + CM3ModuleWidget(CM3Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-3.svg"))); + + addChild(Widget::create(Vec(10, 0))); + addChild(Widget::create(Vec(box.size.x - 20, 0))); + addChild(Widget::create(Vec(30, 365))); + addChild(Widget::create(Vec(box.size.x - 40, 365))); + + int y = 0; //initialize reusable counter + + //REC BUTTONS + float recbuttons[16] = {178.8 , 89.5 , + 212.4 , 119.9 , + 242.7 , 153.4 , + 212.4 , 186.9 , + 178.8 , 217.2 , + 145.3 , 186.9 , + 115.0 , 153.4 , + 145.3 , 119.9 }; + y = 0; + for(int i = 0; i < 16; i += 2){ + addParam(ParamWidget::create(Vec(recbuttons[i],recbuttons[i+1] - 0.5), module, CM3Module::PARAM_REC + y, 0.0f, 1.0f, 0.0f)); + y++; + } + + //REC INPUTS + float recin[16] = { 185.5 , 127.8 , + 196.5 , 149.0 , + 217.4 , 160.0 , + 196.5 , 171.0 , + 185.5 , 192.3 , + 174.5 , 171.0 , + 153.2 , 160.0 , + 174.5 , 149.0 }; + y = 0; + for(int i = 0; i < 16; i += 2){ + addInput(Port::create(Vec(recin[i],recin[i+1] - 0.5), Port::INPUT, module, CM3Module::INPUT_REC + y)); + y++; + } + + + //BIGEYES + float bigeyes[16] = {54.9 , 94.9 , + 32.7 , 146.6 , + 54.9 , 198.4 , + 84.5 , 250.1 , + 290.7 , 94.9 , + 312.9 , 146.6 , + 290.7 , 198.4 , + 261.1 , 250.1}; + y = 0; + + for(int i = 0; i < 16; i += 2){ + + addParam(ParamWidget::create(Vec(bigeyes[i],bigeyes[i+1] - 0.5), module, CM3Module::PARAM_EYE + y, -1.0f, 1.0f, 0.0f)); + y++; + } + + //EYE INPUTS + float eyein[16] = {104.7 , 117.5 , + 84.1 , 159.3 , + 104.7 , 201.1 , + 130.7 , 243.4 , + 266.0 , 117.5 , + 287.1 , 159.3 , + 266.0 , 201.1 , + 240.3 , 243.4}; + y = 0; + for(int i = 0; i < 16; i += 2){ + addInput(Port::create(Vec(eyein[i],eyein[i+1] - 0.5), Port::INPUT, module, CM3Module::INPUT_EYE + y)); + y++; + } + + //EYE OUTPUTS + float eyeout[16] = {30.2 , 97.1 , + 6.4 , 158.8 , + 30.2 , 220.5 , + 63.6 , 281.4 , + 340.0 , 97.1 , + 363.5 , 158.8 , + 340.0 , 220.5 , + 304.5 , 281.4}; + y = 0; + for(int i = 0; i < 16; i += 2){ + addOutput(Port::create(Vec(eyeout[i],eyeout[i+1] - 0.5), Port::OUTPUT, module, CM3Module::OUTPUT_EYE + y)); + y++; + } + + //OTHER ELEMENTS + addParam(ParamWidget::create(Vec(33.4 , 34.7), module, CM3Module::PARAM_PATTERN, 0.0f, 15.0f, 0.0f)); + addParam(ParamWidget::create(Vec(156.5 , 17.9), module, CM3Module::PARAM_MORPH, -1.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(326.0 , 34.7), module, CM3Module::PARAM_LENGTH, 0.0f, 15.0f, 7.0f)); + addParam(ParamWidget::create(Vec(17.0 , 322.1), module, CM3Module::PARAM_TRYME, 0.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(137.8 , 309.0), module, CM3Module::PARAM_SCAN, 0.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(161.3 , 286.0), module, CM3Module::PARAM_SELECT, 0.0f, 7.99999f, 0.0f)); + //addParam(ParamWidget::create(Vec(232.2 , 304.5), module,PARAM_Q, 0.1f, 0.9f, 0.5f)); //maybe implement later? + addParam(ParamWidget::create(Vec(366. , 309.0), module, CM3Module::PARAM_SEQ, 0.0f, 1.0f, 1.0f)); + addParam(ParamWidget::create(Vec(263.0 , 38.7), module, CM3Module::PARAM_RESET, 0.0f, 1.0f, 0.0f)); + addParam(ParamWidget::create(Vec(85.4 , 38.7), module, CM3Module::PARAM_STEP, 0.0f, 1.0f, 0.0f)); + + + + addInput(Port::create(Vec(15.7 , 60.1), Port::INPUT, module, CM3Module::INPUT_PATTERN)); + addInput(Port::create(Vec(94.0 , 38.7), Port::INPUT, module, CM3Module::INPUT_STEP)); + addInput(Port::create(Vec(127.5 , 38.7), Port::INPUT, module, CM3Module::INPUT_BPM)); + addInput(Port::create(Vec(183.5 , 45.4), Port::INPUT, module, CM3Module::INPUT_MORPH)); + addInput(Port::create(Vec(250.8 , 38.7), Port::INPUT, module, CM3Module::INPUT_RESET)); + addInput(Port::create(Vec(352.3 , 61.4), Port::INPUT, module, CM3Module::INPUT_LENGTH)); + addInput(Port::create(Vec(183.5 , 259.0), Port::INPUT, module, CM3Module::INPUT_SELECT)); + + //LCD display pattern + TxtDisplayWidget *dispat = new TxtDisplayWidget(); + dispat->box.pos = Vec(29.9, 11.0); + dispat->box.size = Vec(38.0 , 20.4); + dispat->txt = &module->display_pat; + addChild(dispat); + + //LCD display length + TxtDisplayWidget *dislen = new TxtDisplayWidget(); + dislen->box.pos = Vec(322.4 , 11.0); + dislen->box.size = Vec(38.0 , 20.4); + dislen->txt = &module->display_len; + addChild(dislen); + + //selector indicator yellow + CM3_RecBall *recball = new CM3_RecBall(); + recball->box.size = Vec(32.0, 32.0); + recball->recball_x = &module->recball_x; + recball->recball_y = &module->recball_y; + addChild(recball); + + //eyepatches: indicate the actual output + float dd = 20.5; //distance from origin + float rr = 2.5; //radius of circle + CM3_EyePatch *eyepatch[8] = { + new CM3_EyePatch(77.4, 117.4 , dd, rr), + new CM3_EyePatch(55.2, 169.1 , dd, rr), + new CM3_EyePatch(77.4 , 220.9 , dd, rr), + new CM3_EyePatch(107.0 , 272.6 , dd, rr), + new CM3_EyePatch(313.2 , 117.4 , dd, rr), + new CM3_EyePatch(335.4 , 169.1 , dd, rr), + new CM3_EyePatch(313.2 , 220.9 , dd, rr), + new CM3_EyePatch(283.6 , 272.6 , dd, rr) + }; + + for(int i = 0; i < 8; i ++){ + eyepatch[i]->eyepatch_val = &module->eyepatch_val[i]; + addChild(eyepatch[i]); + } + }; +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM3Module = Model::create("CatroModulo", "CatroModulo_CM-3", "C/M3 : PreSetSeq", SEQUENCER_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM3Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM3", "C/M3 : PreSetSeq", SEQUENCER_TAG); + return model; +} diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-4.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-4.cpp new file mode 100644 index 00000000..f64b0c9f --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-4.cpp @@ -0,0 +1,124 @@ +#include "CatroModulo.hpp" + + +//Catro-Module CM-4: vcClk + +struct CM4Module : Module { + + enum ParamIds { + PARAM_BPM, + PARAM_RST, + PARAM_SNAP, + NUM_PARAMS + }; + enum InputIds { + INPUT_BPM1, + INPUT_BPM2, + INPUT_BPM3, + INPUT_RST, + NUM_INPUTS + }; + enum OutputIds { + OUTPUT_BPM1, + OUTPUT_BPM2, + OUTPUT_D2, + OUTPUT_X2, + OUTPUT_CLKD2, + OUTPUT_CLK, + OUTPUT_CLKX2, + OUTPUT_RST, + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + float bpm_display = 0.0; + //create objects + //SchmittTrigger recordTrigger[16]; + CM_BpmClock bpmclock; + + CM4Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + //initialize objects + } + void step() override; +}; + +void CM4Module::step() { + if (params[PARAM_SNAP].value == 0){ + bpmclock.setbpm(int( (params[PARAM_BPM].value * 100.0) * 50) / 50.0f ); + }else if (params[PARAM_SNAP].value == 1){ + bpmclock.setbpm(int( (params[PARAM_BPM].value * 100.0) * 0.5) * 2.0f); + }else if (params[PARAM_SNAP].value == 2){ + bpmclock.setbpm(int( (params[PARAM_BPM].value * 100.0) * 0.1) * 10.0f ); + } + + outputs[OUTPUT_RST].value = (inputs[INPUT_RST].value || params[PARAM_RST].value) * 10.0; + bpmclock.setReset(outputs[OUTPUT_RST].value); + + outputs[OUTPUT_BPM1].value = bpmclock.addcv((inputs[INPUT_BPM1].active) ? inputs[INPUT_BPM1].value : 0.0f); + outputs[OUTPUT_BPM2].value = bpmclock.addcv((inputs[INPUT_BPM2].active) ? inputs[INPUT_BPM2].value : 0.0f); + + outputs[OUTPUT_D2].value = bpmclock.getcv() * 0.5; + outputs[OUTPUT_X2].value = bpmclock.getcv() * 2.0; + bpm_display = bpmclock.getbpm() / 2.0f; + + bpmclock.step(engineGetSampleTime()); + + outputs[OUTPUT_CLK].value = bpmclock.track(1) * 10.0; + outputs[OUTPUT_CLKD2].value = bpmclock.track(2) * 10.0; + outputs[OUTPUT_CLKX2].value = bpmclock.track(0) * 10.0; +} + +struct CM4ModuleWidget : ModuleWidget { + + CM4ModuleWidget(CM4Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-4.svg"))); + + //addChild(Widget::create(Vec(30, 0))); + addChild(Widget::create(Vec(box.size.x - 16, 0))); + addChild(Widget::create(Vec(5, 365))); + // addChild(Widget::create(Vec(box.size.x - 60, 365))); + + //UNIQUE ELEMENTS + addParam(ParamWidget::create(Vec(3.6 , 56.0), module, CM4Module::PARAM_BPM, 0.0f, 6.0, 0.0f)); + addParam(ParamWidget::create(Vec(7.0, 43.0), module, CM4Module::PARAM_SNAP, 0.0f, 2.0f, 1.0f)); + + addInput(Port::create(Vec(7.0 , 126.3), Port::INPUT, module, CM4Module::INPUT_BPM1)); + addInput(Port::create(Vec(7.0 , 169.1), Port::INPUT, module, CM4Module::INPUT_BPM2)); + + addOutput(Port::create(Vec(44.4 , 126.3), Port::OUTPUT, module, CM4Module::OUTPUT_BPM1)); + addOutput(Port::create(Vec(44.4 , 169.1), Port::OUTPUT, module, CM4Module::OUTPUT_BPM2)); + + addOutput(Port::create(Vec(7.0 , 212.0), Port::OUTPUT, module, CM4Module::OUTPUT_D2)); + addOutput(Port::create(Vec(44.4 , 212.0), Port::OUTPUT, module, CM4Module::OUTPUT_X2)); + + addOutput(Port::create(Vec(26.1 , 293.9), Port::OUTPUT, module, CM4Module::OUTPUT_CLK)); + addOutput(Port::create(Vec(3.5 , 326.5), Port::OUTPUT, module, CM4Module::OUTPUT_CLKD2)); + addOutput(Port::create(Vec(48.1 , 326.5), Port::OUTPUT, module, CM4Module::OUTPUT_CLKX2)); + + addInput(Port::create(Vec(6.2 , 251.8), Port::INPUT, module, CM4Module::INPUT_RST)); + addParam(ParamWidget::create(Vec(29.4 , 251.8), module, CM4Module::PARAM_RST, 0.0f, 1.0f, 0.0f)); + addOutput(Port::create(Vec(52.4 , 251.8), Port::OUTPUT, module, CM4Module::OUTPUT_RST)); + + //LCD display + NumDisplayWidget *display = new NumDisplayWidget(); + display->box.pos = Vec(7.0 , 21.0); + display->box.size = Vec(61.1 , 20.4); + display->value = &module->bpm_display; + addChild(display); + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM4Module = Model::create("CatroModulo", "CatroModulo_CM-4", "C/M4 : vcClk", CLOCK_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM4Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM4", "C/M4 : vcClk", CLOCK_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-5.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-5.cpp new file mode 100644 index 00000000..f4cf84c7 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-5.cpp @@ -0,0 +1,165 @@ +#include "CatroModulo.hpp" + + +//Catro-Module CM-5: vcClk++ + + +struct CM5Module : Module { + enum ParamIds { + PARAM_RST, + NUM_PARAMS + }; + enum InputIds { + INPUT_BPM, + INPUT_BPM2, + INPUT_RST, + NUM_INPUTS + }; + enum OutputIds { + OUTPUT_CLKX1, + OUTPUT_CLKX2, + OUTPUT_CLKX3, + OUTPUT_CLKX4, + OUTPUT_CLKX5, + OUTPUT_CLKX7, + OUTPUT_CLKX9, + OUTPUT_BPMX1, + OUTPUT_BPMX2, + OUTPUT_BPMX3, + OUTPUT_BPMX4, + OUTPUT_BPMX5, + OUTPUT_BPMX7, + OUTPUT_BPMX9, + NUM_OUTPUTS + }; + enum LightIds { + ENUMS(LIGHTS_CLK, 14), + NUM_LIGHTS + }; + + //create objects + //SchmittTrigger recordTrigger[16]; + CM_BpmClock clock1; + CM_BpmClock clock2; + CM_BpmClock clock3; + CM_BpmClock clock4; + CM_BpmClock clock5; + + CM5Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + //initialize objects + } + void step() override; +}; + +void CM5Module::step() { + + //set from first bpm cv input + clock1.setcv(inputs[INPUT_BPM].value * 2.0); + clock2.setcv(inputs[INPUT_BPM].value * 3.0); + clock3.setcv(inputs[INPUT_BPM].value * 5.0); + clock4.setcv(inputs[INPUT_BPM].value * 7.0); + clock5.setcv(inputs[INPUT_BPM].value * 9.0); + + //generate bpm outputs before adding second cv + outputs[OUTPUT_BPMX1].value = clock1.getcv() * 0.5; + outputs[OUTPUT_BPMX2].value = clock1.getcv(); + outputs[OUTPUT_BPMX3].value = clock2.getcv(); + outputs[OUTPUT_BPMX4].value = clock1.getcv() * 2.0; + outputs[OUTPUT_BPMX5].value = clock3.getcv(); + outputs[OUTPUT_BPMX7].value = clock4.getcv(); + outputs[OUTPUT_BPMX9].value = clock5.getcv(); + + //add second bpm cv input + clock1.addcv(inputs[INPUT_BPM2].value * 2.0); + clock2.addcv(inputs[INPUT_BPM2].value * 3.0); + clock3.addcv(inputs[INPUT_BPM2].value * 5.0); + clock4.addcv(inputs[INPUT_BPM2].value * 7.0); + clock5.addcv(inputs[INPUT_BPM2].value * 9.0); + + //perform reset if needed + clock1.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock2.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock3.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock4.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock5.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + + //step clocks + clock1.step(engineGetSampleTime()); + clock2.step(engineGetSampleTime()); + clock3.step(engineGetSampleTime()); + clock4.step(engineGetSampleTime()); + clock5.step(engineGetSampleTime()); + + //set clock outputs + outputs[OUTPUT_CLKX1].value = clock1.track(2) * 10.0; + outputs[OUTPUT_CLKX2].value = clock1.track(1) * 10.0; + outputs[OUTPUT_CLKX3].value = clock2.track(1) * 10.0; + outputs[OUTPUT_CLKX4].value = clock1.track(0) * 10.0; + outputs[OUTPUT_CLKX5].value = clock3.track(1) * 10.0; + outputs[OUTPUT_CLKX7].value = clock4.track(1) * 10.0; + outputs[OUTPUT_CLKX9].value = clock5.track(1) * 10.0; + + //set clock lights + for (int i = 0; i < 7; i++){ + lights[2 * i + 0].setBrightnessSmooth(fmaxf(0.0f, outputs[OUTPUT_CLKX1 + i].value * 0.2f)); + lights[2 * i + 1].setBrightnessSmooth(fmaxf(0.0f, -outputs[OUTPUT_CLKX1 + i].value * 0.2f)); + } + + + +} + +struct CM5ModuleWidget : ModuleWidget { + CM5ModuleWidget(CM5Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-5.svg"))); + + addChild(Widget::create(Vec(box.size.x - 15, 365))); + addChild(Widget::create(Vec(2, 365))); + + //UNIQUE ELEMENTS + addParam(ParamWidget::create(Vec(8.7 , 330.3), module, CM5Module::PARAM_RST, 0.0f, 1.0f, 0.0f)); + addInput(Port::create(Vec(17.3, 330.3), Port::INPUT, module, CM5Module::INPUT_RST)); + + addInput(Port::create(Vec(0.0 , 25.2), Port::INPUT, module, CM5Module::INPUT_BPM)); + addInput(Port::create(Vec(20.7 , 37.7), Port::INPUT, module, CM5Module::INPUT_BPM2)); + + //clock outputs + addOutput(Port::create(Vec(20.7 , 74.6 ), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX1)); + addOutput(Port::create(Vec(20.7 , 111.5), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX2)); + addOutput(Port::create(Vec(20.7 , 148.3), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX3)); + addOutput(Port::create(Vec(20.7 , 185.2), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX4)); + addOutput(Port::create(Vec(20.7 , 222.0), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX5)); + addOutput(Port::create(Vec(20.7 , 258.9), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX7)); + addOutput(Port::create(Vec(20.7 , 295.8), Port::OUTPUT, module, CM5Module::OUTPUT_CLKX9)); + + //bpm cv outputs + addOutput(Port::create(Vec(0 , 61.3) , Port::OUTPUT, module, CM5Module::OUTPUT_BPMX1)); + addOutput(Port::create(Vec(0 , 98.2) , Port::OUTPUT, module, CM5Module::OUTPUT_BPMX2)); + addOutput(Port::create(Vec(0 , 135.0), Port::OUTPUT, module, CM5Module::OUTPUT_BPMX3)); + addOutput(Port::create(Vec(0 , 171.9), Port::OUTPUT, module, CM5Module::OUTPUT_BPMX4)); + addOutput(Port::create(Vec(0 , 208.7), Port::OUTPUT, module, CM5Module::OUTPUT_BPMX5)); + addOutput(Port::create(Vec(0 , 245.6), Port::OUTPUT, module, CM5Module::OUTPUT_BPMX7)); + addOutput(Port::create(Vec(0 , 282.5), Port::OUTPUT, module, CM5Module::OUTPUT_BPMX9)); + + //clock lights + addChild(ModuleLightWidget::create>(Vec(41.0 , 74.6 + 21.0), module, CM5Module::LIGHTS_CLK)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 111.5 + 21.0), module, CM5Module::LIGHTS_CLK + 2)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 148.3 + 21.0), module, CM5Module::LIGHTS_CLK + 4)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 185.2 + 21.0), module, CM5Module::LIGHTS_CLK + 6)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 222.0 + 21.0), module, CM5Module::LIGHTS_CLK + 8)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 258.9 + 21.0), module, CM5Module::LIGHTS_CLK + 10)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 295.8 + 21.0), module, CM5Module::LIGHTS_CLK + 12)); + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +//Model *modelCM5Module = Model::create("CatroModulo", "CatroModulo_CM-5", "C/M5 : vcClk++", CLOCK_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM5Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM5", "C/M5 : vcClk++", CLOCK_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-6.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-6.cpp new file mode 100644 index 00000000..0e55c323 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-6.cpp @@ -0,0 +1,45 @@ +#include "CatroModulo.hpp" + + +//Catro-Module CM-6: 1hp blank + +struct CM6Module : Module { + + enum ParamIds { + NUM_PARAMS + }; + enum InputIds { + NUM_INPUTS + }; + enum OutputIds { + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + + CM6Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + } + void step() override; +}; + +void CM6Module::step() { +} + +struct CM6ModuleWidget : ModuleWidget { + + CM6ModuleWidget(CM6Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-6.svg"))); + + addChild(Widget::create(Vec(1, 0))); + addChild(Widget::create(Vec(1, 365))); + + } +}; + +// Model *modelCM6Module = Model::create("CatroModulo", "CatroModulo_CM-6", "C/M6 : 1hp blank", BLANK_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM6Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM6", "C/M6 : 1hp blank", BLANK_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-7.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-7.cpp new file mode 100644 index 00000000..d99a1fde --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-7.cpp @@ -0,0 +1,164 @@ +#include "CatroModulo.hpp" + + +//Catro-Module CM-7: vcClk-- + + +struct CM7Module : Module { + enum ParamIds { + PARAM_RST, + NUM_PARAMS + }; + enum InputIds { + INPUT_BPM, + INPUT_BPM2, + INPUT_RST, + NUM_INPUTS + }; + enum OutputIds { + OUTPUT_CLKX1, + OUTPUT_CLK_2, + OUTPUT_CLK_3, + OUTPUT_CLK_4, + OUTPUT_CLK_5, + OUTPUT_CLK_7, + OUTPUT_CLK_9, + OUTPUT_BPMX1, + OUTPUT_BPM_2, + OUTPUT_BPM_3, + OUTPUT_BPM_4, + OUTPUT_BPM_5, + OUTPUT_BPM_7, + OUTPUT_BPM_9, + NUM_OUTPUTS + }; + enum LightIds { + ENUMS(LIGHTS_CLK, 14), + NUM_LIGHTS + }; + + //create objects + //SchmittTrigger recordTrigger[16]; + CM_BpmClock clock1; + CM_BpmClock clock2; + CM_BpmClock clock3; + CM_BpmClock clock4; + CM_BpmClock clock5; + + CM7Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + //initialize objects + } + void step() override; +}; + +void CM7Module::step() { + + //set from first bpm cv input + clock1.setcv(inputs[INPUT_BPM].value * 0.5); + clock2.setcv(inputs[INPUT_BPM].value / 3.0); + clock3.setcv(inputs[INPUT_BPM].value * 0.2); + clock4.setcv(inputs[INPUT_BPM].value / 7.0); + clock5.setcv(inputs[INPUT_BPM].value / 9.0); + + //generate bpm outputs before adding second cv + outputs[OUTPUT_BPMX1].value = clock1.getcv() * 2.0; + outputs[OUTPUT_BPM_2].value = clock1.getcv(); + outputs[OUTPUT_BPM_3].value = clock2.getcv(); + outputs[OUTPUT_BPM_4].value = clock1.getcv() * 0.5; + outputs[OUTPUT_BPM_5].value = clock3.getcv(); + outputs[OUTPUT_BPM_7].value = clock4.getcv(); + outputs[OUTPUT_BPM_9].value = clock5.getcv(); + + //add second bpm cv input + clock1.addcv(inputs[INPUT_BPM2].value * 0.5); + clock2.addcv(inputs[INPUT_BPM2].value / 3.0); + clock3.addcv(inputs[INPUT_BPM2].value * 0.2); + clock4.addcv(inputs[INPUT_BPM2].value / 7.0); + clock5.addcv(inputs[INPUT_BPM2].value / 9.0); + + //perform reset if needed + clock1.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock2.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock3.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock4.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + clock5.setReset(inputs[INPUT_RST].value || params[PARAM_RST].value); + + //step clocks + clock1.step(engineGetSampleTime()); + clock2.step(engineGetSampleTime()); + clock3.step(engineGetSampleTime()); + clock4.step(engineGetSampleTime()); + clock5.step(engineGetSampleTime()); + + //set clock outputs + outputs[OUTPUT_CLKX1].value = clock1.track(0) * 10.0; + outputs[OUTPUT_CLK_2].value = clock1.track(1) * 10.0; + outputs[OUTPUT_CLK_3].value = clock2.track(1) * 10.0; + outputs[OUTPUT_CLK_4].value = clock1.track(2) * 10.0; + outputs[OUTPUT_CLK_5].value = clock3.track(1) * 10.0; + outputs[OUTPUT_CLK_7].value = clock4.track(1) * 10.0; + outputs[OUTPUT_CLK_9].value = clock5.track(1) * 10.0; + + //set clock lights + for (int i = 0; i < 7; i++){ + lights[2 * i + 0].setBrightnessSmooth(fmaxf(0.0f, outputs[OUTPUT_CLKX1 + i].value * 0.2f)); + lights[2 * i + 1].setBrightnessSmooth(fmaxf(0.0f, -outputs[OUTPUT_CLKX1 + i].value * 0.2f)); + } + +} + +struct CM7ModuleWidget : ModuleWidget { + CM7ModuleWidget(CM7Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-7.svg"))); + + addChild(Widget::create(Vec(box.size.x - 15, 365))); + addChild(Widget::create(Vec(2, 365))); + + //UNIQUE ELEMENTS + addParam(ParamWidget::create(Vec(8.7 , 330.3), module, CM7Module::PARAM_RST, 0.0f, 1.0f, 0.0f)); + addInput(Port::create(Vec(17.3, 330.3), Port::INPUT, module, CM7Module::INPUT_RST)); + + addInput(Port::create(Vec(0.0 , 25.2), Port::INPUT, module, CM7Module::INPUT_BPM)); + addInput(Port::create(Vec(20.7 , 37.7), Port::INPUT, module, CM7Module::INPUT_BPM2)); + + //clock outputs + addOutput(Port::create(Vec(20.7 , 74.6 ), Port::OUTPUT, module, CM7Module::OUTPUT_CLKX1)); + addOutput(Port::create(Vec(20.7 , 111.5), Port::OUTPUT, module, CM7Module::OUTPUT_CLK_2)); + addOutput(Port::create(Vec(20.7 , 148.3), Port::OUTPUT, module, CM7Module::OUTPUT_CLK_3)); + addOutput(Port::create(Vec(20.7 , 185.2), Port::OUTPUT, module, CM7Module::OUTPUT_CLK_4)); + addOutput(Port::create(Vec(20.7 , 222.0), Port::OUTPUT, module, CM7Module::OUTPUT_CLK_5)); + addOutput(Port::create(Vec(20.7 , 258.9), Port::OUTPUT, module, CM7Module::OUTPUT_CLK_7)); + addOutput(Port::create(Vec(20.7 , 295.8), Port::OUTPUT, module, CM7Module::OUTPUT_CLK_9)); + + //bpm cv outputs + addOutput(Port::create(Vec(0 , 61.3) , Port::OUTPUT, module, CM7Module::OUTPUT_BPMX1)); + addOutput(Port::create(Vec(0 , 98.2) , Port::OUTPUT, module, CM7Module::OUTPUT_BPM_2)); + addOutput(Port::create(Vec(0 , 135.0), Port::OUTPUT, module, CM7Module::OUTPUT_BPM_3)); + addOutput(Port::create(Vec(0 , 171.9), Port::OUTPUT, module, CM7Module::OUTPUT_BPM_4)); + addOutput(Port::create(Vec(0 , 208.7), Port::OUTPUT, module, CM7Module::OUTPUT_BPM_5)); + addOutput(Port::create(Vec(0 , 245.6), Port::OUTPUT, module, CM7Module::OUTPUT_BPM_7)); + addOutput(Port::create(Vec(0 , 282.5), Port::OUTPUT, module, CM7Module::OUTPUT_BPM_9)); + + //clock lights + addChild(ModuleLightWidget::create>(Vec(41.0 , 74.6 + 21.0), module, CM7Module::LIGHTS_CLK)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 111.5 + 21.0), module, CM7Module::LIGHTS_CLK + 2)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 148.3 + 21.0), module, CM7Module::LIGHTS_CLK + 4)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 185.2 + 21.0), module, CM7Module::LIGHTS_CLK + 6)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 222.0 + 21.0), module, CM7Module::LIGHTS_CLK + 8)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 258.9 + 21.0), module, CM7Module::LIGHTS_CLK + 10)); + addChild(ModuleLightWidget::create>(Vec(41.0 , 295.8 + 21.0), module, CM7Module::LIGHTS_CLK + 12)); + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM7Module = Model::create("CatroModulo", "CatroModulo_CM-7", "C/M7 : vcClk--", CLOCK_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM7Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM7", "C/M7 : vcClk--", CLOCK_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-8.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-8.cpp new file mode 100644 index 00000000..2fef6dc1 --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-8.cpp @@ -0,0 +1,212 @@ +#include "CatroModulo.hpp" +#include "CM_helpers.hpp" + +//Catro-Module CM-8: aAvsBb + +struct CM8Module : Module { + + enum ParamIds { + PARAM__a, + PARAM__b, + PARAM_CIA, + NUM_PARAMS + }; + enum InputIds { + INPUT__a, + INPUT__b, + INPUT_A, + INPUT_B, + INPUT_SNH, + NUM_INPUTS + }; + enum OutputIds { + OUTPUT__a, + OUTPUT__b, + OUTPUT_ALTB, + OUTPUT_BLTA, + OUTPUT_AISB, + OUTPUT_ANTB, + OUTPUT_ACLM, + OUTPUT_BCLM, + OUTPUT_AFLD, + OUTPUT_BFLD, + OUTPUT_ALO, + OUTPUT_BLO, + OUTPUT_AHI, + OUTPUT_BHI, + OUTPUT_ARNG, + OUTPUT_BRNG, + NUM_OUTPUTS + }; + enum LightIds { + LIGHT_ALTB, + LIGHT_BLTA, + LIGHT_ACLM, + LIGHT_BCLM, + LIGHT_AFLD, + LIGHT_BFLD, + LIGHT_ALO, + LIGHT_BLO, + LIGHT_AHI, + LIGHT_BHI, + LIGHT_ARNG, + LIGHT_BRNG, + NUM_LIGHTS + }; + + //initializations + float lo; + float hi; + int cia; + SchmittTrigger snhTrigger; + float lastA; + float lastB; + float currentA; + float currentB; + + CM8Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + srand(time(NULL)); + } + void step() override; +}; + +void CM8Module::step() { + // set mode + cia = params[PARAM_CIA].value; + + + //set limits + + if (cia == 0){ + lo = (inputs[INPUT__a].active) ? (inputs[INPUT__a].value * 0.1) * params[PARAM__a].value : params[PARAM__a].value; + hi = (inputs[INPUT__b].active) ? (inputs[INPUT__b].value * 0.1) * params[PARAM__b].value : params[PARAM__b].value; + if (lo > hi){ + hi = (lo + hi) * 0.5; + lo = hi; + } + outputs[OUTPUT__a].value = lo; + outputs[OUTPUT__b].value = hi; + } + if (cia == 1){ + lo = (inputs[INPUT__a].active) ? (inputs[INPUT__a].value * 0.1) * params[PARAM__a].value : params[PARAM__a].value; + hi = (inputs[INPUT__b].active) ? (inputs[INPUT__b].value * 0.1) * params[PARAM__b].value : params[PARAM__b].value; + outputs[OUTPUT__a].value = lo; + outputs[OUTPUT__b].value = hi; + if (lo > hi){ + std::swap(lo, hi); + } + } + if (cia == 2){ + lo = (inputs[INPUT__a].active) ? (inputs[INPUT__a].value * 0.1) * params[PARAM__a].value : params[PARAM__a].value; + hi = lo + ((inputs[INPUT__b].active) ? (inputs[INPUT__b].value * 0.1) * params[PARAM__b].value : params[PARAM__b].value); + outputs[OUTPUT__a].value = lo; + outputs[OUTPUT__b].value = hi; + if (lo > hi){ + std::swap(lo, hi); + } + } + + currentA = inputs[INPUT_A].value; + currentB = inputs[INPUT_B].value; + + //handle empty inputs + if (! inputs[INPUT_A].active) currentA = (inputs[INPUT_B].active) ? cm_gauss(5.0, currentB) : cm_gauss(10.0); + if (! inputs[INPUT_B].active) currentB = (inputs[INPUT_A].active) ? cm_gauss(5.0, currentA) : cm_gauss(10.0); + + //sample and hold + if (inputs[INPUT_SNH].active){ + if (snhTrigger.process(inputs[INPUT_SNH].value)){ + lastA = currentA; + lastB = currentB; + } + currentA = lastA; + currentB = lastB; + } + + + //A + outputs[OUTPUT_ALTB].value = (currentA > currentB) * 10.0; + outputs[OUTPUT_AISB].value = (currentA == currentB) * 10.0; + outputs[OUTPUT_ACLM].value = cm_clamp(currentA, lo, hi); + outputs[OUTPUT_AFLD].value = cm_fold(currentA, lo, hi); + outputs[OUTPUT_ALO].value = (currentA <= hi) * 10.0; + outputs[OUTPUT_AHI].value = (currentA >= lo) * 10.0; + outputs[OUTPUT_ARNG].value = (currentA > lo && currentA < hi) * 10.0; + + //B + outputs[OUTPUT_BLTA].value = (currentA < currentB) * 10.0; + outputs[OUTPUT_ANTB].value = !(currentA == currentB) * 10.0; + outputs[OUTPUT_BCLM].value = cm_clamp(currentB, lo, hi); + outputs[OUTPUT_BFLD].value = cm_fold(currentB, lo, hi); + outputs[OUTPUT_BLO].value = (currentB <= hi) * 10.0; + outputs[OUTPUT_BHI].value = (currentB >= lo) * 10.0; + outputs[OUTPUT_BRNG].value = (currentB > lo && currentB < hi) * 10.0; + + +} + +struct CM8ModuleWidget : ModuleWidget { + + CM8ModuleWidget(CM8Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-8.svg"))); + + //addChild(Widget::create(Vec(30, 0))); + addChild(Widget::create(Vec(box.size.x - 16, 0))); + addChild(Widget::create(Vec(5, 365))); + // addChild(Widget::create(Vec(box.size.x - 60, 365))); + + //widget items + addParam(ParamWidget::create(Vec(34.2 , 18.0), module, CM8Module::PARAM__a, -10.0, 10.0, 0.0f)); + addParam(ParamWidget::create(Vec(5.4 , 58.0), module, CM8Module::PARAM__b, -10.0, 10.0, 0.0f)); + + addInput(Port::create(Vec(8.4 , 18.0), Port::INPUT, module, CM8Module::INPUT__a)); + addInput(Port::create(Vec(50.0 , 57.1), Port::INPUT, module, CM8Module::INPUT__b)); + + addOutput(Port::create(Vec(8.4 , 39.1), Port::OUTPUT, module, CM8Module::OUTPUT__a)); + addOutput(Port::create(Vec(50.0 , 78.3), Port::OUTPUT, module, CM8Module::OUTPUT__b)); + + addParam(ParamWidget::create(Vec(16.4, 103.3), module, CM8Module::PARAM_CIA, 0.0f, 2.0f, 0.0f)); + addInput(Port::create(Vec(54.0 , 112.7), Port::INPUT, module, CM8Module::INPUT_SNH)); + + float a = 5.4; + float b = 46.0; + float c[8] = {138.8, 166.0, 193.2, 221.9, 249.1, 277.1, 304.3, 331.5}; + + addInput(Port::create(Vec(a, c[0]), Port::INPUT, module, CM8Module::INPUT_A)); + addInput(Port::create(Vec(b, c[0]), Port::INPUT, module, CM8Module::INPUT_B)); + + addOutput(Port::create(Vec(a , c[1]), Port::OUTPUT, module, CM8Module::OUTPUT_ALTB)); + addOutput(Port::create(Vec(b , c[1]), Port::OUTPUT, module, CM8Module::OUTPUT_BLTA)); + + addOutput(Port::create(Vec(a , c[2]), Port::OUTPUT, module, CM8Module::OUTPUT_AISB)); + addOutput(Port::create(Vec(b , c[2]), Port::OUTPUT, module, CM8Module::OUTPUT_ANTB)); + + addOutput(Port::create(Vec(a , c[3]), Port::OUTPUT, module, CM8Module::OUTPUT_ACLM)); + addOutput(Port::create(Vec(b , c[3]), Port::OUTPUT, module, CM8Module::OUTPUT_BCLM)); + + addOutput(Port::create(Vec(a , c[4]), Port::OUTPUT, module, CM8Module::OUTPUT_AFLD)); + addOutput(Port::create(Vec(b , c[4]), Port::OUTPUT, module, CM8Module::OUTPUT_BFLD)); + + addOutput(Port::create(Vec(a , c[5]), Port::OUTPUT, module, CM8Module::OUTPUT_ALO)); + addOutput(Port::create(Vec(b , c[5]), Port::OUTPUT, module, CM8Module::OUTPUT_BLO)); + + addOutput(Port::create(Vec(a , c[6]), Port::OUTPUT, module, CM8Module::OUTPUT_AHI)); + addOutput(Port::create(Vec(b , c[6]), Port::OUTPUT, module, CM8Module::OUTPUT_BHI)); + + addOutput(Port::create(Vec(a , c[7]), Port::OUTPUT, module, CM8Module::OUTPUT_ARNG)); + addOutput(Port::create(Vec(b , c[7]), Port::OUTPUT, module, CM8Module::OUTPUT_BRNG)); + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM8Module = Model::create("CatroModulo", "CatroModulo_CM-8", "C/M8 : aAvsBb", LOGIC_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM8Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM8", "C/M8 : aAvsBb", LOGIC_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/src/CatroModulo_CM-9.cpp b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-9.cpp new file mode 100644 index 00000000..924969db --- /dev/null +++ b/plugins/community/repos/CatroModulo/src/CatroModulo_CM-9.cpp @@ -0,0 +1,176 @@ +#include "CatroModulo.hpp" +#include "CM_helpers.hpp" + +//Catro-Module CM-9: 1-8-1 + +struct CM9Module : Module { + + enum ParamIds { + PARAM_SEL, + NUM_PARAMS + }; + enum InputIds { + INPUT_SEL, + INPUT_CLK, + INPUT_RST, + INPUT_1, + ENUMS(INPUT_IN, 8), + NUM_INPUTS + }; + enum OutputIds { + ENUMS(OUTPUT_OUT, 8), + OUTPUT_1, + NUM_OUTPUTS + }; + + enum LightIds { + NUM_LIGHTS + }; + + enum Modes { + MODE_SPLIT, + MODE_JOIN, + MODE_GATE, + MODE_PASS, + }; + + //initializations + int mode; + SchmittTrigger clkTrigger; + SchmittTrigger rstTrigger; + CM_stepper stepper; + int selector; + float ledx = 30.9; + float ledy = 50.0; + float ins[8]; + float outs[8]; + bool gatemode = 0; + + CM9Module() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) { + } + + void step() override; + +}; + +void CM9Module::step() { + //process inputs + int inputsconnected = 0; + for (int i = 0; i < 8; i++){ + if (inputs[INPUT_IN + i].active){ + inputsconnected++; + ins[i] = inputs[INPUT_IN + i].value; + }else{ + ins[i] = 10.0; + } + } + + //process selector + float selectorparam = clamp(round((inputs[INPUT_SEL].active) ? inputs[INPUT_SEL].value * 0.1 * params[PARAM_SEL].value : params[PARAM_SEL].value), 0, 7); + + //stepper + if (inputs[INPUT_CLK].active){ + if (inputs[INPUT_RST].active){ + if (rstTrigger.process(inputs[INPUT_RST].value)){ + stepper.reset(); + } + } + if (clkTrigger.process(inputs[INPUT_CLK].value)){ + selector = stepper.step(selectorparam); + } + }else{ + selector = selectorparam; + } + + //process outputs + //reset all to 0 + for (int i = 0; i < NUM_OUTPUTS; i++){ + outputs[OUTPUT_OUT + i].value = 0.0; + } + gatemode = true; + + if (inputs[INPUT_1].active){ + outputs[OUTPUT_OUT + selector].value = inputs[INPUT_1].value; + gatemode = false; + } + if (outputs[OUTPUT_1].active){ + if (inputsconnected > 0){ + outputs[OUTPUT_1].value = inputs[INPUT_IN + selector].value; + }else{ + outputs[OUTPUT_1].value = selector * 1.4285714285714285714285714285714f; + } + + + } + if (gatemode == true){ + if (inputsconnected > 0){ + outputs[OUTPUT_OUT + selector].value = inputs[INPUT_IN + selector].value; + }else{ + if (inputs[INPUT_CLK].active){ + outputs[OUTPUT_OUT + selector].value = (inputs[INPUT_CLK].value > 0) ? 10.0f : 0.0f; + }else{ + outputs[OUTPUT_OUT + selector].value = 10.0f; + } + } + } + + //indicator leds + ledy = 114.1 + 27.7 * selector; + +} + +struct CM9ModuleWidget : ModuleWidget { + + CM9ModuleWidget(CM9Module *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/CM-9.svg"))); + + //addChild(Widget::create(Vec(30, 0))); + addChild(Widget::create(Vec(box.size.x - 16, 0))); + addChild(Widget::create(Vec(5, 365))); + // addChild(Widget::create(Vec(box.size.x - 60, 365))); + + //widget items + addParam(ParamWidget::create(Vec(7.0 , 20.2), module, CM9Module::PARAM_SEL, 0.0, 7.0, 0.0f)); + + addInput(Port::create(Vec(2.8, 65.9), Port::INPUT, module, CM9Module::INPUT_SEL)); + addInput(Port::create(Vec(50.2 , 30.0), Port::INPUT, module, CM9Module::INPUT_CLK)); + addInput(Port::create(Vec(50.2 , 60.2), Port::INPUT, module, CM9Module::INPUT_RST)); + + + float a = 5.1; + float b = 46.4; + float c[8] = {107.5, 135.2, 163.0, 190.7, 218.5, 246.3, 274.0, 301.8}; + + addInput(Port::create(Vec(25.7, 77.5), Port::INPUT, module, CM9Module::INPUT_1)); + + for (int i = 0; i < 8; i++){ + addInput(Port::create(Vec(a, c[i]), Port::INPUT, module, CM9Module::INPUT_IN + i)); + } + + for (int i = 0; i < 8; i++){ + addOutput(Port::create(Vec(b , c[i] - 6.1), Port::OUTPUT, module, CM9Module::OUTPUT_OUT + i)); + } + + addOutput(Port::create(Vec(25.7 , 326.6), Port::OUTPUT, module, CM9Module::OUTPUT_1)); + + + //led selector display + CM9_LedIndicator *ledindicator = new CM9_LedIndicator(); + ledindicator->posx = &module->ledx; + ledindicator->posy = &module->ledy; + addChild(ledindicator); + + } +}; + + +// Specify the Module and ModuleWidget subclass, human-readable +// author name for categorization per plugin, module slug (should never +// change), human-readable module name, and any number of tags +// (found in `include/tags.hpp`) separated by commas. +// Model *modelCM9Module = Model::create("CatroModulo", "CatroModulo_CM-9", "C/M9 : 1-8-1", SWITCH_TAG); + +RACK_PLUGIN_MODEL_INIT(CatroModulo, CM9Module) { + Model *model = Model::create("CatroModulo", "CatroModulo_CM9", "C/M9 : 1-8-1", SWITCH_TAG); + return model; +} \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/vs2017/Template_shared/CatroModulo.sln b/plugins/community/repos/CatroModulo/vs2017/Template_shared/CatroModulo.sln new file mode 100644 index 00000000..bf39522d --- /dev/null +++ b/plugins/community/repos/CatroModulo/vs2017/Template_shared/CatroModulo.sln @@ -0,0 +1,31 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28917.181 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CatroModulo", "Template_shared.vcxproj", "{91BDCF34-8CB8-4410-B261-D724280A3DFC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Debug|x64.ActiveCfg = Debug|x64 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Debug|x64.Build.0 = Debug|x64 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Debug|x86.ActiveCfg = Debug|Win32 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Debug|x86.Build.0 = Debug|Win32 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Release|x64.ActiveCfg = Release|x64 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Release|x64.Build.0 = Release|x64 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Release|x86.ActiveCfg = Release|Win32 + {91BDCF34-8CB8-4410-B261-D724280A3DFC}.Release|x86.Build.0 = Release|Win32 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {5E205315-6205-4833-AEC4-C4B63BFA98E7} + EndGlobalSection +EndGlobal diff --git a/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj b/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj new file mode 100644 index 00000000..5999f944 --- /dev/null +++ b/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj @@ -0,0 +1,187 @@ + + + + + Debug + Win32 + + + Release + Win32 + + + Debug + x64 + + + Release + x64 + + + + 15.0 + {91BDCF34-8CB8-4410-B261-D724280A3DFC} + Win32Proj + Templateshared + 10.0 + CatroModulo + + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + NotSet + + + DynamicLibrary + true + v142 + Unicode + + + DynamicLibrary + false + v142 + true + NotSet + + + + + + + + + + + + + + + + + + + + + true + + + true + + + false + + + false + + + + Use + Level3 + Disabled + true + WIN32;_DEBUG;TEMPLATESHARED_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + Use + Level3 + Disabled + true + _DEBUG;TEMPLATESHARED_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions) + true + + + Windows + true + + + + + NotUsing + Level3 + Full + true + true + true + SLUG=CatroModulo;BUILD_64;RACK_PLUGIN;RACK_PLUGIN_SHARED;ARCH_WIN;VERSION=0.6.6;_USE_MATH_DEFINES;USE_VST2;WIN32;NDEBUG;TEMPLATESHARED_EXPORTS;_WINDOWS;WIN32;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_USING_V110_SDK71_;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions) + true + ..\..\..\..\include;..\..\..\..\include\dep + None + false + 4250;4530 + MultiThreaded + + + Windows + true + true + false + ..\..\..\..\lib\x86 + Rack_shared.lib;libspeexdsp.lib;glew.lib;opengl32.lib;gdi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;Shell32.lib;ws2_32.lib;winmm.lib + + + + + NotUsing + Level3 + Full + true + true + true + SLUG=Template_shared;BUILD_64;RACK_PLUGIN;RACK_PLUGIN_SHARED;ARCH_WIN;VERSION=0.6.1;_USE_MATH_DEFINES;USE_VST2;WIN32;NDEBUG;TEMPLATESHARED_EXPORTS;_WINDOWS;WIN32;_USRDLL;_CRT_SECURE_NO_DEPRECATE;_USING_V110_SDK71_;_HAS_EXCEPTIONS=0;%(PreprocessorDefinitions) + true + ..\..\..\..\include;..\..\..\..\include\dep + None + false + 4250;4530 + MultiThreaded + + + Windows + true + true + false + Rack_shared.lib;libspeexdsp.lib;glew.lib;opengl32.lib;gdi32.lib;user32.lib;kernel32.lib;Comdlg32.lib;Shell32.lib;ws2_32.lib;winmm.lib;%(AdditionalDependencies) + ..\..\..\..\lib\x64 + $(OutDir)plugin.dll + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj.filters b/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj.filters new file mode 100644 index 00000000..b673a5a9 --- /dev/null +++ b/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj.filters @@ -0,0 +1,66 @@ + + + + + {4FC737F1-C7A5-4376-A066-2A32D752A2FF} + cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;xsd + + + {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms + + + + + Header Files + + + Header Files + + + Header Files + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj.user b/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj.user new file mode 100644 index 00000000..be250787 --- /dev/null +++ b/plugins/community/repos/CatroModulo/vs2017/Template_shared/Template_shared.vcxproj.user @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/plugins/community/repos/CatroModulo/vs2017/Template_shared/dllmain.cpp b/plugins/community/repos/CatroModulo/vs2017/Template_shared/dllmain.cpp new file mode 100644 index 00000000..1fab2c21 Binary files /dev/null and b/plugins/community/repos/CatroModulo/vs2017/Template_shared/dllmain.cpp differ diff --git a/plugins/community/repos/CatroModulo/vs2017/Template_shared/targetver.h b/plugins/community/repos/CatroModulo/vs2017/Template_shared/targetver.h new file mode 100644 index 00000000..567cd346 Binary files /dev/null and b/plugins/community/repos/CatroModulo/vs2017/Template_shared/targetver.h differ diff --git a/plugins/makefile.common b/plugins/makefile.common index b8d8dc04..7f813c27 100644 --- a/plugins/makefile.common +++ b/plugins/makefile.common @@ -24,6 +24,7 @@ bin: $(call run_make,bsp,bin) # $(call run_make,BOKONTEPByteBeatMachine,bin) $(call run_make,CastleRocktronics,bin) + $(call run_make,CatroModulo,bin) $(call run_make,cf,bin) $(call run_make,com-soundchasing-stochasm,bin) $(call run_make,computerscare,bin) @@ -105,6 +106,7 @@ clean: $(call run_make,bsp,clean) # $(call run_make,BOKONTEPByteBeatMachine,clean) $(call run_make,CastleRocktronics,clean) + $(call run_make,CatroModulo,clean) $(call run_make,cf,clean) $(call run_make,com-soundchasing-stochasm,clean) $(call run_make,computerscare,clean) diff --git a/vst2_bin/plugins/CatroModulo/LICENCES/CF.txt b/vst2_bin/plugins/CatroModulo/LICENCES/CF.txt new file mode 100644 index 00000000..66ea3eae --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/LICENCES/CF.txt @@ -0,0 +1,7 @@ +Copyright (c) 2018 clément foulc + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vst2_bin/plugins/CatroModulo/LICENCES/FUNDAMENTAL.txt b/vst2_bin/plugins/CatroModulo/LICENCES/FUNDAMENTAL.txt new file mode 100644 index 00000000..18835632 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/LICENCES/FUNDAMENTAL.txt @@ -0,0 +1,7 @@ +Copyright (c) 2016 Andrew Belt + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vst2_bin/plugins/CatroModulo/LICENCES/IMPROMPTUMODULAR.txt b/vst2_bin/plugins/CatroModulo/LICENCES/IMPROMPTUMODULAR.txt new file mode 100644 index 00000000..83e0b60f --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/LICENCES/IMPROMPTUMODULAR.txt @@ -0,0 +1,14 @@ +#### IMPROMPTU MODULAR #### + +Copyright (c) 2018 Marc Boulé. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vst2_bin/plugins/CatroModulo/LICENCES/VCV.txt b/vst2_bin/plugins/CatroModulo/LICENCES/VCV.txt new file mode 100644 index 00000000..18835632 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/LICENCES/VCV.txt @@ -0,0 +1,7 @@ +Copyright (c) 2016 Andrew Belt + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/vst2_bin/plugins/CatroModulo/LICENSE b/vst2_bin/plugins/CatroModulo/LICENSE new file mode 100644 index 00000000..3419719a --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/LICENSE @@ -0,0 +1,29 @@ +BSD 3-Clause License + +Copyright (c) 2019, catronomix +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/vst2_bin/plugins/CatroModulo/LICENSE.txt b/vst2_bin/plugins/CatroModulo/LICENSE.txt new file mode 100644 index 00000000..400e4cac --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/LICENSE.txt @@ -0,0 +1,12 @@ +Copyright (c) 2019 Innocent Coppieters. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + diff --git a/vst2_bin/plugins/CatroModulo/README.md b/vst2_bin/plugins/CatroModulo/README.md new file mode 100644 index 00000000..479afd4c --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/README.md @@ -0,0 +1,1168 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + catro-modulo/README.md at master · catronomix/catro-modulo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + +
+ +
+ + +
+ +
+ + + +
+
+
+ + + + + + + + + + +
+
+ +
    + + + + +
  • + +
    + +
    + + + Watch + + +
    + Notifications +
    +
    + + + + + + + +
    +
    +
    + +
    +
  • + +
  • +
    +
    + + +
    +
    + + +
    + +
  • + +
  • +
    +
    + +
  • +
+ +

+ + /catro-modulo + + +

+ +
+ + + + + + +
+
+
+ + + + + + + + Permalink + + + + +
+ + +
+ + Branch: + master + + + + + + + +
+ +
+ + Find file + + + Copy path + +
+
+ + +
+ + Find file + + + Copy path + +
+
+ + + + +
+
+ + + + + Update README.md + + + + 134a522 + May 3, 2019 + +
+ +
+
+ + 1 contributor + + +
+ +

+ Users who have contributed to this file +

+
+ +
+
+
+
+ + + + + + +
+ +
+ +
+ 41 lines (28 sloc) + + 1.65 KB +
+ +
+ +
+ Raw + Blame + History +
+ + +
+ + + + +
+ +
+
+ +
+
+
+ + +
+

Catro/Modulo modules for VCV Rack

+

CM 0.6.5 has been released, please see release notes:
https://github.com/catronomix/catro-modulo/releases/tag/0.6.5
This readme will be updated soon

+

screenshot1 +screenshot2

+

Full manual here: https://github.com/catronomix/catro-modulo/blob/master/CM-manual-v0.6.4.pdf

+

CM-1: 8xlfo
+8 LFOs that blend between sine, square, saw and triangle waves +Rate is from very slow to audio rate +Mix output is the average of all LFOs

+

CM-2: 8xatn
+8 attenuverters with offset +Mix output is the average of all outputs that have an input connected

+

CM-3: PreSetSeq
+Preset sequencer and morpher +8 'Eyes' that set their value when no input connected, or scale the input when connected. +8 triggerable record buttons that save the resulting eye-values +Scan/select dial to choose which saved recording to select for output +Morph slider fades between recording output, direct eye output and recordingXdirect output +Sequencer with some built-in patterns and basic controls +Don't press the "Try me"-button! ;)

+

CM-4: vcClk
+Voltage controlled bpm clock +The gold-plated in and outputs are for the bpm sync signal, for which standards are shared between all the other modules to enable synced bpm changes. Simply chain the bpm cv between the modules, and connect all reset inputs to the vcClk reset output

+

CM-5: vcClk++
+Expansion for vcClk, it outputs 7 clock pulses that are synced with the input

+

CM-6: 1hp blank
+It is a blank panel and it is 1hp wide :)

+

 

+
+
+ +
+ + + +
+ + +
+ + +
+
+ + + +
+ +
+ +
+
+ + +
+ + + + + + +
+ + + You can’t perform that action at this time. +
+ + + + + + + + + + + + + + +
+ + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-1.svg b/vst2_bin/plugins/CatroModulo/res/CM-1.svg new file mode 100644 index 00000000..5c855b30 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-1.svg @@ -0,0 +1,2282 @@ + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-10.svg b/vst2_bin/plugins/CatroModulo/res/CM-10.svg new file mode 100644 index 00000000..218279c2 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-10.svg @@ -0,0 +1,1363 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-2.svg b/vst2_bin/plugins/CatroModulo/res/CM-2.svg new file mode 100644 index 00000000..722c770a --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-2.svg @@ -0,0 +1,3173 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-2_new.svg b/vst2_bin/plugins/CatroModulo/res/CM-2_new.svg new file mode 100644 index 00000000..31e8fd2f --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-2_new.svg @@ -0,0 +1,3764 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-3.svg b/vst2_bin/plugins/CatroModulo/res/CM-3.svg new file mode 100644 index 00000000..1a63fb29 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-3.svg @@ -0,0 +1,3754 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-4.svg b/vst2_bin/plugins/CatroModulo/res/CM-4.svg new file mode 100644 index 00000000..598df2c9 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-4.svg @@ -0,0 +1,1434 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-5.svg b/vst2_bin/plugins/CatroModulo/res/CM-5.svg new file mode 100644 index 00000000..798dd397 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-5.svg @@ -0,0 +1,1609 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-6.svg b/vst2_bin/plugins/CatroModulo/res/CM-6.svg new file mode 100644 index 00000000..cf7f6d2a --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-6.svg @@ -0,0 +1,157 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-7.svg b/vst2_bin/plugins/CatroModulo/res/CM-7.svg new file mode 100644 index 00000000..4863cc56 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-7.svg @@ -0,0 +1,1560 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-8.svg b/vst2_bin/plugins/CatroModulo/res/CM-8.svg new file mode 100644 index 00000000..fcf1e33a --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-8.svg @@ -0,0 +1,2136 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-9.svg b/vst2_bin/plugins/CatroModulo/res/CM-9.svg new file mode 100644 index 00000000..f5fc15c5 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-9.svg @@ -0,0 +1,1836 @@ + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-TS_small_0.svg b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_0.svg new file mode 100644 index 00000000..8e366975 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_0.svg @@ -0,0 +1,218 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-TS_small_1.svg b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_1.svg new file mode 100644 index 00000000..2d8224d2 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_1.svg @@ -0,0 +1,215 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_0.svg b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_0.svg new file mode 100644 index 00000000..c6b4dfb7 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_0.svg @@ -0,0 +1,212 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_1.svg b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_1.svg new file mode 100644 index 00000000..e9d55f6a --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_1.svg @@ -0,0 +1,216 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_2.svg b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_2.svg new file mode 100644 index 00000000..52605a65 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-TS_small_3_2.svg @@ -0,0 +1,216 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-button_small_red.svg b/vst2_bin/plugins/CatroModulo/res/CM-button_small_red.svg new file mode 100644 index 00000000..c5c85590 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-button_small_red.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-button_small_red_dn.svg b/vst2_bin/plugins/CatroModulo/res/CM-button_small_red_dn.svg new file mode 100644 index 00000000..5d9386d9 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-button_small_red_dn.svg @@ -0,0 +1,95 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-indicator_bigeye.svg b/vst2_bin/plugins/CatroModulo/res/CM-indicator_bigeye.svg new file mode 100644 index 00000000..ef53ac9b --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-indicator_bigeye.svg @@ -0,0 +1,104 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_bpm.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_bpm.svg new file mode 100644 index 00000000..fccb6b68 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_bpm.svg @@ -0,0 +1,139 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_def.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_def.svg new file mode 100644 index 00000000..31866598 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_def.svg @@ -0,0 +1,119 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonL.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonL.svg new file mode 100644 index 00000000..984f06b4 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonL.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonL_dn.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonL_dn.svg new file mode 100644 index 00000000..bf5ac615 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonL_dn.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonR.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonR.svg new file mode 100644 index 00000000..c78a9da7 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonR.svg @@ -0,0 +1,72 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonR_dn.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonR_dn.svg new file mode 100644 index 00000000..06c2baf6 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_def_tinybuttonR_dn.svg @@ -0,0 +1,73 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_small.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_small.svg new file mode 100644 index 00000000..93dd0a5f --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_small.svg @@ -0,0 +1,104 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_small_tinybuttonL.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_small_tinybuttonL.svg new file mode 100644 index 00000000..21caba64 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_small_tinybuttonL.svg @@ -0,0 +1,79 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-input_small_tinybuttonL_dn.svg b/vst2_bin/plugins/CatroModulo/res/CM-input_small_tinybuttonL_dn.svg new file mode 100644 index 00000000..d2215eb5 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-input_small_tinybuttonL_dn.svg @@ -0,0 +1,80 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_big_attn.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_attn.svg new file mode 100644 index 00000000..6466252b --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_attn.svg @@ -0,0 +1,207 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_big_def.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_def.svg new file mode 100644 index 00000000..9fa02ce3 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_def.svg @@ -0,0 +1,176 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_big_offset.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_offset.svg new file mode 100644 index 00000000..f9e6cb1e --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_offset.svg @@ -0,0 +1,209 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_big_red.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_red.svg new file mode 100644 index 00000000..96867cd1 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_big_red.svg @@ -0,0 +1,175 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_bigeye.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_bigeye.svg new file mode 100644 index 00000000..5009c743 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_bigeye.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_huge_red.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_huge_red.svg new file mode 100644 index 00000000..714b5b3b --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_huge_red.svg @@ -0,0 +1,115 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_small_def.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_small_def.svg new file mode 100644 index 00000000..0ff20739 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_small_def.svg @@ -0,0 +1,184 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-knob_small_red.svg b/vst2_bin/plugins/CatroModulo/res/CM-knob_small_red.svg new file mode 100644 index 00000000..4bfefc87 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-knob_small_red.svg @@ -0,0 +1,184 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-output_bpm.svg b/vst2_bin/plugins/CatroModulo/res/CM-output_bpm.svg new file mode 100644 index 00000000..34c7606e --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-output_bpm.svg @@ -0,0 +1,140 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-output_def.svg b/vst2_bin/plugins/CatroModulo/res/CM-output_def.svg new file mode 100644 index 00000000..f59835de --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-output_def.svg @@ -0,0 +1,115 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-output_def_dark.svg b/vst2_bin/plugins/CatroModulo/res/CM-output_def_dark.svg new file mode 100644 index 00000000..e3b03c65 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-output_def_dark.svg @@ -0,0 +1,116 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-output_small.svg b/vst2_bin/plugins/CatroModulo/res/CM-output_small.svg new file mode 100644 index 00000000..190c6591 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-output_small.svg @@ -0,0 +1,117 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-pot1_big.svg b/vst2_bin/plugins/CatroModulo/res/CM-pot1_big.svg new file mode 100644 index 00000000..6fb151a2 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-pot1_big.svg @@ -0,0 +1,164 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-pot1_huge.svg b/vst2_bin/plugins/CatroModulo/res/CM-pot1_huge.svg new file mode 100644 index 00000000..6f98cf61 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-pot1_huge.svg @@ -0,0 +1,166 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-pot1_small.svg b/vst2_bin/plugins/CatroModulo/res/CM-pot1_small.svg new file mode 100644 index 00000000..6eb4b86f --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-pot1_small.svg @@ -0,0 +1,165 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-recbutton.svg b/vst2_bin/plugins/CatroModulo/res/CM-recbutton.svg new file mode 100644 index 00000000..e9326617 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-recbutton.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-recbutton_dn.svg b/vst2_bin/plugins/CatroModulo/res/CM-recbutton_dn.svg new file mode 100644 index 00000000..d1996815 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-recbutton_dn.svg @@ -0,0 +1,114 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-slider_big_red.svg b/vst2_bin/plugins/CatroModulo/res/CM-slider_big_red.svg new file mode 100644 index 00000000..f756f78c --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-slider_big_red.svg @@ -0,0 +1,108 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-slider_big_red_bg.svg b/vst2_bin/plugins/CatroModulo/res/CM-slider_big_red_bg.svg new file mode 100644 index 00000000..e10b852e --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-slider_big_red_bg.svg @@ -0,0 +1,97 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-tryme_button.svg b/vst2_bin/plugins/CatroModulo/res/CM-tryme_button.svg new file mode 100644 index 00000000..15494ffd --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-tryme_button.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM-tryme_button_dn.svg b/vst2_bin/plugins/CatroModulo/res/CM-tryme_button_dn.svg new file mode 100644 index 00000000..f5f59a50 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM-tryme_button_dn.svg @@ -0,0 +1,92 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/CM9_ledinc.svg b/vst2_bin/plugins/CatroModulo/res/CM9_ledinc.svg new file mode 100644 index 00000000..cbdf6f52 --- /dev/null +++ b/vst2_bin/plugins/CatroModulo/res/CM9_ledinc.svg @@ -0,0 +1,84 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/vst2_bin/plugins/CatroModulo/res/Segment7Standard.ttf b/vst2_bin/plugins/CatroModulo/res/Segment7Standard.ttf new file mode 100644 index 00000000..bdd6e2af Binary files /dev/null and b/vst2_bin/plugins/CatroModulo/res/Segment7Standard.ttf differ