From 102c2eb5529a7214c499df45b6953363d2e6fb83 Mon Sep 17 00:00:00 2001 From: bsp2 Date: Sun, 19 May 2019 16:52:01 +0200 Subject: [PATCH] add Hora-Examples modules --- .../community/repos/Hora-Examples/Makefile | 10 + .../repos/Hora-Examples/make.objects | 15 + .../repos/Hora-Examples/makefile.linux | 12 + .../repos/Hora-Examples/makefile.msvc | 12 + .../community/repos/Hora-Examples/readme.txt | 7 + .../repos/Hora-Examples/res/LEDCounter7.ttf | Bin 0 -> 248128 bytes .../repos/Hora-Examples/res/LPVCF.svg | 1625 +++++++++++++++++ .../repos/Hora-Examples/res/button.svg | 100 + .../repos/Hora-Examples/res/buttonPushed.svg | 100 + .../repos/Hora-Examples/res/jack.svg | 1156 ++++++++++++ .../repos/Hora-Examples/res/mediumKnob.svg | 109 ++ .../repos/Hora-Examples/res/mediumRotary.svg | 102 ++ .../Hora-Examples/res/mediumRotaryShadow.svg | 518 ++++++ .../Hora-Examples/res/mediumknobShadow.svg | 518 ++++++ .../repos/Hora-Examples/res/recorder.svg | 1625 +++++++++++++++++ .../repos/Hora-Examples/res/saw1024.gwt | 52 + .../repos/Hora-Examples/res/saw128.gwt | 16 + .../repos/Hora-Examples/res/saw512.gwt | 26 + .../repos/Hora-Examples/res/screen.svg | 85 + .../repos/Hora-Examples/res/sequencer.svg | 1567 ++++++++++++++++ .../repos/Hora-Examples/res/sin128.gwt | 1 + .../repos/Hora-Examples/res/sin512.gwt | 26 + .../repos/Hora-Examples/res/smallLedGreen.svg | 63 + .../repos/Hora-Examples/res/smallLedRed.svg | 63 + .../repos/Hora-Examples/res/switch_0.svg | 94 + .../repos/Hora-Examples/res/switch_1.svg | 94 + .../repos/Hora-Examples/res/wave.svg | 1560 ++++++++++++++++ .../Hora-Examples/src/ControlledBuffer.cpp | 116 ++ .../Hora-Examples/src/ControlledBuffer.h | 43 + .../repos/Hora-Examples/src/CvToFreq.cpp | 15 + .../repos/Hora-Examples/src/CvToFreq.h | 21 + .../repos/Hora-Examples/src/Examples.cpp | 24 + .../repos/Hora-Examples/src/Examples.hpp | 60 + .../repos/Hora-Examples/src/FreqToRate.cpp | 19 + .../repos/Hora-Examples/src/FreqToRate.h | 24 + .../repos/Hora-Examples/src/LowPassVCF.cpp | 85 + .../repos/Hora-Examples/src/MMFilter.cpp | 64 + .../repos/Hora-Examples/src/MMFilter.h | 52 + .../repos/Hora-Examples/src/WaveTableOsc.cpp | 156 ++ .../community/repos/Hora-Examples/src/buf.cpp | 187 ++ .../Hora-Examples/src/clockedCounter.cpp | 28 + .../repos/Hora-Examples/src/clockedCounter.h | 33 + .../repos/Hora-Examples/src/floatToString.cpp | 13 + .../repos/Hora-Examples/src/floatToString.h | 19 + .../repos/Hora-Examples/src/intToString.cpp | 13 + .../repos/Hora-Examples/src/intToString.h | 19 + .../repos/Hora-Examples/src/miniSeq.cpp | 289 +++ .../repos/Hora-Examples/src/stringMux.cpp | 65 + .../repos/Hora-Examples/src/stringMux.h | 34 + .../repos/Hora-Examples/src/waveTable.cpp | 134 ++ .../repos/Hora-Examples/src/waveTable.h | 53 + vst2_bin/plugins/Hora-Examples/readme.txt | 7 + .../plugins/Hora-Examples/res/LEDCounter7.ttf | Bin 0 -> 248128 bytes vst2_bin/plugins/Hora-Examples/res/LPVCF.svg | 1625 +++++++++++++++++ vst2_bin/plugins/Hora-Examples/res/button.svg | 100 + .../Hora-Examples/res/buttonPushed.svg | 100 + vst2_bin/plugins/Hora-Examples/res/jack.svg | 1156 ++++++++++++ .../plugins/Hora-Examples/res/mediumKnob.svg | 109 ++ .../Hora-Examples/res/mediumRotary.svg | 102 ++ .../Hora-Examples/res/mediumRotaryShadow.svg | 518 ++++++ .../Hora-Examples/res/mediumknobShadow.svg | 518 ++++++ .../plugins/Hora-Examples/res/recorder.svg | 1625 +++++++++++++++++ .../plugins/Hora-Examples/res/saw1024.gwt | 52 + vst2_bin/plugins/Hora-Examples/res/saw128.gwt | 16 + vst2_bin/plugins/Hora-Examples/res/saw512.gwt | 26 + vst2_bin/plugins/Hora-Examples/res/screen.svg | 85 + .../plugins/Hora-Examples/res/sequencer.svg | 1567 ++++++++++++++++ vst2_bin/plugins/Hora-Examples/res/sin128.gwt | 1 + vst2_bin/plugins/Hora-Examples/res/sin512.gwt | 26 + .../Hora-Examples/res/smallLedGreen.svg | 63 + .../plugins/Hora-Examples/res/smallLedRed.svg | 63 + .../plugins/Hora-Examples/res/switch_0.svg | 94 + .../plugins/Hora-Examples/res/switch_1.svg | 94 + vst2_bin/plugins/Hora-Examples/res/wave.svg | 1560 ++++++++++++++++ .../Hora-Examples/src/Hora-Examples/Makefile | 10 + .../src/Hora-Examples/make.objects | 15 + .../src/Hora-Examples/makefile.linux | 12 + .../src/Hora-Examples/makefile.msvc | 12 + .../src/Hora-Examples/readme.txt | 7 + .../src/Hora-Examples/res/LEDCounter7.ttf | Bin 0 -> 248128 bytes .../src/Hora-Examples/res/LPVCF.svg | 1625 +++++++++++++++++ .../src/Hora-Examples/res/button.svg | 100 + .../src/Hora-Examples/res/buttonPushed.svg | 100 + .../src/Hora-Examples/res/jack.svg | 1156 ++++++++++++ .../src/Hora-Examples/res/mediumKnob.svg | 109 ++ .../src/Hora-Examples/res/mediumRotary.svg | 102 ++ .../Hora-Examples/res/mediumRotaryShadow.svg | 518 ++++++ .../Hora-Examples/res/mediumknobShadow.svg | 518 ++++++ .../src/Hora-Examples/res/recorder.svg | 1625 +++++++++++++++++ .../src/Hora-Examples/res/saw1024.gwt | 52 + .../src/Hora-Examples/res/saw128.gwt | 16 + .../src/Hora-Examples/res/saw512.gwt | 26 + .../src/Hora-Examples/res/screen.svg | 85 + .../src/Hora-Examples/res/sequencer.svg | 1567 ++++++++++++++++ .../src/Hora-Examples/res/sin128.gwt | 1 + .../src/Hora-Examples/res/sin512.gwt | 26 + .../src/Hora-Examples/res/smallLedGreen.svg | 63 + .../src/Hora-Examples/res/smallLedRed.svg | 63 + .../src/Hora-Examples/res/switch_0.svg | 94 + .../src/Hora-Examples/res/switch_1.svg | 94 + .../src/Hora-Examples/res/wave.svg | 1560 ++++++++++++++++ .../Hora-Examples/src/ControlledBuffer.cpp | 116 ++ .../src/Hora-Examples/src/ControlledBuffer.h | 43 + .../src/Hora-Examples/src/CvToFreq.cpp | 15 + .../src/Hora-Examples/src/CvToFreq.h | 21 + .../src/Hora-Examples/src/Examples.cpp | 24 + .../src/Hora-Examples/src/Examples.hpp | 60 + .../src/Hora-Examples/src/FreqToRate.cpp | 19 + .../src/Hora-Examples/src/FreqToRate.h | 24 + .../src/Hora-Examples/src/LowPassVCF.cpp | 85 + .../src/Hora-Examples/src/MMFilter.cpp | 64 + .../src/Hora-Examples/src/MMFilter.h | 52 + .../src/Hora-Examples/src/WaveTableOsc.cpp | 156 ++ .../src/Hora-Examples/src/buf.cpp | 187 ++ .../src/Hora-Examples/src/clockedCounter.cpp | 28 + .../src/Hora-Examples/src/clockedCounter.h | 33 + .../src/Hora-Examples/src/floatToString.cpp | 13 + .../src/Hora-Examples/src/floatToString.h | 19 + .../src/Hora-Examples/src/intToString.cpp | 13 + .../src/Hora-Examples/src/intToString.h | 19 + .../src/Hora-Examples/src/miniSeq.cpp | 289 +++ .../src/Hora-Examples/src/stringMux.cpp | 65 + .../src/Hora-Examples/src/stringMux.h | 34 + .../src/Hora-Examples/src/waveTable.cpp | 134 ++ .../src/Hora-Examples/src/waveTable.h | 53 + 125 files changed, 31751 insertions(+) create mode 100644 plugins/community/repos/Hora-Examples/Makefile create mode 100644 plugins/community/repos/Hora-Examples/make.objects create mode 100644 plugins/community/repos/Hora-Examples/makefile.linux create mode 100644 plugins/community/repos/Hora-Examples/makefile.msvc create mode 100644 plugins/community/repos/Hora-Examples/readme.txt create mode 100644 plugins/community/repos/Hora-Examples/res/LEDCounter7.ttf create mode 100644 plugins/community/repos/Hora-Examples/res/LPVCF.svg create mode 100644 plugins/community/repos/Hora-Examples/res/button.svg create mode 100644 plugins/community/repos/Hora-Examples/res/buttonPushed.svg create mode 100644 plugins/community/repos/Hora-Examples/res/jack.svg create mode 100644 plugins/community/repos/Hora-Examples/res/mediumKnob.svg create mode 100644 plugins/community/repos/Hora-Examples/res/mediumRotary.svg create mode 100644 plugins/community/repos/Hora-Examples/res/mediumRotaryShadow.svg create mode 100644 plugins/community/repos/Hora-Examples/res/mediumknobShadow.svg create mode 100644 plugins/community/repos/Hora-Examples/res/recorder.svg create mode 100644 plugins/community/repos/Hora-Examples/res/saw1024.gwt create mode 100644 plugins/community/repos/Hora-Examples/res/saw128.gwt create mode 100644 plugins/community/repos/Hora-Examples/res/saw512.gwt create mode 100644 plugins/community/repos/Hora-Examples/res/screen.svg create mode 100644 plugins/community/repos/Hora-Examples/res/sequencer.svg create mode 100644 plugins/community/repos/Hora-Examples/res/sin128.gwt create mode 100644 plugins/community/repos/Hora-Examples/res/sin512.gwt create mode 100644 plugins/community/repos/Hora-Examples/res/smallLedGreen.svg create mode 100644 plugins/community/repos/Hora-Examples/res/smallLedRed.svg create mode 100644 plugins/community/repos/Hora-Examples/res/switch_0.svg create mode 100644 plugins/community/repos/Hora-Examples/res/switch_1.svg create mode 100644 plugins/community/repos/Hora-Examples/res/wave.svg create mode 100644 plugins/community/repos/Hora-Examples/src/ControlledBuffer.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/ControlledBuffer.h create mode 100644 plugins/community/repos/Hora-Examples/src/CvToFreq.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/CvToFreq.h create mode 100644 plugins/community/repos/Hora-Examples/src/Examples.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/Examples.hpp create mode 100644 plugins/community/repos/Hora-Examples/src/FreqToRate.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/FreqToRate.h create mode 100644 plugins/community/repos/Hora-Examples/src/LowPassVCF.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/MMFilter.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/MMFilter.h create mode 100644 plugins/community/repos/Hora-Examples/src/WaveTableOsc.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/buf.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/clockedCounter.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/clockedCounter.h create mode 100644 plugins/community/repos/Hora-Examples/src/floatToString.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/floatToString.h create mode 100644 plugins/community/repos/Hora-Examples/src/intToString.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/intToString.h create mode 100644 plugins/community/repos/Hora-Examples/src/miniSeq.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/stringMux.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/stringMux.h create mode 100644 plugins/community/repos/Hora-Examples/src/waveTable.cpp create mode 100644 plugins/community/repos/Hora-Examples/src/waveTable.h create mode 100644 vst2_bin/plugins/Hora-Examples/readme.txt create mode 100644 vst2_bin/plugins/Hora-Examples/res/LEDCounter7.ttf create mode 100644 vst2_bin/plugins/Hora-Examples/res/LPVCF.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/button.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/buttonPushed.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/jack.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/mediumKnob.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/mediumRotary.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/mediumRotaryShadow.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/mediumknobShadow.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/recorder.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/saw1024.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/res/saw128.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/res/saw512.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/res/screen.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/sequencer.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/sin128.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/res/sin512.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/res/smallLedGreen.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/smallLedRed.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/switch_0.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/switch_1.svg create mode 100644 vst2_bin/plugins/Hora-Examples/res/wave.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/Makefile create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/make.objects create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/makefile.linux create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/makefile.msvc create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/readme.txt create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/LEDCounter7.ttf create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/LPVCF.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/button.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/buttonPushed.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/jack.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/mediumKnob.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/mediumRotary.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/mediumRotaryShadow.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/mediumknobShadow.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/recorder.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/saw1024.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/saw128.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/saw512.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/screen.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/sequencer.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/sin128.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/sin512.gwt create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/smallLedGreen.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/smallLedRed.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/switch_0.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/switch_1.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/res/wave.svg create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/ControlledBuffer.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/ControlledBuffer.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/CvToFreq.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/CvToFreq.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/Examples.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/Examples.hpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/FreqToRate.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/FreqToRate.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/LowPassVCF.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/MMFilter.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/MMFilter.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/WaveTableOsc.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/buf.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/clockedCounter.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/clockedCounter.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/floatToString.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/floatToString.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/intToString.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/intToString.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/miniSeq.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/stringMux.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/stringMux.h create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/waveTable.cpp create mode 100644 vst2_bin/plugins/Hora-Examples/src/Hora-Examples/src/waveTable.h diff --git a/plugins/community/repos/Hora-Examples/Makefile b/plugins/community/repos/Hora-Examples/Makefile new file mode 100644 index 00000000..d72c4700 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/Makefile @@ -0,0 +1,10 @@ +RACK_DIR ?= ../.. + +SLUG = Hora-Examples +VERSION = 0.6 +SOURCES = $(wildcard src/*.cpp) $(wildcard src/*.c) + + +DISTRIBUTABLES += $(wildcard LICENSE*) res +include $(RACK_DIR)/plugin.mk +include $(RACK_DIR)/arch.mk diff --git a/plugins/community/repos/Hora-Examples/make.objects b/plugins/community/repos/Hora-Examples/make.objects new file mode 100644 index 00000000..bb9f750e --- /dev/null +++ b/plugins/community/repos/Hora-Examples/make.objects @@ -0,0 +1,15 @@ +ALL_OBJ= \ + src/ControlledBuffer.o \ + src/CvToFreq.o \ + src/Examples.o \ + src/FreqToRate.o \ + src/LowPassVCF.o \ + src/MMFilter.o \ + src/WaveTableOsc.o \ + src/buf.o \ + src/clockedCounter.o \ + src/floatToString.o \ + src/intToString.o \ + src/miniSeq.o \ + src/stringMux.o \ + src/waveTable.o diff --git a/plugins/community/repos/Hora-Examples/makefile.linux b/plugins/community/repos/Hora-Examples/makefile.linux new file mode 100644 index 00000000..faf35670 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/makefile.linux @@ -0,0 +1,12 @@ +SLUG=Hora-Examples + +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/Hora-Examples/makefile.msvc b/plugins/community/repos/Hora-Examples/makefile.msvc new file mode 100644 index 00000000..9414c783 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/makefile.msvc @@ -0,0 +1,12 @@ +SLUG=Hora-Examples + +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/Hora-Examples/readme.txt b/plugins/community/repos/Hora-Examples/readme.txt new file mode 100644 index 00000000..32f0bea5 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/readme.txt @@ -0,0 +1,7 @@ + +see http://www.hora-music.be/free-modules.php + +"Here is a first plugin made with geco (V0.6.2) All the files and code are as they were exported. No files has been manually transfered and no code has been been manually modified. + +This is open source and host on the Hora Music Github repository. The plugin offers a wave table VCO a signal recorder, a 4 steps sequencer and a low pass filter." + diff --git a/plugins/community/repos/Hora-Examples/res/LEDCounter7.ttf b/plugins/community/repos/Hora-Examples/res/LEDCounter7.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9113acd101ca6ca47a9b2b5bf70717aca8dafbd2 GIT binary patch literal 248128 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 W+duXM$K2nX{_s)4zyGH#ulxU>qXd%x literal 0 HcmV?d00001 diff --git a/plugins/community/repos/Hora-Examples/res/LPVCF.svg b/plugins/community/repos/Hora-Examples/res/LPVCF.svg new file mode 100644 index 00000000..5423b559 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/LPVCF.svg @@ -0,0 +1,1625 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/button.svg b/plugins/community/repos/Hora-Examples/res/button.svg new file mode 100644 index 00000000..b7d14f6a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/button.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/buttonPushed.svg b/plugins/community/repos/Hora-Examples/res/buttonPushed.svg new file mode 100644 index 00000000..b7d14f6a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/buttonPushed.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/jack.svg b/plugins/community/repos/Hora-Examples/res/jack.svg new file mode 100644 index 00000000..b1e569b2 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/jack.svg @@ -0,0 +1,1156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/mediumKnob.svg b/plugins/community/repos/Hora-Examples/res/mediumKnob.svg new file mode 100644 index 00000000..d64af4e4 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/mediumKnob.svg @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/mediumRotary.svg b/plugins/community/repos/Hora-Examples/res/mediumRotary.svg new file mode 100644 index 00000000..ff0056d0 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/mediumRotary.svg @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/mediumRotaryShadow.svg b/plugins/community/repos/Hora-Examples/res/mediumRotaryShadow.svg new file mode 100644 index 00000000..474fba9a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/mediumRotaryShadow.svg @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/mediumknobShadow.svg b/plugins/community/repos/Hora-Examples/res/mediumknobShadow.svg new file mode 100644 index 00000000..474fba9a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/mediumknobShadow.svg @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/recorder.svg b/plugins/community/repos/Hora-Examples/res/recorder.svg new file mode 100644 index 00000000..5edbfd9a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/recorder.svg @@ -0,0 +1,1625 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/saw1024.gwt b/plugins/community/repos/Hora-Examples/res/saw1024.gwt new file mode 100644 index 00000000..5c0db690 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/saw1024.gwt @@ -0,0 +1,52 @@ +0,255,510,764,1016,1268,1518,1768,2016,2264,2511,2756,3001,3245,3488,3730,3971,4211,4450,4688, +4925,5161,5397,5631,5865,6097,6329,6560,6790,7019,7247,7474,7701,7926,8151,8374,8597,8819,9040,9261, +9480,9698,9916,10133,10349,10564,10778,10992,11205,11416,11627,11838,12047,12255,12463,12670,12876,13081,13286,13490, +13693,13895,14096,14297,14496,14695,14893,15091,15288,15483,15679,15873,16067,16259,16452,16643,16834,17023,17213,17401, +17589,17775,17962,18147,18332,18516,18699,18882,19064,19245,19425,19605,19784,19963,20140,20317,20493,20669,20844,21018, +21192,21365,21537,21708,21879,22049,22219,22388,22556,22724,22891,23057,23222,23387,23552,23715,23878,24041,24203,24364, +24524,24684,24843,25002,25160,25317,25474,25630,25786,25941,26095,26249,26402,26555,26707,26858,27009,27159,27309,27458, +27606,27754,27901,28048,28194,28340,28485,28629,28773,28917,29059,29201,29343,29484,29625,29765,29904,30043,30182,30319, +30457,30593,30730,30865,31000,31135,31269,31403,31536,31668,31800,31932,32063,32193,32323,32453,32582,32710,32838,32966, +33093,33219,33345,33471,33596,33720,33844,33968,34091,34214,34336,34457,34578,34699,34819,34939,35058,35177,35296,35413, +35531,35648,35764,35880,35996,36111,36226,36340,36454,36567,36680,36793,36905,37016,37128,37238,37349,37459,37568,37677, +37786,37894,38002,38109,38216,38322,38429,38534,38639,38744,38849,38953,39056,39160,39263,39365,39467,39569,39670,39771, +39871,39971,40071,40170,40269,40368,40466,40563,40661,40758,40854,40951,41046,41142,41237,41332,41426,41520,41614,41707, +41800,41892,41985,42076,42168,42259,42350,42440,42530,42620,42709,42798,42887,42975,43063,43151,43238,43325,43411,43498, +43584,43669,43754,43839,43924,44008,44092,44176,44259,44342,44424,44507,44589,44670,44752,44833,44913,44994,45074,45154, +45233,45312,45391,45470,45548,45626,45703,45781,45858,45935,46011,46087,46163,46238,46314,46389,46463,46538,46612,46685, +46759,46832,46905,46978,47050,47122,47194,47265,47337,47408,47478,47549,47619,47689,47758,47827,47896,47965,48034,48102, +48170,48238,48305,48372,48439,48506,48572,48638,48704,48770,48835,48900,48965,49030,49094,49158,49222,49286,49349,49412, +49475,49538,49600,49662,49724,49786,49847,49908,49969,50030,50090,50150,50210,50270,50330,50389,50448,50507,50565,50624, +50682,50740,50797,50855,50912,50969,51026,51083,51139,51195,51251,51307,51362,51417,51472,51527,51582,51636,51690,51744, +51798,51852,51905,51958,52011,52064,52116,52169,52221,52273,52324,52376,52427,52478,52529,52580,52630,52681,52731,52781, +52830,52880,52929,52978,53027,53076,53125,53173,53221,53269,53317,53365,53412,53460,53507,53553,53600,53647,53693,53739, +53785,53831,53877,53922,53967,54012,54057,54102,54147,54191,54235,54279,54323,54367,54411,54454,54497,54540,54583,54626, +54668,54711,54753,54795,54837,54878,54920,54961,55003,55044,55085,55125,55166,55206,55247,55287,55327,55366,55406,55446, +55485,55524,55563,55602,55641,55679,55718,55756,55794,55832,55870,55908,55945,55982,56020,56057,56094,56131,56167,56204, +56240,56276,56312,56348,56384,56420,56455,56491,56526,56561,56596,56631,56666,56700,56735,56769,56803,56837,56871,56905, +56939,56972,57006,57039,57072,57105,57138,57171,57203,57236,57268,57300,57332,57364,57396,57428,57460,57491,57522,57554, +57585,57616,57647,57677,57708,57738,57769,57799,57829,57859,57889,57919,57949,57978,58008,58037,58066,58096,58125,58153, +58182,58211,58239,58268,58296,58324,58353,58381,58408,58436,58464,58491,58519,58546,58573,58601,58628,58655,58681,58708, +58735,58761,58788,58814,58840,58866,58892,58918,58944,58970,58995,59021,59046,59071,59097,59122,59147,59172,59196,59221, +59246,59270,59295,59319,59343,59367,59391,59415,59439,59463,59487,59510,59534,59557,59581,59604,59627,59650,59673,59696, +59718,59741,59764,59786,59809,59831,59853,59875,59897,59919,59941,59963,59985,60006,60028,60049,60071,60092,60113,60135, +60156,60177,60197,60218,60239,60260,60280,60301,60321,60341,60362,60382,60402,60422,60442,60462,60481,60501,60521,60540, +60560,60579,60599,60618,60637,60656,60675,60694,60713,60732,60750,60769,60788,60806,60825,60843,60861,60879,60898,60916, +60934,60952,60970,60987,61005,61023,61040,61058,61075,61093,61110,61127,61144,61162,61179,61196,61212,61229,61246,61263, +61280,61296,61313,61329,61345,61362,61378,61394,61410,61427,61443,61458,61474,61490,61506,61522,61537,61553,61568,61584, +61599,61615,61630,61645,61660,61675,61690,61705,61720,61735,61750,61765,61780,61794,61809,61823,61838,61852,61867,61881, +61895,61909,61923,61937,61952,61965,61979,61993,62007,62021,62035,62048,62062,62075,62089,62102,62116,62129,62142,62155, +62169,62182,62195,62208,62221,62234,62247,62259,62272,62285,62298,62310,62323,62335,62348,62360,62373,62385,62397,62409, +62422,62434,62446,62458,62470,62482,62494,62506,62517,62529,62541,62553,62564,62576,62587,62599,62610,62622,62633,62644, +62656,62667,62678,62689,62700,62711,62722,62733,62744,62755,62766,62777,62787,62798,62809,62819,62830,62841,62851,62862, +62872,62882,62893,62903,62913,62923,62934,62944,62954,62964,62974,62984,62994,63004,63014,63024,63033,63043,63053,63062, +63072,63082,63091,63101,63110,63120,63129,63139,63148,63157,63166,63176,63185,63194,63203,63212,63221,63230,63239,63248, +63257,63266,63275,63284,63293,63301,63310,63319,63327,63336,63344,63353,63362,63370,63378,63387,63395,63404,63412,63420, +63428,63437,63445,63453,63461,63469,63477,63485,63493,63501,63509,63517,63525,63533,63540,63548,63556,63564,63571,63579, +63587,63594,63602,63609,63617,63624,63632,63639,63647,63654,63661,63669,63676,63683,63690,63698,63705,63712,63719,63726, +63733,63740,63747,63754,63761,63768,63775,63782,63789,63795,63802,63809,63816,63822,63829,63836,63842,63849,63855,63862, +63869,63875,63881,63888,63894,63901,63907,63913,63920,63926,63932,63939,63945,63951,63957,63963,63969,63976,63982,63988, +63994,64000,64006,64012,64018,64024,64029,64035,64041,64047,64053,64059,64064,64070,64076,64081,64087,64093,64098,64104, +64110,64115,64121,64126,64132,64137,64143,64148,64153,64159,64164,64170,64175,64180,64185,64191,64196,64201,64206,64212, +64217,64222,64227,64232,64237,64242,64247,64252,64257,64262,64267,64272,64277,64282,64287,64292,64297,64301,64306,64311, +64316,64321,64325,64330,64335, \ No newline at end of file diff --git a/plugins/community/repos/Hora-Examples/res/saw128.gwt b/plugins/community/repos/Hora-Examples/res/saw128.gwt new file mode 100644 index 00000000..556d4652 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/saw128.gwt @@ -0,0 +1,16 @@ +0,2016,3971,5865,7701,9480,11205,12876, +14496,16067,17589,19064,20493,21879,23222,24524, +25786,27009,28194,29343,30457,31536,32582,33596, +34578,35531,36454,37349,38216,39056,39871,40661, +41426,42168,42887,43584,44259,44913,45548,46163, +46759,47337,47896,48439,48965,49475,49969,50448, +50912,51362,51798,52221,52630,53027,53412,53785, +54147,54497,54837,55166,55485,55794,56094,56384, +56666,56939,57203,57460,57708,57949,58182,58408, +58628,58840,59046,59246,59439,59627,59809,59985, +60156,60321,60481,60637,60788,60934,61075,61212, +61345,61474,61599,61720,61838,61952,62062,62169, +62272,62373,62470,62564,62656,62744,62830,62913, +62994,63072,63148,63221,63293,63362,63428,63493, +63556,63617,63676,63733,63789,63842,63894,63945, +63994,64041,64087,64132,64175,64217,64257,64297, \ No newline at end of file diff --git a/plugins/community/repos/Hora-Examples/res/saw512.gwt b/plugins/community/repos/Hora-Examples/res/saw512.gwt new file mode 100644 index 00000000..c50f8901 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/saw512.gwt @@ -0,0 +1,26 @@ +0,511,1018,1521,2020,2515,3007,3494,3978,4458,4934,5407,5876,6341,6802,7260,7715,8166,8613,9057, +9497,9934,10368,10798,11225,11648,12068,12485,12899,13309,13716,14120,14521,14919,15314,15705,16094,16479,16862,17241, +17618,17992,18362,18730,19095,19457,19816,20173,20527,20877,21226,21571,21914,22254,22592,22926,23259,23588,23915,24240, +24562,24881,25198,25513,25825,26135,26442,26747,27049,27349,27647,27942,28235,28526,28815,29101,29385,29667,29947,30224, +30500,30773,31044,31313,31580,31844,32107,32368,32626,32883,33137,33390,33641,33889,34136,34381,34624,34865,35104,35341, +35577,35810,36042,36272,36500,36727,36951,37174,37395,37615,37832,38048,38263,38475,38686,38896,39103,39309,39514,39717, +39918,40118,40316,40513,40708,40901,41093,41284,41473,41661,41847,42032,42215,42397,42577,42756,42934,43110,43285,43458, +43630,43801,43971,44139,44306,44471,44635,44798,44960,45121,45280,45438,45594,45750,45904,46057,46209,46360,46509,46658, +46805,46951,47096,47240,47382,47524,47664,47803,47942,48079,48215,48350,48484,48617,48749,48880,49010,49139,49266,49393, +49519,49644,49768,49891,50013,50134,50254,50373,50491,50609,50725,50840,50955,51069,51182,51293,51404,51515,51624,51732, +51840,51947,52053,52158,52262,52366,52468,52570,52671,52772,52871,52970,53068,53165,53262,53357,53452,53546,53640,53733, +53825,53916,54007,54096,54186,54274,54362,54449,54536,54621,54706,54791,54875,54958,55040,55122,55203,55284,55364,55443, +55522,55600,55677,55754,55830,55906,55981,56056,56130,56203,56276,56348,56419,56491,56561,56631,56700,56769,56838,56905, +56973,57040,57106,57172,57237,57301,57366,57429,57493,57555,57617,57679,57740,57801,57862,57921,57981,58040,58098,58156, +58214,58271,58327,58384,58439,58495,58549,58604,58658,58712,58765,58818,58870,58922,58974,59025,59075,59126,59176,59225, +59275,59323,59372,59420,59468,59515,59562,59608,59655,59700,59746,59791,59836,59880,59924,59968,60012,60055,60097,60140, +60182,60224,60265,60306,60347,60387,60427,60467,60507,60546,60585,60623,60662,60700,60737,60775,60812,60849,60885,60922, +60958,60993,61029,61064,61099,61133,61168,61202,61235,61269,61302,61335,61368,61400,61433,61465,61496,61528,61559,61590, +61621,61651,61682,61712,61742,61771,61801,61830,61859,61887,61916,61944,61972,62000,62027,62055,62082,62109,62135,62162, +62188,62214,62240,62266,62291,62317,62342,62367,62391,62416,62440,62464,62488,62512,62536,62559,62582,62605,62628,62651, +62673,62695,62718,62740,62761,62783,62804,62826,62847,62868,62889,62909,62930,62950,62970,62990,63010,63030,63049,63069, +63088,63107,63126,63145,63163,63182,63200,63218,63236,63254,63272,63290,63307,63325,63342,63359,63376,63393,63409,63426, +63443,63459,63475,63491,63507,63523,63539,63554,63570,63585,63600,63615,63630,63645,63660,63674,63689,63703,63718,63732, +63746,63760,63774,63787,63801,63814,63828,63841,63854,63867,63880,63893,63906,63919,63931,63944,63956,63969,63981,63993, +64005,64017,64029,64041,64052,64064,64075,64087,64098,64109,64120,64131,64142,64153,64164,64175,64185,64196,64206,64216, +64227,64237,64247,64257,64267,64277,64287,64297,64306,64316,64325,64335, \ No newline at end of file diff --git a/plugins/community/repos/Hora-Examples/res/screen.svg b/plugins/community/repos/Hora-Examples/res/screen.svg new file mode 100644 index 00000000..82889d5b --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/screen.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/sequencer.svg b/plugins/community/repos/Hora-Examples/res/sequencer.svg new file mode 100644 index 00000000..09669c91 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/sequencer.svg @@ -0,0 +1,1567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/sin128.gwt b/plugins/community/repos/Hora-Examples/res/sin128.gwt new file mode 100644 index 00000000..e1a16f1e --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/sin128.gwt @@ -0,0 +1 @@ +32768,34375,35979,37575,39160,40729,42279,43807,45307,46777,48214,49613,50972,52287,53555,54773,55938,57047,58097,59087,60013,60873,61666,62389,63041,63620,64124,64553,64905,65180,65377,65496,65535,65496,65377,65180,64905,64553,64124,63620,63041,62389,61666,60873,60013,59087,58097,57047,55938,54773,53555,52287,50972,49613,48214,46777,45307,43807,42279,40729,39160,37575,35979,34375,32768,31160,29556,27960,26375,24806,23256,21728,20228,18758,17321,15922,14563,13248,11980,10762,9597,8488,7438,6448,5522,4662,3869,3146,2494,1915,1411,982,630,355,158,39,0,39,158,355,630,982,1411,1915,2494,3146,3869,4662,5522,6448,7438,8488,9597,10762,11980,13248,14563,15922,17321,18758,20228,21728,23256,24806,26375,27960,29556,31160, \ No newline at end of file diff --git a/plugins/community/repos/Hora-Examples/res/sin512.gwt b/plugins/community/repos/Hora-Examples/res/sin512.gwt new file mode 100644 index 00000000..4b3073e9 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/sin512.gwt @@ -0,0 +1,26 @@ +32768,33170,33573,33976,34378,34781,35183,35584,35986,36386,36786,37186,37585,37983,38380,38777,39172,39567,39961,40353, +40745,41135,41524,41911,42297,42682,43065,43447,43827,44206,44582,44957,45330,45701,46071,46438,46803,47166,47527,47885, +48242,48596,48947,49296,49643,49987,50329,50667,51004,51337,51667,51995,52320,52642,52961,53276,53589,53899,54205,54508, +54808,55104,55397,55687,55973,56256,56535,56811,57083,57351,57615,57876,58133,58386,58635,58881,59122,59360,59593,59822, +60048,60269,60486,60698,60907,61111,61311,61507,61698,61885,62068,62246,62420,62589,62754,62914,63070,63221,63367,63509, +63646,63778,63906,64029,64148,64261,64370,64474,64574,64668,64758,64842,64922,64998,65068,65133,65194,65249,65300,65346, +65386,65422,65453,65479,65500,65516,65527,65534,65535,65531,65522,65509,65490,65467,65438,65405,65367,65323,65275,65222, +65164,65101,65033,64961,64883,64801,64713,64621,64524,64423,64316,64205,64089,63968,63843,63713,63578,63438,63294,63146, +62992,62834,62672,62505,62334,62158,61977,61792,61603,61410,61212,61010,60803,60593,60378,60159,59935,59708,59477,59241, +59002,58759,58511,58260,58005,57746,57483,57217,56947,56673,56396,56115,55831,55543,55251,54956,54658,54357,54052,53744, +53433,53119,52802,52481,52158,51832,51503,51171,50836,50498,50158,49815,49470,49122,48772,48419,48064,47706,47347,46985, +46621,46255,45886,45516,45144,44770,44394,44017,43637,43257,42874,42490,42105,41718,41329,40940,40549,40157,39764,39370, +38975,38579,38182,37784,37385,36986,36586,36186,35785,35384,34982,34580,34177,33775,33372,32969,32566,32163,31760,31358, +30955,30553,30151,29750,29349,28949,28549,28150,27751,27353,26956,26560,26165,25771,25378,24986,24595,24206,23817,23430, +23045,22661,22278,21898,21518,21141,20765,20391,20019,19649,19280,18914,18550,18188,17829,17471,17116,16763,16413,16065, +15720,15377,15037,14699,14364,14032,13703,13377,13054,12733,12416,12102,11791,11483,11178,10877,10579,10284,9992,9704, +9420,9139,8862,8588,8318,8052,7789,7530,7275,7024,6776,6533,6294,6058,5827,5600,5376,5157,4942,4732, +4525,4323,4125,3932,3743,3558,3377,3201,3030,2863,2701,2543,2389,2241,2097,1957,1822,1692,1567,1446, +1330,1219,1112,1011,914,822,734,652,574,502,434,371,313,260,212,168,130,97,68,45, +26,13,4,0,1,8,19,35,56,82,113,149,189,235,286,341,402,467,537,613, +693,777,867,961,1061,1165,1274,1387,1506,1629,1757,1889,2026,2168,2314,2465,2621,2781,2946,3115, +3289,3467,3650,3837,4028,4224,4424,4628,4837,5049,5266,5487,5713,5942,6175,6413,6654,6900,7149,7402, +7659,7920,8184,8452,8724,9000,9279,9562,9848,10138,10431,10727,11027,11330,11636,11946,12259,12574,12893,13215, +13540,13868,14198,14531,14868,15206,15548,15892,16239,16588,16939,17293,17650,18008,18369,18732,19097,19464,19834,20205, +20578,20953,21329,21708,22088,22470,22853,23238,23624,24011,24400,24790,25182,25574,25968,26363,26758,27155,27552,27950, +28349,28749,29149,29549,29951,30352,30754,31157,31559,31962,32365,32768, \ No newline at end of file diff --git a/plugins/community/repos/Hora-Examples/res/smallLedGreen.svg b/plugins/community/repos/Hora-Examples/res/smallLedGreen.svg new file mode 100644 index 00000000..06bfd4ba --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/smallLedGreen.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/smallLedRed.svg b/plugins/community/repos/Hora-Examples/res/smallLedRed.svg new file mode 100644 index 00000000..744f34a6 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/smallLedRed.svg @@ -0,0 +1,63 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/switch_0.svg b/plugins/community/repos/Hora-Examples/res/switch_0.svg new file mode 100644 index 00000000..a6a78e9b --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/switch_0.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/switch_1.svg b/plugins/community/repos/Hora-Examples/res/switch_1.svg new file mode 100644 index 00000000..77f3c2e7 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/switch_1.svg @@ -0,0 +1,94 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/res/wave.svg b/plugins/community/repos/Hora-Examples/res/wave.svg new file mode 100644 index 00000000..a87d51ca --- /dev/null +++ b/plugins/community/repos/Hora-Examples/res/wave.svg @@ -0,0 +1,1560 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/Hora-Examples/src/ControlledBuffer.cpp b/plugins/community/repos/Hora-Examples/src/ControlledBuffer.cpp new file mode 100644 index 00000000..e26ac4cb --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/ControlledBuffer.cpp @@ -0,0 +1,116 @@ +#include "ControlledBuffer.h" + +void ControlledBuffer::setinput(float _input) +{ + input = _input; +} +void ControlledBuffer::setrec(float _rec) +{ + rec = _rec; +} +void ControlledBuffer::setindex(float _index) +{ + + if (_index < buf.size()) + { + rawIndex = _index; + index = int(_index); + if (index > rawIndex && index > 0) + { + index = index-1; + } + + } + else + { + /*int j = buf.size(); + index = _index%j;*/ + index = 0; + rawIndex = 0; + } + if (index > buf.size()) + { + index = 0; + rawIndex = 0; + } +} +void ControlledBuffer::setreset(float _reset) +{ + if (_reset != 0) + { + index = 0; + rawIndex = 0; + } +} +void ControlledBuffer::setread(float _read) +{ + read = _read; +} +float ControlledBuffer::getoutput() +{ + if (rec != 0 && wasOnRec == false) + { + buf.clear(); + index = 0; + wasOnRec = true; + buf.push_back(input); + output = 0; + } + else if (rec != 0) + { + buf.push_back(input); + output = 0; + } + else if (read != 0) + { + + if (buf.size()>0 && index < buf.size()) + { + float delta = 0; + float deltaValue = 0; + float lValue = 0; + float cValue = 0; + + lValue = buf.at(index); + + + if (index < buf.size() - 1) + { + cValue = buf.at(index + 1); + } + else + { + cValue = buf.at(0); + } + + delta = rawIndex - index; + if (cValue > lValue) + { + deltaValue = cValue - lValue; + output = lValue + (delta * deltaValue) ; + } + else + { + deltaValue = lValue - cValue; + output = lValue - (delta * deltaValue) ; + } + } + else + { + output = 0; + } + } + if (rec == 0) + { + wasOnRec = false; + } + if (read == 0) + { + output = 0; + } + return output; +} +int ControlledBuffer::getbufSize() +{ + return buf.size(); +} diff --git a/plugins/community/repos/Hora-Examples/src/ControlledBuffer.h b/plugins/community/repos/Hora-Examples/src/ControlledBuffer.h new file mode 100644 index 00000000..4426e129 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/ControlledBuffer.h @@ -0,0 +1,43 @@ + +#include +#include +#include +#include +#include +#include +#include + +class ControlledBuffer { +private: + float input; + float rec; + bool wasOnRec; + float read; + int index; + float rawIndex; + float reset; + float output; + std::vector buf; +public: + ControlledBuffer() : + input(0), + rec(0), + wasOnRec(false), + read(0), + index(0), + rawIndex(0), + reset(0), + output(0), + buf() + { + + }; + void setinput(float _input); + void setrec(float _rec); + void setread(float _read); + void setreset(float _reset); + void setindex(float _index); + float getoutput(); + int getbufSize(); +}; + diff --git a/plugins/community/repos/Hora-Examples/src/CvToFreq.cpp b/plugins/community/repos/Hora-Examples/src/CvToFreq.cpp new file mode 100644 index 00000000..d09a033a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/CvToFreq.cpp @@ -0,0 +1,15 @@ +#include "CvToFreq.h" + +void CvToFreq::setinput(float _input) +{ + input = _input; +} +void CvToFreq::setbase(float _base) +{ + base = _base; +} +float CvToFreq::getoutput() +{ + float output = powf(2.0, input) * base; + return output; +} diff --git a/plugins/community/repos/Hora-Examples/src/CvToFreq.h b/plugins/community/repos/Hora-Examples/src/CvToFreq.h new file mode 100644 index 00000000..41dbb2b6 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/CvToFreq.h @@ -0,0 +1,21 @@ + +#include + +class CvToFreq { +private: + float input; + float base; + float output; +public: + CvToFreq() : + input(0), + base(0), + output(0) + { + + }; + void setinput(float _input); + void setbase(float _base); + float getoutput(); +}; + diff --git a/plugins/community/repos/Hora-Examples/src/Examples.cpp b/plugins/community/repos/Hora-Examples/src/Examples.cpp new file mode 100644 index 00000000..f63ab2f8 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/Examples.cpp @@ -0,0 +1,24 @@ +#include "Examples.hpp" +#include + float getSampleRate() + { + return engineGetSampleRate(); + } + +RACK_PLUGIN_MODEL_DECLARE(Hora_Examples, miniSeq); +RACK_PLUGIN_MODEL_DECLARE(Hora_Examples, WaveTableOsc); +RACK_PLUGIN_MODEL_DECLARE(Hora_Examples, LowPassVCF); +RACK_PLUGIN_MODEL_DECLARE(Hora_Examples, buf); + +RACK_PLUGIN_INIT(Hora_Examples) { + RACK_PLUGIN_INIT_ID(); + RACK_PLUGIN_INIT_VERSION("0.6.2"); + + RACK_PLUGIN_INIT_WEBSITE("http://www.hora-music.be/free-modules.php"); + RACK_PLUGIN_INIT_MANUAL("http://www.hora-music.be/free-modules.php"); + + RACK_PLUGIN_MODEL_ADD(Hora_Examples, miniSeq); + RACK_PLUGIN_MODEL_ADD(Hora_Examples, WaveTableOsc); + RACK_PLUGIN_MODEL_ADD(Hora_Examples, LowPassVCF); + RACK_PLUGIN_MODEL_ADD(Hora_Examples, buf); +} diff --git a/plugins/community/repos/Hora-Examples/src/Examples.hpp b/plugins/community/repos/Hora-Examples/src/Examples.hpp new file mode 100644 index 00000000..0f51f08b --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/Examples.hpp @@ -0,0 +1,60 @@ +#include "rack.hpp" + +using namespace rack; + +RACK_PLUGIN_DECLARE(Hora_Examples); + +#if defined(USE_VST2) && !defined(RACK_PLUGIN_SHARED) +#define plugin "Hora-Examples" +#endif // USE_VST2 + +struct switch_0 : SVGSwitch, ToggleSwitch { +switch_0() { + addFrame(SVG::load(assetPlugin(plugin,"res/switch_0.svg"))); + addFrame(SVG::load(assetPlugin(plugin,"res/switch_1.svg"))); + sw->wrap(); + box.size = sw->box.size; + } +}; +struct jack : SVGPort{ +jack() { + background->svg = SVG::load(assetPlugin(plugin,"res/jack.svg")); + background->wrap(); + box.size = background->box.size; + } +}; +struct mediumKnob : SVGKnob{ +mediumKnob() { + box.size = Vec(25, 25); + minAngle = -0.75*M_PI; + maxAngle = 0.75*M_PI; + setSVG(SVG::load(assetPlugin(plugin,"res/mediumKnob.svg"))); + SVGWidget *shadow = new SVGWidget(); + shadow->setSVG(SVG::load(assetPlugin(plugin, "res/mediumknobShadow.svg"))); + addChild(shadow); + } +}; +struct mediumRotarysnap : SVGKnob{ +mediumRotarysnap() { + box.size = Vec(25, 25); + minAngle = -0.75*M_PI; + maxAngle = 0.75*M_PI; + setSVG(SVG::load(assetPlugin(plugin,"res/mediumRotary.svg"))); + SVGWidget *shadow = new SVGWidget(); + shadow->setSVG(SVG::load(assetPlugin(plugin, "res/mediumRotaryShadow.svg"))); + addChild(shadow); + } +}; +struct mediumRotarysnap_snap : mediumRotarysnap{ + mediumRotarysnap_snap() { + snap = true; + } +}; +struct button : SVGSwitch, MomentarySwitch { + button(){ + addFrame(SVG::load(assetPlugin(plugin,"res/button.svg"))); + addFrame(SVG::load(assetPlugin(plugin,"res/buttonPushed.svg"))); + sw->wrap(); + box.size = sw->box.size; + } +}; diff --git a/plugins/community/repos/Hora-Examples/src/FreqToRate.cpp b/plugins/community/repos/Hora-Examples/src/FreqToRate.cpp new file mode 100644 index 00000000..bf6cf585 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/FreqToRate.cpp @@ -0,0 +1,19 @@ +#include "FreqToRate.h" + +void FreqToRate::setinput(float _input) +{ + input = _input; +} +void FreqToRate::setsampleRate(float _base) +{ + base = _base; +} +void FreqToRate::settableLength(float _length) +{ + tableLength = _length; +} +float FreqToRate::getoutput() +{ + float output = input / base * tableLength; + return output; +} diff --git a/plugins/community/repos/Hora-Examples/src/FreqToRate.h b/plugins/community/repos/Hora-Examples/src/FreqToRate.h new file mode 100644 index 00000000..3b1fcd18 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/FreqToRate.h @@ -0,0 +1,24 @@ + +#include + +class FreqToRate { +private: + float input; + float base; + float tableLength; + float output; +public: + FreqToRate() : + input(0), + base(0), + tableLength(0), + output(0) + { + + }; + void setinput(float _input); + void setsampleRate(float _base); + void settableLength(float _length); + float getoutput(); +}; + diff --git a/plugins/community/repos/Hora-Examples/src/LowPassVCF.cpp b/plugins/community/repos/Hora-Examples/src/LowPassVCF.cpp new file mode 100644 index 00000000..e616c6cd --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/LowPassVCF.cpp @@ -0,0 +1,85 @@ +#include "Examples.hpp" +#include "MMFilter.h" + +struct LowPassVCF : Module { + MMFilter MMFilter_mul23; + + enum ParamIds { + FREQ_PARAM, + RESO_PARAM, + AUDIO_LEVEL_PARAM, + NUM_PARAMS + }; + enum InputIds { + FREQ_INPUT, + RESO_INPUT, + AUDIO_INPUT, + NUM_INPUTS + }; + enum OutputIds { + AUDIO_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + LowPassVCF(); + void step()override; +}; + +LowPassVCF::LowPassVCF() { + params.resize(NUM_PARAMS); + inputs.resize(NUM_INPUTS); + outputs.resize(NUM_OUTPUTS); +} +void LowPassVCF::step() { + int int24_out = 0; + float FREQ_PARAM_output = params[FREQ_PARAM].value; + float RESO_PARAM_output = params[RESO_PARAM].value; + float FREQ_INPUT_signal = inputs[FREQ_INPUT].value; + float RESO_INPUT_signal = inputs[RESO_INPUT].value; + float AUDIO_INPUT_signal = inputs[AUDIO_INPUT].value; + float AUDIO_LEVEL_PARAM_output = params[AUDIO_LEVEL_PARAM].value; + float dou12_out = 10; + float dou14_out = 5; + float dou19_out = 10; + float x__Op20_result = RESO_INPUT_signal/dou19_out; + float dou22_out = 10; + float x__Op8_result = AUDIO_LEVEL_PARAM_output*AUDIO_INPUT_signal; + float x__Op11_result = x__Op8_result/dou12_out; + float x__Op21_result = FREQ_INPUT_signal/dou22_out; + MMFilter_mul23.setinput(x__Op11_result); + MMFilter_mul23.setfreq(x__Op21_result + FREQ_PARAM_output); + MMFilter_mul23.setreso(RESO_PARAM_output + x__Op20_result); + MMFilter_mul23.setmode(int24_out); + float mul23_output = MMFilter_mul23.getoutput(); + + float x__Op13_result = mul23_output*dou14_out; + outputs[AUDIO_OUTPUT].value = x__Op13_result; + +} +struct LowPassVCFWidget : ModuleWidget { + LowPassVCFWidget(LowPassVCF *module); +}; + +LowPassVCFWidget::LowPassVCFWidget(LowPassVCF *module) : ModuleWidget(module) { + box.size = Vec(120, 380); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/LPVCF.svg"))); + addChild(panel); + } + addParam(ParamWidget::create(Vec(69.6985,188.29), module, LowPassVCF::FREQ_PARAM, 0, 1, 0)); + addParam(ParamWidget::create(Vec(9.46014,188.131), module, LowPassVCF::RESO_PARAM, 0, 1, 0)); + addInput(Port::create(Vec(71.9289,135.616), Port::INPUT, module, LowPassVCF::FREQ_INPUT)); + addInput(Port::create(Vec(12.6396,135.853), Port::INPUT, module, LowPassVCF::RESO_INPUT)); + addInput(Port::create(Vec(14.7729,310.231), Port::INPUT, module, LowPassVCF::AUDIO_INPUT)); + addParam(ParamWidget::create(Vec(40.9485,42.9485), module, LowPassVCF::AUDIO_LEVEL_PARAM, 0, 1, 0.99)); + addOutput(Port::create(Vec(72.1264,309.651), Port::OUTPUT, module, LowPassVCF::AUDIO_OUTPUT)); +} + +RACK_PLUGIN_MODEL_INIT(Hora_Examples, LowPassVCF) { + Model *modelLowPassVCF = Model::create("Hora", "Hora-ExamplesVCF", "LPfilter", FILTER_TAG); + return modelLowPassVCF; +} diff --git a/plugins/community/repos/Hora-Examples/src/MMFilter.cpp b/plugins/community/repos/Hora-Examples/src/MMFilter.cpp new file mode 100644 index 00000000..ec8922d0 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/MMFilter.cpp @@ -0,0 +1,64 @@ +#include "MMFilter.h" + +void MMFilter::setfreq(float freq) +{ + cutoff = freq; + calculateFeedbackAmount(); +} +void MMFilter::setreso(float reso) +{ + resonance = reso; + if (resonance > 0.99) + { + resonance = 0.99; + } + else if (resonance < 0.0) + { + resonance = 0.0; + } + calculateFeedbackAmount(); +} +void MMFilter::setinput(float input) +{ + inputValue = input; +} +void MMFilter::setmode(int fMode) +{ + if (fMode == 0) + { + mode = FILTER_MODE_LOWPASS; + } + if (fMode == 1) + { + mode = FILTER_MODE_BANDPASS; + } + if (fMode == 2) + { + mode = FILTER_MODE_HIGHPASS; + } + if (fMode == 3) + { + mode = FILTER_MODE_NOTCH; + } +} +float MMFilter::getoutput() { + + if (inputValue == 0.0) return inputValue; + float calculatedCutoff = getCalculatedCutoff();; + buf0 += calculatedCutoff * (inputValue - buf0 + feedbackAmount * (buf0 - buf1)); + buf1 += calculatedCutoff * (buf0 - buf1); + buf2 += calculatedCutoff * (buf1 - buf2); + buf3 += calculatedCutoff * (buf2 - buf3); + switch (mode) { + case FILTER_MODE_LOWPASS: + return buf3; + case FILTER_MODE_HIGHPASS: + return inputValue - buf3; + case FILTER_MODE_BANDPASS: + return buf0 - buf3; + case FILTER_MODE_NOTCH: + return inputValue - (buf0 - buf3); + default: + return buf3; + } +} diff --git a/plugins/community/repos/Hora-Examples/src/MMFilter.h b/plugins/community/repos/Hora-Examples/src/MMFilter.h new file mode 100644 index 00000000..c097943c --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/MMFilter.h @@ -0,0 +1,52 @@ + +#include + +class MMFilter { + public: + enum FilterMode { + FILTER_MODE_LOWPASS = 0, + FILTER_MODE_HIGHPASS, + FILTER_MODE_BANDPASS, + FILTER_MODE_NOTCH, + kNumFilterModes + }; + MMFilter() : + + mode(FILTER_MODE_LOWPASS), + inputValue(0.0), + cutoff(0.99), + resonance(0.0), + buf0(), + buf1(), + buf2(), + buf3(), + output(), + feedbackAmount() + { + //calculateFeedbackAmount(); + }; + void setmode(int fMode); + void setfreq(float freq); + void setinput(float input); + void setreso(float reso); + float getoutput(); + private: + + FilterMode mode; + float inputValue; + float cutoff; + float resonance; + float buf0; + float buf1; + float buf2; + float buf3; + float output; + float feedbackAmount; + inline void calculateFeedbackAmount() { + feedbackAmount = resonance + resonance / (1.0 - getCalculatedCutoff()); + } + inline double getCalculatedCutoff() const { + return fmax(fmin(cutoff, 0.99), 0.01); + }; + +}; diff --git a/plugins/community/repos/Hora-Examples/src/WaveTableOsc.cpp b/plugins/community/repos/Hora-Examples/src/WaveTableOsc.cpp new file mode 100644 index 00000000..68c73ff8 --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/WaveTableOsc.cpp @@ -0,0 +1,156 @@ +#include "Examples.hpp" +#include "CvToFreq.h" +#include "FreqToRate.h" +#include "stringMux.h" +#include "floatToString.h" +#include "clockedCounter.h" +#include "waveTable.h" + +struct WaveTableOsc : Module { + CvToFreq CvToFreq_CV_74; + + FreqToRate FreqToRate_toR82; + + stringMux stringMux_stM86; + + floatToString floatToString_flt81; + + clockedCounter clockedCounter_cCo62; + + waveTable waveTable_wav72; + + float pre57_out = 0; + + char screen_WaveTableOsc_lineMessage1[100] = ""; + char screen_WaveTableOsc_lineMessage2[100] = ""; + enum ParamIds { + rot_91_PARAM, + NUM_PARAMS + }; + enum InputIds { + mod_73_INPUT, + mod_96_INPUT, + NUM_INPUTS + }; + enum OutputIds { + mod_8_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + NUM_LIGHTS + }; + WaveTableOsc() : Module(NUM_PARAMS, NUM_INPUTS, NUM_OUTPUTS, NUM_LIGHTS) {} + void step()override; +}; + +void WaveTableOsc::step() { + float dou98_out = 6553; + float dou75_out = 20; + float mod_73_INPUT_signal = inputs[mod_73_INPUT].value; + float dou64_out = 1; + char str67_out[100] = "saw128.gwt"; + char str84_out[100] = "saw512.gwt"; + char str85_out[100] = "saw1024.gwt"; + char str89_out[100] = "sin512.gwt"; + char str90_out[100] = "sin128.gwt"; + float rot_91_PARAM_output = params[rot_91_PARAM].value; + int toI92_out = int(rot_91_PARAM_output); + float sam93_signal = engineGetSampleRate(); + float dou95_out = 5; + float mod_96_INPUT_signal = inputs[mod_96_INPUT].value; + CvToFreq_CV_74.setinput(mod_73_INPUT_signal); + CvToFreq_CV_74.setbase(dou75_out); + float CV_74_output = CvToFreq_CV_74.getoutput(); + + float x__Op63_result = pre57_out-dou64_out; + FreqToRate_toR82.setinput(CV_74_output); + FreqToRate_toR82.setsampleRate(sam93_signal); + FreqToRate_toR82.settableLength(pre57_out); + float toR82_output = FreqToRate_toR82.getoutput(); + + stringMux_stM86.setstr1(str67_out); + stringMux_stM86.setstr2(str84_out); + stringMux_stM86.setstr3(str85_out); + stringMux_stM86.setstr4(str90_out); + stringMux_stM86.setstr5(str89_out); + stringMux_stM86.setindex(toI92_out); + char *stM86_output = stringMux_stM86.getoutput(); + + floatToString_flt81.setinput(CV_74_output); + char *flt81_output = floatToString_flt81.getoutput(); + + strcpy(screen_WaveTableOsc_lineMessage1, stM86_output); + strcpy(screen_WaveTableOsc_lineMessage2, flt81_output); + + clockedCounter_cCo62.setlength(x__Op63_result); + clockedCounter_cCo62.setrate(toR82_output); + clockedCounter_cCo62.setreset(0); + float cCo62_output = clockedCounter_cCo62.getoutput(); + + waveTable_wav72.setindex(cCo62_output); + waveTable_wav72.setreset(mod_96_INPUT_signal); + waveTable_wav72.settableName(stM86_output); + float wav72_output = waveTable_wav72.getoutput(); + float wav72_bufSize = waveTable_wav72.getbufSize(); + + float x__Op68_result = wav72_output/dou98_out; + float x__Op94_result = x__Op68_result-dou95_out; + outputs[mod_8_OUTPUT].value = x__Op94_result; + pre57_out = wav72_bufSize; + + +} +struct screen_WaveTableOsc : TransparentWidget { + WaveTableOsc *module; + std::shared_ptr font; + screen_WaveTableOsc () { + font = Font::load(assetPlugin(plugin, "res/LEDCounter7.ttf")); + } + void updateLine1(NVGcontext *vg, Vec pos, NVGcolor DMDtextColor, char* lineMessage1) { + nvgFontSize(vg, 20); + nvgFontFaceId(vg, font->handle); + nvgTextLetterSpacing(vg, -2); + nvgFillColor(vg, nvgTransRGBA(nvgRGB( 0, 150, 144), 0xff)); + nvgText(vg, pos.x, pos.y, lineMessage1, NULL); + } + void updateLine2(NVGcontext *vg, Vec pos, NVGcolor DMDtextColor, int xOffsetValue, char* lineMessage2) { + nvgFontSize(vg, 20); + nvgFontFaceId(vg, font->handle); + nvgTextLetterSpacing(vg, -2); + nvgFillColor(vg, nvgTransRGBA(nvgRGB( 0, 150, 144), 0xff)); + nvgText(vg, pos.x, pos.y, lineMessage2, NULL); + } + void draw(NVGcontext *vg) override { + updateLine1(vg, Vec( 5, 5), nvgRGB(0x08, 0x08, 0x08), module->screen_WaveTableOsc_lineMessage1); + updateLine2(vg, Vec( 5, (20+20/2)), nvgRGB(0x08, 0x08, 0x08), 20, module->screen_WaveTableOsc_lineMessage2); + } +}; +struct WaveTableOscWidget : ModuleWidget { + WaveTableOscWidget(WaveTableOsc *module); +}; + +WaveTableOscWidget::WaveTableOscWidget(WaveTableOsc *module) : ModuleWidget(module) { + box.size = Vec(120, 380); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/wave.svg"))); + addChild(panel); + } + { + screen_WaveTableOsc *display_screen= new screen_WaveTableOsc(); + display_screen->module = module; + display_screen->box.pos = Vec(12.3675, 118.624); + display_screen->box.size = Vec(234, 234); + addChild(display_screen); + } + addInput(Port::create(Vec(12.4868,242), Port::INPUT, module, WaveTableOsc::mod_73_INPUT)); + addOutput(Port::create(Vec(41.9474,289.908), Port::OUTPUT, module, WaveTableOsc::mod_8_OUTPUT)); + addParam(ParamWidget::create(Vec(41,43.1518), module, WaveTableOsc::rot_91_PARAM, 0, 4, 0)); + addInput(Port::create(Vec(71.9312,242.122), Port::INPUT, module, WaveTableOsc::mod_96_INPUT)); +} + +RACK_PLUGIN_MODEL_INIT(Hora_Examples, WaveTableOsc) { + Model *modelWaveTableOsc = Model::create("Hora", "hora-examplesWaveTable", "wavetableOSC", OSCILLATOR_TAG); + return modelWaveTableOsc; +} diff --git a/plugins/community/repos/Hora-Examples/src/buf.cpp b/plugins/community/repos/Hora-Examples/src/buf.cpp new file mode 100644 index 00000000..0c0c604a --- /dev/null +++ b/plugins/community/repos/Hora-Examples/src/buf.cpp @@ -0,0 +1,187 @@ +#include "Examples.hpp" +#include "clockedCounter.h" +#include "ControlledBuffer.h" +#include "dsp/digital.hpp" + +struct buf : Module { + bool gat76_wasTrigged = false; + + int cou75_currentCount = 0; + + SchmittTrigger clockTriggercou75; + + float arr80_inputs[3] = {0}; + + float arr80[3] = {0}; + + bool gat66_wasTrigged = false; + + clockedCounter clockedCounter_cCo62; + + ControlledBuffer ControlledBuffer_cBu14; + + float pre57_out = 0; + + enum ParamIds { + swi_81_PARAM, + swi_33_PARAM, + kno_25_PARAM, + but_16_PARAM, + but_5_PARAM, + NUM_PARAMS + }; + enum InputIds { + mod_74_INPUT, + mod_69_INPUT, + mod_68_INPUT, + mod_67_INPUT, + mod_3_INPUT, + NUM_INPUTS + }; + enum OutputIds { + mod_8_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds { + led_73_LIGHT, + led_72_LIGHT, + NUM_LIGHTS + }; + buf(); + void step()override; +}; + +buf::buf() { + params.resize(NUM_PARAMS); + lights.resize(NUM_LIGHTS); + inputs.resize(NUM_INPUTS); + outputs.resize(NUM_OUTPUTS); +} +void buf::step() { + float swi_81_PARAM_output = params[swi_81_PARAM].value; + float mod_74_INPUT_signal = inputs[mod_74_INPUT].value; + float dou71_out = 5; + float mod_69_INPUT_signal = inputs[mod_69_INPUT].value; + float mod_68_INPUT_signal = inputs[mod_68_INPUT].value; + float mod_67_INPUT_signal = inputs[mod_67_INPUT].value; + float swi_33_PARAM_output = params[swi_33_PARAM].value; + float kno_25_PARAM_output = params[kno_25_PARAM].value; + float but_16_PARAM_output = params[but_16_PARAM].value; + float mod_3_INPUT_signal = inputs[mod_3_INPUT].value; + float but_5_PARAM_output = params[but_5_PARAM].value; + float dou64_out = 1; + float dou85_out = 0; + int toI82_out = int(swi_81_PARAM_output); + bool gat76_pulse = false; + if(mod_74_INPUT_signal != 0 && gat76_wasTrigged == false) + { + gat76_wasTrigged = true; + gat76_pulse = true; + } else if( mod_74_INPUT_signal == 0) + { + gat76_wasTrigged = false; + } + float gat76_out = gat76_pulse ? 10.0 : 0.0; + + if(clockTriggercou75.process(gat76_out)) + { + cou75_currentCount++; + } + if(cou75_currentCount>1) + { + cou75_currentCount= 0; + } + if (0 > 0.2 ) + { + cou75_currentCount = 0; + } + int cou75_count = cou75_currentCount; + +lights[led_72_LIGHT].value = but_5_PARAM_output + mod_67_INPUT_signal; + float x__Op70_result = mod_69_INPUT_signal/dou71_out; + float x__Op63_result = pre57_out-dou64_out; + float x__Op84_result = 0; + if (mod_68_INPUT_signal > dou85_out) + { + x__Op84_result = 1; + } + arr80_inputs[0] = cou75_count; + arr80_inputs[1] = swi_33_PARAM_output; + arr80_inputs[2] = 0; + arr80_inputs[3] = 0; + for(int arr80_realsize = 0; arr80_realsize < 3;arr80_realsize ++) + { + if(arr80_realsize!=toI82_out) + { + arr80[arr80_realsize ] = arr80_inputs[arr80_realsize]; + } + else + { + arr80[arr80_realsize ] = arr80_inputs[toI82_out]; + } + } + float arr80_out = arr80[toI82_out]; + +lights[led_73_LIGHT].value = arr80_out; + bool gat66_pulse = false; + if(x__Op84_result + but_16_PARAM_output != 0 && gat66_wasTrigged == false) + { + gat66_wasTrigged = true; + gat66_pulse = true; + } else if( x__Op84_result + but_16_PARAM_output == 0) + { + gat66_wasTrigged = false; + } + float gat66_out = gat66_pulse ? 10.0 : 0.0; + + float x__Op24_result = kno_25_PARAM_output + x__Op70_result*arr80_out; + clockedCounter_cCo62.setlength(x__Op63_result); + clockedCounter_cCo62.setrate(x__Op24_result); + clockedCounter_cCo62.setreset(gat66_out); + float cCo62_output = clockedCounter_cCo62.getoutput(); + + int toI54_out = int(cCo62_output); + ControlledBuffer_cBu14.setinput(mod_3_INPUT_signal); + ControlledBuffer_cBu14.setrec(but_5_PARAM_output + mod_67_INPUT_signal); + ControlledBuffer_cBu14.setread(arr80_out); + ControlledBuffer_cBu14.setindex(toI54_out); + ControlledBuffer_cBu14.setreset(gat66_out); + float cBu14_output = ControlledBuffer_cBu14.getoutput(); + float cBu14_bufSize = ControlledBuffer_cBu14.getbufSize(); + + outputs[mod_8_OUTPUT].value = cBu14_output; + pre57_out = cBu14_bufSize; + + +} +struct bufWidget : ModuleWidget { + bufWidget(buf *module); +}; + +bufWidget::bufWidget(buf *module) : ModuleWidget(module) { + box.size = Vec(120, 380); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/recorder.svg"))); + addChild(panel); + } + addParam(ParamWidget::create(Vec(22.0143,103.699), module, buf::swi_81_PARAM, 0, 1, 0)); + addInput(Port::create(Vec(46.6637,115.553), Port::INPUT, module, buf::mod_74_INPUT)); + addChild(ModuleLightWidget::create>(Vec(33.9625,146.15), module, buf::led_73_LIGHT)); + addChild(ModuleLightWidget::create>(Vec(31.2876,63.1705), module, buf::led_72_LIGHT)); + addInput(Port::create(Vec(71.823,177.781), Port::INPUT, module, buf::mod_69_INPUT)); + addInput(Port::create(Vec(72.1072,244.442), Port::INPUT, module, buf::mod_68_INPUT)); + addInput(Port::create(Vec(71.7332,27.7387), Port::INPUT, module, buf::mod_67_INPUT)); + addParam(ParamWidget::create(Vec(53.9451,87.6101), module, buf::swi_33_PARAM, 0, 1, 0)); + addParam(ParamWidget::create(Vec(16.53,173.204), module, buf::kno_25_PARAM, 0.01, 2, 1)); + addParam(ParamWidget::create