From 9e60e936f90ddfc830b61112c25695c0aba4b023 Mon Sep 17 00:00:00 2001 From: bsp2 Date: Sun, 28 Oct 2018 20:21:31 +0100 Subject: [PATCH] update SquinkyLabs modules to v0.6.9 --- .../repos/squinkylabs-plug1/.gitignore | 16 + .../repos/squinkylabs-plug1/LICENSE-dist.txt | 49 +- .../repos/squinkylabs-plug1/Makefile | 8 +- .../repos/squinkylabs-plug1/README.md | 4 +- .../squinkylabs-plug1/composites/Blank.h | 65 + .../repos/squinkylabs-plug1/composites/CHB.h | 382 ++++++ .../composites/ColoredNoise.h | 6 +- .../repos/squinkylabs-plug1/composites/EV3.h | 279 +++++ .../composites/FrequencyShifter.h | 2 +- .../composites/FunVCOComposite.h | 107 ++ .../repos/squinkylabs-plug1/composites/GMR.h | 88 ++ .../repos/squinkylabs-plug1/composites/Gray.h | 141 +++ .../repos/squinkylabs-plug1/composites/LFN.h | 247 ++++ .../squinkylabs-plug1/composites/Shaper.h | 383 ++++++ .../squinkylabs-plug1/composites/Super.h | 180 +++ .../composites/TestComposite.h | 22 +- .../squinkylabs-plug1/composites/Tremolo.h | 12 +- .../composites/VocalAnimator.h | 10 +- .../composites/VocalFilter.h | 6 +- .../composites/WidgetComposite.h | 16 +- .../squinkylabs-plug1/composites/daveguide.h | 111 ++ .../repos/squinkylabs-plug1/docs/README.md | 6 +- .../squinkylabs-plug1/docs/alias-setup.png | Bin 0 -> 90536 bytes .../repos/squinkylabs-plug1/docs/aliasing.md | 39 + .../repos/squinkylabs-plug1/docs/booster.md | 21 + .../docs/booty-shifter-old.md | 249 ++++ .../squinkylabs-plug1/docs/booty-shifter.md | 209 +--- .../repos/squinkylabs-plug1/docs/both.png | Bin 0 -> 27023 bytes .../repos/squinkylabs-plug1/docs/chebyshev.md | 145 +++ .../squinkylabs-plug1/docs/chebyshev.png | Bin 0 -> 43343 bytes .../repos/squinkylabs-plug1/docs/chopper.md | 36 + .../repos/squinkylabs-plug1/docs/chopper.png | Bin 0 -> 20420 bytes .../squinkylabs-plug1/docs/clip-collage.png | Bin 0 -> 18856 bytes .../repos/squinkylabs-plug1/docs/clip.png | Bin 0 -> 7781 bytes .../repos/squinkylabs-plug1/docs/colors.md | 9 + .../repos/squinkylabs-plug1/docs/crush.png | Bin 0 -> 8600 bytes .../docs/emitter-coupled.png | Bin 0 -> 9397 bytes .../squinkylabs-plug1/docs/ev3-panel.png | Bin 0 -> 46775 bytes .../repos/squinkylabs-plug1/docs/ev3.md | 63 + .../squinkylabs-plug1/docs/fold-collage.png | Bin 0 -> 31621 bytes .../squinkylabs-plug1/docs/folder-II.png | Bin 0 -> 16748 bytes .../repos/squinkylabs-plug1/docs/folder.png | Bin 0 -> 16500 bytes .../repos/squinkylabs-plug1/docs/formants.md | 20 + .../squinkylabs-plug1/docs/full-wave.png | Bin 0 -> 10118 bytes .../docs/functional-vco-1.md | 13 + .../squinkylabs-plug1/docs/functional.png | Bin 0 -> 19574 bytes .../repos/squinkylabs-plug1/docs/gray-code.md | 18 + .../squinkylabs-plug1/docs/gray-code.png | Bin 0 -> 22309 bytes .../repos/squinkylabs-plug1/docs/growler.md | 39 + .../squinkylabs-plug1/docs/half-wave.png | Bin 0 -> 8935 bytes .../squinkylabs-plug1/docs/intro-1-110.png | Bin 0 -> 130902 bytes .../squinkylabs-plug1/docs/intro-2-110.png | Bin 0 -> 118003 bytes .../squinkylabs-plug1/docs/intro-3-110.png | Bin 0 -> 49523 bytes .../repos/squinkylabs-plug1/docs/lfn.md | 17 + .../repos/squinkylabs-plug1/docs/lfn.png | Bin 0 -> 51085 bytes .../repos/squinkylabs-plug1/docs/odd.png | Bin 0 -> 27398 bytes .../squinkylabs-plug1/docs/release-notes.md | 19 + .../squinkylabs-plug1/docs/shaper-panel.png | Bin 0 -> 22801 bytes .../repos/squinkylabs-plug1/docs/shaper.md | 105 ++ .../repos/squinkylabs-plug1/docs/shifter.md | 46 + .../repos/squinkylabs-plug1/docs/smooth.png | Bin 0 -> 9409 bytes .../squinkylabs-plug1/docs/thread-booster.png | Bin 0 -> 10152 bytes .../docs/vco-optimization.md | 72 ++ .../repos/squinkylabs-plug1/dsp/fft/FFT.cpp | 22 +- .../repos/squinkylabs-plug1/dsp/fft/FFT.h | 11 +- .../dsp/fft/FFTCrossFader.cpp | 9 +- .../squinkylabs-plug1/dsp/fft/FFTData.cpp | 67 +- .../repos/squinkylabs-plug1/dsp/fft/FFTData.h | 83 +- .../dsp/filters/BiquadParams.h | 35 +- .../dsp/filters/BiquadState.h | 2 + .../dsp/filters/ButterworthFilterDesigner.cpp | 76 ++ .../dsp/filters/ButterworthFilterDesigner.h | 8 + .../dsp/filters/ButterworthLookup.h | 41 + .../squinkylabs-plug1/dsp/filters/GraphicEq.h | 134 +++ .../dsp/filters/LowpassFilter.h | 53 + .../dsp/filters/StateVariableFilter.h | 7 + .../dsp/generators/MinBLEPVCO.h | 588 +++++++++ .../dsp/generators/SawOscillator.h | 4 +- .../dsp/generators/SinOscillator.h | 16 +- .../dsp/third-party/src/EvenVCO.h | 483 ++++++++ .../dsp/third-party/src/EvenVCO_orig.h | 195 +++ .../dsp/third-party/src/FunVCO.h | 447 +++++++ .../dsp/third-party/src/minblep.cpp | 26 + .../dsp/utils/AsymWaveShaper.cpp | 669 +++++++++++ .../dsp/utils/AsymWaveShaper.h | 84 ++ .../squinkylabs-plug1/dsp/utils/AudioMath.cpp | 57 +- .../squinkylabs-plug1/dsp/utils/AudioMath.h | 83 +- .../squinkylabs-plug1/dsp/utils/Decimator.h | 46 + .../dsp/utils/IIRDecimator.h | 52 + .../dsp/utils/IIRUpsampler.h | 48 + .../squinkylabs-plug1/dsp/utils/LookupTable.h | 1 + .../dsp/utils/LookupTableFactory.h | 107 +- .../dsp/utils/ObjectCache.cpp | 105 +- .../squinkylabs-plug1/dsp/utils/ObjectCache.h | 18 + .../repos/squinkylabs-plug1/dsp/utils/poly.h | 64 + .../squinkylabs-plug1/gfx/lfn-panel-design.xd | Bin 0 -> 22017 bytes .../repos/squinkylabs-plug1/make.objects | 12 + .../repos/squinkylabs-plug1/makefile.linux | 7 +- .../repos/squinkylabs-plug1/makefile.msvc | 7 +- .../projects/vs_windows/Squinky.vcxproj | 54 +- .../vs_windows/Squinky.vcxproj.filters | 159 +++ .../repos/squinkylabs-plug1/res/Blue30.svg | 9 + .../squinkylabs-plug1/res/BluePush_0.svg | 10 + .../squinkylabs-plug1/res/BluePush_1.svg | 10 + .../squinkylabs-plug1/res/BlueTrimmer.svg | 7 + .../squinkylabs-plug1/res/NKKSmall_0.svg | 13 + .../squinkylabs-plug1/res/NKKSmall_1.svg | 13 + .../squinkylabs-plug1/res/NKKSmall_2.svg | 13 + .../squinkylabs-plug1/res/blank_panel.svg | 14 +- .../repos/squinkylabs-plug1/res/chb_panel.svg | 32 + .../repos/squinkylabs-plug1/res/ev3_panel.svg | 26 + .../squinkylabs-plug1/res/formants_panel.svg | 5 +- .../repos/squinkylabs-plug1/res/fun_panel.svg | 52 + .../repos/squinkylabs-plug1/res/gray.svg | 30 + .../repos/squinkylabs-plug1/res/lfn_panel.svg | 42 + .../squinkylabs-plug1/res/saw_wave-1.svg | 4 + .../repos/squinkylabs-plug1/res/saw_wave.svg | 5 + .../squinkylabs-plug1/res/saw_wave_on.svg | 5 + .../squinkylabs-plug1/res/saw_wave_on1.svg | 4 + .../repos/squinkylabs-plug1/res/shaper.svg | 35 + .../res/thread_booster_panel.svg | 4 + .../squinkylabs-plug1/res/trem_panel.svg | 7 +- .../res/vocal_animator_panel.svg | 9 +- .../squinkylabs-plug1/res/waveforms-6-01.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-02.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-03.svg | 7 + .../squinkylabs-plug1/res/waveforms-6-04.svg | 7 + .../squinkylabs-plug1/res/waveforms-6-05.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-06.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-07.svg | 4 + .../squinkylabs-plug1/res/waveforms-6-08.svg | 4 + .../squinkylabs-plug1/res/waveforms-6-09.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-10.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-11.svg | 7 + .../squinkylabs-plug1/res/waveforms-6-12.svg | 7 + .../sqsrc/clock/ClockMult.cpp | 10 +- .../squinkylabs-plug1/sqsrc/clock/ClockMult.h | 2 +- .../sqsrc/clock/GenerativeTriggerGenerator.h | 114 ++ .../sqsrc/clock/TriggerSequencer.h | 114 ++ .../sqsrc/delay/FractionalDelay.cpp | 97 ++ .../sqsrc/delay/FractionalDelay.h | 88 ++ .../sqsrc/grammar/StochasticGrammar.cpp | 644 ++++++++++ .../sqsrc/grammar/StochasticGrammar.h | 205 ++++ .../squinkylabs-plug1/sqsrc/util/Constants.h | 7 + .../sqsrc/util/GateTrigger.h | 15 +- .../sqsrc/util/ManagedPool.h | 6 +- .../squinkylabs-plug1/sqsrc/util/RingBuffer.h | 14 +- .../sqsrc/util/TriggerOutput.h | 39 + .../squinkylabs-plug1/src/BlankModule.cpp | 96 ++ .../squinkylabs-plug1/src/BootyModule.cpp | 2 +- .../repos/squinkylabs-plug1/src/CHBModule.cpp | 391 ++++++ .../repos/squinkylabs-plug1/src/CPU_Hog.cpp | 37 +- .../src/ColoredNoiseModule.cpp | 3 - .../repos/squinkylabs-plug1/src/DGModule.cpp | 143 +++ .../repos/squinkylabs-plug1/src/EV3Module.cpp | 421 +++++++ .../repos/squinkylabs-plug1/src/EVModule.cpp | 225 ++++ .../squinkylabs-plug1/src/FunVModule.cpp | 179 +++ .../repos/squinkylabs-plug1/src/GMRModule.cpp | 104 ++ .../squinkylabs-plug1/src/GrayModule.cpp | 136 +++ .../repos/squinkylabs-plug1/src/LFNModule.cpp | 180 +++ .../repos/squinkylabs-plug1/src/SQWidgets.h | 94 ++ .../squinkylabs-plug1/src/ShaperModule.cpp | 232 ++++ .../repos/squinkylabs-plug1/src/Squinky.cpp | 41 + .../repos/squinkylabs-plug1/src/Squinky.hpp | 5 + .../squinkylabs-plug1/src/SuperModule.cpp | 149 +++ .../src/VocalFilterModule.cpp | 2 +- .../squinkylabs-plug1/src/VocalModule.cpp | 2 +- .../squinkylabs-plug1/src/WaveformSelector.h | 151 +++ .../repos/squinkylabs-plug1/table.txt | 544 +++++++++ .../community/repos/squinkylabs-plug1/test.mk | 1 + .../repos/squinkylabs-plug1/test/Analyzer.cpp | 375 ++++++ .../repos/squinkylabs-plug1/test/Analyzer.h | 83 ++ .../squinkylabs-plug1/test/MeasureTime.h | 25 +- .../repos/squinkylabs-plug1/test/SqTime.h | 1 - .../repos/squinkylabs-plug1/test/TestSignal.h | 2 +- .../test/TimeStatsCollector.h | 42 +- .../repos/squinkylabs-plug1/test/main.cpp | 59 +- .../repos/squinkylabs-plug1/test/perfTest.cpp | 606 +++++++++- .../squinkylabs-plug1/test/testAnalyzer.cpp | 101 ++ .../squinkylabs-plug1/test/testAudioMath.cpp | 74 +- .../test/testButterLookup.cpp | 101 ++ .../test/testColoredNoise.cpp | 4 +- .../squinkylabs-plug1/test/testDelay.cpp | 169 +++ .../repos/squinkylabs-plug1/test/testFFT.cpp | 33 +- .../squinkylabs-plug1/test/testFilter.cpp | 100 ++ .../test/testFilterDesign.cpp | 250 ++++ .../repos/squinkylabs-plug1/test/testGMR.cpp | 45 + .../test/testGateTrigger.cpp | 48 +- .../test/testLookupTable.cpp | 147 ++- .../test/testLowpassFilter.cpp | 253 ++++ .../squinkylabs-plug1/test/testMinBLEPVCO.cpp | 380 ++++++ .../test/testObjectCache.cpp | 59 +- .../repos/squinkylabs-plug1/test/testPoly.cpp | 67 ++ .../test/testRateConversion.cpp | 63 + .../squinkylabs-plug1/test/testRingBuffer.cpp | 14 +- .../repos/squinkylabs-plug1/test/testSaw.cpp | 77 ++ .../repos/squinkylabs-plug1/test/testSin.cpp | 225 ++++ .../test/testSinOscillator.cpp | 2 +- .../squinkylabs-plug1/test/testSpline.cpp | 315 +++++ .../test/testStochasticGrammar.cpp | 498 ++++++++ .../squinkylabs-plug1/test/testTestSignal.cpp | 7 + .../squinkylabs-plug1/test/testThread.cpp | 30 +- .../repos/squinkylabs-plug1/test/testVCO.cpp | 237 ++++ .../squinkylabs-plug1/test/testVCOAlias.cpp | 510 ++++++++ .../repos/squinkylabs-plug1/text.txt | 1056 +++++++++++++++++ vst2_bin/CHANGELOG_VST.txt | 17 +- vst2_bin/log.txt | 265 +++-- .../squinkylabs-plug1/LICENSE-dist.txt | 49 +- vst2_bin/plugins/squinkylabs-plug1/README.md | 4 +- .../plugins/squinkylabs-plug1/docs/README.md | 6 +- .../squinkylabs-plug1/docs/alias-setup.png | Bin 0 -> 90536 bytes .../squinkylabs-plug1/docs/aliasing.md | 39 + .../plugins/squinkylabs-plug1/docs/booster.md | 21 + .../docs/booty-shifter-old.md | 249 ++++ .../squinkylabs-plug1/docs/booty-shifter.md | 209 +--- .../plugins/squinkylabs-plug1/docs/both.png | Bin 0 -> 27023 bytes .../squinkylabs-plug1/docs/chebyshev.md | 145 +++ .../squinkylabs-plug1/docs/chebyshev.png | Bin 0 -> 43343 bytes .../plugins/squinkylabs-plug1/docs/chopper.md | 36 + .../squinkylabs-plug1/docs/chopper.png | Bin 0 -> 20420 bytes .../squinkylabs-plug1/docs/clip-collage.png | Bin 0 -> 18856 bytes .../plugins/squinkylabs-plug1/docs/clip.png | Bin 0 -> 7781 bytes .../plugins/squinkylabs-plug1/docs/colors.md | 9 + .../plugins/squinkylabs-plug1/docs/crush.png | Bin 0 -> 8600 bytes .../docs/emitter-coupled.png | Bin 0 -> 9397 bytes .../squinkylabs-plug1/docs/ev3-panel.png | Bin 0 -> 46775 bytes .../plugins/squinkylabs-plug1/docs/ev3.md | 63 + .../squinkylabs-plug1/docs/fold-collage.png | Bin 0 -> 31621 bytes .../squinkylabs-plug1/docs/folder-II.png | Bin 0 -> 16748 bytes .../plugins/squinkylabs-plug1/docs/folder.png | Bin 0 -> 16500 bytes .../squinkylabs-plug1/docs/formants.md | 20 + .../squinkylabs-plug1/docs/full-wave.png | Bin 0 -> 10118 bytes .../docs/functional-vco-1.md | 13 + .../squinkylabs-plug1/docs/functional.png | Bin 0 -> 19574 bytes .../squinkylabs-plug1/docs/gray-code.md | 18 + .../squinkylabs-plug1/docs/gray-code.png | Bin 0 -> 22309 bytes .../plugins/squinkylabs-plug1/docs/growler.md | 39 + .../squinkylabs-plug1/docs/half-wave.png | Bin 0 -> 8935 bytes .../squinkylabs-plug1/docs/intro-1-110.png | Bin 0 -> 130902 bytes .../squinkylabs-plug1/docs/intro-2-110.png | Bin 0 -> 118003 bytes .../squinkylabs-plug1/docs/intro-3-110.png | Bin 0 -> 49523 bytes .../plugins/squinkylabs-plug1/docs/lfn.md | 17 + .../plugins/squinkylabs-plug1/docs/lfn.png | Bin 0 -> 51085 bytes .../plugins/squinkylabs-plug1/docs/odd.png | Bin 0 -> 27398 bytes .../squinkylabs-plug1/docs/release-notes.md | 19 + .../squinkylabs-plug1/docs/shaper-panel.png | Bin 0 -> 22801 bytes .../plugins/squinkylabs-plug1/docs/shaper.md | 105 ++ .../plugins/squinkylabs-plug1/docs/shifter.md | 46 + .../plugins/squinkylabs-plug1/docs/smooth.png | Bin 0 -> 9409 bytes .../squinkylabs-plug1/docs/thread-booster.png | Bin 0 -> 10152 bytes .../docs/vco-optimization.md | 72 ++ .../squinkylabs-plug1/gfx/ThreadBoost.xd | Bin 22521 -> 0 bytes .../gfx/booty-panel-design.xd | Bin 46513 -> 0 bytes .../gfx/chopper-panel-design.xd | Bin 17208 -> 0 bytes .../squinkylabs-plug1/gfx/formants_panel.xd | Bin 34101 -> 0 bytes .../squinkylabs-plug1/gfx/noun_938401.svg | 4 - .../squinkylabs-plug1/gfx/vocal-anim-panel.xd | Bin 89458 -> 0 bytes .../plugins/squinkylabs-plug1/res/Blue30.svg | 9 + .../squinkylabs-plug1/res/BluePush_0.svg | 10 + .../squinkylabs-plug1/res/BluePush_1.svg | 10 + .../squinkylabs-plug1/res/BlueTrimmer.svg | 7 + .../squinkylabs-plug1/res/NKKSmall_0.svg | 13 + .../squinkylabs-plug1/res/NKKSmall_1.svg | 13 + .../squinkylabs-plug1/res/NKKSmall_2.svg | 13 + .../squinkylabs-plug1/res/blank_panel.svg | 14 +- .../squinkylabs-plug1/res/chb_panel.svg | 32 + .../squinkylabs-plug1/res/ev3_panel.svg | 26 + .../squinkylabs-plug1/res/formants_panel.svg | 5 +- .../squinkylabs-plug1/res/fun_panel.svg | 52 + .../plugins/squinkylabs-plug1/res/gray.svg | 30 + .../squinkylabs-plug1/res/lfn_panel.svg | 42 + .../squinkylabs-plug1/res/saw_wave-1.svg | 4 + .../squinkylabs-plug1/res/saw_wave.svg | 5 + .../squinkylabs-plug1/res/saw_wave_on.svg | 5 + .../squinkylabs-plug1/res/saw_wave_on1.svg | 4 + .../plugins/squinkylabs-plug1/res/shaper.svg | 35 + .../res/thread_booster_panel.svg | 4 + .../squinkylabs-plug1/res/trem_panel.svg | 7 +- .../res/vocal_animator_panel.svg | 9 +- .../squinkylabs-plug1/res/waveforms-6-01.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-02.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-03.svg | 7 + .../squinkylabs-plug1/res/waveforms-6-04.svg | 7 + .../squinkylabs-plug1/res/waveforms-6-05.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-06.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-07.svg | 4 + .../squinkylabs-plug1/res/waveforms-6-08.svg | 4 + .../squinkylabs-plug1/res/waveforms-6-09.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-10.svg | 5 + .../squinkylabs-plug1/res/waveforms-6-11.svg | 7 + .../squinkylabs-plug1/res/waveforms-6-12.svg | 7 + 291 files changed, 19103 insertions(+), 883 deletions(-) create mode 100644 plugins/community/repos/squinkylabs-plug1/.gitignore create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/Blank.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/CHB.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/EV3.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/FunVCOComposite.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/GMR.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/Gray.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/LFN.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/Shaper.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/Super.h create mode 100644 plugins/community/repos/squinkylabs-plug1/composites/daveguide.h create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/alias-setup.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/aliasing.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/booster.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/booty-shifter-old.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/both.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/chebyshev.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/chebyshev.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/chopper.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/chopper.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/clip-collage.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/clip.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/colors.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/crush.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/emitter-coupled.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/ev3-panel.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/ev3.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/fold-collage.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/folder-II.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/folder.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/formants.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/full-wave.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/functional-vco-1.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/functional.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/gray-code.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/gray-code.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/growler.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/half-wave.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/intro-1-110.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/intro-2-110.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/intro-3-110.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/lfn.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/lfn.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/odd.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/release-notes.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/shaper-panel.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/shaper.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/shifter.md create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/smooth.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/thread-booster.png create mode 100644 plugins/community/repos/squinkylabs-plug1/docs/vco-optimization.md create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthLookup.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/filters/GraphicEq.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/filters/LowpassFilter.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/generators/MinBLEPVCO.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO_orig.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/FunVCO.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/minblep.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/utils/Decimator.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRDecimator.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRUpsampler.h create mode 100644 plugins/community/repos/squinkylabs-plug1/dsp/utils/poly.h create mode 100644 plugins/community/repos/squinkylabs-plug1/gfx/lfn-panel-design.xd create mode 100644 plugins/community/repos/squinkylabs-plug1/res/Blue30.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/BluePush_0.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/BluePush_1.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/BlueTrimmer.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/NKKSmall_0.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/NKKSmall_1.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/NKKSmall_2.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/chb_panel.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/ev3_panel.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/fun_panel.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/gray.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/lfn_panel.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/saw_wave-1.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/saw_wave.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/saw_wave_on.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/saw_wave_on1.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/shaper.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-01.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-02.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-03.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-04.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-05.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-06.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-07.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-08.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-09.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-10.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-11.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/res/waveforms-6-12.svg create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/clock/GenerativeTriggerGenerator.h create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/clock/TriggerSequencer.h create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.h create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.h create mode 100644 plugins/community/repos/squinkylabs-plug1/sqsrc/util/TriggerOutput.h create mode 100644 plugins/community/repos/squinkylabs-plug1/src/BlankModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/CHBModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/DGModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/EV3Module.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/EVModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/FunVModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/GMRModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/GrayModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/LFNModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/SQWidgets.h create mode 100644 plugins/community/repos/squinkylabs-plug1/src/ShaperModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/SuperModule.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/src/WaveformSelector.h create mode 100644 plugins/community/repos/squinkylabs-plug1/table.txt create mode 100644 plugins/community/repos/squinkylabs-plug1/test/Analyzer.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/Analyzer.h create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testAnalyzer.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testButterLookup.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testDelay.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testFilter.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testFilterDesign.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testGMR.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testLowpassFilter.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testMinBLEPVCO.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testPoly.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testRateConversion.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testSin.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testSpline.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testStochasticGrammar.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testVCO.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/test/testVCOAlias.cpp create mode 100644 plugins/community/repos/squinkylabs-plug1/text.txt create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/alias-setup.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/aliasing.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/booster.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter-old.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/both.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/chopper.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/chopper.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/clip-collage.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/clip.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/colors.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/crush.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/emitter-coupled.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/ev3-panel.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/ev3.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/fold-collage.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/folder-II.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/folder.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/formants.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/full-wave.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/functional-vco-1.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/functional.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/growler.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/half-wave.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/intro-1-110.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/intro-2-110.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/intro-3-110.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/lfn.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/lfn.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/odd.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/release-notes.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/shaper-panel.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/shaper.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/shifter.md create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/smooth.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/thread-booster.png create mode 100644 vst2_bin/plugins/squinkylabs-plug1/docs/vco-optimization.md delete mode 100644 vst2_bin/plugins/squinkylabs-plug1/gfx/ThreadBoost.xd delete mode 100644 vst2_bin/plugins/squinkylabs-plug1/gfx/booty-panel-design.xd delete mode 100644 vst2_bin/plugins/squinkylabs-plug1/gfx/chopper-panel-design.xd delete mode 100644 vst2_bin/plugins/squinkylabs-plug1/gfx/formants_panel.xd delete mode 100644 vst2_bin/plugins/squinkylabs-plug1/gfx/noun_938401.svg delete mode 100644 vst2_bin/plugins/squinkylabs-plug1/gfx/vocal-anim-panel.xd create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/Blue30.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/BluePush_0.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/BluePush_1.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/BlueTrimmer.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_0.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_1.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_2.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/chb_panel.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/ev3_panel.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/fun_panel.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/gray.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/lfn_panel.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/saw_wave-1.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/saw_wave.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on1.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/shaper.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-01.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-02.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-03.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-04.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-05.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-06.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-07.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-08.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-09.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-10.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-11.svg create mode 100644 vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-12.svg diff --git a/plugins/community/repos/squinkylabs-plug1/.gitignore b/plugins/community/repos/squinkylabs-plug1/.gitignore new file mode 100644 index 00000000..d283cbf3 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/.gitignore @@ -0,0 +1,16 @@ +**/build/ +**/build_test/ +**/dist/ +**/Debug/ +**/Release/ +**/.vs/ +.vscode/ +*.opensdf +*.sdf +*.ipch +Squinky.suo +*.dll +*.so +*.dylib +*.exe +*.user diff --git a/plugins/community/repos/squinkylabs-plug1/LICENSE-dist.txt b/plugins/community/repos/squinkylabs-plug1/LICENSE-dist.txt index 636c5ee5..8aec0774 100644 --- a/plugins/community/repos/squinkylabs-plug1/LICENSE-dist.txt +++ b/plugins/community/repos/squinkylabs-plug1/LICENSE-dist.txt @@ -7,7 +7,17 @@ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Copyright 2016 Andrew Belt + +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.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the author nor the names of any 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 OWNER 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. @@ -65,3 +75,40 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND Component Library graphics by Grayscale (http://grayscale.info/) Licensed under CC BY-NC 4.0 (https://creativecommons.org/licenses/by-nc/4.0/) + +# Befaco modules for VCV Rack + +Copyright 2016 Andrew Belt + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Copyright 2016 Andrew Belt + +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. +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. + +# VCV Fundamental modules +Copyright 2016 Andrew Belt + +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/squinkylabs-plug1/Makefile b/plugins/community/repos/squinkylabs-plug1/Makefile index 184d302f..a6ec4a9b 100644 --- a/plugins/community/repos/squinkylabs-plug1/Makefile +++ b/plugins/community/repos/squinkylabs-plug1/Makefile @@ -2,13 +2,14 @@ SLUG = squinkylabs-plug1 # Must follow the format in the Versioning section of https://vcvrack.com/manual/PluginDevelopmentTutorial.html -VERSION = 0.6.5 +VERSION = 0.6.9 # FLAGS will be passed to both the C and C++ compiler FLAGS += -I./dsp/generators -I./dsp/utils -I./dsp/filters -FLAGS += -I./dsp/third-party/falco -I./dsp/third-party/kiss_fft130 -I./dsp/third-party/kiss_fft130/tools +FLAGS += -I./dsp/third-party/falco -I./dsp/third-party/kiss_fft130 +FLAGS += -I./dsp/third-party/kiss_fft130/tools -I./dsp/third-party/src FLAGS += -I./sqsrc/thread -I./dsp/fft -I./composites -FLAGS += -I./sqsrc/noise -I./sqsrc/util -I./sqsrc/clock +FLAGS += -I./sqsrc/noise -I./sqsrc/util -I./sqsrc/clock -I./sqsrc/grammar -I./sqsrc/delay CFLAGS += CXXFLAGS += @@ -35,6 +36,7 @@ LDFLAGS += -lpthread SOURCES += $(wildcard src/*.cpp) SOURCES += $(wildcard dsp/**/*.cpp) SOURCES += $(wildcard dsp/third-party/falco/*.cpp) +xxSOURCES += dsp/third-party/src/minblep.cpp SOURCES += dsp/third-party/kiss_fft130/kiss_fft.c SOURCES += dsp/third-party/kiss_fft130/tools/kiss_fftr.c SOURCES += $(wildcard sqsrc/**/*.cpp) diff --git a/plugins/community/repos/squinkylabs-plug1/README.md b/plugins/community/repos/squinkylabs-plug1/README.md index 13a7bbcd..823e4797 100644 --- a/plugins/community/repos/squinkylabs-plug1/README.md +++ b/plugins/community/repos/squinkylabs-plug1/README.md @@ -4,10 +4,12 @@ This project is a growing collection of modules for the VCV Rack vritual modular You can find us on Facebook [here](https://www.facebook.com/SquinkyLabs). -## Manuals +## Manuals and Release Notes Here is the user's manual for our modules: [instruction manual](./docs/booty-shifter.md). It contains descriptions of all of them. +The [release notes](./docs/release-notes.md) describe recent changes. + ## Contributing Please use our GitHub issues page to report problems, request features, etc. If you don’t already have a GitHub account you will need to create one, as you must be logged in to post to GitHub. diff --git a/plugins/community/repos/squinkylabs-plug1/composites/Blank.h b/plugins/community/repos/squinkylabs-plug1/composites/Blank.h new file mode 100644 index 00000000..06f95c17 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/Blank.h @@ -0,0 +1,65 @@ + +#pragma once + + +template +class Blank : public TBase +{ +public: + + Blank(struct Module * module) : TBase(module) + { + } + Blank() : TBase() + { + } + + /** + * re-calc everything that changes with sample + * rate. Also everything that depends on baseFrequency. + * + * Only needs to be called once. + */ + void init(); + + enum ParamIds + { + NUM_PARAMS + }; + + enum InputIds + { + NUM_INPUTS + }; + + enum OutputIds + { + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + +private: + +}; + + +template +inline void Blank::init() +{ +} + + +template +inline void Blank::step() +{ +} + diff --git a/plugins/community/repos/squinkylabs-plug1/composites/CHB.h b/plugins/community/repos/squinkylabs-plug1/composites/CHB.h new file mode 100644 index 00000000..5a28757c --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/CHB.h @@ -0,0 +1,382 @@ + +#pragma once + +#include + +#include "AudioMath.h" +#include "poly.h" +#include "ObjectCache.h" +#include "SinOscillator.h" + +using Osc = SinOscillator; + +#ifndef _CLAMP +#define _CLAMP +namespace std { + inline float clamp(float v, float lo, float hi) + { + assert(lo < hi); + return std::min(hi, std::max(v, lo)); + } +} +#endif + +/** + */ +template +class CHB : public TBase +{ +public: + CHB(struct Module * module) : TBase(module) + { + init(); + } + CHB() : TBase() + { + init(); + } + + enum ParamIds + { + PARAM_TUNE, + PARAM_OCTAVE, + PARAM_EXTGAIN, + PARAM_PITCH_MOD_TRIM, + PARAM_LINEAR_FM_TRIM, + PARAM_EXTGAIN_TRIM, + PARAM_FOLD, + PARAM_SLOPE, + PARAM_MAG_EVEN, + PARAM_MAG_ODD, + PARAM_H0, + PARAM_H1, + PARAM_H2, + PARAM_H3, + PARAM_H4, + PARAM_H5, + PARAM_H6, + PARAM_H7, + PARAM_H8, + PARAM_H9, + + NUM_PARAMS + }; + const int numHarmonics = 1 + PARAM_H9 - PARAM_H0; + + enum InputIds + { + CV_INPUT, + PITCH_MOD_INPUT, + LINEAR_FM_INPUT, + ENV_INPUT, + GAIN_INPUT, + AUDIO_INPUT, + SLOPE_INPUT, + H0_INPUT, + H1_INPUT, + H2_INPUT, + H3_INPUT, + H4_INPUT, + H5_INPUT, + H6_INPUT, + H7_INPUT, + H8_INPUT, + H9_INPUT, + H10_INPUT, + NUM_INPUTS + }; + + enum OutputIds + { + MIX_OUTPUT, + NUM_OUTPUTS + }; + + enum LightIds + { + GAIN_GREEN_LIGHT, + GAIN_RED_LIGHT, + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + + void setEconomy(bool); + bool isEconomy() const; + + float _freq = 0; + +private: + bool economyMode = true; // let's default to economy mode + int cycleCount = 1; + int clipCount = 0; + int signalCount = 0; + const int clipDuration = 4000; + float finalGain = 0; + bool isExternalAudio = false; + + /** + * The waveshaper that is the heart of this module + */ + Poly poly; + + /* + * maps freq multiple to "octave". + * In other words, log base 12. + */ + float _octave[11]; + float getOctave(int mult) const ; + void init(); + + float _volume[11] = {0}; + + /** + * Internal sine wave oscillator to drive the waveshaper + */ + SinOscillatorParams sinParams; + SinOscillatorState sinState; + + // just maps 0..1 to 0..1 + std::shared_ptr> audioTaper = {ObjectCache::getAudioTaper()}; + + AudioMath::ScaleFun gainCombiner = AudioMath::makeLinearScaler(0.f, 1.f); + + std::function expLookup = ObjectCache::getExp2Ex(); + std::shared_ptr> db2gain = ObjectCache::getDb2Gain(); + + /** + * Audio taper for the slope. + */ + AudioMath::ScaleFun slopeScale = + {AudioMath::makeLinearScaler(-18, 0)}; + + /** + * do one-time calculations when sample rate changes + */ + void internalUpdate(); + + /** + * Do all the processing to get the input waveform + * that will be fed to the polynomials + */ + float getInput(); + + void calcVolumes(float *); + + void checkClipping(float sample); + + /** + * Does audio taper + * @param raw = 0..1 + * @return 0..1 + */ + float taper(float raw) + { + return LookupTable::lookup(*audioTaper, raw, false); + } +}; + +template +inline void CHB::init() +{ + for (int i = 0; i < 11; ++i) { + _octave[i] = log2(float(i + 1)); + } +} + +template +inline float CHB::getOctave(int i) const +{ + assert(i >= 0 && i < 11); + return _octave[i]; +} + +#if 1 +template +inline void CHB::setEconomy(bool b) +{ + economyMode = b; +} + +template +inline bool CHB::isEconomy() const +{ + return economyMode; +} +#endif + +template +inline float CHB::getInput() +{ + assert(TBase::engineGetSampleTime() > 0); + + // Get the frequency from the inputs. + float pitch = 1.0f + roundf(TBase::params[PARAM_OCTAVE].value) + TBase::params[PARAM_TUNE].value / 12.0f; + pitch += TBase::inputs[CV_INPUT].value; + pitch += .25f * TBase::inputs[PITCH_MOD_INPUT].value * + taper(TBase::params[PARAM_PITCH_MOD_TRIM].value); + + const float q = float(log2(261.626)); // move up to pitch range of EvenVCO + pitch += q; + _freq = expLookup(pitch); + + if (_freq < .01f) { + _freq = .01f; + } + + // Multiply in the Linear FM contribution + _freq *= 1.0f + TBase::inputs[LINEAR_FM_INPUT].value * taper(TBase::params[PARAM_LINEAR_FM_TRIM].value); + float time = std::clamp(_freq * TBase::engineGetSampleTime(), -.5f, 0.5f); + + Osc::setFrequency(sinParams, time); + + if (cycleCount == 0) { + // Get the gain from the envelope generator in + // eGain = {0 .. 10.0f } + float eGain = TBase::inputs[ENV_INPUT].active ? TBase::inputs[ENV_INPUT].value : 10.f; + isExternalAudio = TBase::inputs[AUDIO_INPUT].active; + + const float gainKnobValue = TBase::params[PARAM_EXTGAIN].value; + const float gainCVValue = TBase::inputs[GAIN_INPUT].value; + const float gainTrimValue = TBase::params[PARAM_EXTGAIN_TRIM].value; + const float combinedGain = gainCombiner(gainCVValue, gainKnobValue, gainTrimValue); + + // tapered gain {0 .. 0.5} + const float taperedGain = .5f * taper(combinedGain); + + // final gain 0..5 + finalGain = taperedGain * eGain; + } + + float input = finalGain * (isExternalAudio ? + TBase::inputs[AUDIO_INPUT].value : + Osc::run(sinState, sinParams)); + + checkClipping(input); + + + // Now clip or fold to keep in -1...+1 + if (TBase::params[PARAM_FOLD].value > .5) { + input = AudioMath::fold(input); + } else { + input = std::max(input, -1.f); + input = std::min(input, 1.f); + } + + return input; +} + +/** + * Desired behavior: + * If we clip, led goes red and stays red for clipDuration + * if not red, sign present goes green + * nothing - turn off + */ +template +inline void CHB::checkClipping(float input) +{ + if (input > 1) { + // if clipping, go red + clipCount = clipDuration; + TBase::lights[GAIN_RED_LIGHT].value = 10; + TBase::lights[GAIN_GREEN_LIGHT].value = 0; + } else if (clipCount) { + // If red,run down the clock + clipCount--; + if (clipCount <= 0) { + TBase::lights[GAIN_RED_LIGHT].value = 0; + TBase::lights[GAIN_GREEN_LIGHT].value = 0; + } + } else if (input > .3f) { + // if signal present + signalCount = clipDuration; + TBase::lights[GAIN_GREEN_LIGHT].value = 10; + } else if (signalCount) { + signalCount--; + if (signalCount <= 0) { + TBase::lights[GAIN_GREEN_LIGHT].value = 0; + } + } +} + +template +inline void CHB::calcVolumes(float * volumes) +{ + // first get the harmonics knobs, and scale them + for (int i = 0; i < numHarmonics; ++i) { + float val = taper(TBase::params[i + PARAM_H0].value); // apply taper to the knobs + + // If input connected, scale and multiply with knob value + if (TBase::inputs[i + H0_INPUT].active) { + const float inputCV = TBase::inputs[i + H0_INPUT].value * .1f; + val *= std::max(inputCV, 0.f); + } + + volumes[i] = val; + } + + // Second: apply the even and odd knobs + { + const float even = taper(TBase::params[PARAM_MAG_EVEN].value); + const float odd = taper(TBase::params[PARAM_MAG_ODD].value); + for (int i = 1; i < 11; ++i) { + const float mul = (i & 1) ? even : odd; // 0 = fundamental, 1=even, 2=odd.... + volumes[i] *= mul; + } + } + + // Third: slope + { + const float slope = slopeScale(TBase::params[PARAM_SLOPE].value, TBase::inputs[SLOPE_INPUT].value, 1); + + for (int i = 0; i < 11; ++i) { + float slopeAttenDb = slope * getOctave(i); + float slopeAtten = LookupTable::lookup(*db2gain, slopeAttenDb); + volumes[i] *= slopeAtten; + } + } +} + +template +inline void CHB::step() +{ + if (economyMode) { + if (--cycleCount < 0) { + cycleCount = 3; + } + } else { + cycleCount = 0; + } + + // do all the processing to get the carrier signal + const float input = getInput(); + +#if 0 + { + static float high=0; + static float low=0; + if (input high) { + high = std::max(high, input); + low = std::min(low, input); + printf("%f, %f\n", high, low); + fflush(stdout); + } + } + #endif + + // float volume[11]; + if (cycleCount == 0) { + calcVolumes(_volume); + + for (int i = 0; i < 11; ++i) { + poly.setGain(i, _volume[i]); + } + } + + float output = poly.run(input); + TBase::outputs[MIX_OUTPUT].value = 5.0f * output; +} + diff --git a/plugins/community/repos/squinkylabs-plug1/composites/ColoredNoise.h b/plugins/community/repos/squinkylabs-plug1/composites/ColoredNoise.h index 087daff3..b6e354f6 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/ColoredNoise.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/ColoredNoise.h @@ -75,7 +75,7 @@ public: /** * Main processing entry point. Called every sample */ - void step(); + void step() override; float getSlope() const; @@ -159,9 +159,9 @@ protected: FFT::makeNoiseSpectrum(noiseSpectrum.get(), noiseMessage->noiseSpec); -// Now inverse FFT to time domain noise in client's buffer + // Now inverse FFT to time domain noise in client's buffer FFT::inverse(noiseMessage->dataBuffer.get(), *noiseSpectrum.get()); - FFT::normalize(noiseMessage->dataBuffer.get()); + FFT::normalize(noiseMessage->dataBuffer.get(), 5); // use 5v amplitude. sendMessageToClient(noiseMessage); } private: diff --git a/plugins/community/repos/squinkylabs-plug1/composites/EV3.h b/plugins/community/repos/squinkylabs-plug1/composites/EV3.h new file mode 100644 index 00000000..69dc6cbd --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/EV3.h @@ -0,0 +1,279 @@ +#pragma once + +#include "MinBLEPVCO.h" +#include "ObjectCache.h" + +#include "dsp/functions.hpp" // rack math + +/** + * + */ +template +class EV3 : public TBase +{ +public: + friend class TestMB; + EV3(struct Module * module) : TBase(module) + { + init(); + } + + EV3() : TBase() + { + init(); + } + + enum class Waves + { + SIN, + TRI, + SAW, + SQUARE, + EVEN, + NONE, + END // just a marker + }; + + enum ParamIds + { + MIX1_PARAM, + MIX2_PARAM, + MIX3_PARAM, + OCTAVE1_PARAM, + SEMI1_PARAM, + FINE1_PARAM, + FM1_PARAM, + SYNC1_PARAM, + WAVE1_PARAM, + PW1_PARAM, + PWM1_PARAM, + + OCTAVE2_PARAM, + SEMI2_PARAM, + FINE2_PARAM, + FM2_PARAM, + SYNC2_PARAM, + WAVE2_PARAM, + PW2_PARAM, + PWM2_PARAM, + + OCTAVE3_PARAM, + SEMI3_PARAM, + FINE3_PARAM, + FM3_PARAM, + SYNC3_PARAM, + WAVE3_PARAM, + PW3_PARAM, + PWM3_PARAM, + + NUM_PARAMS + }; + + enum InputIds + { + CV1_INPUT, + CV2_INPUT, + CV3_INPUT, + FM1_INPUT, + FM2_INPUT, + FM3_INPUT, + PWM1_INPUT, + PWM2_INPUT, + PWM3_INPUT, + NUM_INPUTS + }; + + enum OutputIds + { + MIX_OUTPUT, + VCO1_OUTPUT, + VCO2_OUTPUT, + VCO3_OUTPUT, + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + void step() override; + +private: + void setSync(); + void processPitchInputs(); + void processPitchInputs(int osc); + void processWaveforms(); + void stepVCOs(); + void init(); + void processPWInputs(); + void processPWInput(int osc); + float getInput(int osc, InputIds in0, InputIds in1, InputIds in2); + + MinBLEPVCO vcos[3]; + float _freq[3]; + float _out[3]; + std::function expLookup = + ObjectCache::getExp2Ex(); + std::shared_ptr> audioTaper = + ObjectCache::getAudioTaper(); +}; + +template +inline void EV3::init() +{ + for (int i = 0; i < 3; ++i) { + vcos[i].setWaveform(MinBLEPVCO::Waveform::Saw); + } + + vcos[0].setSyncCallback([this](float f) { + + if (TBase::params[SYNC2_PARAM].value > .5) { + vcos[1].onMasterSync(f); + } + if (TBase::params[SYNC3_PARAM].value > .5) { + vcos[2].onMasterSync(f); + } + }); +} + +template +inline void EV3::setSync() +{ + vcos[0].setSyncEnabled(false); + vcos[1].setSyncEnabled(TBase::params[SYNC2_PARAM].value > .5); + vcos[2].setSyncEnabled(TBase::params[SYNC3_PARAM].value > .5); +} + +template +inline void EV3::processWaveforms() +{ + vcos[0].setWaveform((MinBLEPVCO::Waveform)(int)TBase::params[WAVE1_PARAM].value); + vcos[1].setWaveform((MinBLEPVCO::Waveform)(int)TBase::params[WAVE2_PARAM].value); + vcos[2].setWaveform((MinBLEPVCO::Waveform)(int)TBase::params[WAVE3_PARAM].value); +} + +template +float EV3::getInput(int osc, InputIds in1, InputIds in2, InputIds in3) +{ + const bool in2Connected = TBase::inputs[in2].active; + const bool in3Connected = TBase::inputs[in3].active; + InputIds id = in1; + if ((osc == 1) && in2Connected) { + id = in2; + } + if (osc == 2) { + if (in3Connected) id = in3; + else if (in2Connected) id = in2; + } + return TBase::inputs[id].value; +} + +template +void EV3::processPWInput(int osc) +{ + const float pwmInput = getInput(osc, PWM1_INPUT, PWM2_INPUT, PWM3_INPUT) / 5.f; + + const int delta = osc * (OCTAVE2_PARAM - OCTAVE1_PARAM); + const float pwmTrim = TBase::params[PWM1_PARAM + delta].value; + const float pwInit = TBase::params[PW1_PARAM + delta].value; + + float pw = pwInit + pwmInput * pwmTrim; + const float minPw = 0.05f; + pw = rack::rescale(std::clamp(pw, -1.0f, 1.0f), -1.0f, 1.0f, minPw, 1.0f - minPw); + vcos[osc].setPulseWidth(pw); +} + +template +inline void EV3::processPWInputs() +{ + processPWInput(0); + processPWInput(1); + processPWInput(2); +} + +template +inline void EV3::step() +{ + setSync(); + processPitchInputs(); + processWaveforms(); + processPWInputs(); + stepVCOs(); + float mix = 0; + + for (int i = 0; i < 3; ++i) { + + const float knob = TBase::params[MIX1_PARAM + i].value; + const float gain = LookupTable::lookup(*audioTaper, knob, false); + const float rawWaveform = vcos[i].getOutput(); + const float scaledWaveform = rawWaveform * gain; + mix += scaledWaveform; + _out[i] = scaledWaveform; + TBase::outputs[VCO1_OUTPUT + i].value = rawWaveform; + } + TBase::outputs[MIX_OUTPUT].value = mix; +} + +template +inline void EV3::stepVCOs() +{ + for (int i = 0; i < 3; ++i) { + vcos[i].step(); + } +} + +template +inline void EV3::processPitchInputs() +{ + float lastFM = 0; + for (int osc = 0; osc < 3; ++osc) { + assert(osc >= 0 && osc <= 2); + const int delta = osc * (OCTAVE2_PARAM - OCTAVE1_PARAM); + + const float cv = getInput(osc, CV1_INPUT, CV2_INPUT, CV3_INPUT); + const float finePitch = TBase::params[FINE1_PARAM + delta].value / 12.0f; + const float semiPitch = TBase::params[SEMI1_PARAM + delta].value / 12.0f; + // const float fm = getInput(osc, FM1_INPUT, FM2_INPUT, FM3_INPUT); + + float pitch = 1.0f + roundf(TBase::params[OCTAVE1_PARAM + delta].value) + + semiPitch + + finePitch; + pitch += cv; + + float fmCombined = 0; // The final, scaled, value (post knob + if (TBase::inputs[FM1_INPUT + osc].active) { + const float fm = TBase::inputs[FM1_INPUT + osc].value; + // const float fmKnob = TBase::params[FM1_PARAM + delta].value; + //const float fmDepth = LookupTable::lookup(*audioTaper, fmKnob, false); + const float fmDepth = rack::quadraticBipolar(TBase::params[FM1_PARAM + delta].value); + + fmCombined = (fmDepth * fm); +#if 0 + static float biggest = 0; + if (fmCombined > biggest) { + printf("CV =%f knob = %f depth=%f combined=%f\n", fm, fmKnob, fmDepth, fmCombined); + fflush(stdout); + biggest = fmCombined; + } +#endif + + // pitch += (fmDepth * fm * 12); + } else { + fmCombined = lastFM; + } + pitch += fmCombined; + lastFM = fmCombined; + + + const float q = float(log2(261.626)); // move up to pitch range of EvenVCO + pitch += q; + const float freq = expLookup(pitch); + _freq[osc] = freq; + vcos[osc].setNormalizedFreq(TBase::engineGetSampleTime() * freq, + TBase::engineGetSampleTime()); + } +} + + + diff --git a/plugins/community/repos/squinkylabs-plug1/composites/FrequencyShifter.h b/plugins/community/repos/squinkylabs-plug1/composites/FrequencyShifter.h index 67456eb1..e29647f1 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/FrequencyShifter.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/FrequencyShifter.h @@ -67,7 +67,7 @@ public: /** * Main processing entry point. Called every sample */ - void step(); + void step() override; typedef float T; // use floats for all signals T freqRange = 5; // the freq range switch diff --git a/plugins/community/repos/squinkylabs-plug1/composites/FunVCOComposite.h b/plugins/community/repos/squinkylabs-plug1/composites/FunVCOComposite.h new file mode 100644 index 00000000..91ee929d --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/FunVCOComposite.h @@ -0,0 +1,107 @@ +#pragma once + + +#include "FunVCO.h" +//#define _ORIGVCO + +template +class FunVCOComposite : public TBase +{ +public: + FunVCOComposite() + { + init(); + } + FunVCOComposite(struct Module * module) : TBase(module) + { + init(); + } + enum ParamIds + { + MODE_PARAM, + SYNC_PARAM, + FREQ_PARAM, + FINE_PARAM, + FM_PARAM, + PW_PARAM, + PWM_PARAM, + NUM_PARAMS + }; + enum InputIds + { + PITCH_INPUT, + FM_INPUT, + SYNC_INPUT, + PW_INPUT, + NUM_INPUTS + }; + enum OutputIds + { + SIN_OUTPUT, + TRI_OUTPUT, + SAW_OUTPUT, + SQR_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds + { + NUM_LIGHTS + }; + + + void step() override; + void init() + { + oscillator.init(); + } + + void setSampleRate(float rate) + { + oscillator.sampleTime = 1.f / rate; + } + +private: +#ifdef _ORIGVCO + VoltageControlledOscillatorOrig<16, 16> oscillator; +#else + VoltageControlledOscillator<16, 16> oscillator; +#endif +}; + +template +inline void FunVCOComposite::step() +{ + oscillator.analog = TBase::params[MODE_PARAM].value > 0.0f; + oscillator.soft = TBase::params[SYNC_PARAM].value <= 0.0f; + + float pitchFine = 3.0f * quadraticBipolar(TBase::params[FINE_PARAM].value); + float pitchCv = 12.0f * TBase::inputs[PITCH_INPUT].value; + if (TBase::inputs[FM_INPUT].active) { + pitchCv += quadraticBipolar(TBase::params[FM_PARAM].value) * 12.0f * TBase::inputs[FM_INPUT].value; + } + + oscillator.setPitch(TBase::params[FREQ_PARAM].value, pitchFine + pitchCv); + + + oscillator.setPulseWidth(TBase::params[PW_PARAM].value + TBase::params[PWM_PARAM].value * TBase::inputs[PW_INPUT].value / 10.0f); + oscillator.syncEnabled = TBase::inputs[SYNC_INPUT].active; + +#ifndef _ORIGVCO + oscillator.sawEnabled = TBase::outputs[SAW_OUTPUT].active; + oscillator.sinEnabled = TBase::outputs[SIN_OUTPUT].active; + oscillator.sqEnabled = TBase::outputs[SQR_OUTPUT].active; + oscillator.triEnabled = TBase::outputs[TRI_OUTPUT].active; +#endif + + oscillator.process(TBase::engineGetSampleTime(), TBase::inputs[SYNC_INPUT].value); + // Set output + if (TBase::outputs[SIN_OUTPUT].active) + TBase::outputs[SIN_OUTPUT].value = 5.0f * oscillator.sin(); + if (TBase::outputs[TRI_OUTPUT].active) + TBase::outputs[TRI_OUTPUT].value = 5.0f * oscillator.tri(); + if (TBase::outputs[SAW_OUTPUT].active) + TBase::outputs[SAW_OUTPUT].value = 5.0f * oscillator.saw(); + if (TBase::outputs[SQR_OUTPUT].active) + TBase::outputs[SQR_OUTPUT].value = 5.0f * oscillator.sqr(); + +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/composites/GMR.h b/plugins/community/repos/squinkylabs-plug1/composites/GMR.h new file mode 100644 index 00000000..284e02c6 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/GMR.h @@ -0,0 +1,88 @@ + +#pragma once +#include "ObjectCache.h" +#include "GenerativeTriggerGenerator.h" +#include "TriggerOutput.h" + +#include + +/** + */ +template +class GMR : public TBase +{ +public: + GMR(struct Module * module) : TBase(module), inputClockProcessing(true) + { + } + GMR() : TBase(), inputClockProcessing(true) + { + } + void setSampleRate(float rate) + { + reciprocalSampleRate = 1 / rate; + } + + // must be called after setSampleRate + void init(); + + enum ParamIds + { + NUM_PARAMS + }; + + enum InputIds + { + CLOCK_INPUT, + NUM_INPUTS + }; + + enum OutputIds + { + TRIGGER_OUTPUT, + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + +private: + float reciprocalSampleRate = 0; + std::shared_ptr gtg; + GateTrigger inputClockProcessing; + TriggerOutput outputProcessing; +}; + + + +template +inline void GMR::init() +{ + StochasticGrammarDictionary::Grammar grammar = StochasticGrammarDictionary::getGrammar(0); + gtg = std::make_shared( + AudioMath::random(), + grammar.rules, + grammar.numRules, + grammar.firstRule); +} + +template +inline void GMR::step() +{ + bool outClock = false; + float inClock = TBase::inputs[CLOCK_INPUT].value; + inputClockProcessing.go(inClock); + if (inputClockProcessing.trigger()) { + outClock = gtg->clock(); + } + outputProcessing.go(outClock); + TBase::outputs[TRIGGER_OUTPUT].value = outputProcessing.get(); +} + diff --git a/plugins/community/repos/squinkylabs-plug1/composites/Gray.h b/plugins/community/repos/squinkylabs-plug1/composites/Gray.h new file mode 100644 index 00000000..b5b1e234 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/Gray.h @@ -0,0 +1,141 @@ +#pragma once + +#include "GateTrigger.h" + +static const uint8_t gtable[256] = +{ +0, 1, 3, 2, 6, 7, 5, 4, 12, 13, 15, 14, 10, 11, 9, 8, +24, 25, 27, 26, 30, 31, 29, 28, 20, 21, 23, 22, 18, 19, 17, 16, +48, 49, 51, 50, 54, 55, 53, 52, 60, 61, 63, 62, 58, 59, 57, 56, +40, 41, 43, 42, 46, 47, 45, 44, 36, 37, 39, 38, 34, 35, 33, 32, +96, 97, 99, 98, 102, 103, 101, 100, 108, 109, 111, 110, 106, 107, 105, 104, +120, 121, 123, 122, 126, 127, 125, 124, 116, 117, 119, 118, 114, 115, 113, 112, +80, 81, 83, 82, 86, 87, 85, 84, 92, 93, 95, 94, 90, 91, 89, 88, +72, 73, 75, 74, 78, 79, 77, 76, 68, 69, 71, 70, 66, 67, 65, 64, +192, 193, 195, 194, 198, 199, 197, 196, 204, 205, 207, 206, 202, 203, 201, 200, +216, 217, 219, 218, 222, 223, 221, 220, 212, 213, 215, 214, 210, 211, 209, 208, +240, 241, 243, 242, 246, 247, 245, 244, 252, 253, 255, 254, 250, 251, 249, 248, +232, 233, 235, 234, 238, 239, 237, 236, 228, 229, 231, 230, 226, 227, 225, 224, +160, 161, 163, 162, 166, 167, 165, 164, 172, 173, 175, 174, 170, 171, 169, 168, +184, 185, 187, 186, 190, 191, 189, 188, 180, 181, 183, 182, 178, 179, 177, 176, +144, 145, 147, 146, 150, 151, 149, 148, 156, 157, 159, 158, 154, 155, 153, 152, +136, 137, 139, 138, 142, 143, 141, 140, 132, 133, 135, 134, 130, 131, 129, 128 +}; + +static const uint8_t bgtable[256] = +{ +0x00, 0x01, 0x03, 0x02, 0x06, 0x0E, 0x0A, 0x0B, 0x09, 0x0D, 0x0F, 0x07, 0x05, 0x04, 0x0C, 0x08, +0x18, 0x1C, 0x14, 0x15, 0x17, 0x1F, 0x3F, 0x37, 0x35, 0x34, 0x3C, 0x38, 0x28, 0x2C, 0x24, 0x25, +0x27, 0x2F, 0x2D, 0x29, 0x39, 0x3D, 0x1D, 0x19, 0x1B, 0x3B, 0x2B, 0x2A, 0x3A, 0x1A, 0x1E, 0x16, +0x36, 0x3E, 0x2E, 0x26, 0x22, 0x32, 0x12, 0x13, 0x33, 0x23, 0x21, 0x31, 0x11, 0x10, 0x30, 0x20, +0x60, 0x70, 0x50, 0x51, 0x71, 0x61, 0x63, 0x73, 0x53, 0x52, 0x72, 0x62, 0x66, 0x6E, 0x7E, 0x76, +0x56, 0x5E, 0x5A, 0x7A, 0x6A, 0x6B, 0xEB, 0xEA, 0xFA, 0xDA, 0xDE, 0xD6, 0xF6, 0xFE, 0xEE, 0xE6, +0xE2, 0xF2, 0xD2, 0xD3, 0xF3, 0xE3, 0xE1, 0xF1, 0xD1, 0xD0, 0xF0, 0xE0, 0xA0, 0xB0, 0x90, 0x91, +0xB1, 0xA1, 0xA3, 0xB3, 0x93, 0x92, 0xB2, 0xA2, 0xA6, 0xAE, 0xBE, 0xB6, 0x96, 0x9E, 0x9A, 0xBA, +0xAA, 0xAB, 0xBB, 0x9B, 0x99, 0x9D, 0xDD, 0xD9, 0xDB, 0xFB, 0x7B, 0x5B, 0x59, 0x5D, 0x7D, 0x79, +0xF9, 0xFD, 0xBD, 0xB9, 0xA9, 0xE9, 0x69, 0x6D, 0x6F, 0x67, 0x65, 0x64, 0xE4, 0xE5, 0xE7, 0xEF, +0xED, 0xAD, 0xAF, 0xA7, 0xA5, 0xA4, 0xAC, 0xEC, 0x6C, 0x68, 0xE8, 0xA8, 0xB8, 0xF8, 0x78, 0x7C, +0xFC, 0xBC, 0xB4, 0xB5, 0xB7, 0xF7, 0xF5, 0xF4, 0x74, 0x75, 0x77, 0x7F, 0xFF, 0xBF, 0x9F, 0xDF, +0x5F, 0x57, 0x55, 0x54, 0xD4, 0xD5, 0xD7, 0x97, 0x95, 0x94, 0x9C, 0xDC, 0x5C, 0x58, 0xD8, 0x98, +0x88, 0xC8, 0x48, 0x4C, 0xCC, 0x8C, 0x84, 0xC4, 0x44, 0x45, 0xC5, 0x85, 0x87, 0xC7, 0x47, 0x4F, +0xCF, 0x8F, 0x8D, 0xCD, 0x4D, 0x49, 0xC9, 0x89, 0x8B, 0xCB, 0x4B, 0x4A, 0xCA, 0x8A, 0x8E, 0xCE, +0x4E, 0x46, 0xC6, 0x86, 0x82, 0xC2, 0x42, 0x43, 0xC3, 0x83, 0x81, 0xC1, 0x41, 0x40, 0xC0, 0x80 +}; + +template +class Gray : public TBase +{ +public: + Gray(struct Module * module) : TBase(module), gateTrigger(true) + { + init(); + } + Gray() : TBase(), gateTrigger(true) + { + init(); + } + + enum ParamIds + { + PARAM_CODE, + NUM_PARAMS + }; + + enum InputIds + { + INPUT_CLOCK, + NUM_INPUTS + }; + + enum OutputIds + { + OUTPUT_MIXED, + OUTPUT_0, + OUTPUT_1, + OUTPUT_2, + OUTPUT_3, + OUTPUT_4, + OUTPUT_5, + OUTPUT_6, + OUTPUT_7, + NUM_OUTPUTS + }; + + enum LightIds + { + LIGHT_0, + LIGHT_1, + LIGHT_2, + LIGHT_3, + LIGHT_4, + LIGHT_5, + LIGHT_6, + LIGHT_7, + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + +private: + uint8_t counterValue = 0; + GateTrigger gateTrigger; + int c = 0; + void init(); +}; + + +template +void Gray::init() +{ + // Init all the outputs to zero, + // since they don't all get update until a clock. + for (int i=0; i +void Gray::step() +{ + gateTrigger.go(TBase::inputs[INPUT_CLOCK].value); + if (!gateTrigger.trigger()) { + return; + } + ++counterValue; + + const uint8_t* table = TBase::params[PARAM_CODE].value > .5 ? gtable : bgtable; + + const auto g0 = table[counterValue]; + auto g = g0; + for (int i=0; i<8; ++i) { + bool b = g & 1; + TBase::lights[i + LIGHT_0].value = b ? 10 : 0; + TBase::outputs[i + OUTPUT_0].value = b ? 10 : 0; + g >>= 1; + } + TBase::outputs[OUTPUT_MIXED].value = (float) g0/25.f; +} diff --git a/plugins/community/repos/squinkylabs-plug1/composites/LFN.h b/plugins/community/repos/squinkylabs-plug1/composites/LFN.h new file mode 100644 index 00000000..d5003422 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/LFN.h @@ -0,0 +1,247 @@ + +#pragma once + +#include "ButterworthFilterDesigner.h" +#include "Decimator.h" +#include "GraphicEq.h" +#include "LowpassFilter.h" +#include "BiquadParams.h" +#include "BiquadState.h" +#include "BiquadFilter.h" +#include "ObjectCache.h" +#include + +/** + * Noise generator feeding a graphic equalizer. + * Calculated at very low sample rate, then re-sampled + * up to audio rate. + * + * Below assumes 44k SR. TODO: other rates. + * + * We first design the EQ around bands of 100, 200, 400, 800, + * 1600. EQ gets noise. + * + * Then output of EQ is re-sampled up by a factor of 100 + * to bring the first band down to 1hz. + * or : decimation factor = 100 * (fs) / 44100. + * + * A butterworth lowpass then removes the re-sampling artifacts. + * Otherwise these images bring in high frequencies that we + * don't want. + * + * Cutoff for the filter can be as low as the top of the eq, + * which is 3.2khz. 44k/3.2k is about 10, + * so fc/fs can be 1/1000. + * + * or : fc = (fs / 44100) / 1000; + * + * (had been using fc/fs = float(1.0 / (44 * 100.0)));) + * + * Design for R = root freq (was 1 Hz, above) + * EQ first band at E (was 100 Hz, above) + * + * Decimation divider = E / R + * + * Imaging filter fc = 3.2khz / decimation-divider + * fc/fs = 3200 * (reciprocal sr) / decimation-divider. + * + * Experiment: let's use those values and compare to what we had been using. + * result: not too far off. + * + * make a range/base control. map -5 to +5 into 1/10 Hz to 2 Hz rate. Can use regular + * functions, since we won't calc that often. + */ + +template +class LFN : public TBase +{ +public: + + LFN(struct Module * module) : TBase(module) + { + } + LFN() : TBase() + { + } + + void setSampleTime(float time) + { + reciprocalSampleRate = time; + updateLPF(); + } + + /** + * re-calc everything that changes with sample + * rate. Also everything that depends on baseFrequency. + * + * Only needs to be called once. + */ + void init(); + + enum ParamIds + { + EQ0_PARAM, + EQ1_PARAM, + EQ2_PARAM, + EQ3_PARAM, + EQ4_PARAM, + FREQ_RANGE_PARAM, + NUM_PARAMS + }; + + enum InputIds + { + EQ0_INPUT, + EQ1_INPUT, + EQ2_INPUT, + EQ3_INPUT, + EQ4_INPUT, + NUM_INPUTS + }; + + enum OutputIds + { + OUTPUT, + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + + float getBaseFrequency() const + { + return baseFrequency; + } + + /** + * This lets the butterworth get re-calculated on the UI thread. + * We can't do it on the audio thread, because it calls malloc. + */ + void pollForChangeOnUIThread(); + +private: + float reciprocalSampleRate = 0; + + ::Decimator decimator; + + GraphicEq2<5> geq; + + /** + * Template type for butterworth reconstruction filter + * Tried double for best low frequency performance. It's + * probably overkill, but calculates plenty fast. + */ + using TButter = double; + BiquadParams lpfParams; + BiquadState lpfState; + + /** + * Frequency, in Hz, of the lowest band in the graphic EQ + */ + float baseFrequency = 1; + + /** + * The last value baked by the LPF filter calculation + * done on the UI thread. + */ + float lastBaseFrequencyParamValue = -100; + + std::default_random_engine generator{57}; + std::normal_distribution distribution{-1.0, 1.0}; + float noise() + { + return (float) distribution(generator); + } + + /** + * Must be called after baseFrequency is updated. + * re-calculates the butterworth lowpass. + */ + void updateLPF(); + + /** + * scaling function for the range / base frequency knob + * map knob range from .1 Hz to 2.0 Hz + */ + std::function rangeFunc = + {AudioMath::makeFunc_Exp(-5, 5, .1, 2)}; + + /** + * Audio taper for the EQ gains. Arbitrary max value selected + * to give "good" output level. + */ + AudioMath::SimpleScaleFun gainScale = + {AudioMath::makeSimpleScalerAudioTaper(0, 35)}; +}; + +template +inline void LFN::pollForChangeOnUIThread() +{ + if (lastBaseFrequencyParamValue != TBase::params[FREQ_RANGE_PARAM].value) { + lastBaseFrequencyParamValue = TBase::params[FREQ_RANGE_PARAM].value; + baseFrequency = float(rangeFunc(lastBaseFrequencyParamValue)); + + updateLPF(); // now get the filters updated + } +} + +template +inline void LFN::init() +{ + updateLPF(); +} + +template +inline void LFN::updateLPF() +{ + assert(reciprocalSampleRate > 0); + // decimation must be 100hz (what our EQ is designed at) + // divided by base. + const float decimationDivider = float(100.0 / baseFrequency); + decimator.setDecimationRate(decimationDivider); + + // calculate lpFc ( Fc / sr) + // Imaging filter fc = 3.2khz / decimation-divider + // fc/fs = 3200 * (reciprocal sr) / decimation-divider. + const float lpFc = 3200 * reciprocalSampleRate / decimationDivider; + ButterworthFilterDesigner::designThreePoleLowpass( + lpfParams, lpFc); +} + +template +inline void LFN::step() +{ + // Let's only check the inputs every 4 samples. Still plenty fast, but + // get the CPU usage down really far. + static int count = 0; + if (count++ > 4) { + count = 0; + const int numEqStages = geq.getNumStages(); + for (int i = 0; i < numEqStages; ++i) { + auto paramNum = i + EQ0_PARAM; + auto cvNum = i + EQ0_INPUT; + const float gainParamKnob = TBase::params[paramNum].value; + const float gainParamCV = TBase::inputs[cvNum].value; + const float gain = gainScale(gainParamKnob, gainParamCV); + geq.setGain(i, gain); + } + } + + bool needsData; + TButter x = decimator.clock(needsData); + x = BiquadFilter::run(x, lpfState, lpfParams); + if (needsData) { + const float z = geq.run(noise()); + decimator.acceptData(z); + } + + TBase::outputs[OUTPUT].value = (float) x; +} + diff --git a/plugins/community/repos/squinkylabs-plug1/composites/Shaper.h b/plugins/community/repos/squinkylabs-plug1/composites/Shaper.h new file mode 100644 index 00000000..12b81305 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/Shaper.h @@ -0,0 +1,383 @@ +#pragma once + +#include "IIRUpsampler.h" +#include "IIRDecimator.h" +#include "LookupTable.h" +#include "AsymWaveShaper.h" +#include "ObjectCache.h" + +/** +Version 1, cpu usage: + full wave: 95 + crush: 281 + asy:149 + fold: 102 + fold2: 154 + + X4 on input scanning: + full wave: 85 + crush: 278 + asy:163 + fold: 89 + fold2: 154 + + inline: + fw: 75 + crush: 87 + asy: 112 + fold: 77 + fold2: 136 + + + */ +template +class Shaper : public TBase +{ +public: + Shaper(struct Module * module) : TBase(module) + { + init(); + } + Shaper() : TBase() + { + init(); + } + + enum class Shapes + { + AsymSpline, + Clip, + EmitterCoupled, + FullWave, + HalfWave, + Fold, + Fold2, + Crush, + Invalid + }; + + static const char* getString(Shapes); + + enum ParamIds + { + PARAM_SHAPE, + PARAM_GAIN, + PARAM_GAIN_TRIM, + PARAM_OFFSET, + PARAM_OFFSET_TRIM, + PARAM_OVERSAMPLE, + NUM_PARAMS + }; + + enum InputIds + { + INPUT_AUDIO, + INPUT_GAIN, + INPUT_OFFSET, + NUM_INPUTS + }; + + enum OutputIds + { + OUTPUT_AUDIO, + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + + float _gain = 0; + float _offset = 0; + float _gainInput = 0; + +private: + std::shared_ptr> audioTaper = {ObjectCache::getAudioTaper()}; + std::shared_ptr> sinLookup = {ObjectCache::getSinLookup()}; + AudioMath::ScaleFun scaleGain = AudioMath::makeLinearScaler(0, 1); + AudioMath::ScaleFun scaleOffset = AudioMath::makeLinearScaler(-5, 5); + + // domain starts at 2. + // std::shared_ptr> exp2Lookup = {ObjectCache::getExp2()}; + + const static int maxOversample = 16; + int curOversample = 16; + void init(); + IIRUpsampler up; + IIRDecimator dec; + std::shared_ptr> tanhLookup; + AsymWaveShaper asymShaper; + int cycleCount = 0; + Shapes shape = Shapes::Clip; + int asymCurveindex = 0; + + void processCV(); + void setOversample(); + void processBuffer(float *) const; +}; + +template +const char* Shaper::getString(Shapes shape) +{ + const char* ret = ""; + switch (shape) { + case Shapes::Clip: + ret = "Clip"; + break; + case Shapes::EmitterCoupled: + ret = "Emitter Coupled"; + break; + case Shapes::FullWave: + ret = "Full Wave"; + break; + case Shapes::HalfWave: + ret = "Half Wave"; + break; + case Shapes::Fold: + ret = "Folder"; + break; + case Shapes::Fold2: + ret = "Folder II"; + break; + case Shapes::AsymSpline: + ret = "Smooth"; + break; + case Shapes::Crush: + ret = "Crush"; + break; + default: + assert(false); + ret = "error"; + } + return ret; +} + + +template +void Shaper::init() +{ + setOversample(); + tanhLookup = ObjectCache::getTanh5(); +} + +template +void Shaper::setOversample() +{ + // float fc = .25 / float(oversample); + up.setup(curOversample); + dec.setup(curOversample); +} + +template +void Shaper::processCV() +{ + int oversampleCode = (int) std::round(TBase::params[PARAM_OVERSAMPLE].value); + switch (oversampleCode) { + case 0: + curOversample = 16; + setOversample(); + break; + case 1: + curOversample = 4; + setOversample(); + break; + case 2: + curOversample = 1; + break; + default: + assert(false); + } + + // 0..1 + _gainInput = scaleGain( + TBase::inputs[INPUT_GAIN].value, + TBase::params[PARAM_GAIN].value, + TBase::params[PARAM_GAIN_TRIM].value); + + _gain = 5 * LookupTable::lookup(*audioTaper, _gainInput, false); + + + // -5 .. 5 + const float offsetInput = scaleOffset( + TBase::inputs[INPUT_OFFSET].value, + TBase::params[PARAM_OFFSET].value, + TBase::params[PARAM_OFFSET_TRIM].value); + + _offset = offsetInput; + + const int iShape = (int) std::round(TBase::params[PARAM_SHAPE].value); + shape = Shapes(iShape); + + const float sym = .1f * (5 - _offset); + asymCurveindex = (int) round(sym * 15.1); // This math belongs in the shaper +} + +template +void Shaper::step() +{ + if (--cycleCount < 0) { + cycleCount = 7; + processCV(); + } + + float buffer[maxOversample]; + float input = TBase::inputs[INPUT_AUDIO].value; + // const float rawInput = input; + + // TODO: maybe add offset after gain? + if (shape != Shapes::AsymSpline) { + input += _offset; + } + if (shape != Shapes::Crush) { + input *= _gain; + } + + if (curOversample != 1) { + up.process(buffer, input); + } else { + buffer[0] = input; + } + + processBuffer(buffer); + float output; + if (curOversample != 1) { + output = dec.process(buffer); + } else { + output = buffer[0]; + } + TBase::outputs[OUTPUT_AUDIO].value = output; + // printf("in step input = %f, output = %f\n", input, output); +} + +#if 1 +template +void Shaper::processBuffer(float* buffer) const +{ + switch (shape) { + case Shapes::FullWave: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x = std::abs(x); + x = std::min(x, 10.f); + buffer[i] = x; + } + break; + case Shapes::AsymSpline: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x *= .15f; + x = asymShaper.lookup(x, asymCurveindex); + x *= 6.1f; + buffer[i] = x; + } + break; + case Shapes::Clip: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x *= 3; + x = std::min(3.f, x); + x = std::max(-3.f, x); + x *= 1.2f; + buffer[i] = x; + } + break; + case Shapes::EmitterCoupled: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x *= .25; + x = LookupTable::lookup(*tanhLookup.get(), x, true); + x *= 5.4f; + buffer[i] = x; + } + break; + + case Shapes::HalfWave: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x = std::max(0.f, x); + x *= 1.4f; + x = std::min(x, 10.f); + buffer[i] = x; + } + break; + case Shapes::Fold: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x = AudioMath::fold(x); + x *= 5.6f; + buffer[i] = x; + } + break; + case Shapes::Fold2: + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; + x = .3f * AudioMath::fold(x); + if (x > 0) { + x = LookupTable::lookup(*sinLookup, 1.3f * x, false); + } else { + x = -LookupTable::lookup(*sinLookup, -x, false); + } + if (x > 0) x = std::sqrt(x); + x *= 4.4f; + buffer[i] = x; + } + break; + + case Shapes::Crush: + { + float invGain = 1 + (1 - _gainInput) * 100; //0..10 + invGain *= .01f; + invGain = std::max(invGain, .09f); + assert(invGain >= .09); + for (int i = 0; i < curOversample; ++i) { + float x = buffer[i]; // for crush, no gain has been applied + +#if 0 + if (invGain < 1) { + printf("invg gain = %f\n", invGain); + fflush(stdout); + invGain = 1; + + } +#endif + // printf("crush, x=%.2f, gi=%.2f invGain = %.2f", x, _gainInput, invGain); + + x *= invGain; + x = std::round(x + .5f) - .5f; + + // printf("invGain = %f, x = %f\n", invGain, x); + // printf(" mult=%.2f", x); + x /= invGain; + // printf("after div back %f\n", x); fflush(stdout); + // printf(" dv=%.2f\n", x); fflush(stdout); + buffer[i] = x; + } + } + break; + + + + default: + assert(false); + } + +} +#else +template +void Shaper::step() +{ + float buffer[oversample]; + float input = TBase::inputs[INPUT_AUDIO].value; + + up.process(buffer, input); + + const float output = dec.process(buffer); + TBase::outputs[OUTPUT_AUDIO].value = output; +} +#endif diff --git a/plugins/community/repos/squinkylabs-plug1/composites/Super.h b/plugins/community/repos/squinkylabs-plug1/composites/Super.h new file mode 100644 index 00000000..34cf708a --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/Super.h @@ -0,0 +1,180 @@ + +#pragma once + +#include "ButterworthLookup.h" +#include "BiquadState.h" +#include "BiquadFilter.h" + +#include "ObjectCache.h" + + +template +class Super : public TBase +{ +public: + + Super(struct Module * module) : TBase(module) + { + } + Super() : TBase() + { + } + + /** + * re-calc everything that changes with sample + * rate. Also everything that depends on baseFrequency. + * + * Only needs to be called once. + */ + void init(); + + enum ParamIds + { + OCTAVE_PARAM, + SEMI_PARAM, + FINE_PARAM, + DETUNE_PARAM, + MIX_PARAM, + NUM_PARAMS + }; + + enum InputIds + { + CV_INPUT, + GATE_INPUT, + DEBUG_INPUT, + NUM_INPUTS + }; + + enum OutputIds + { + MAIN_OUTPUT, + DEBUG_OUTPUT, + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + +private: + static const int numSaws = 7; + + float phase[numSaws] = {0}; + float phaseInc[numSaws] = {0}; + float globalPhaseInc = 0; + + std::function expLookup = + ObjectCache::getExp2Ex(); + std::shared_ptr> audioTaper = + ObjectCache::getAudioTaper(); + + void updatePhaseInc(); + void updateAudio(); + +// TODO: make static + float const detuneFactors[numSaws] = { + .89f, + .94f, + .98f, + 1.f, + 1.02f, + 1.06f, + 1.107f + }; + + // For debugging filters + BiquadState filterState; + BiquadParams filterParams; + void updateHPFilters(); + ButterworthLookup4PHP filterLookup; + +}; + + +template +inline void Super::init() +{ +} + +template +inline void Super::updatePhaseInc() +{ + + const float cv = TBase::inputs[CV_INPUT].value; + + const float finePitch = TBase::params[FINE_PARAM].value / 12.0f; + const float semiPitch = TBase::params[SEMI_PARAM].value / 12.0f; + + + float pitch = 1.0f + roundf(TBase::params[OCTAVE_PARAM].value) + + semiPitch + + finePitch; + + pitch += cv; + + const float q = float(log2(261.626)); // move up to pitch range of even vco + pitch += q; + const float freq = expLookup(pitch); + globalPhaseInc = TBase::engineGetSampleTime() * freq; + + for (int i=0; i +inline void Super::updateAudio() +{ + float mix = 0; + for (int i=0; i 1) { + phase[i] -= 1; + } + if (phase[i] > 1) { + printf("hey, phase too big %f\n", phase[i]); fflush(stdout); + } + if (phase[i] < 0) { + + printf("hey, phase too bismallg %f\n", phase[i]); fflush(stdout); + } + mix += phase[i]; + } + + // mix = phase[3]; // just for test + + mix *= 2; + const float output = BiquadFilter::run(mix, filterState, filterParams); + TBase::outputs[MAIN_OUTPUT].value = output; +} + +template +inline void Super::updateHPFilters() +{ + filterLookup.get(filterParams, globalPhaseInc); +#if 0 + const float input = TBase::inputs[DEBUG_INPUT].value; + filterLookup.get(filterParams, globalPhaseInc); + const float output = BiquadFilter::run(input, filterState, filterParams); + TBase::outputs[DEBUG_OUTPUT].value = output * 10; +#endif +} + +template +inline void Super::step() +{ + updatePhaseInc(); + updateHPFilters(); + updateAudio(); +} + diff --git a/plugins/community/repos/squinkylabs-plug1/composites/TestComposite.h b/plugins/community/repos/squinkylabs-plug1/composites/TestComposite.h index 3f68162a..3648c04a 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/TestComposite.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/TestComposite.h @@ -13,7 +13,7 @@ public: TestComposite() : inputs(20), outputs(20), - params(20), + params(40), lights(20) { @@ -32,7 +32,9 @@ public: { value = (brightness > 0.f) ? brightness * brightness : 0.f; } - void setBrightnessSmooth(float brightness); + void setBrightnessSmooth(float brightness) + { + } }; struct Input @@ -54,7 +56,7 @@ public: /** Voltage of the port. Write-only by Module */ float value = 0.0; /** Whether a wire is plugged in */ - bool active = false; + bool active = true; Light plugLights[2]; }; @@ -62,4 +64,18 @@ public: std::vector outputs; std::vector params; std::vector lights; + + float engineGetSampleTime() + { + return 1.0f / 44100.0f; + } + + float engineGetSampleRate() + { + return 44100.f; + } + + virtual void step() + { + } }; diff --git a/plugins/community/repos/squinkylabs-plug1/composites/Tremolo.h b/plugins/community/repos/squinkylabs-plug1/composites/Tremolo.h index 57fd03af..ba710374 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/Tremolo.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/Tremolo.h @@ -14,10 +14,10 @@ template class Tremolo : public TBase { public: - Tremolo(struct Module * module) : TBase(module) + Tremolo(struct Module * module) : TBase(module), gateTrigger(true) { } - Tremolo() : TBase() + Tremolo() : TBase(), gateTrigger(true) { } void setSampleRate(float rate) @@ -71,7 +71,7 @@ public: /** * Main processing entry point. Called every sample */ - void step(); + void step() override; private: @@ -80,7 +80,7 @@ private: float reciprocalSampleRate = 0; AsymRampShaperParams rampShaper; - std::shared_ptr> exp2 = ObjectCache::getExp2(); + std::shared_ptr> exp2 = ObjectCache::getExp2(); // make some bootstrap scalers AudioMath::ScaleFun scale_rate; @@ -126,7 +126,7 @@ inline void Tremolo::step() clock.setMultiplier(clockMul); - + const float shape = scale_shape( TBase::inputs[LFO_SHAPE_INPUT].value, @@ -160,7 +160,7 @@ inline void Tremolo::step() clock.setFreeRunFreq(scaledRate * reciprocalSampleRate); } - + // For now, call setup every sample. will eat a lot of cpu AsymRampShaper::setup(rampShaper, skew, phase); diff --git a/plugins/community/repos/squinkylabs-plug1/composites/VocalAnimator.h b/plugins/community/repos/squinkylabs-plug1/composites/VocalAnimator.h index 1a18c209..57d03a67 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/VocalAnimator.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/VocalAnimator.h @@ -91,7 +91,7 @@ public: }; void init(); - void step(); + void step() override; T modulatorOutput[numModOutputs]; // The frequency inputs to the filters, exposed for testing. @@ -144,10 +144,10 @@ inline void VocalAnimator::init() normalizedFilterFreq[i] = nominalFilterCenterHz[i] * reciprocalSampleRate; } - scale0_1 = AudioMath::makeBipolarAudioScaler(0, 1); // full CV range -> 0..1 - scalem2_2 = AudioMath::makeBipolarAudioScaler(-2, 2); // full CV range -> -2..2 - scaleQ = AudioMath::makeBipolarAudioScaler(.71f, 21); - scalen5_5 = AudioMath::makeBipolarAudioScaler(-5, 5); + scale0_1 = AudioMath::makeScalerWithBipolarAudioTrim(0, 1); // full CV range -> 0..1 + scalem2_2 = AudioMath::makeScalerWithBipolarAudioTrim(-2, 2); // full CV range -> -2..2 + scaleQ = AudioMath::makeScalerWithBipolarAudioTrim(.71f, 21); + scalen5_5 = AudioMath::makeScalerWithBipolarAudioTrim(-5, 5); // make table of 2 ** x expLookup = ObjectCache::getExp2(); diff --git a/plugins/community/repos/squinkylabs-plug1/composites/VocalFilter.h b/plugins/community/repos/squinkylabs-plug1/composites/VocalFilter.h index 4e0b1d11..33e99c1a 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/VocalFilter.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/VocalFilter.h @@ -72,7 +72,7 @@ public: }; void init(); - void step(); + void step() override; float reciprocalSampleRate; @@ -156,7 +156,7 @@ inline void VocalFilter::step() for (int i = LED_A; i <= LED_U; ++i) { if (i == iVowel) { TBase::lights[i].value = ((i + 1) - fVowel) * 1; - TBase::lights[i+1].value = (fVowel - i) * 1; + TBase::lights[i + 1].value = (fVowel - i) * 1; } else if (i != (iVowel + 1)) { TBase::lights[i].value = 0; } @@ -199,7 +199,7 @@ inline void VocalFilter::step() T modifiedGainDB = (1 - gainDB) * brightness + gainDB; // TODO: why is normalizedBW in this equation? - const T gain =LookupTable::lookup(*db2GainLookup, modifiedGainDB) * normalizedBw; + const T gain = LookupTable::lookup(*db2GainLookup, modifiedGainDB) * normalizedBw; T fcFinalLog = fcLog + fPara; T fcFinal = LookupTable::lookup(*expLookup, fcFinalLog); diff --git a/plugins/community/repos/squinkylabs-plug1/composites/WidgetComposite.h b/plugins/community/repos/squinkylabs-plug1/composites/WidgetComposite.h index b1f3bfc7..d0e71656 100644 --- a/plugins/community/repos/squinkylabs-plug1/composites/WidgetComposite.h +++ b/plugins/community/repos/squinkylabs-plug1/composites/WidgetComposite.h @@ -11,12 +11,26 @@ public: inputs(parent->inputs), outputs(parent->outputs), params(parent->params), - lights(parent->lights) + lights(parent->lights), + module(parent) { } + virtual void step() + { + }; + float engineGetSampleRate() + { + return ::engineGetSampleRate(); + } + float engineGetSampleTime() + { + return ::engineGetSampleTime(); + } protected: std::vector& inputs; std::vector& outputs; std::vector& params; std::vector& lights; +private: + Module * const module; }; diff --git a/plugins/community/repos/squinkylabs-plug1/composites/daveguide.h b/plugins/community/repos/squinkylabs-plug1/composites/daveguide.h new file mode 100644 index 00000000..9972b251 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/composites/daveguide.h @@ -0,0 +1,111 @@ +#pragma once + +#include "AudioMath.h" +#include "FractionalDelay.h" +#include "ObjectCache.h" + +template +class Daveguide : public TBase +{ +public: + Daveguide(struct Module * module) : TBase(module), delay(44100) + { + // init(); + } + Daveguide() : TBase(), delay(44100) + { + // init(); + } + + enum ParamIds + { + OCTAVE_PARAM, + TUNE_PARAM, + DECAY_PARAM, + FC_PARAM, + NUM_PARAMS + }; + + enum InputIds + { + AUDIO_INPUT, + CV_INPUT, + NUM_INPUTS + }; + + enum OutputIds + { + AUDIO_OUTPUT, + NUM_OUTPUTS + }; + + enum LightIds + { + NUM_LIGHTS + }; + + /** + * Main processing entry point. Called every sample + */ + void step() override; + + float _freq = 0; +private: + RecirculatingFractionalDelay delay; + + //static std::function makeFunc_Exp(double xMin, double xMax, double yMin, double yMax); + + // std::function delayScale = AudioMath::makeFunc_Exp(-5, 5, 1, 500); + + // AudioMath::ScaleFun feedbackScale = AudioMath::makeLinearScaler(0.f, 1.f); + + std::function expLookup = ObjectCache::getExp2Ex(); + + +}; + + +template +void Daveguide::step() +{ +#if 0 + // make delay knob to from 1 ms. to 1000 + double delayMS = delayScale(TBase::params[PARAM_DELAY].value); + double feedback = feedbackScale(0, (TBase::params[PARAM_FEEDBACK].value), 1); + + double delaySeconds = delayMS * .001; + double delaySamples = delaySeconds * TBase::engineGetSampleRate(); + + delay.setDelay((float) delaySamples); + delay.setFeedback((float) feedback); + + const float input = TBase::inputs[INPUT_AUDIO].value; + const float output = delay.run(input); + TBase::outputs[OUTPUT_AUDIO].value = output; +#endif + float pitch = 1.0f + roundf(TBase::params[OCTAVE_PARAM].value) + TBase::params[TUNE_PARAM].value / 12.0f; + pitch += TBase::inputs[CV_INPUT].value; + //pitch += .25f * TBase::inputs[PITCH_MOD_INPUT].value * + // taper(TBase::params[PARAM_PITCH_MOD_TRIM].value); + + const float q = float(log2(261.626)); // move up to pitch range of even vco + pitch += q; + _freq = expLookup(pitch); + const float delaySeconds = 1.0f / _freq; + float delaySamples = delaySeconds * TBase::engineGetSampleRate(); + + delay.setDelay(delaySamples); + delay.setFeedback(.999f); + // printf("set delay to %f samples (%f sec)\n", delaySamples, delaySeconds); + // fflush(stdout); + + const float input = TBase::inputs[AUDIO_INPUT].value; + const float output = delay.run(input); + TBase::outputs[AUDIO_OUTPUT].value = output; + + + + + + // clock.setMultiplier(1); // no mult +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/docs/README.md b/plugins/community/repos/squinkylabs-plug1/docs/README.md index 71d640ab..5dc58619 100644 --- a/plugins/community/repos/squinkylabs-plug1/docs/README.md +++ b/plugins/community/repos/squinkylabs-plug1/docs/README.md @@ -2,6 +2,8 @@ All of our plugins are free and open source. The [instruction manual](booty-shifter.md) describes all of the released modules. +The [release notes](release-notes.md) describe recent changes. + All of our released modules may be found in the [VCV Rack plugin manager] (https://vcvrack.com/plugins.html). This is by far the easiest way for most users to install our modules and keep them up to date. It is also quite easy to clone this repo and build them yourself. In order to do this, however, you must first download and build [VCV Rack itself](https://github.com/VCVRack/Rack). @@ -22,10 +24,6 @@ As with all third-party modules for VCV, you must: * `CD SquinkyVCV` * `make` -## Experimental modules - -At any given time, there may partially finished "experimental" modules in this repo. You can find up to date information on them [here](experimental.md). - ## Unit testing framework We have reasonably thorough tests for our code. Some of this might be of interest - it's [here](unit-test.md). \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/docs/alias-setup.png b/plugins/community/repos/squinkylabs-plug1/docs/alias-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..00aa607adcb975cfca2fe85e66dcee29bb74c9c8 GIT binary patch literal 90536 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 ulJ;L;@~ + +![thread booster image](./thread-booster.png) + +Thread booster raises the priority of VCV Rack's audio rendering thread. In many cases this decreases the annoying pops, ticks, and dropouts that many users are experiencing. + +Many users have reported that Thread Booster helps significantly. Others have reported that it does not help at all. No one has reported a detrimental effect. + +For a deeper dive into the Thread Booster, you should read [this document](./thread-booster.md). + +Thread Booster has a UI that lets you boost the priority of the audio thread. There are three arbitrary settings: normal, boosted, and real time. When the switch is in the bottom position, the plugin does nothing; the audio thread keeps its default priority. In the boost (middle) position, it sets the thread priority to the highest priority non-real-time setting. In the real-time position it attempts to set it to the highest possible priority, or near it. + +If setting the priority fails, the red error light lights up, and the priority stays where it was last. + +To use Thread Booster, just insert an instance into VCV Rack, then adjust the boost switch. In general we recommend the "real time" setting, if it is available on your computer. + +Once Thread booster is in your session, it will boost all the audio processing - it doesn't matter if other modules are added before or after - they all get boosted. + +Linux users - you must read [the detailed document](./thread-booster.md) to use this module. + +Note to users who downloaded the original version of Thread Booster: we've improved it a bit since then, especially on Linux and Windows. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter-old.md b/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter-old.md new file mode 100644 index 00000000..f21b268f --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter-old.md @@ -0,0 +1,249 @@ +# Table of contents + +[Chebyshev Waveshaper VCO](../docs/chebyshev.md) Click on link to go to Chbeyshev manual. + +[Functional VCO-1](#fun) Is an improved version of the Fundamental-VCO1. + +[LFN](#lfn) Is a random voltage generator made by running low frequency noise through a graphic equalizer. + +[Chopper](#chopper) Is a tremolo powered by a clock-synchable LFO. The LFO is highly programmable to give a range of waveforms. + +[Thread Booster](#booster) reduces pops and clicks in VCV Rack by reprogramming VCV's audio engine. + +[Colors](#colors) is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. + +[Growler](#growler) is a "vocal animator." It imparts random vocal timbres on anything played through it. The pseudo-random LFOs all have discrete outputs. + +[Booty Shifter](#shifter) is an emulation of the legendary Moog/Bode frequency shifter. + +[Formants](#formants) is a programmable bank of filters that can synthesize various vowel sounds and morph between them. + +[Attenuverters](#atten) + +[CV ranges](#cv) + +The [release notes](release-notes.md) describe recent changes to our modules. + +# Functional VCO-1 + +![Functional image](../docs/functional.png) + +Functional VCO-1 works just like its namesake. The control layout is familiar, the sound is the same, but it uses about 1/4 as much CPU as the original. + +We believe VCV's Fundamental VCO is an unsung hero. It's one of the few VCOs that never has audible aliasing artifacts. You can sync it, and modulate all its inputs, but the sound never falls apart. + +We "forked" the code to Fundamental VCO-1 and modified it a little bit to make it much more CPU efficient. Now you may use a lot more of them without pops, clicks, and dropouts. + +If you would like the details of how we did this, you can [find them here](../docs/vco-optimization.md). + + +# LFN Low Frequency Noise Generator + +![LFN image](../docs/lfn.png) + +LFN stands for Low Frequency Noise. Technically it is a white noise generator run through a graphic equalizer at extremely low frequencies. People may find it easier to think of it as a random voltage source with unique control over the output. + +The top knob, which is unlabeled, sets the "base frequency" of LFN. + +The five other knobs, and the CV inputs beside them, control the gain of the graphic equalizers sections. Beside each EQ gain knob is a label indicating what frequency range that knob controls. + +For example, it the base frequency is 1.0, the EQ sections will be at 1Hz, 2Hz, 4Hz, 8Hz, and 16Hz. If the base frequency is 0.2, The EQ sections will be at 0.2Hz, 0.4Hz, 0.8Hz, 1.6Hz, and 3.2Hz. + +But instead of thinking about frequencies like 1Hz, which are a little difficult to imagine, think of the knobs as mixing very slow random voltages, with less slow ones. For example if LFN is driving a pitch quantizer into a VCO, turn all the knobs down to zero except the first, lowest, one. This will make a series of pitches slowly rising and falling. Then bring in a little of the faster channels. The pitch will still be slowly rising and falling, but will also quickly move up and down by smaller steps. + +A good way to learn what makes LFN tick is to set it slow and watch it on the scope. At the same time run it straight into a VCO. Experiment with different mixes of the slow knobs and the fast ones. + +As you would expect from Squinky Labs, the CPU usage of LFN is very low. In fact it is one of our leanest modules yet. So feel free to use as many instances as you like. + +# Chopper tremolo / programmable LFO +![chopper image](./chopper.png) + +In its simplest use, Chopper produces a very wide range of **tremolo** effects. The built-in LFO can produce a wide range of waveforms that cover many of the waveforms produced by the tremolo circuits built into **vintage guitar amplifiers**. + +The LFO is sent to an output so that it may modulate other modules. + +There is also a **clock synchronizer** and multiplier. + +To use Chopper as a tremolo, send a signal to the *in* jack, and listen to the *out* jack. Leave the *clock* control at the default *int* setting. Most of the knob settings will now affect the tremolo effect. + +## Chopper LFO + +![chopper LFO image](../docs/lfo-waveforms.png) + +To understand all the LFO settings, it helps to watch the outputs on a scope. + +The LFO starts as **skewed** sawtooth. In the middle position it is a symmetric triangle wave, at one end a positive sawtooth and at the other a negative sawtooth. The signal is sent to the **saw** output. + +The skewed saw then goes to a **waveshaper**. As the shape control is increased the LFO is gradually rounded and then flattened. The shaped LFO is send to the *lfo* output, and used internally to modulate the audio input. + +LFO Controls: + +* **Shape** Flattens the LFO waveform. +* **Skew** Dials in the amount of asymmetry in the LFO. +* **Depth** Shifts and scales the LFO. + +When used as a tremolo effect, you will hear **more tremolo** when these controls are turned up. + +## Chopper clock + +The LFO in Chopper may be synchronized with the ckin signal. There is a built-in **clock multiplier**. To use the synchronization, patch a clock to the ckin, and select x1 from the **clock** knob. To run at a multiple of the input clock, select x2, x3, or x4. + +When Chopper is being synched, the **Phase** control sets the phase difference between the external clock and the synchronized LFO. This may be used to "dial in" the tremolo so that it sounds exactly on the beat (or off the beat). + +There is also an internal LFO that is controlled by the **Rate** control. Set the clock control to *int* to use the internal clock. + +# Thread Booster + +![thread booster image](./thread-booster.png) + +Thread booster raises the priority of VCV Rack's audio rendering thread. In many cases this decreases the annoying pops, ticks, and dropouts that many users are experiencing. + +Many users have reported that Thread Booster helps significantly. Others have reported that it does not help at all. No one has reported a detrimental effect. + +For a deeper dive into the Thread Booster, you should read [this document](./thread-booster.md). + +Thread Booster has a UI that lets you boost the priority of the audio thread. There are three arbitrary settings: normal, boosted, and real time. When the switch is in the bottom position, the plugin does nothing; the audio thread keeps its default priority. In the boost (middle) position, it sets the thread priority to the highest priority non-real-time setting. In the real-time position it attempts to set it to the highest possible priority, or near it. + +If setting the priority fails, the red error light lights up, and the priority stays where it was last. + +To use Thread Booster, just insert an instance into VCV Rack, then adjust the boost switch. In general we recommend the "real time" setting, if it is available on your computer. + +Once Thread booster is in your session, it will boost all the audio processing - it doesn't matter if other modules are added before or after - they all get boosted. + +Linux users - you must read [the detailed document](./thread-booster.md) to use this module. + +Note to users who downloaded the original version of Thread Booster: we've improved it a bit since then, especially on Linux and Windows. + +# Colors variable slope noise generator + +![noise image](../docs/colors.png) + +Colors is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. It can also produce all the colors in between, as it has a **continuously variable slope**. + +Colors has a single control, "slope." This is the slope of the noise spectrum, from -8 dB/octave to +8 dB/octave. + +The slope of the noise is quite accurate in the mid-band, but at the extremes we flatten the slope to keep from boosting super-low frequencies too much, and to avoid putting out enormous amounts of highs. So the slope is flat below 40hz, and above 6kHz. + +## Things to be aware of + +When the **slope** changes, Color needs to do a lot of calculations. While this is normally not a problem, it’s possible that quickly changing the slope of many instances of Colors could cause pops and dropouts. + +The slope control does not respond instantly. If you turn the knob, you will hear the change, but if you were to modulate the CV very quickly you might notice the slowness. + +# Growler + +![vocal formant filter image](./growler.jpg) + +**Growler** is a re-creation of the Vocal Animator circuit invented by Bernie Hutchins, and published in Electronotes magazine in the late 70's. It continuously morphs between different vaguely voice like tones. + +**To get a good sound:** run any harmonically rich signal into the input, and something good will come out. Low frequency pulse waves and distorted sounds make great input. + +The controls do pretty much what you would expect: + +* **LFO** controls the speed of the modulation LFOs. +* **Fc** controls the average frequency of the multiple filters. +* **Q** controls the sharpness of the filters. +* **Depth** controls how much of the modulation LFOs are applied to the filters. + +## How Growler works +![growler scope](./growler.png) + +There are four **bandpass filters**, roughly tuned to some typical vocal formant frequencies: 522, 1340, 2570, and 3700 Hz. The filters are run in parallel, with their outputs summed together. + +The first three filter frequencies are modulated by an LFO comprised of **4 triangle wave LFOs** running at different frequencies. They are summed together in various combinations to drive each of the filters. + +Each **CV input stage** is the same: a knob that supplies a fixed offset and a CV input that is processed by an attenuverter. The processed CV is added to the knob voltage. See below for more on [Attenuverters](#atten) and [CV ranges](#cv). + +The **LFO** Rate control shifts the speed of all 4 LFOs while maintaining the ratio of their frequencies. + +The **Fc** control moves the frequencies of the first three filters, but not by equal amounts. The lowest filter moves at 1V/Oct, but the middle two move less. The top filter is fixed at 3700 Hz. + +The **Q** control does just what it says - controls the Q (resonance) of the filters. + +The **Modulation Depth** controls how much of the summed LFOs get to each filter. Again, the lower filters move farther, and the top filter is fixed. + +The smaller knobs next to the main knobs are **attenuverters**, which scale control voltages. For more on attenuverters, [see below](#atten) + +There are three LFO outputs next to the blinking LFOs. These may be used to modulate other modules, or as semi-random voltage sources. + +**Bass boost** switch. When it’s in the up position (on) there should be more bass. This is done by switching some or all of the filters from bandpass to lowpass. + +LFO **Matrix** switch. This is the unlabeled switch in the LFO section. When it’s down (default position) the LFOs are closely correlated. In the middle we try to make them a little bit more independent. When it’s in the up position the LFOs will often go in different directions. + +# Booty Shifter frequency shifter + +**Booty Shifter** is a frequency shifter inspired by the Moog/Bode frequency shifter module. + +![booty shifter image](./booty-shifter.png) + +The name "Booty Shifter" is a nod to the classic analog module, as well as to a black cat named Booty. + +Booty Shifter will take an audio input and shift the frequencies up or down. This is not like a pitch shift where harmonics will remain in tune; it is an absolute frequency shift in Hz, so in general **harmonics will go way out of tune.** It is similar to a ring-modulator, but less extreme and more versatile. + +## Getting good sounds from Booty Shifter + +Feed in music and shift the frequency a good amount. + +Feed in **speech or radio** and shift it. + +Feed the CV from a **sequencer** to sequence the mayhem. + +Shift **drums** up or down a little bit to re-tune them without the usual pitch-shifting artifacts. + +Small shifts in conjunction with delays can make a chorus-like effect to thicken music. + +## Inputs and outputs + +* **IN** is the audio input. +* **CV** is the pitch shift control voltage. -5V will give minimum shift, +5 will give maximum. +* **DN** is the down-shifted output. +* **UP** is the up-shifted output. + +## Controls + +**RANGE** sets the total shift range in Hz. For example, the 50 Hz setting means that the minimum shift is 50 Hz down, and the maximum is 50 Hz up. + +Range value **Exp is different**. Here minimum shift is 2 Hz, maximum is 2 kHz, with an exponential response. As of version 0.6.2 the response is an accurate 1 Volt per Octave. + +Shift **AMT** is added to the control voltage, with a range of -5..5. + +## Oddities and limitations + +If you shift the frequency up too far, it will alias. There is no anti-aliasing, so if the highest input frequency + shift amount > sample_rate / 2, you will get aliasing. Of course the Bode analog original did not alias. + +If you shift the input down a lot, frequencies will go **below zero and wrap around**. Taken far enough this will completely **reverse the spectrum** of the input. This was a prized feature of the Bode original. + +As you shift the input down, you may start to generate a lot of subsonic energy. A **High Pass filter** may clean this up. + +The down shift **frequency fold-over**, while true to the original, does cause problems when trying to pitch drum tracks down a lot. High pass filtering the input before it is down-shifted can control this. + +# Formants vocal filter + +![formants image](./formants.png) + +Like the **Vocal Animator**, this is a filter bank tuned to the formant frequencies of typical **singing voices**. Unlike Growler, however, the filters do not animate on their own. In addition, the filters are preset to frequencies, bandwidths, and gains that are taken from **measurements of human singers**. + +One of the easiest ways to **get a good sound** from Formants is to use it like a regular VCF. For example, control Fc with an ADSR. Then put a second modulation source into the vowel CV - something as simple as a slow LFO will add interest. + +Use it as a **filter bank**. Just set the knobs for a good sound and leave it fixed to add vocal tones to a pad. Again, modulating the vowel CV can easily give great results. + +Try to synthesize something like **singing** by sequencing the vowel CV of several formants. Leave the Fc in place, or move it slightly as the input pitches move. + +Controls: + +* **Fc** control moves all the filters up and down by the standard one "volt" per octave. +* **Vowel** control smoothly interpolates between 'a', 'e', 'i', 'o', and 'u'. +* **Model** control selects different vocal models: bass, tenor, countertenor, alto, and soprano. +* **Brightness** control gradually boosts the level of the higher formants. When it is all the way down, the filter gains are set by the singing models in the module, which typically fall off with increasing frequency. As this control is increased the gain of the high formant filters is brought up to match the F1 formant filter. + +The **LEDs across the top** indicate which formant is currently being "sung". + +## About Attenuverters + +The small knobs next to the bigger knobs are **attenuverters**. They scale and/or invert the control voltage inputs next to them. When they are turned all the way up the full CV comes through. As they are turned down less CV comes through. Straight up none passes. As they are turned down further the CV comes back, but inverted. + +Sometimes we use attenuverters with a *linear taper*, and sometimes we use an *audio taper*. If you find that on a particular module you do not like the response of the attenuverters, please log a github issue. + +## Control voltage ranges + +Our modules usually expect a control voltage range of **-5 to +5**. The associated offset knobs will also add -5 to +5. After attenuverters are applied to CV the knob value is added. After all that, the result is usually clipped to the -5 to +5 range. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter.md b/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter.md index 44c078a4..94cc1951 100644 --- a/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter.md +++ b/plugins/community/repos/squinkylabs-plug1/docs/booty-shifter.md @@ -1,207 +1,40 @@ -# Table of contents +# The Squinky Labs modules for VCV Rack -[Chopper](#chopper) Is a tremolo powered by a clock-synchable LFO. The LFO is highly programmable to give a range of waveforms. +Below are short descriptions of our modules with links to more detailed manuals. -[Thread Booster](#booster) reduces pops and clicks in VCV Rack by reprogramming VCV's audio engine. +The [release notes](release-notes.md) describe recent changes to our modules. -[Colors](#colors) is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. +# Things that make sound -[Growler](#growler) is a "vocal animator." It imparts random vocal timbres on anything played through it. The pseudo-random LFOs all have discrete outputs. +![Intro 1 image](./intro-1-110.png) -[Booty Shifter](#shifter) is an emulation of the legendary Moog/Bode frequency shifter. +[EV3](./ev3.md) is three VCOs in a single module. Each of the three VCOs is a clone of Befaco's EvenVCO, with oscillator sync added. Like EvenVCO, it sounds good, uses little CPU, and has very little aliasing distortion. -[Formants](#formants) is a programmable bank of filters that can synthesize various vowel sounds and morph between them. +[Colors](./colors.md) is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. And all the colors in between. -[Attenuverters](#atten) +[Chebyshev Waveshaper VCO](../docs/chebyshev.md) can make sounds like no other VCO. It contains a VCO, ten polynomial wave-shapers, and one clipper/folder. Among other things, it is a harmonic oscillator. -[CV ranges](#cv) +[Functional VCO-1](./functional-vco-1.md) Is an improved version of the Fundamental VCO-1. Like Fundamental VCO-1, it will never alias, no matter what you throw at it. It is one of the few VCOs that can do sync, FM, and PWM without aliasing. Functional VCO-1 improves on Fundamental by lowering the CPU usage dramatically. -# Chopper tremolo / programmable LFO +# Things that process sound -In its simplest use, Chopper produces a very wide range of **tremolo** effects. The built-in LFO can produce a wide range of waveforms that cover many of the waveforms produced by the tremolo circuits built into **vintage guitar amplifiers**. +![Intro 2 image](./intro-2-110.png) -The LFO is sent to an output so that it may modulate other modules. +[Shaper](./shaper.md). Yet another wave shaper. But unlike most, this one has almost no aliasing distortion. And a few new shapes that sound nice. -There is also a **clock synchronizer** and multiplier. +[Chopper](./chopper.md) Is a tremolo powered by a clock-synchable LFO. The LFO is highly programmable to give a range of waveforms. A built-in clock multiplier enables easy rhythmic effects. -To use Chopper as a tremolo, send a signal to the *in* jack, and listen to the *out* jack. Leave the *clock* control at the default *int* setting. Most of the knob settings will now affect the tremolo effect. +[Growler](./growler.md) is a "vocal animator." It imparts random vocal timbres on anything played through it. The pseudo-random LFOs all have discrete outputs. -## Chopper LFO +[Booty Shifter](./shifter.md). An emulation of the legendary Moog/Bode frequency shifter. It is great for "warping" sounds run through it. -![chopper image](../docs/lfo-waveforms.png) +[Formants](./formants.md) is a programmable bank of filters that can synthesize various vowel sounds and morph between them easily. -To understand all the LFO settings, it helps to watch the outputs on a scope. +# Other things +![Intro 3 image](./intro-3-110.png) -The LFO starts as **skewed** sawtooth. In the middle position it is a symmetric triangle wave, at one end a positive sawtooth and at the other a negative sawtooth. The signal is sent to the **saw** output. +[Gray Code](./gray-code.md). Think of it as a semi-random clock divider. Or not. Gray codes have the cool property that only one bit changes at a time. Having only one “thing” change at a time can be interesting for music, so we are hoping you will find some good things to do with it. -The skewed saw then goes to a **waveshaper**. As the shape control is increased the LFO is gradually rounded and then flattened. The shaped LFO is send to the *lfo* output, and used internally to modulate the audio input. +[LFN](./lfn.md) is a random voltage generator made by running low frequency noise through a graphic equalizer. The equalizer gives a lot of easy control over the shape of the randomness. -LFO Controls: - -* **Shape** Flattens the LFO waveform. -* **Skew** Dials in the amount of asymmetry in the LFO. -* **Depth** Shifts and scales the LFO. - -When used as a tremolo effect, you will hear **more tremolo** when these controls are turned up. - -## Chopper clock - -The LFO in Chopper may be synchronized with the ckin signal. There is a built-in **clock multiplier**. To use the synchronization, patch a clock to the ckin, and select x1 from the **clock** knob. To run at a multiple of the input clock, select x2, x3, or x4. - -When Chopper is being synched, the **Phase** control sets the phase difference between the external clock and the synchronized LFO. This may be used to "dial in" the tremolo so that it sounds exactly on the beat (or off the beat). - -There is also an internal LFO that is controlled by the **Rate** control. Set the clock control to *int* to use the internal clock. - -# Thread Booster - -Thread booster raises the priority of VCV Rack's audio rendering thread. In many cases this decreases the annoying pops, ticks, and dropouts that many users are experiencing. - -Many users have reported that Thread Booster helps significantly. Others have reported that it does not help at all. No one has reported a detrimental effect. - -For a deeper dive into the Thread Booster, you should read [this document](./thread-booster.md). - -Thread Booster has a UI that lets you boost the priority of the audio thread. There are three arbitrary settings: normal, boosted, and real time. When the switch is in the bottom position, the plugin does nothing; the audio thread keeps its default priority. In the boost (middle) position, it sets the thread priority to the highest priority non-real-time setting. In the real-time position it attempts to set it to the highest possible priority, or near it. - -If setting the priority fails, the red error light lights up, and the priority stays where it was last. - -To use Thread Booster, just insert an instance into VCV Rack, then adjust the boost switch. In general we recommend the "real time" setting, if it is available on your computer. - -Once Thread booster is in your session, it will boost all the audio processing - it doesn't matter if other modules are added before or after - they all get boosted. - -Linux users - you must read [the detailed document](./thread-booster.md) to use this module. - -Note to users who downloaded the original version of Thread Booster: we've improved it a bit since then, especially on Linux and Windows. - -# Colors variable slope noise generator - -![noise image](../docs/colors.png) - -Colors is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. It can also produce all the colors in between, as it has a **continuously variable slope**. - -Colors has a single control, "slope." This is the slope of the noise spectrum, from -8 dB/octave to +8 dB/octave. - -The slope of the noise is quite accurate in the mid-band, but at the extremes we flatten the slope to keep from boosting super-low frequencies too much, and to avoid putting out enormous amounts of highs. So the slope is flat below 40hz, and above 6kHz. - -## Things to be aware of - -When the **slope** changes, Color needs to do a lot of calculations. While this is normally not a problem, it’s possible that quickly changing the slope of many instances of Colors could cause pops and dropouts. - -The slope control does not respond instantly. If you turn the knob, you will hear the change, but if you were to modulate the CV very quickly you might notice the slowness. - -# Growler - -![vocal formant filter image](./growler.jpg) - -**Growler** is a re-creation of the Vocal Animator circuit invented by Bernie Hutchins, and published in Electronotes magazine in the late 70's. It continuously morphs between different vaguely voice like tones. - -**To get a good sound:** run any harmonically rich signal into the input, and something good will come out. Low frequency pulse waves and distorted sounds make great input. - -The controls do pretty much what you would expect: - -* **LFO** controls the speed of the modulation LFOs. -* **Fc** controls the average frequency of the multiple filters. -* **Q** controls the sharpness of the filters. -* **Depth** controls how much of the modulation LFOs are applied to the filters. - -## How Growler works -![growler scope](./growler.png) - -There are four **bandpass filters**, roughly tuned to some typical vocal formant frequencies: 522, 1340, 2570, and 3700 Hz. The filters are run in parallel, with their outputs summed together. - -The first three filter frequencies are modulated by an LFO comprised of **4 triangle wave LFOs** running at different frequencies. They are summed together in various combinations to drive each of the filters. - -Each **CV input stage** is the same: a knob that supplies a fixed offset and a CV input that is processed by an attenuverter. The processed CV is added to the knob voltage. See below for more on [Attenuverters](#atten) and [CV ranges](#cv). - -The **LFO** Rate control shifts the speed of all 4 LFOs while maintaining the ratio of their frequencies. - -The **Fc** control moves the frequencies of the first three filters, but not by equal amounts. The lowest filter moves at 1V/Oct, but the middle two move less. The top filter is fixed at 3700 Hz. - -The **Q** control does just what it says - controls the Q (resonance) of the filters. - -The **Modulation Depth** controls how much of the summed LFOs get to each filter. Again, the lower filters move farther, and the top filter is fixed. - -The smaller knobs next to the main knobs are **attenuverters**, which scale control voltages. For more on attenuverters, [see below](#atten) - -There are three LFO outputs next to the blinking LFOs. These may be used to modulate other modules, or as semi-random voltage sources. - -**Bass boost** switch. When it’s in the up position (on) there should be more bass. This is done by switching some or all of the filters from bandpass to lowpass. - -LFO **Matrix** switch. This is the unlabeled switch in the LFO section. When it’s down (default position) the LFOs are closely correlated. In the middle we try to make them a little bit more independent. When it’s in the up position the LFOs will often go in different directions. - -# Booty Shifter frequency shifter - -**Booty Shifter** is a frequency shifter inspired by the Moog/Bode frequency shifter module. - -![booty shifter image](./booty-shifter.png) - -The name "Booty Shifter" is a nod to the classic analog module, as well as to a black cat named Booty. - -Booty Shifter will take an audio input and shift the frequencies up or down. This is not like a pitch shift where harmonics will remain in tune; it is an absolute frequency shift in Hz, so in general **harmonics will go way out of tune.** It is similar to a ring-modulator, but less extreme and more versatile. - -## Getting good sounds from Booty Shifter - -Feed in music and shift the frequency a good amount. - -Feed in **speech or radio** and shift it. - -Feed the CV from a **sequencer** to sequence the mayhem. - -Shift **drums** up or down a little bit to re-tune them without the usual pitch-shifting artifacts. - -Small shifts in conjunction with delays can make a chorus-like effect to thicken music. - -## Inputs and outputs - -* **IN** is the audio input. -* **CV** is the pitch shift control voltage. -5V will give minimum shift, +5 will give maximum. -* **DN** is the down-shifted output. -* **UP** is the up-shifted output. - -## Controls - -**RANGE** sets the total shift range in Hz. For example, the 50 Hz setting means that the minimum shift is 50 Hz down, and the maximum is 50 Hz up. - -Range value **Exp is different**. Here minimum shift is 2 Hz, maximum is 2 kHz, with an exponential response. As of version 0.6.2 the response is an accurate 1 Volt per Octave. - -Shift **AMT** is added to the control voltage, with a range of -5..5. - -## Oddities and limitations - -If you shift the frequency up too far, it will alias. There is no anti-aliasing, so if the highest input frequency + shift amount > sample_rate / 2, you will get aliasing. Of course the Bode analog original did not alias. - -If you shift the input down a lot, frequencies will go **below zero and wrap around**. Taken far enough this will completely **reverse the spectrum** of the input. This was a prized feature of the Bode original. - -As you shift the input down, you may start to generate a lot of subsonic energy. A **High Pass filter** may clean this up. - -The down shift **frequency fold-over**, while true to the original, does cause problems when trying to pitch drum tracks down a lot. High pass filtering the input before it is down-shifted can control this. - -# Formants vocal filter - -![formants image](./formants.png) - -Like the **Vocal Animator**, this is a filter bank tuned to the formant frequencies of typical **singing voices**. Unlike Growler, however, the filters do not animate on their own. In addition, the filters are preset to frequencies, bandwidths, and gains that are taken from **measurements of human singers**. - -One of the easiest ways to **get a good sound** from Formants is to use it like a regular VCF. For example, control Fc with an ADSR. Then put a second modulation source into the vowel CV - something as simple as a slow LFO will add interest. - -Use it as a **filter bank**. Just set the knobs for a good sound and leave it fixed to add vocal tones to a pad. Again, modulating the vowel CV can easily give great results. - -Try to synthesize something like **singing** by sequencing the vowel CV of several formants. Leave the Fc in place, or move it slightly as the input pitches move. - -Controls: - -* **Fc** control moves all the filters up and down by the standard one "volt" per octave. -* **Vowel** control smoothly interpolates between 'a', 'e', 'i', 'o', and 'u'. -* **Model** control selects different vocal models: bass, tenor, countertenor, alto, and soprano. -* **Brightness** control gradually boosts the level of the higher formants. When it is all the way down, the filter gains are set by the singing models in the module, which typically fall off with increasing frequency. As this control is increased the gain of the high formant filters is brought up to match the F1 formant filter. - -The **LEDs across the top** indicate which formant is currently being "sung". - -## About Attenuverters - -The small knobs next to the bigger knobs are **attenuverters**. They scale and/or invert the control voltage inputs next to them. When they are turned all the way up the full CV comes through. As they are turned down less CV comes through. Straight up none passes. As they are turned down further the CV comes back, but inverted. - -Sometimes we use attenuverters with a *linear taper*, and sometimes we use an *audio taper*. If you find that on a particular module you do not like the response of the attenuverters, please log a github issue. - -## Control voltage ranges - -Our modules usually expect a control voltage range of **-5 to +5**. The associated offset knobs will also add -5 to +5. After attenuverters are applied to CV the knob value is added. After all that, the result is usually clipped to the -5 to +5 range. +[Thread Booster](./booster.md) reduces pops and clicks in VCV Rack by reprogramming VCV's audio engine. \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/docs/both.png b/plugins/community/repos/squinkylabs-plug1/docs/both.png new file mode 100644 index 0000000000000000000000000000000000000000..a0cf4e05fa6da47cc8c84f3a5b9523950e9ced5e GIT binary patch literal 27023 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 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/chebyshev.md b/plugins/community/repos/squinkylabs-plug1/docs/chebyshev.md new file mode 100644 index 00000000..31334517 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/chebyshev.md @@ -0,0 +1,145 @@ +# Chebyshev +Our waveshaper VCO. + +![Functional image](../docs/chebyshev.png) + +## Description of the module + +Chebyshev polynomials have been used to generate complex tones since the early days of computer music. This special math discovered by Mr. Chebyshev enables digital generation of waveforms with any overtone structure using very little computer power. In addition, it is easy and computationally inexpensive to vary the spectrum over time. + +Eventually, this form of synthesis fell out of favor, as FM could provide a wider variety of timbres with acceptable CPU usage. Now, however, the distinctive sound of this form of synthesis provides another unique source of sounds for VCV Rack users. + +The magic of the Chebyshev polynomials is that if a sine wave with amplitude one is put into a Chebyshev polynomial, the output will still be a sine wave, but multiplied in pitch by an integer. + +In our implementation we include the first ten Chebyshev polynomials to generate the first ten harmonics of the harmonic series. These are then mixed together based on knob settings and control voltages to give an output tone with complete control over ten harmonics. + +Many of the controls in this module allow different ways of mixing together these ten harmonics. In addition external signals may be shaped by the waveshaper, with folding or clipping applied. + +Like all our modules, Chebyshev's CPU usage is quite low. + +## Some tips + +It can be a great help learning this module if you patch the output to a Scope module and a frequency analyzer. As you adjust the controls it will be clearer what is going on. + +Also, note that we will repeat that when set up normally, each Chebyshev waveshaper is producing a different harmonic of the VCO output. Because of this, we will refer to these as "harmonic levels" and "waveshaper levels" interchangeably. + +And - each waveshaper is a perfect harmonic only when driven by a pure sine at exactly 1Vp-p. + +## Signal Flow + +First there is a sine wave VCO. It has the controls you would expect, as well as a through-zero linear FM input, which allows a minimal DX7-style FM. + +The VCO output then goes to a wave folder/clipper with gain controls. This allows for some distortion effects, and keeps the signal in a range that will keep the next stage happy. + +The output of the folder/clipper then goes to ten parallel Chebyshev waveshapers. The outputs of these are then mixed together through a specialized mixer. + +When everything is set in a typical manner, each of the Chebyshev waveshapers will be outputting a pure sine wave at an integer multiple of the fundamental frequency. Thus, each one will be a discrete harmonic. + +## Description of the controls + +### VCO + +The controls in the upper right are all for the sine wave VCO. +Octave transposes the pitch in even octaves. + +* **Tune** raises or lowers the pitch by up to a perfect fifth. +* **Mod** controls the modulation (exponential FM) depth of the signal patched to the Mod jack. +* **LFM** controls the linear FM depth of the signal patched to the LFM jack. +* **V/Oct** input is where the main control voltage is patched. + +Mod and LFM perform different functions. Mod, like the CV input, is an exponential control. If an LFO is patched into the Mod input and the Mod depth is adjusted for a vibrato of one semitone, that vibrato will be one semitone regardless of the base pitch. But if an audio rate signal is patched into the Mod input you will tend to get “clangorous” sounds with inharmonic overtones. + +LFM, on the other hand, allows through-zero linear FM. While this is not very good for vibrato it does create complex timbres where the harmonics are in tune, and that "in tuneness" will remain as the mod depth is changed. Exponential FM at audio rates can also be tuned, but the tuning will disappear as the mod depth changes, making it impossible to to generate dynamic harmonic sounds. + +### Folder/Clipper + +Chebyshev polynomials are poorly behaved if they see more than one (volt) at their input. So we use a folder/clipper to make sure this doesn’t happen. + +The controls and CV of the Folder/Clipper: + +* **Fold/Clip** switch. In clip mode, it is a simple hard clipper. In fold mode it’s a waveform folder. +* **Clip LED**. The LED will be green when there is signal, and red when the folder/clipper engages. +* *Gain*. Controls how hard the folder/clipper is driven. Gain knob and CV are combined. +* **Gain trim**. The small knob below the **gain** knob is an attenuator for the **gain** CV. New in 0.6.9. +* **EG**. Also combines with the gains. +* **Ext In.** When a signal is patched here it replaces the internal VCO, allowing any signal to be run through the waveshaper. + +Note that while you can get some cool effects with clipping and folding, they will tend to cause audible aliasing at higher frequencies. Use with care. + +In classic waveshaping synthesis an ADSR or similar would be connected to the EG input. By dynamically changing the level of the sine wave hitting the waveshapers a dynamic timbre will be generated. + +The output of the folder/clipper drives the Chebyshev waveshapers. The last group of controls all work together to determine how the waveshapers are mixed together. + +### Waveshaper controls + +There are a lot of controls that work together to determine how the waveshapers are mixed. When configured normally, that means these controls determine the ratios of all the harmonics of the VCO. + +The **small knobs** running up the left side individually control each waveshaper/harmonic, with fundamental on top, and harmonic 10 on the bottom. + +The input jacks next to them allow the levels of each harmonic to be voltage controlled. + +The **Preset** button toggles all ten harmonics between some good starting points, and also resets the Gain to be exactly 1. + +The **Even** control increases/decreases the level of all the even harmonics together. + +The **Odd** control increases/decreases the level of all the odd harmonics together. + +The **Slope** control will apply a gradual roll-off of the upper harmonics. When it is all the way down the roll-off is 18 decibels per octave. When it is all the way up it’s flat. + +Note that the level of the fundamental is not affected by either the Even or Odd control. + +The Odd, Even, and Slope controls may be thought of as subtractive. When they are all the way up, they have no effect, and you get the mix you would expect from the individual harmonic levels. When you turn these controls down they will reduce the levels of the corresponding harmonics. + +The **Preset** button toggles between two or three settings. It will always have a setting where the fundamental is full and all other harmonics off, and a setting where all harmonics are up full. In addition, if you started with your own setting of the harmonics, the preset button will eventually take you back there, but with the master gain set back to one. + +## Several patching ideas + +### Arbitrary waveform VCO + +Turn the Odd, Even, and Slope controls all the way up. Then the level of each harmonic is controller its own volume control. Mix the harmonics to get a pleasing sound, then use as a static timbre, or run it into a VCO. + +Or start with the individual harmonics all the way up, manipulate Even/Odd/Slope to start sculpting the harmonics. + +Don’t forget the Preset button - it’s your friend here. + +### Dynamic Waveshaping + +Use the built-in VCO. Adjust the harmonic mix to something nice and bright. Then connect an ADSR to the EG input. The ADSR will more or less control the brightness. Make sure the the clip LED is just on the edge of clipping when the EG input is at max. + +At very low levels the output will be primarily fundamental. At max level it will be determined by the waveshaper mix controls. The timbre will go from dull to bright as the EG input increases, but the evolution of the timbre will not be completely even, and definitely will be different than what you would get modulating a VCF with an ADSR. + +The evolution of timbres often sounds "brassy," like a brass instrument. Brass synthesis was indeed a common use of waveshaping synthesis before the era of affordable sampling and physical modelling. + +### Voltage controlled filter slope + +Most conventional VCFs allow a filter of a specific shape to be modulated up and down in frequency. A variable slope VCF lets the shape of the filter be modulated. Modulating the filter slope can be more "natural" sounding. + +In the case of Chebyshev we don’t have a filter, but by controlling the harmonic levels directly we can mimic one. Set up a nice bright sound, patch an ADSR into the Slope input, and try out a simulated variable slope filter. + +### Voltage control of spectrum + +The possibilities for timbral variation seem limitless if you take the time to patch controls signals into the harmonic level CV inputs. Use all the usual suspects here - clocks, LFOs, shift registers, sequencers. + +### FM oscillator + +The inclusion of the LFM input allows a simple form of FM synthesis - one operator FM. + +Use an external sine VCO, and patch it into the LFM input on Chebyshev. Turn up the LFM knob. Use the Preset button to turn up the fundamental and turn off the other waveshaper outputs. + +In FM speak, the external VCO is the modulator and the VCO in Chebyshev is the carrier. The result should be consonant if the frequency of the carrier is a small integer multiple of the modulator frequency. For example, set the modulator an octave lower than the carrier. + +Once again, as the modulation is increased more harmonics will be present, so use an external ADSR and VCA to modulate the level of the modulator sine before it’s patched into Chebyshev. + +Of course FM will work alongside the waveshapers, so feel free to go crazy with all the knobs. But don’t be disappointed if the results are harsh and strange. + +### Process external signals + +Run something other than a sine wave into Ext In, then process your signal with the folder and/or the Chebyshev waveshapers. Again, the output of the waveshapers can be pretty unpredictable as the input signal becomes more complex. + +## A note about Aliasing + +In the standard configuration there will be little, if any, aliasing. Since the highest harmonic is 10X the fundamental, the Chebyshev module can’t even start to alias until the fundamental gets to 2kHz. + +That said, there is no anti-aliasing in this module. The wavefolder can easily alias. Normally the LFM will not alias very much, but with high modulation depth and high pitches it will alias quite a lot. + +We have an informational article that talks more about aliasing [here](./aliasing.md). \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/docs/chebyshev.png b/plugins/community/repos/squinkylabs-plug1/docs/chebyshev.png new file mode 100644 index 0000000000000000000000000000000000000000..1417d0fdac92907126a3e26b484de5d9014486fd GIT binary patch literal 43343 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 CUL5KG literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/chopper.md b/plugins/community/repos/squinkylabs-plug1/docs/chopper.md new file mode 100644 index 00000000..f6293da6 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/chopper.md @@ -0,0 +1,36 @@ +# Chopper tremolo / programmable LFO +![chopper image](./chopper.png) + +In its simplest use, Chopper produces a very wide range of **tremolo** effects. The built-in LFO can produce a wide range of waveforms that cover many of the waveforms produced by the tremolo circuits built into **vintage guitar amplifiers**. + +The LFO is sent to an output so that it may modulate other modules. + +There is also a **clock synchronizer** and multiplier. + +To use Chopper as a tremolo, send a signal to the *in* jack, and listen to the *out* jack. Leave the *clock* control at the default *int* setting. Most of the knob settings will now affect the tremolo effect. + +## Chopper LFO + +![chopper LFO image](../docs/lfo-waveforms.png) + +To understand all the LFO settings, it helps to watch the outputs on a scope. + +The LFO starts as **skewed** sawtooth. In the middle position it is a symmetric triangle wave, at one end a positive sawtooth and at the other a negative sawtooth. The signal is sent to the **saw** output. + +The skewed saw then goes to a **waveshaper**. As the shape control is increased the LFO is gradually rounded and then flattened. The shaped LFO is send to the *lfo* output, and used internally to modulate the audio input. + +LFO Controls: + +* **Shape** Flattens the LFO waveform. +* **Skew** Dials in the amount of asymmetry in the LFO. +* **Depth** Shifts and scales the LFO. + +When used as a tremolo effect, you will hear **more tremolo** when these controls are turned up. + +## Chopper clock + +The LFO in Chopper may be synchronized with the ckin signal. There is a built-in **clock multiplier**. To use the synchronization, patch a clock to the ckin, and select x1 from the **clock** knob. To run at a multiple of the input clock, select x2, x3, or x4. + +When Chopper is being synched, the **Phase** control sets the phase difference between the external clock and the synchronized LFO. This may be used to "dial in" the tremolo so that it sounds exactly on the beat (or off the beat). + +There is also an internal LFO that is controlled by the **Rate** control. Set the clock control to *int* to use the internal clock. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/chopper.png b/plugins/community/repos/squinkylabs-plug1/docs/chopper.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb5188780d8265177e508ee90fafe4c99ae1040 GIT binary patch literal 20420 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 T#aQ#`k6 + +![noise image](../docs/colors.png) + +Colors is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. It can also produce all the colors in between, as it has a **continuously variable slope**. + +Colors has a single control, "slope." This is the slope of the noise spectrum, from -8 dB/octave to +8 dB/octave. + +The slope of the noise is quite accurate in the mid-band, but at the extremes we flatten the slope to keep from boosting super-low frequencies too much, and to avoid putting out enormous amounts of highs. So the slope is flat below 40hz, and above 6kHz. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/crush.png b/plugins/community/repos/squinkylabs-plug1/docs/crush.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0e976dfe8e7ddff3ac1f7336ea3d20dfa7dca0 GIT binary patch literal 8600 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¨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 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/folder.png b/plugins/community/repos/squinkylabs-plug1/docs/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..80d2b809a80762016857da1fbb4529dbbbe95273 GIT binary patch literal 16500 zcmbWf1z40(*CkQ3`jT9Axa}5Fmw-HQi8+)GjxXtNSBCo3IjukpmZ~I zcXRQp`=5KyJ^#69p6A_f?6p_zwbmPZt%=msP<%*8ONfDi@laXm<(vEc+5J{SfOX%J z`wdOs?;f})8Mt9!kaYjuFq61Qo?u|$(%EY3yX&i~iCQ>20?i=K=9WNjN0)nO3=DB8 zZx=HQdrNmlb4zPmCkf`grZ#3qTZja+-V1eJbr(5H8(Sq`sHK*#hPH*Ty@d#bSxS;o z+*|Y>fup6n8KbwOgOi)6w*>P)@QU6a|Gf-iX8Z?;yS)Un%wK|x`s$jDa?Vgo#uq?A z9t%E!7mPw8Kt4f!0TB^yMldg*Fo;(e#K+IWCnzewD+&fP{_DqlPYnvO5`FVh;a{}w z&m@>_+}&M7K_D+LFQ6Ac&>3nC;u8@O0r7%CU@*@;1dp4Kle?KWkCPkAzcIYDbhCik zy13gqJ2C#nXlCy0;V!{^&*?u!aCG?(S|_)Esp(!}Aa64l5Fe2DuSov@gjoCs&cy@j z@DJh;3y`IQrK6>jyW2f1-+y3TY@FSl-E5ryKT!Xt`+p#CuUd8W|IqlK^5W?D9};fv z@}Bo%{7WJKQ)oAB9~Vo|8%sB552%HuyyrceEPthO5tV~lnz=hewVju}%U_C`^bQCVJ2kWWNVkOvIp`v<$~>Y~a{ZtiAI z7M98{C7AE^1GKe;h=K*cU@H+3D;{1EAt4@KegQ!qVN0PGJVN|@yu3mJf_xDE7ylmr z(%Hh}uNC}zJmml9_*YQddoMI|_&>(;*Ej!~kEoKZ+x^7){L6c^EM5O~zM8~i?Q{5||nz`8&APsp=$x{q_v`+)WwqZX7rxM{wHxFn#VIT&j#}k&k_&vuADZ`CBAr_fC!ncFi%r zn4UPPpKa})ot@q7-L>7dkj#wVZD!1$Pdgh#*Uglm#&0(>W+vTs<}W&y)6q?FH~V)I zw;yUsZXJ1q#;{5*ZYia(0t_^NCfDX-K_>B+}zS_C?voPj~k;a-w!escVG`^i@ z6N1P@Vr8C6_ z>A~+B^rfNNb~<^`qdIkb3)4r?$;Q#Rjh-q9d#=X2J9ItKOOJa7O@NENQR0!N{;^{jD&nET6ZU;eodYK;* z3k;h&%NAxiO2YnUw>Ka6L@=ZTN_)gY^Y$8czGaDdZcjI@xsgh`OjlHp0CqW$r< z%IycZ6x1ti#hYU6C>Bd6`Q77aHUA^&oa@!j)$T;Cz4en+T<(V_Cw9@8Ofup|MBz0a zTghGcqz==KxMgc|p=a$w&sr*(`4f!<$7e^6<~}lz#KAa)yYAv!3e3~YZ0#Ii3Y{m_ z6OLkD?@xpA|CHM|*p?e13*Ok~j1vX-p`k_b95Q6;+2mL6U0yF>l$4fSzi;#XJ@Eq% zyQ8Ik9?ygap|+_Pj54!2&)$alOL;kzf^R%@#RVu$IQ zn;`LPvU9x^9+IcxE^D`nl2^PYxL$PuTU6NcRyC8Yx4~Xg=Zpz`>-Xa7ssK~4gWY6F zE{lTUIez;cEFVb&E>unZ7h3br7$j-}P^(R+d(&>yyTg*_?XzCHZ5DgkCG4NbJUsZm z<0LN)br1y&20w+tU?DVGTBF=u;az4C@4JsNE)27K>)IWHp`S->U&sGSJ02Slm|!0i zjRe>4OyGski@FGXc_5BlWAI&XWjVtd3*tAzswV`OF4JEJwRX&R!{o`Rsi~hS+u1r% zy)<)rKX(myrjTx`?|s#B7MJDS(voixpsET^)7Gtbn1U==<&L0?jnmYqTs|Dx=-$gk zN9z4z-|Z74kei!^Kt$w)$6=Ni6IRd`mgU*;iPX*Z5r|&w{psi{d;1a@D*~DKIcUV>3x_rE$cm!(|2Jcyo2I2Rv*9%%}Yly4{Bj5?=ms)o{4yO@)3?m}L z?g#8YX_QJTj9Nrr)kD!rNNLsv=~(p9MXsOpaX%U-0*@?uQF{ReGTHpx1H?-sF``YD zQGOQ$+L>>n7T;}^@EhX>3=!jw&w1^ctt+wQ=ac%cwhl{OGeRC|%EJs_reQ*27;sJa z1SLu6In$Ini;Xl=rUDf^nbupXFkb$w<4gdI<6XbcJyhJ2z)>L0Td=Bw{-k4{-hsx! zVlFigbUi&E802<8X6!1p3bz+<9raFpI35z|Joo*8UokeQ6q6QvW~4dOWxMcUIq8fS z4tJ%;jpzi{Q!qkFnlU{i1Akt5XE+{*4QrN$(yM6@&&v0@drQjawg^t|zdusk6Mm^A z{ArtX=)8g2^o?EcBjbjto9?(A--~m5YM^n{^QAs*JNe_11EPfzue}+c<9#!Ik{J&@ z3k$g)U^$-5tBVwq+rA@^``Ky8$^5xo6rE!PCk;W6R7Q4MOz*M|!lnURCv#x2-B+LF zA?_EwguedA4`xYeu=vX4A|}4NVowmVDzM~RSY}bday@P?hq#Q%c4ZKZn~kehHt6HY z+J#vr@K2HfbPZ8-bd}T!Z$yi*F&QP*aMIJwLTL?)U)_FW;8C<<yUbyK4)|GI8Y9nwxYQ>m0J4Vk+lgnV<~1o~(p=ow>`!kUbTYko@w=bXy}6`h zebH~X!G8X!4OqUO|K+dANfBPJ=GkjapgVn0S4Xvx&exLSYVrzdT2Zf7?CsXlCOb#pZb91#8>Vr3ecbcWf)?W8nnlw$o{jA1ld8f%M zU^fpRGd-4wI@y)MvjPuxKSwr@cm)>Z!#z&&zA>w)e|SFAHozLq9_#jhOwry z*>kD)e%gN>=sjnYcwHVF8}o#Ypl;spI&x3)RM_Me?KgkN5O{Xhzo|7WiT`NnhhA)p z&mk+aaPC4(%6mJf^=Q^P;A$^1D<|;4(k8XX;A8m5xE4>W?ejXJ`DQ_Z4Bj>TRP-ou~a06nHA|ZH^@!e!K!MP2ant&0bgpqTs)q7hwTQn%( z-K!}yNYM&oEx~O^>iS?5W5nLM`9TMM^Wva*&nFer{-+iQ#W(UN3ot7W5#`4=NJd)j zqKLx@`98H+PY2Pg!lzD*{1wKOvwCd&^wJhiB{heWe8=w>mIyu5bxQToh4s*?)sgDg z5x3qi)oSe?m(DP^(lKX=lGy2%nEbDV@; zRT$giy?WhLKM8s#cZciI)1&dg2KS4@ zq}|;Ywv8?M`Sopq>gnMHmChIyH`EW0+}6g4j}Rk#L(Go4)itk5^?%er|C?rJ<^EA^ zqt%a;LBfAMqM1&@pGG(7@30v{w${MCIT!X1^iy9C#G|tvj<0S;lyIofm_n%ja;RH| zFpCtXFhBq3?@_naQMdc(9r<#`oLje{K#eY{%gOmm<^1>77ZfCpb6@!$5!;s2H8*?4w`2m`B-sBfphwZpiFsm@!ik8qjL38vtz=T1rXzE-s7(3 zZ{G@M^x)70EiD$7{P93QMrvwmrcpwnVoy(DVbOTu24bYR*!KIWsqlcJ9`VupW5Nm2 zhbG=uF|3AYUG@$4MsB(KvKh|$h&(qsRX?F*OSEo-Jh21~!R}1;>|a6C!{1*H7%ctr zxrq8_UyJj*pl|xRPD!ST<^~Nq++6ih|4rk>$5nYZdgr(QM)63uGNmjWzekW_Hb0ijst+RD^8~Oy*FC;O7X&%OKAs3)C z%Wy+k)9FmlFFez7G8C1O%z8|29oZtI?z4PG21b}(#$9qIqf_7HY?R!+ny+kjeBGEA zK>OTO@*q0uV%ReQu^9S$#Pl}mZU{6X`(pfezrn@T@|)OW0AFkhDEzukV7y1-9nRaF zyNc@WaK|SYZ$9Bj9ldP^eJv^JM)ERmj0R_Ni{b*TQ6$oAr+!`&_HQ{)F$l%c$@^>X z84Tx7WqV7s2$ge-1?E*xbax;6o{3joT+J^Ld(Pw`lDw*`j7%Wb`R<_G19^r4T>`AcP^m`eBkwHE?^4( z_fOC0AXp2uU1o2LS&_V$Ir#7Kt|i-s^|TGxurmTGKn-@yX zgD<@LB>TXpMP7Y;OkNyDU6=i^!tjASfNXf}q`huy6GM=V<{c7F1&`E@Qe&sXEjSOo z=hDb-YL{59`(5fl^4)Lb=;+@n{i&YxEOC?$ZweNB1RhsNs-YJ;tc>Ge%Z-<&3e3P%` zvNQD*=+TcP)~vAq91t%e)ooNllNL;FbJ_o_&~Kj>kVf~%u&u&w|Jw4yzz<7iw_>eO zpOIf2p@DUA+I|2gH?wpH=bNsbu7QgOERgn2z0?%9?4VThAQM+$=f^FBIjeS*h_j{< zruA}x2wL_KE%yuPhA92k9)c!)e#;-CUiY9Tz! zsx(Ew5p9>9BHezt!jA!I$5TwphbjO&O739`bB$#*Ms$@vR$9_GXgz5e9jp0lYt4}* z+#5lT0Cpt_@R(W)BBUMz)Zsk1QsOwq{pN1FI-}2I6+XS_5Y42ZwaD9iV?+Y}xh5hR zia7W{j2JO!n9is_{4IwUoKyG$lR1(AP_joxt-{h(-rU_+rgVhXcooYe40{$A=I;|* zs+7{q@H7c9oD&7pOULx65ilk!Eki*v!-*Xpt++rUh`TPh6xqbABGd?(Q5dKEO}Wah;Ku_@oTqxER409k!|&&-<{(uW}E$Y zN-dBSI>8Q1@b>{@hPOt!8YtlTQm=Jk5Z09 zE$~XG6ziPoH*o*7A1Wtxby9i;b?54Be6-|N`Vkg^aIJU<-j@<02%>0s(S{*tH+M5V-?(C$N5 zs*$iC&n-vEt_HS#)w#afiWZm(CxUe#F;s19x5V_OGVkMEOP?(}E+Dx!SUn{gmWYBBg)dM$sbuAZN%zQ*2E#o{SA|a-`Ji`7Gm$MO z!j{R%;K<%K6X{j*1mp@Y*a-`ag$o!G0BdudZHr>vQA@plcq8Q|3ma|}+FJ|#y?Tiz z$bSOv9pM!c>w@D^iiA~bm#Gfu_YnIx;9K?-cI1h=jtGzvc`K#)i&L zm(mV0@s~JxQ;1lDXKTT@N;_4^ph6ZKmamNkRM;BPQJYjJ7DDK(7 zEArmYgu9Rre0+WQk8mgJi6aj4R~~lZLKL{<+4icxN5K)@MxKYXEQA7(&qlQA?`)B3 zap|&FR}x5VLP0Gma0oe=(hANo-9MXgDtnpQ>~Glrc|Umtt;MeIJZY_xQp?KKyY1$b znHc~C0o~}O2#9-CWT_mo7OI8m;|&Fpb2P}-B-MPm*DkYix3$ln|70RU`m?gs&WnS~ z$iV_VZ_MtjcSzpRc3um3`eja602VtAr6c5EVVfvLRpw=znNIvq8^O_?+b`+UhP1#Z z$id z3DnlmDs+{WW)UY5>WF{i%JJ0NamtosW#9w%;cPd6nDCQJiI)PO&O)%z0Lk78zMGR*OegDMd-9TEtNLGz?kDb1|ZQjCAPEug2^^#I^ePDls@^6Np! zpBWRfCx)O%SgqwpVtI0K@toV2k`IIDK?+pGK5cUyCrcK^uL?pagG--x;+?thvj5UuN+}tSg^uLRbbi| zMnNBKnKdXDL~dDO%*HtSQXWqhe@XSr-4jNBvu-pYJ?fh%QVAC_mH=|dUQLt6JGpz> zex-FIANR=eP_TB^8}@?+fO!^(4O!S^9m&0;ESs79j@zeKrt}#VtlHDq9T1>w&U}^0 zAT%V2smYN6e4BzfpzmUoJ>F}%{eU&TxAPYJwI^N3dgDu^i}>TT)$#(k0a=2pVIt+~ zbKP}AMyLCN5}}~GYcm5|8Qq|;p(-h#*Ed%oP;O@Tl4P*eo=`HcX5_2dtSOW_X&mFF z(p^N0npS8hLAXg~?(i!$;gi~gfCy;xSD1V*)3Oc|b|gM3<;6`OehCb*xQ=uwMD+Rf z$Yc$|+~w8;Le)C>FO^=$_MoB>d7~onNhs{h$;Hz29Y#e@b2zE)==ukMX?DImgEPi? zP9lnvvtyIbz=6}4@TIBAfaD~zDNyg3YOf_sP2nSqb>$t)SDWZRPZ(Jq!Oc*zc)*tw z)maaYBK8hCYT%Ka_~~*zwIN6(FqeqJ$mO)>wFdJl^n#D7|GcuFf0Y=)WYDl(&fhhQ z6RB9ypE73HnL=4^B*AHvshrD1-lWP78+^Y=Y_}L$hTh<9=O`iFL6iVK zNg}7XREuIbhnOv2B<$-4m=^$ftci%MOFuw!KLBvVKrED5s6>ZthElL~s^p*KZY}dE zsrSX6np5befl_KX6p$)_9km+KM3BbgJ)Teentm!tU^cu zPfdn`pp}j#VK3OuSw*(6`Ie#V%>;o$c)lg~hA;`=b zC7dYY(J!Erx6B#(bO8O-+u6BXmP3~K5Ye}au;mCQ4rLJ6im{m3UPvZH+U&qg>A}sQ z581<<_<-cZl(n!m?Ggm9lf|l1~&qEs6aiYJd4gixUio}WZ!-0IpX{fFEPW?nW)oEV@kaA1_MFa2| z^CYZ!wWL1r14$tL{*hZBscQ+`Opg{IE@y%X&NP6eLm)_95`h;&62$RvXGcAz{4^_> z+HvmZR7}ewjQLAY%BVJeGxYD8Zc1!{1$ep${hk6U<)mf-QwGQclNf@)R2U^h@3 z7j0+RoYteSy=?i+zhV11LEa>rDb#6(EDbB@8Nw_Dey|Qd&;+Q;Be_okzl%n~V4oS6 z!Ls4`ED28;jL0F62;0fw2Nd|I#}J#d0q7&+H_wLDP2`#oP6EGQGSnqezsda0dFid) zOvj)Pr$-5i%FaUrxDnp2Q`pt?H z`99SkIL@IBT@YR=RyFDsKr|n?H40H($p(JM`%ciNIkQ_Zx{U5qIgd7x0LgPMw93G; z8gsRDQfjB<3wk0hyvwhBk$EA#hQA8nMnV2cgZtW(jn%!MwrWbq?IPt~ZQeRp+U0J> zN2rOHytrhN)X#@?Q^V5~K@&P2%ONOjnrOwnRld)@-|`u;v%`dswYLH4 zOkL@6;WqqVrF$PgN7=k#5qkl_F!KDA*nPYnYRLnGde?O+6$*yEz7tx2PFQSMmuV|#!qglKS~J68;P`c(=<5AocCz&- z#A3fpq3{(ei=4k1SZ{{o$x600tE-b8&5m;V3ikF-_7=EScuq3wkYY{&AJv;Sqj;K( zvOYcWY4=v~9IMAZ+?B8t?R|ZqO04{!f){alkjL(_k?mL==xwE=4Ybt3W;)D|iRS|eg$)dR zVO>S)#yTkhd6l5CmQewmjRMnmmML-0b~-Hi8q(;Gt;XZPSK)~ z$XpV(VN(@DVErSDK}L(8cQ15Jo=+b{1a~u%<>CpLUZu+NZT*~4GN1wF#{^t*ouYpN zeaF-blz#I@o9-pJC@mVvWA~`)2=tg^0m>YBP3NBcA~CPZ)Q1tP%7*8v1{ev>-ZAmW zBv>9%Zl>JX(-6__So&;(_`sVS3hu9(;Yl?cNzzsy&_^v!%Ca`7#XsH(I@f1kmhNic zBl}QR*KeP@4@u4si50M;M3P;NObFL;+t}awd>6RtzFN4kbxq^?20a<{I`p%kQ`ODR z^(ni*n`|J+RTwFYAUTb^K5&RFB=ve4sm7G>77sjiYr2h6eJN6xG>YI@MSnNd zNQ&1VDy*YudO%_SDNZTtir`BEx`3^dueOo<6rIi*KY9U`$MDeC_Te@Sqeo$+edYse zpK=t58axFTlxLEX!^sC(u)ht}q_g)n^&ufeA61#;4q;CDx0N&RqMvH5>C#ssVAXrUSlJ<4ezn;}k`@WKaRuvi_k+s@** zWIZMr7Za|e&I(BvB8S_4DJ?#liU}+Ba1CnU1D~*FbcBB>O^0+G)@6Jfqh`@EeOyB7 zcY@3XRZKkftn4LHt;+kowV1Ub-)vVUJW5n$U1gTH=zK>Yv^D6krbV_XPN!ygEZc|r_7cr>jh^MZRav)S{$x3ag;_J>)$ z+x-e>N>k&zjclXuGcUXs$C|uwzD&}oVObV37>%Ka(Cnpdv~Qav)H`UGA3u-`h_@(G=Sdamb) z-CCGi=y+;H2UEafr3s&gdV3q~fN#5fJ`-!701ypIctaFu-{=c9>&jf)l{3c>uTzynSJd6{gkvohy9g?ux*K9^{} z-o)v%8sZSF9TP3lnI8BNJ2aGC(Sh*)tqBn17kM#gO90exf~iVkat@^sojnHB3~QTx zFg;oSC}|*wbbUbS%-UmQ4wLsd$_h_ivam$x8`BCk(m_=Aq1-|2pZq9iOqlaP)M>In zz7oaoev~Q`%lz-1F($1ktB7K=_f~rRm)pm0Aklgb{FzpGuM^6ChD(iLBh6xf*qeOL zvTVVH^uJV>Yr;6^YSoPYEL(qiAd;MsY{Ao4n5|IwknNCZM_i;l*P5K-$PhAv*>$`3 zT7lvSIdOCbg`(to=!+FAOLf(gdC+L5{Otr5H2TsYq6TjEQYQ62KZ(1s`rCy5$U~(D zn3b-Qj6(8L20xc7me+@S*g1vQP_fBx7ltBm}5af6Mu*pXU4!oS*sa?ugd3!q-schTw5Wzb(wt zN}HkvC8Ll=nR~7Z245=1^vf!w{`OOl0AHZ=<`d260q$HfcCX`LQz?4Uks@KD8HeaR zyD8!}!~47tfejQ>71rQVfLZ8AyMrCed#W`+w8iALUsx2ByG%ZS^pQKMVu<-?2Niy2 zoz9dkIJq*is-i&giw$!9O3Krav8@9;_jFT%AIa`)^ofZDa2hxXdG_$6=nBdM7RLqL ztI8st%>j=E`@`$yA(7vM_6|dt-&N0uA1N}hCR`>zkWcXqEMC>WP&FQ_4`DE1mb8dh z1Z>5-%Vl2fc7||(sJ<8Xr%<|!RDOn?H!?ou#s<7GO75mZR24fnJ%1^}0>M*dOlWI4 zP8WeJ2|!+of~6aUU;PvZvzpT9UO-PCMhZZ1Mv*RI8V1Kf?`$IvEKb9ExA$3yXtTAI zESonKGonB}*6osm>l9MaX)F?LdfU|z%a#HrCW#hFF#|^AU>p7R9T0w6!FW7?nO~DI zjVk=`dPs#SA&{(^IAg?``~CWL{2afi#D}u>mpyMf`(Ka}q>mLGrj}>FD^||F9AWc4 z&O1}>U!HFUb^CQq_Q_ZVh4e_Gsf9{=_y)bpuq-&J(=u%#-?6}NE?g&R0Dm^Vh1nfg zKeI*d<3f}y$_n8e$9IGXnTz_tVi^U_Sg3FE+x0tl$UcAJ50KVEVsH`oS@M--ZljI2 zX+FxG4^(7DvHsQ%5{Vv{oj_AFY0f_0$-BIsmG_Bz_88sjYm)sFt$*7ON1P=lru4xP z2Ie{Rl#^@b4M<@XMy+oBpC4%m=f;eB-h6;v+>$a%`{pxtjUX12;gR;A=(555vR0Wv zYQfcC<_fI~gG^tJGITIUhAn+B6Q}$<%ql<^%?{K$e?;}WA5CqrNX<0j!67By50&>W zroZ7<(<^Wn(e1FnExEVRp&m97XM$IO>kPK9Nhe`mb2J&*nwc3>xlTSAqzO{Vat_T@T?7 z;Gs^te&TY7#5rbZN*{R+js4-OBuEH`T@P_8IYhY0oujRvAx8YRuJv25nIE~k`3M$R zg{JGRCT{`Kmd?cAi08B2mez)t4-*h3u|~OVoB1?dI=(k@Jx=3%Ykpzei05iBRPDY@ z69yj~RrWDSxu|!bXys21#75i1-9NvtQv?(~#vDADDls=sev*>5j?Al~{ED_KoKy*`8kF8Ae%OWs2jxzk5y z29z*3{(@E0e8~21OEhgM4YU>A$5eC(CCm9e69f5Wp}g@KJXcvx0p0Y`IuWzrlJ1E} z5o=+E99nP}AOK7(p+YKYtUF0gA$;IN&g?O5EskflGPAF4Z>d__jV_SyDD*q;EnXB@ zZ}Z3M5b5yCph1fB)3{k-iUk_$Spp+utM5lh?;*giOyE6c>ovtWvwVLJ1(Mj~wObZN zt2h(Ut3L(TH$2a8*~E<)eV-IGaO9aA>wbW}(V(p<{~|DDW9~HhbZCDef>anz&6IqT<$IpYn`pOM3%+f2&w5`pN;} zHDzWDE!vfjN@5Wjs97J`_yHJvuG?P)t#mcf$O3_OP`#J$tgV-+&@KH&mNGud<`>Iq z-Rmrm{kS97tBszq;z^~`H+TDlq*E_YyZc0PnpA^QzPgI!4QNKW$JI?Ct3)SPt|)7* z-20HGJ0WT#lV9s-0LR6g*D^U#`E>LWlpZ&xKN)K^BdxoUG_kC{`YKjsHEHs45MXYT zJ9_vJhc11w(ozAafu`FsH~aGS;&o}xY-_wLKzYUslf&6~#0xL0ylLdg2Vb!-v)HLZ zpH-rO39j*=N;boWPpTPGjl_^DAlms&PvrJ!K7&Qy7DeQaP@by$MLLLA6zyD7cr`SN zUm>69{XKyDK^n7()6Y8{2K{nkz_pA5pQJNXmj)klaq?sYidan40Wn{c5qzew5xa+WrQ}i_ms%x?J@9G>Y}s?BT@oAN@!3KaTOna>$J| z?uu$&QGm}~gPXGeETcRuwXT(%#*>|XUH4yZyA58w0K>iaTL~gjNnvX8H#ynW3mkUI zPW)f+73@?M8nD2A?z$$yz!62NqnkIkovI4_Zmf|a;-?&z6zL=C#6VEnSl)+jW9tR& z-N7q;>stxMbGL;)RFSIMx8TSsT(^NL3-yfaMN&b zOoymHF?FQ`6EE9}Md(S0k!HviCMF#*fkD)D$N}vjV&CFqsW<1G?-Yt&(5cz|Y<50) zs$$7})CwEOdt3!A;jEC;OB61*ed&9iF;IV4uK9FWFMu_+{=|m}Qa0OZ0Zv{eX z90=jfJS%uKi3uA)7;qK!0j5n*D**AX6?CIusy*wle0#Ap5TBGFPNnjBg--QO_Ly1m zZHXxxD5sy;*j3Ou?)?Q<@D+U+Pc%cTcDl$H3Eg;scrxglnqkWymH>czME;|{YXBZr zaOIOs?75{c(=<0|sX>;b*FH!k<#-Tjg&=tAe(gE&3$lBFF@b(t%~-;s(ka$|k@Wj! z;F*WUEmc*=)tahL8I?%?Js0LVp53TodM-N!b9Of=Kdf8ltJS@brV!qk<<}g>Kx84^ zZ~o?M8ddlRu^#mg%a!U*)S><}IHt+aC?Yadesv8D4!rS;)we(F-#Bkbuw;@0C_@Cg zem8Er86atVGje!9J`*7y>trO?a?1d3j2fj!)Eb2 zR%qY1_N-Tu7kVjor;}l4*%|(a8HLa+aSIutQ@eEdSfd)E_7#lScc3UUau^CXBL~|W z_H?F>S(aRl-Y-D;UN~nPoG*m+J#RJRl*lBGRsRyBv!Q~PmIjDUmU-W{6yL%s$9E%v96W=uJ|Z2 zvbR;#?b=j5&Opigl1hmo75)$~!8<=i!BdKWcD@Op$^{8SC-VRtYgc z=hU`cpN7Ew!xa%DAKH7rurvxL-lOtT;S}u&PU-sm z-J0a)`LgzdWw+&92M*APB7-19igN4Bpi3;6MpeGiy$hG(Q-;Hg;2TY#cbUlC$1fL$ z2y)mmxX&UF@ZPfyaR5y`5LObsxPJQLGrk=q4d4t4uO0{YaHk;Ahe%$_``066uOHLp zfG&4+evhWP$R+%lXI}7t&awVa#JajtNV}{Kn{umwK}u%Id&i+m2=V z+bCRyT;IxZMK#(2!l^8A5T@Dy%Zi01f*}nH-})8t419i2r~;17_{6$sUgk7+e?Z_& zrtp^z>aVaxki32WS+7AvYYk=X13C`Ww0njOiXk{K5R==x1B1B{D5ki&OC<8f^nQ+V zVE0j+p$Q}7nz&6mL)l%HCkw6n4ow&OEZZQvn`8+|@+S46Jj2o#UKIc1mpNbvHr~c3 z!QhV|{Y-1}3j5du3Edx!9~j$Fm7}>s0ixuWpAWzVZWZZCDCE8Xq$(*vGQP_)aNA>{ zZo9GR($f6uDgAPZ@c{$^v-*i0q}skzkBV%}NnJhfG2WwbO=J1?auTM|iJ6!3J*cl^ zN!I){ZZE*<(C`OdZbX;#l`vp>LQL@Ao8t2_Kh|7P@ryM|WxTGM$d;zp06p%|ET zeBFkgPIN<3p3ot-RRJAOF~SIq@B=}IFJ-p;(drOs@gk7^jDUbsEkAes%+51Tal?5m~$=vDtYEVo8X>}u9s6#8VZ1zEet@ausxw>Gv) zAsYGSR^p5sGzVowb*+!J+*KM z3Oskasm{k-U8xPF))23)v5{^X5C3?CbZ3J2R>qJ?Z*3^VlWI`BiuXQ$6^@aHGkS5G zv6`{Flfc)DB+hH89Q*PPYf% zIb0_Q>5>9;Z&_a+5^m53@L9tHPH#76g9aK}l32Q?ewM#`12pca4hZxlFl4w&sZ6x~ zjKYa_^8xy!8CK`KGaDxR3luf+Qv+`BOWkir?v4~)Zf~X9?i6^sl`EHxusY%}DZFyFs>JIaqCH_X`wRzvD>L?wju}%ZB|BZafe}d>bJubaZ5d3eN z`!q@O$NznEpJG_{H_!0DG|-kZak70OK>?$?0w7iN@39Ky(Xh%ufwI0g#>Tkgt)8jl zWg}sgfYpv5h5*+%%kg)Br%&!p$~d8LbmO>aXUG1R0QXM;qbozRx!EScRBLcrT_@e` z_lAqG4tu$D^wdvY?yoxb4X(*~i-`M#QB^TK)Xa={aEcqn63XqWzOzoi~abJpruFew{q?!gQRUWcMW~s<|lJl zM01}aN^S$>`iP&U40@a$H=iwj>|)6$9NK5#+EsvG^wdF>(Jj*whPE(<0fb z1%vNLh@^`vONnqp)gQ)?;ryfeCU;BjZJy?r;_8EPuX(@4B#WJ=)Sf$b)8F4qm`HfF zS{xO|(APJGWJSu#o<1!te(+INXM~+#^C?rcx@FQiAE>c!HOqCVODLX2zc1uiar zB$;=^5DAjQC!J}yLkvs8^!6mYhfmAj+88r<)31{nk*{dMD#nvPX}xn(x>02*G@w4FRtZCXT4TTf@odBRTusku0EOV=TF;ST4Jtp zb9vxYZ*ONc^}i~9dFjS~@3txY8G}pTnUvz$BXfZ>FxaakDQO=(~+MxqvA=i?D>N>wyjs*nV^ZS}<;@a*Oi@oOV zFvJ+YgdKg&+4H_^Sev_Bf8_q4a=dmGJpWUdr2PkFq!Cb$x)gV_rm9N+kMg2R)e~X= z_wO-r15#952)DzwD`>ho%!G2)^c|V6j!yp8evL>p#PvUVTu^VyNI^Z@3>{(0uC9_u8QJE?QToVlt zO!IHHa$DGEPaF2;y2`i4JE+#-kuR~ZM(!Q*T*EHVL@Z791b3q_!RKKaosqmC(Nmqz zxLXum+=uUQ^+{2Ac^D_0j^Ei*P(W^Ar&Gr}jEB94f;RNOu$u|9ACQ>BK++gt=2mML zVLl01a<^lR?*rD7fCOg@{_cbtO%)9QLy>?}ZtpY4w}PW2MsjIfK%xABQcE<7BS^#8 zk()Mhtk+!H#Z6YjAf}g+|Is*sgq^1+74K|=g`$?+a^b@#3W~kqiVFLjWWMjn$;|Ez zci8x9Hz?N_x)#}|d^F0X@iEk*p~OZ<%Obybxws@MTWlWFbN=^iOI}@)pkRGCSkK5w zAx&?j-}URKkCH6o-dDTEIezOh$Y4>R(FgjZg`O3&x9HTX0pSQ=F`W>kYZ~msNY`g5qh?BTrA)|;5SSl{c@xOfTc63y= zw!gm4RhgY?s{efiB6)EtRwcFY;7iCC&8wyA<##hx{M*=mw3$1XNdIVls?U#oQsw)C z1xlZNw8^#S5G&PNlnSbd#lsUzdHeD;E4|ICgZ;B3X#XJlQH(j7Of)!}YrN8+?*2aK z%Y|=G|MW@NI%(PKw*R|QA=&m{l?qD2&DC|k4a?BF#>|NQJN#=3)J?6~md4-z1yGjP Lcv&I)F693L+&WCD literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/formants.md b/plugins/community/repos/squinkylabs-plug1/docs/formants.md new file mode 100644 index 00000000..484718a2 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/formants.md @@ -0,0 +1,20 @@ +# Formants vocal filter + +![formants image](./formants.png) + +Like the **Vocal Animator**, this is a filter bank tuned to the formant frequencies of typical **singing voices**. Unlike Growler, however, the filters do not animate on their own. In addition, the filters are preset to frequencies, bandwidths, and gains that are taken from **measurements of human singers**. + +One of the easiest ways to **get a good sound** from Formants is to use it like a regular VCF. For example, control Fc with an ADSR. Then put a second modulation source into the vowel CV - something as simple as a slow LFO will add interest. + +Use it as a **filter bank**. Just set the knobs for a good sound and leave it fixed to add vocal tones to a pad. Again, modulating the vowel CV can easily give great results. + +Try to synthesize something like **singing** by sequencing the vowel CV of several formants. Leave the Fc in place, or move it slightly as the input pitches move. + +Controls: + +* **Fc** control moves all the filters up and down by the standard one "volt" per octave. +* **Vowel** control smoothly interpolates between 'a', 'e', 'i', 'o', and 'u'. +* **Model** control selects different vocal models: bass, tenor, countertenor, alto, and soprano. +* **Brightness** control gradually boosts the level of the higher formants. When it is all the way down, the filter gains are set by the singing models in the module, which typically fall off with increasing frequency. As this control is increased the gain of the high formant filters is brought up to match the F1 formant filter. + +The **LEDs across the top** indicate which formant is currently being "sung". diff --git a/plugins/community/repos/squinkylabs-plug1/docs/full-wave.png b/plugins/community/repos/squinkylabs-plug1/docs/full-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..35f4986a1bcde5fbb0c400436a9d489bcdbcffc2 GIT binary patch literal 10118 zcmd6N2UJttw675v#MYxre!qwwyi8O$6isdjb~m zaf9Qi@$eLsec&K_7qAD%6R@K*RFP}Dsg;Yv*+G%ZOiD*g2d)Zsa(>{402}$~8r%E1 z*vmR_DJyX(_{iZHxPd)D96oNYP^6rXBG(^$<#6}EyG6M;{vh#iQRKS!TOfzIjy{Jf z3<2hl5|I|R7nhXc0LqGpOG`+~$_jA+#KdJp#biXqC4|MLU!fE=a32yLz*g}zixe4bmQ6CUoR9r;tw@H5xI@te1 z2lqs{{vq7KUKH#Kb^}8_kT_cLe`w)OFb^2g3HHBX{m7nk0GvhCZ{JYdhV_!H})DVn>c_Qq=>RvcCxqn*&ms3T6K^`!KF%0JV_eAOctulwI z>hFn><={7ShC0B!kpllR2CN4104s9+o;YD~F=2qXu{cmpLPAblTv!Y!CnokMsSeD+ z8RGlDkOIWzB!O}OnSVoyiy8-z2k1W~cCeR&zz}XAoXyT|AV;t$9O}r$@sB6vRAH_# z1WqtcJBfeo*HTs0N5CM?uDAzCL(TgfTI#CO;hxLB|u_Nge4>-A;Pi{fP=6EL0f+Cmw z?+^gvEcmnA`M>OeKgWAJfpJX#gShyU3<-mHc!Ln&dyY77{hx%MC{BOT-)Z}&DWdl^~Npv`oc598r+-PBUMXY4bznHi2``O@;` zBBeOtE-l$>4l;rbJ5jss78)VD?aU`d52D`i_aqDTB!e636ndll6Rlj=Wor{BB8@h+ ze0zG+`_hl*9A58I&L359T*I$l`~jDV?}I@|f?KAiFJ@uNXVde^O-(RAFDS%4k|6Yg zS+{>+HpR$1;Co2xW0_S3`05)BbIpYw$c)IiKjAsYD8t*Aq7DqSvPCmMeYQ8zPvB?8 zFL$pZf^qvpA+b~oi@#D`sqQ+Vr(CGMh`iJxn1mc6`?(#|juYBOe z>45!Ng8A!J-2Qo=aa$XYcVu_(nnQZ<)eg=0$`!j4DzQyi5d5RWP>j zO3&?5uTQ3;KB%dB8A7P;BTUPc`YX=B<7+hMQd8GdO-&87Tpykeb9}qjb$uCyx)H0V z!B^DCEfJHpC`>xTVIDqllhJhpgt@r?*{BNXej}qMA||ZnCd@gt?(>w~nLP{LNBSwD z@)C5K?J5fsi=tHKV{1QaHgX65a7}lfk$c9*)rYRWkAo}oOAAU#@P`xLIzJF`?Mb!k z^%_WT2BeISj@6}|e(6e|k`L!C#H=$DVX6|*o&?4D#cybrKbY6F*n=l~ zVy-&JYHI83T;6O_uOugjYkZMPlj|yS#6M*(WR-fsGW3&X7&9C&9NXzgUZBQX_^Ia} zRfPlok6X0{^70_F=*DB7V#92xN<#&!YNAoY9k8M*_bwAUb}a6lA##s(a6uWt$e8|| zhv0tuuSMcu?mPp>OJ+7^X(6sHTFvKFy5a^uC{^w%h4<^AbD6rCsOcy~hHv3};IBLJ zRm%a0@2aPSYR8w^MiAF8B1RdYYM;U@6PY&QP%zlz>69OZlV|sXHn)7&S>Z-HT zDAk`s+-rp7p@euEoh*o%lXeUfe_l)7Z4=V7#`?ytyo>zB)wGigSz|hDZtM1^q+`BM zL1e^)X`X8Y?Z!Z~9NS>tyruwu!g~&0o;S={3Q|oUV&==+e!Sd!I4W|i%7@oGH3!7= zCXmhdGRO>gHKKz~U`Gc(VzieOTMdsxXrc|Atn@@@= z_>kI$Yh5R2Dc=SyVfaNuKF3h_6G(Y^!F6GBy2d&IM`=o3iW#LMX|3mo36@cOpxt%S z`||fXwFd^O`2lL`duVeH4qq_cZ187Fs`|1bdip^{IN61Kj8TsCS9+;8ZTCEKVjX|% zC6A7pNHK?ohCF+jL@-`FJicX|TmW_6EatRmfrqA@OsZ{?Y;ib8p6T#n2HuQtW zR9bS3(Td2jFu$+jo)f3a&9%~D%zIT(!QYT9FJ5~8QfLf;ko!hDXz_=VnIDFk(Y}7p&RAC7##zyuk|Ylx+`?#Z$B2v)?cZRbe0xk8mEYH&IcqnNj3}K-AQo^p zjp@4;*;AUnlKc%Q)S_cdIThzA14^0jqmOEDYtfNS&%19%$Ifs=;2*BfhwY|@UD z@o@`UCA<%VKu$b8!bSF*pEB&Mqv>B}p>*tWk=Nkk&NPt9`1Dze30-sM?{~hVvjOm*EI4mCjhCJ@ML3mF{oCpQh>3#re zx+iAMTsa88HbdQDafsbAf23o)`m8NkLUmv{bt1Lz4yKKqnfR>L2jaGMKpxE{DArN* zj2M57azOBs@RoJNC7Yr=3*igK#{mQm_7YHiNmirjYA5w#V%CuSn*8|M4i!6(BiFlR z&lpzH(&g~U&;8HaUoH1y*w8eTlPe-N1d@G$+$8l{s|t!b4Vis#gy{fuK={2m4FAL& z?A3fPBlPtVA@(^n{VheAbgd8rhEx{!ca%4Sm#M0a4Ij(P0&kclssC8aYo#%_yKez! zFG)|!)qxWeJdNq!p>Styt*9?<)i5IIV<#sNJhu0j7LqG}SBuX`Hi&Z=;k%U-Gxzl3 z=C4zylOuvM1XjJoRS&qufP5Cq3u{x@SJlsnU(p2X(vm=T)}1kIV2xV+G^wW>tK^YU zl^E9)MyZHuvM?c9{0Bo6ZM0j8n0wM6h(#>M?z`9DX&r*^qC_(-!q>hyF6+CUfa%8h z6=YNKU-TMq5v#7=E?Q>DnH*X*e-nHyZs5e1g#kpJ+c#&10u@lUer!2SEcv?JW*#m71_=f|=r~<7sV<;D zaRX(PQ?btfzQiR$Tf0yN)Eb6qJUvU(*_`Ywz=Vg@dKu|un?;F~lrW{G?mZkP4W>z~ z_lEs!ZmF9WRA(?X^?$U&G2_Bc!EAx>DmRN#DyI@IFF!OTv9vac_CHD*05EU$cVv zJhpx&js@GiIk&Sb4(f+@FL^p?DEeX5Dtn?)w<8}Iqm$cBp@=jKpMloEgPez(!Wh~9 zQL1ol#l|wUw5Va${6r-o_VPN7f!-zHbaLBO^>{g5bEFql#2PTI^)jc)@5@*iA162W;Un4_4Swg$@}z|Cd9ZDS zM=+P=l2;I$2hArdm)o@=Qr!M3js#jE{APLz?G_lpY<3;N8hN@Q8E5>KJToTDFj2Kq z2jBQ*DPtgZmVStZ50$Inv&t0}9kA59I4SiD@(u#m9KseTIIIzW3%5T11RQ3cr%^8( z*1Jk3Y;n8Cgh4}w!dVBazQs(*kYT(f@ey3m+UKi}DdfLo7_m>Zba4jme&$Zl(ygwj zA_`t}#sr6p=5q9(x`e;X44PZ@vEim!Rs&TR2{?Yd*YR07ED4c@2QUv2aQY>Qy{E`x ztv+`(2P)g&_GgnY)=)kxn`A%qNkc?K*iZZT2EKb7STqHAT1jZ=aepjBPltcD&x}*L zh|+m*>#zg(ao2)?iAYi#?(KO<6;_m$&#KFwzZRjpNnRDu2QB5zynmA^h^@>%>mYk}7+JlVQFJ8#X+;(jw=!-enP|u(_61S(^m*dR zaCYQdUM5MJ^sRtcBAdrchuK^S*%3^HJ_Q*h(w7zC{L0ix)Q1N!{f^y?%v{Pf zuS?LY-J1Pr0#C7-S`Oda+o%&4b2+ZNHpqUV*VAVQ>|X;Gui4O``A(tb&(i!ICk1Y- zDTnuokJ1SDx$QHye4{~?YQB$p&wH)^wDdu?oO>G$N&-IiGOZHFZfvQT$$}sqP&pQ( zh-K78&jt_PAdbB7xaLZ>{~cU(t_Gq=*)NE*KIH#C$4W_>oU)fM5ZV_l&&tkcnz~`B zo9bfAY8;ArB-?dg$kCjsa<3@q`|H=V~-a85}0-7VN8h z_cXb>46-5MC_FcYra4fWq1D{~(2Q~sovGdQ?vMuWkLufnUr79to=v-;t_N=gC2clVy9*Gm^4y|YG1P=M-U`Mp|d9W!YP zubQn<;n_jqrG?EJWZw!!tx2$J!-9KLx{?ZHXXX?@3Oqo)hmdFa@A#o&nNO~YX>rkXh!r1d!});#e>&2 z8PHZwzR*@-f_}L~wlC491Rmd5x@o1~7MtpK2H*aQc(nCc#nd-0h<9`ErQBk-w^cW1 zxpCOw29Jg0eo|`3>4CO^p};*w&?1O&0n%qVb;?VgtSk_fbpu6omRSo%Sk4bI@*za zCClUQ<4t}X5cRa96pzXI`mkme9!^iFk3@t^8@~k(nv6^^Ij7{$B%~;5Qqg^zO9+tn zMm8O~?56by3ww|Ho?y-T(|kLhf!1uUf-NLUV~d!rEM?=cYJrK8ap&ye<}ka`Ca9lK z-!`TE1)+Bc2x>dJ*b0}6V%V-^?d4BdPMF8-C$ngldu%J+qaETx`#C~k&07QIQ6Kg! zDJ^Bf&1n|LUBjZ&+#C6ZbtRzXTD#6&3n}*Td|#WUKz{zG?$8iHC{XA&HcevYTKn#~ z1~3$q?^9$Sw2KPQSn!HG{zlo*)Mmc~0A2?xV5zXV`-6xv<8kcrB|^HT3?SUt`e^Bm zQ~%CpbIn-H(#=MWH%zg6dFA3z%hR?vaB7*PFwPHKo%L!oa)0&|RHAEGpoHrU!M_<%m8qI&V7DGdS*mRA_;LjTl;8iEp`RJfOgl zP9Kt{)vbT#mS0rf*6`5`OxxQLPugZ>S);0?zyK=#sfK&64=)u+CQsF54>{}S)=_(Si;}<>a`1ayofQ!-wlc5p zh9O!3NDA~bLk*C}vZ6BGGoy0Dz^b%qOi`APTGxtF4TG{;7QDc^mJQM$(x9&yS2C4iU7+B4qTUlN+ALq86Wu-Hv#4k$;3zK|3pT|(kiGk0DzC2= z!tC(I8f*zrUiav#xdk`g=;*Z_2s*WGd6Zrt7WE}QGBZ% zZ@CScoSEkN`PoTrzWwy&gybzuk%$4b0i$4!+Q(n&=5d(buNF?>cU+VJI!dq!Xgc;v zw>1?G$^=XHlNt>WpWeC=v_-wp61}bxuv`XX962oGeU|p(qOPbp=fjK{9S%8JpY<&`X`_trV(EM_O8o{2xd?&XrFX_FdVKgL3z@pO#)VPFF*4 zP^PMcwN%oFNNVo8wMaXsg&v^F$wbZV4Q*fhQUNYbt-1KoCgYvY$`B!Cfq355=BldP z$cs4bej%TqO)srl;~w@V+oqN?k=mR45BTwLa*vFT@WHjVjBFQPPrQ6O8LH))opJTq z^s~|J=vJPq23wWX)fwueN8tmd%&)u;hX5}#B({Up1E_rUF0Q3?)R!~u@V!Gig_Rao zi*BWw_}SoB5p*DLpR=QG^a*Wh``Wnw#FeIegJI@8Q{b7A);%(+#YZ&h8EI+hgO?SU34QJ}hFsdZCIuZ_7(C8M?a*f2 zTtHUQUe7GT(oL{OHe3?zDbr{2EF-R(iFG9efp=&(8JI5**DKSeFxblVcBxFcM%vdsb&3TQUG<+&SY?K1y~bsTxG07yVz*ayC0ktC z8L}5ICOkMNaIxxt)o8HW+p{J5XkYR3?NNWz^QV!13u#LXzzE;LH%^ryYdQfT%^U5rDlw?Ig<apSP^*G;A?_?wBO;IA%;zM-pjfk_p$MLe|J?VB|he2z2Slix8wEKeZ5dJ)t*vc zr%9^p56k4e!QLQb^-9LS(Zc`7V{w|5jai;Gtw`iAu6d54rh^3Eg#gWdN5D>_Lge#!L^&efWVAq4LLksIsn0DGq&bdsNjpSwMgz4ryPhgBi1}mJUtWxQ ztzlh2+4*y?^15sMxMPdNHtT7E<{f;jJ6#uB(Wf{yp6;z~*@6s3)#9e}%ANJwGagH7 zhBzLZZ_sKf(&fJA{R538%FA*&tHw&0y6LT#MFMpnIq?0K@~y`Je2c%{5x#`QQ_Ke> z(uB2=*uVctu{L`ki5>q^K;$QOH3dqsiQz;eT;{jZQLTxPfh~H>B!R!mKJMK$MWQ6; zUrbEI??|z6cZB*jmN7(YdW!SK-t%SWA7=d(CeMDP`1GhZ1YOkcJXI#%$_TeB)_;zu zJyiJ={PkVy@@t5KZUfAa-9Ng>=oQOUJ;~wc!H>Ck3(G}lfCX$7g}D7J8Ss%NKf`T! zdD_fvmuu-)<}ttH;D(yQf&B}|%$bAC4kM9(Z6)!y#xN_vKReSO(1XcyULPnm@uJbQt93Z&!g84nC;jVN?qxY6JV-4@!g|E_#VIO^2JdqWb6 zUX#6wB>{maWOc2-z>N*d>e(M;dTc01Nl*XKy`9VJ`q0Pl8X;BQWxr5_ zyzNL8CE9X>4kK)H{HyB8#7~BkLI%1V+{QrgC>9juC5qi(Q*mt)m@d`dX$Q`odR1fe z2{4mc^wPPxEyuY}3Z@OVXwnCiz>vp5!;c#lbMw641o%&_*ssqe;dTezgwNM;^C4ba z)Cm|vZtpiW#qJSKi@Gc;iMw8=nxD3NiU#I3uU7}9DHcn5h_a^*-PAgn%_Jh5y!6ap zPWpwM%RAp%(s;;u_SIx(=MKyu(C$oX{NwI)TEYiF0Y7%5W&u~g=u;gstMN-fEZWyi zYFPJNUMKgf7$%dzsPX$K^t-tcmXZ?5#*OZ7d9GH8}yt@;J z4(Iqmfdv@aNPX;^qvLP5jY>fLg5D@(YEZb=gOa!rMMmSh=rU<-s)e$W+>f_PGe9A> zUSzstJD&RrZjD`a+Ko1$R2QGiU)-=d1z!DFrn-J40Nnm{!m&ABcI;iZw0D!oXh5NO z)E0IppyJLZOA5d+@Y6Y!7*Hx-65FQAKv7%EaWFjkD9{eE37UgL_wwOy3GU3^`Q zNka{`L9@Bjs2m`?40QtswRRqzINuQnzZU|rW4+_Dyv1OKB8zm(?}S~H?O>J3gWNku zUOaQZ(_X6==kQ1pSn<2;1YJW@bDS(5e}1i&Dl~&*QzozFdaSN#4TYl`Q#5ql-4Vci|H zSk-&#CMNdPW>IsO3lF2r2%@@LaP`eGow;G(0FA;r4;vG+AY0F8s>X)oMC4~upJL^Y z%&AU^ICj(pHnMOS4e!C;E0=tuoxw6y9xJZHouZuv?j zc0G|t1$|#$sv;g@NWSppCmJ2KWPuA=y$f(4LMYx=L>A=;uOoJ$tHb4{PKK2CuP@Sf z1B4$6{0mn2>WVSdDj!$et$kemC^D0okC*XLS1d;bx2b{K)%IQVt)c$B-q7`)4EoYq zi_T4Aw6`dhG%)vv7FzZ@3-BiEt?LV&M>_iC#I^StiziSXI<5gKJ|S+#IY0A-9tTi+ zgqIT%b5~dR{DHrvse@#30OQ4dNos0&Isoq-og%%C*-(uyCoUfKU~{!pepY-rnNGD( ziRUjrjX)DE*q8{D)wu3^@ zQSOv@%Kwa{i#LYtadfGR(3G-VmWgruw*v!{pT42>A!GXgplMb7A#DQ2B_SQUp&`bf z6N?}z$-C21GS>Pwk>u-4%uMJs=+kZ2ZI+=m8arBp%$CpjIN&ZC!0rAUsY}X@6o9DZ z{2F+{srIGN@oBo%31#9Fz_u5r0i@#~*(YnAa!r+9BYQzWb6;vv zl=eE4V(28}Htt1T6}8m{8mF|&8z0EDot$tmFc+0f`Y=O47MV#-c6LpW=$(NU?zAZO z>YX9y{&AnHs+IiSjZuxf;Bx6&QlBmx6q5#lsbehB3I*`H>tV(gW#BR?*l1tpzbAM*< zlsLL1|B3#4^z_$8RB8(2Gp?B1(29am%~HLPaN_K{e}HP};H<{vS{$kt)9IUH(87mA zIs!SW3ua2Z-rRebaai8x{~Q4s_+b|TT#7}lFVMU={yHTW-A?lS*9q^nSmIDS{$L0W zCgZWf;aQMi_0Nk7pwB}s4<0mgi?dw>CtcUUW1dy~4UXa0y)A-4b|o7F5AG9Ce4Bf1 zk&5uK2tWz)?z88x;;W)#&bb&p%>+mUome)m7SJ^fBZ5NYY%e&KHml3&J;TO3Wjmb1 zlB&~@y}15XnwsKhz2^%0EvX&Fgb9BlUY2C`G6PaTPXby=#QBq$PVZJ5lm!4A)zdsE zKqBrm&uLJ3XRIa>xsQWQaX_DloXp1)@^X@xn6Q2Q*-^^F7ZS#IiOt9PiK{pb#9tN0 zmS}L3Pl=1qhoo_ffAS0TrTZ-8BUDgxSY2cW=NXQF^^|z^H*&QijJ{)3p4#UhjF2{p zP4i0HE09>%zc}t=4deX-gPM{5;dSE~C?NRK{b?Y6+VxklHLvc^!ms@>Q)zI8TFF#C zkAF_+{2k6MXbs-jkgoO4b8jyWX6K+PBI1TY*>$ob9@dm!+h#|L^J@65(qz%8by^gs zyxK_6kO6`n=2%dVtVkU+h=en(S|uYq6ccMMC2F)n{T5T l@d@fL+5@lG=yY9?)GhY!42JX!{r;z%mb$K5`F*>W{{ym##E<|0 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/functional-vco-1.md b/plugins/community/repos/squinkylabs-plug1/docs/functional-vco-1.md new file mode 100644 index 00000000..62a402b9 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/functional-vco-1.md @@ -0,0 +1,13 @@ +# Functional VCO-1 + +![Functional image](../docs/functional.png) + +Functional VCO-1 works just like its namesake. The control layout is familiar, the sound is the same, but it uses about 1/4 as much CPU as the original. + +We believe VCV's Fundamental VCO is an unsung hero. It's one of the few VCOs that never has audible aliasing artifacts. You can sync it, and modulate all its inputs, but the sound never falls apart. + +We "forked" the code to Fundamental VCO-1 and modified it a little bit to make it much more CPU efficient. Now you may use a lot more of them without pops, clicks, and dropouts. + +If you would like the details of how we did this optimization, you can [find them here](../docs/vco-optimization.md). + +We have an informational article that talks more about aliasing. It shows you how to compare different modules using a spectrum analyzer. [Aliasing Story](./aliasing.md). diff --git a/plugins/community/repos/squinkylabs-plug1/docs/functional.png b/plugins/community/repos/squinkylabs-plug1/docs/functional.png new file mode 100644 index 0000000000000000000000000000000000000000..2c927ee38d19fc18b56909e43f6b1f1910e8ed04 GIT binary patch literal 19574 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 GXZ{1(nYdyA literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/gray-code.md b/plugins/community/repos/squinkylabs-plug1/docs/gray-code.md new file mode 100644 index 00000000..49949695 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/gray-code.md @@ -0,0 +1,18 @@ +# Gray Code: eclectic clock divider + +![gray code image](./gray-code.png) + +## About Gray Code +A cool feature of gray codes is that only one bit changes at a time. Having only one “thing” change at a time can be interesting for music, so we are hoping you will find some good things to do with it. + +WikiPedia has a very good article on gray codes: https://en.wikipedia.org/wiki/Gray_code + +Our Gray Code module has only one control. It selects between standard gray code and balanced gray codes. With a standard gray code, the lower bits change much more often than the high bits. You can see it counting up. With the balanced gray codes, all the bits change more or less the same amount, but of course no two ever change at the same time. + +Each bit of the 8-bit gray code comes out to an output jack. The LED beside the output shows when it goes high and low. + +There is an additional output that adds up all the bits with a binary weighting, kind of like a DAC. + +The external clock input must be driven with a clock - there is no internal clock. + +Now let your imagination run wild! \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/docs/gray-code.png b/plugins/community/repos/squinkylabs-plug1/docs/gray-code.png new file mode 100644 index 0000000000000000000000000000000000000000..25d440cf73b95267bf4b8f2f87054ca5d862b1ea GIT binary patch literal 22309 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 JRe1#$_J6B`?uGyW literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/growler.md b/plugins/community/repos/squinkylabs-plug1/docs/growler.md new file mode 100644 index 00000000..ef9e3397 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/growler.md @@ -0,0 +1,39 @@ +# Growler + +![vocal formant filter image](./growler.jpg) + +**Growler** is a re-creation of the Vocal Animator circuit invented by Bernie Hutchins, and published in Electronotes magazine in the late 70's. It continuously morphs between different vaguely voice like tones. + +**To get a good sound:** run any harmonically rich signal into the input, and something good will come out. Low frequency pulse waves and distorted sounds make great input. + +The controls do pretty much what you would expect: + +* **LFO** controls the speed of the modulation LFOs. +* **Fc** controls the average frequency of the multiple filters. +* **Q** controls the sharpness of the filters. +* **Depth** controls how much of the modulation LFOs are applied to the filters. + +## How Growler works +![growler scope](./growler.png) + +There are four **bandpass filters**, roughly tuned to some typical vocal formant frequencies: 522, 1340, 2570, and 3700 Hz. The filters are run in parallel, with their outputs summed together. + +The first three filter frequencies are modulated by an LFO comprised of **4 triangle wave LFOs** running at different frequencies. They are summed together in various combinations to drive each of the filters. + +Each **CV input stage** is the same: a knob that supplies a fixed offset and a CV input that is processed by an attenuverter. The processed CV is added to the knob voltage. See below for more on [Attenuverters](#atten) and [CV ranges](#cv). + +The **LFO** Rate control shifts the speed of all 4 LFOs while maintaining the ratio of their frequencies. + +The **Fc** control moves the frequencies of the first three filters, but not by equal amounts. The lowest filter moves at 1V/Oct, but the middle two move less. The top filter is fixed at 3700 Hz. + +The **Q** control does just what it says - controls the Q (resonance) of the filters. + +The **Modulation Depth** controls how much of the summed LFOs get to each filter. Again, the lower filters move farther, and the top filter is fixed. + +The smaller knobs next to the main knobs are **attenuverters**, which scale control voltages. For more on attenuverters, [see below](#atten) + +There are three LFO outputs next to the blinking LFOs. These may be used to modulate other modules, or as semi-random voltage sources. + +**Bass boost** switch. When it’s in the up position (on) there should be more bass. This is done by switching some or all of the filters from bandpass to lowpass. + +LFO **Matrix** switch. This is the unlabeled switch in the LFO section. When it’s down (default position) the LFOs are closely correlated. In the middle we try to make them a little bit more independent. When it’s in the up position the LFOs will often go in different directions. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/half-wave.png b/plugins/community/repos/squinkylabs-plug1/docs/half-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5990763ab5f6f69ecee3a6ce7dc90fba789938 GIT binary patch literal 8935 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

CIE0W5WqA_=vd7NwB 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\AB*;{01UuOPYo3;f7=*zW8 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%0D|a@33A5q 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®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 z%0AHezeDinJ2&O!rz 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ⅇ+GO|k>}n8y^kj**0*UNn<0Y554 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

RS*WPnkS8XYDZ3IcbIA8J;#H0F^eDQ7mEWdo;fJ z&_V$gk0D&-Ij*Xi&GQC9Q-kyEM2ezN!Xe>`a>*Q~S_+9smKEo@zy*AKH(lRf*7 zE};J~`oB4L?JIOxx`puv4TeWUn2k3oGiBKYE)hL!ebjr~6TGWczLtCb$K@xf9zx9p z1)`0QB~DL)H`Kv?#J z$ha9dnzq#DJADMvK^m?;4R&T0!vt~^{1&=S^x*pf9fA#VwaBE%J-Z#aV~eBKW*u|{ z!XX|2jr2?UQjNj1mdF4?CR zI2CC60WeU(7vW*7piSumi$Zdt```vyrO{qq;00AoTz?nwD50RFWI&D@*W|r|1svWc zL$Ss1T`eh~O*b3<(1ki2ci)R33Btp$h2jf4+3qtIu(O86)||ZxV(^G)ZweMIIc;`U zAR<6j9SWN00d+1O3gY^`VOtn~HV9Y|$Q7g?W@L}9jJ}8^8TT-^GOLyUi355&!fbRW z7?+Yi8c<*77_7UKz@haKxkWK7&nWWT`j9|7V-9Kuq|9VWZ1JKQ@pCi}7kDj?8S&cY zqMzCcdE%qq?KwSk2!He{I9hR0IoGqLW$JzJ7!^A$eQYxjuoWHX1Sb|vewj{7Utqsu zcTjl>Qlb<3s%I{<+fP0c59(O@K3t ze9tLXG^jy>h-yI-_=!5u{mCEj$YRhov(RCZNpy?6N%6=Fdt0of^H=^%CpTR-e@$ja zL2m%}LXu%(Yc#pbFmA)LCtkkL9QAzy^)*M2z|VDS4g(x7V-Hl029j^yI&MQvvTWX+ zk^)ECNj|Qm#Gr}u?ErYJ{ae-!om?Zp{WShfz0}uS47+R?)Ubk+&<8dIllVX*CYMl$e4VcEv~o-v}cw@qKqD9)97f!@<6`y$Gtc(hE?h$$E=AwcO)F0UCo<8TD)JEcyl!M^eZZiT0oK3(YIRE~cRZh3sV!}2sX zImhiEo9U#Tl0|rz!q8aXWne408}E?{KpPka{RX<`Ok_+zw#*shcIRLaOnx? z-R&NQ7CY{H__zXicwXIg$#35ja(Z3<*jTfnPUmcr%)*Ufa9uny`X?wNA29f;&cP$z za5aD4MMrzD0SkI{K--%_WfRJCXB(LwCQ#H8DkKj{foi-Ph3C0jH8*G zLf$p4dM+5!JV`i}o28+?f!pe@vMsX0`#^$;;ZTUvLi|{6fsZcu7(f9qW5$`@;H;(`0f^WYTk8Jv*U&+_3~t9a*uN}mF_k1v zGlKhG1L+vcQn;bHtM;K^<;+MY@R)C}rWIIP*ERKk$g|xD0-hySG1~{Ai|Ju=zV;jI^YB|yH4)Z2C;zA}KO8ElMjFUOp>AmHxNH{9>T58AG`fb^L-vt>FFCKch5!WK z1|7mdl?8T^1^mR8G3{pZcLduqkJOlbXQy*0htIz24{IY~ICVe%I`i;tmZ@7A)GmaW z2WDOkC@%QQ90lDlR7#TDzl{hmz+C6e#JQKjY*=IPg#Ez!^23B5wGH99$kG$&EGew@ zpGXbsCRiZls2hYd@nb&8O6b;3PN?9>(z&c3nxgUQbow}uA_eM6i}dqDUDKQ>bt4fu zjq|K12&5;B^bwxc7-F)krTP$&z~^A0H_{VTB*gTMuO7Yvea^R~@wGGWrUALD`lwi> zvrKZyaL31)pH$}*s)drelJlwB6$_&pRX=Xj2IMIi#Txp`h!ldg94;U!I8Y=1`yF$0 z*Lc#lPTYp8dAKt7_p*X^4i<2_uc@k?q8ek-LP%I(dJC@jfcm9&>7~xLFWX*ZjuviQ z6|v^!Eo9gEBRo;c8US@FHe0d>4gPQ2E=@NK5xoAXe*jmD5{US7|A@2Q6bk`)QSy7F zUvPX6rg9=L!Q`OBL!pY|R6rn!98x^0-$yh zX7kbv5D-Rttkux8kTLKB+G+S@8Eu7J3Ig39Es+-}Htf8-H;Qn8u zTVSlL$1kJ1&U=NU zbkwpP=Og2;c1OKQl9F@fTcseS_pi|C)?hcPOyLvk{JRGEl#imllQeLvan(#v95JMBcGsOHzDL9y3UOJ2Rk@uc4?DiOPT3tR^Ky4x%%^{plZ zbW^hr^SQedvl^ytixWMPU`RQ{xiJV)8an@mvibIttoL;0CY1Om&R0Dt#*)G)RBjk{ zWENc0%XAq)Y?A9MzkPl>$j?>3)OE3S|8*MZZUbw#%)+3yJD?r$-O!^oy_t-UNTIhMq!ge?*$F3eSFxc6EK#Nr5zrn6kTLr@?suTSg~8!Udeqx8@AL$ZkGwX%#dYW;Kfmy$dI4 zr*uEtyXLV3ZpL-v$!(9vvJ6E&QMV~bwia=q~|_GU2miA()mELKUp48g2{mM++6yp6jEQ{PxQcig)iT_ zrXYd(#YW*~$vi$0o~{XjrpIssh&Kyn%jBb{N2aKUEa5hIignzq?0|eCt?>&jQ#tE0 z)welg0nB1blz@zp>nLqf0rx>`+rBH3BYI%>`#^{881+UH?G42=PGY1 zNRTYU`es7beP~%J=Dm{{2LaOd}-?Fqch5JL&Jv#*7mp$Cq$wbt)S%dxzu|JVe-O{3jTs_=7F!K(h;f$t{LcE{ zdy=1lF@qu*dI}ajrzr*ic9LnTDyFPB`WkefIlv$hJ2T`lqMFzA==PQE20?rR4{$4) zgO?+Wn#Vr0*G@4ZstGezUnu5u8h3w%=OS`1YZNq6B2?vx=Vr||-#P)0&Q*R9(f0XPw)!D^nE{naj!RG`#)a-Ew|6~Ec?A7O97Jj~L8oaVGE zM_S?ZNRh&Cgnt8QSOV4_uZB}H^>EyEKIsg*S)~DySK;^kPBcK3+5Ga}1dPC$p5!F!R$f8| zyLiJ=UeQI&-)Ll>Z#ek{({$Nn%&GpcP;Zsoi!Hb^rH$|-RZLu1o|7PjDtru)$Wf+f z*f7u7J*cTQ6{~LegPYp?@(qk~Abcj!)P6G@GWWC!*gjZV$2*yYW|!oZ(V?>CAR-H$ z(aayI($gEg>acZ!S%@@}q0!%!o!CZWsajNMFqzk@w-F%(W0)rqElwYhS^n1@1MyqT zF#-CNOwt^!hWz{5U2??^9Mbk@;cCjIo}NtP5qSN3%p3>OmJxT{4p9>3^7Ly< zRqqZD)ut5#G7CdRES!#*6$R)P2N%Jr=D~GSg@!|a!bPs~0e0m8tP|Ni+r|48_$0VS zi!JkWQ(pPlakt7gM6XbFD16Wa$HLKMhO^V z4v18O!o~NmdQ_NiesY6YwX9flT5G${huT{y)93#f(_iSCN>7+hMNE7#IpM%%jc_l> z)s~}$ZQK(+^CFeXjTO{)MU^1!0BZ}`OD3U*>3doJ)11wSwyWY32C~ZLE*$=5k#co0 zlZt(?A{V~xaC^q$GA(^lc?JU1Uh8Yy*ELVIwZ0Rm5_A<65bD9iBx^=^weHu9Wj zk>&B|Alv$ROR*36YmFRg)53F#W+INN&&y@*238q3k&dMTvLBdn3nI@$!k>AM!ykk8 z@718%rMrQ=8#EZY8ih$MujP{QO*27Y!bnq(^dw*ejM0;2ar+hPCZ z4)tb;Ih65p+;xcP3(o=NwOEd##5>vCLQ4L>K&jIcSUk=kV0@pita!IRC?b;jq8_XUm^EO9H%p3cyi9S1Zrr zgbkceBB*3Z=S`@(Eo1`=r8{hp+PdySet_Z0R#z-+EzaMaC$nbFw&5zNn36Ju=@nuL zFDwb*`nZ?0cPENTq4xoj@!gqU)C0>XYqo(_6&ynog;6 z72<9A?h7iH>Yjj8-jJK^eGoV2tK7)LLG9K;NT6Qw75gNS@BpM@)nJ)xcTqPBCWlM1>nNA`x}F;w-%O;R8HPLT_F1tpSn29r`! z(oRt^v3_>&c0xZf#4=SSMr`%;ZP{J1M>s7Gy(uLBSC%h;9I6^iRUlR5@@GgTL_5K` z(^B!I5imD5CQ^H{sE*zI1(J|XN1Dk-i(vMhd{J`GhDGl=f>R3P1s+B}3bhI&4KW4U zluH9PxP|vX$jAe!6mf6sGRjcoZuli2wQgX}h_W9fB=8B_z}XJ`fhRZE#u*r;Yt zIeyXl0xfR{as$NQ9V^b>Hv{>gMVBl+RlUPt(#ng z2L3xc&_T%vL4agdYlB!ICqSQ^s{Az*p;eu>jw@01Rf`^zgG)$u$Mp>kVas?KB?$+g zuQR4*rxJ+$(SvZT0KtMZ6zm*GuTu0^k67PClBn-R_`kpX|BoPjFAQtVS@U--B;^1Z z+R?a^st{zj)t4_|;4+BstqB4P2Jq=>qUI2Ylz1ivOQBJGycnT&i+30+^#ZVfc*&bv zn#01$szGfP{S3;d0ChZQQS>r{2Wc~Qe z4IV4DrD5xR9f6s%a{gnbStF(ZxKkv4NRM$|%+ogh%T()k&fLb~BZTFHZ~$dkGJM44 zWeE#C{9JU;>c4Vi{O`dxE&J>GJ;{bnA)$zE_^n&Wa%ZwypiBE+t*k%=atWLrr)8)N zHdxDPDr21DE%T1Pg62xlG=~L$E)Aq5A9 zYr=^#Li&Yu&1`Z&kkkq8n?Ee3eQUsXqTX9zSqF+dHLBBh^DPkJv#MM z*vRy(@jJ2CmlTQ|{<&0OAwF7u9ut+d3*07C7vs&K*{#b2QM_`u)H& zfcyVV)}QwCkNjlscYxF7`SNF{WyZD*=v`oD-ZJ1n6kMr{?V9G!37UD!el3jU#qsE@ z)_JC9C${@r%;sl1x*W((*ZE#)wR+_4rwUwIvWSbMi%L-B%NH?M1jO9C0s1S=O_P<|B6u!!F!RKko!+Ga% zI1s>uSYCJg%=ysvsunJvSM^gQOG@||0B>l&v$$v5t{#C$^@sV>G~f<~-K+vyBl}U; zo4BtX)B=B0G976pzFFGy4$XPfN^q0B*=qMcwS2G8<}{(bCc>+#sWq=jQaN>kI4~w*D!v_J zKxRna{)7}3`VGwdV%@?<;pd=KX+yg8b)U0eeeb8qmw-zAocRpV zNGHmbOSbdFLFr@Ck?$=f#5J^3uJz_P;+mG=oEOV}o)5EsWV@*Jy;enA1H)74KRm$` zNW9;%>JHPIdT;2pHO7Z{&PNQswSc{`8tf{(zT*h$xW8|;Kiy6Na_T=F`t1w)9C=o` z!Tsv1aO4`D)7sT~lr{Ni1hJh($S$)Mw}{SrDqEXv?ecqnq!@(Qqzx5Y$;@^sT8p@8 zgnkQ_P8Q9?-j~y{C3$^H<|Ma|;ywsum!Q49mRSatse*0}wftBv!@A&(;wdZ--dT_u zb9M&g4^{U2`Tn8covmaIWkysqctVvZU1o!QkIHaZ0y-m6YqPcu=YCp@P3MzqDYze^ zX&v^zocqfJxl1G-O(IHI{DNtMWk@q-;xDKyAZ7GKB=uKGwZ&MHSI#bLhJ{0+t zw<$g&e(hkhkE+oR+8+YWwxZd19fcavp^()Eb@OKxJg`flKfl^7ap_^O#LxBeTvmS=znwu;C0WCo&J}!LxO|7IFhSUG)>pLh z$9sq?M-2y$cwJ^s?z;tJF1moDNjt}R^v85-;Uit6m;nPVBAR!`NqnVUlG2d$mNbVl z@?zC`3CD|9RBlqr9PEe}JS5FUS#4spXyC^X#>b>GFXgZP*&}tD>iiDEfU7 z3S!*@(tbAEWOpAKo>5^~+~~O3dfC$kW^SQH>xL*Te{!8Srj%&owsQ_4T#eW-PWk#P z__K$uiiOdem|7Gdv)ng%jOM2blviFixGgyJDXDIx@UoyT=mzvV5v(NGEv*;p_zO_b z9=b*+AC4KnxO$N#WQN7KQ*q5yG{D#e{~8Qo=p>bzH2@TsV0x)LvO7(G_W{=_<;mal z$XuoTsBha&e@TwyM60QV6+Gr~TXfT#d8K^UaQ$mhR=w)6>bOUriB*j0G8n#hDWu9K zRR(Xh5<91d18-fN$2nQfq|EKQa5ey3ApdV0^Rt2-#3lJ9Mhn}IA51&Kfny}XZ#947 z0p?)x#9GeERiVjjUYON>yLZCOsL;>d&o{?>tyB(7?Gf~$WeirW*d+6RW$Ow~Q!x=h z_L7!o;|u#2gZ90acf39+?`l31Z;c(BN-mWfMI=1*br5KF&qldw%r&TONjs{`Fr$JX zR458fEI3b0N)i~8DwcPF!KB~4(|!Y2LBfaem=J5;)H#yP9!0b36AEjPPxnJI>@raS ztlW7leu|8OQrSWTsYE)q%)&NPKPtA-6=AkT*pM>oHAh&=V1G1ENJa48U}7c@L=^G` z!oehB!#QqX`mFJd(7R?Vy_LR57pBptPur-$W&XN{LNz*3^)@Q?nMeMJt3xOL29t@W z-;SmdAKq?Un`9HosR(X>qj5`=2`={2mwWRoy>PyO`Zu4W`KSh@dB+Uce3r+4cJ9T# zgPA$9cEWR;k#0%eVjq;&aVxU{n^fr)qq7B7un^Yn$k|fM5t(RTh8E?XXTh=BhN9Iz zd=b4dDIJWmlslNZ19cG)t0v$vAt>yvF9jk5t#w}z@5uA0LrO_$U)zDH~`V?FlINI1zZO^?6d59RdYLK95L|?m0ix~#mq8&pj@j)mAJlLhl zr`KL0`M7}syJ;N>iA+t);l8hk0(ivEpW;w9Wg3_f=ux1e6AyPv=1m>@$J&u^r98Z1=*7!}}()a6x?s2C3DeYI> zcq*1<21nscBuihbj>)sN)#JVYwdYEK+Cl9;INEt0>y*stUh*s*p2*Pi_cBS0glElF z05$mrv#yo78x4Go10avU--4tNPa}nEGXqyD9>^|{>=0ck$!reXV}7Xn_OB>gtr}wR zHDR=RR9WgLH28hR>&cW8Mr{hKz?r0R%U}u6`;`l| zFXj6Er12I4sI_tzN8?~kD;`yC{#-;={ok0zc+LBP#jnnqxNQ@E(8Om`<5xMbi!3R# zMq-MMf=6;b)5j#MB@Vww|7DJ(`78%m=+8yd(!Lk$ZYfRsDl)sfQbzM{7&untF?Ivr zuFIl1=BkkJY1-r)%&q4OGXB)V*l`^UNzp}qeM8tsP(`NiH|ZE zQo;+?+T5x&AN;8oxQosTr)q8sNhicpQL~K1<~M zvV5aRbo4ZQlpTToA+|cbs~$;V6VLi#ZfGf%z3J9YW*J;?r1l>4hocN_&&<^#x;<^R zZ>yGKF%}}fAN{yc_;MTw6noTl?QS&QahYVwLCdHcM^IJWkO%#)xQ|Bi4GO0-G-2{7hyQ0iG403`5WdJ-?CU-1LWscx*bjw76Ko* zYUYJa$KxHhg`_vHK#pXM#H;wx2+?F^J|??wCV|XJ$2xPDtO-n7LN}Zr%gL)tTa|3y zCMj2-1wW=XBoCrLNWPQwol`U#aE+S$*Sm{qb1;np^L8odlZ`sD0djRcQg zYF7Z2-A&K=0iGvF87jWqX*MB7!to=+(P5AV?r0(00P6AUFfis%j9vf7?T#!t#XyL6 zm&EEv3|0MX4JUt69t_nV8sG&mhtTE9q!WTNJakvPGUMweRsVG(@@~T>5OMon9~U0d z!TP@63y3j$Iv)n~9s)Q8d>gf0{)1BO3t%$#fSG>F1d?^6)_kL!bT~Tkrw)}bKui4f zYBUyl!#Cc~+Z8x<=FsLGp&VmCcl9c-kKcUABAQY~J6E=Za#F-MyONEy+AW-`M`9cn^-}XQ76T!@c#*!mQSYx<8>E3L|pgnFn zg5}9}WOTzJj_;nkoE;dh5}iUEh|a%gZ47UjUPtVFIMH7C0NdEQQ1KXU^iO@#9pMJa z&J8^OaEndIn(2i#?%sQV3av%CVQNqIv){)TCNnGi@VnT0-7*@TP?+5hOVulKZO(*@ zXVOiJ@wBg<5Fl`a`^x#w;tr8tfB7l7_p^e)BK8tV*+iq((T0pcgUzlm`yyf~y=uL{ z%p^ns7}-O==#zx9K}gO>F09=r@W(KV46hniPJ^qSWMPwi;vQH#qWQ39VD6=vI-#Yb z6bgAaf6C)i)eqHhS|^2vRd$Hhxc@Eyq&>1M_z#c>d zuDC;6*f+aPychGB=fw}stu>m=he8diO-4JuPmJMn$SwuJ3dyBtNySD zxA|^e^Gq1Xm^kI}F6x16a$RStiEerf2(xlPv7osh`ym9CQ=#E;M3_NRTK2`rcKSyQ zl{{4^)kQvSZ*LSjNS;apBBu-Sfkihj@Vfds12fM!OZBerwvOhQFG&J{e*kmZ@4+Lw zY5aed39_A@y&1pWXi%o|rwUw$aP2so@d=jEo`B z&YHVQ{Az7f$#_)1-XU^{jZ(JrR}|QKJGACLS)HE>*CJbWZL+}fxS6}KdYjC^Gq1rD z8hQRkOKXWEc=cu06!I8(ie))IQ1RYm&n45wD{^X>TC9B0v Gg8mN&Qrfuy literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/intro-2-110.png b/plugins/community/repos/squinkylabs-plug1/docs/intro-2-110.png new file mode 100644 index 0000000000000000000000000000000000000000..a583ec64a2f9a9167b65baa408fcdc4186879498 GIT binary patch literal 118003 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 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/intro-3-110.png b/plugins/community/repos/squinkylabs-plug1/docs/intro-3-110.png new file mode 100644 index 0000000000000000000000000000000000000000..b98b1e7b89aa7e303d9fa61add27588eb58b062f GIT binary patch literal 49523 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

T+@6E%6~ri*4Ea3 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 IvTgK#0iXcYF#rGn literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/lfn.md b/plugins/community/repos/squinkylabs-plug1/docs/lfn.md new file mode 100644 index 00000000..0d55c615 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/lfn.md @@ -0,0 +1,17 @@ +# LFN Low Frequency Noise Generator + +![LFN image](../docs/lfn.png) + +LFN stands for Low Frequency Noise. Technically it is a white noise generator run through a graphic equalizer at extremely low frequencies. People may find it easier to think of it as a random voltage source with unique control over the output. + +The top knob, which is unlabeled, sets the "base frequency" of LFN. + +The five other knobs, and the CV inputs beside them, control the gain of the graphic equalizers sections. Beside each EQ gain knob is a label indicating what frequency range that knob controls. + +For example, it the base frequency is 1.0, the EQ sections will be at 1Hz, 2Hz, 4Hz, 8Hz, and 16Hz. If the base frequency is 0.2, The EQ sections will be at 0.2Hz, 0.4Hz, 0.8Hz, 1.6Hz, and 3.2Hz. + +But instead of thinking about frequencies like 1Hz, which are a little difficult to imagine, think of the knobs as mixing very slow random voltages, with less slow ones. For example if LFN is driving a pitch quantizer into a VCO, turn all the knobs down to zero except the first, lowest, one. This will make a series of pitches slowly rising and falling. Then bring in a little of the faster channels. The pitch will still be slowly rising and falling, but will also quickly move up and down by smaller steps. + +A good way to learn what makes LFN tick is to set it slow and watch it on the scope. At the same time run it straight into a VCO. Experiment with different mixes of the slow knobs and the fast ones. + +As you would expect from Squinky Labs, the CPU usage of LFN is very low. In fact it is one of our leanest modules yet. So feel free to use as many instances as you like. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/lfn.png b/plugins/community/repos/squinkylabs-plug1/docs/lfn.png new file mode 100644 index 0000000000000000000000000000000000000000..63598c42428f9509c79960fcda213077855e2f85 GIT binary patch literal 51085 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

kZayuSE~`nS`6DxgGD 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 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/odd.png b/plugins/community/repos/squinkylabs-plug1/docs/odd.png new file mode 100644 index 0000000000000000000000000000000000000000..a84919fe36c0bea4f24b1d2e77857688bf409c9c GIT binary patch literal 27398 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 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/release-notes.md b/plugins/community/repos/squinkylabs-plug1/docs/release-notes.md new file mode 100644 index 00000000..a46b13a9 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/release-notes.md @@ -0,0 +1,19 @@ +# Release notes for Squinky Labs modules + +## 0.6.9 + +Introduced three new modules: EV3, Gray Code, and Shaper. + +Added a trim control for external gain CV in Chebyshev. Previously saved patches may require that the gain trim be increased. + +Minor graphic tweaks to module panels. + +## 0.6.8 + +Introduced Chebyshev waveshaper VCO. + +Introduced release notes. + +Lowered the distortion in sin oscillator that is used in all modules. + +Re-ordered and re-worded module names in the browser. \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/docs/shaper-panel.png b/plugins/community/repos/squinkylabs-plug1/docs/shaper-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5cc72f246b00a71485b061ea8155c77990cf93 GIT binary patch literal 22801 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 + +**Booty Shifter** is a frequency shifter inspired by the Moog/Bode frequency shifter module. + +![booty shifter image](./booty-shifter.png) + +The name "Booty Shifter" is a nod to the classic analog module, as well as to a black cat named Booty. + +Booty Shifter will take an audio input and shift the frequencies up or down. This is not like a pitch shift where harmonics will remain in tune; it is an absolute frequency shift in Hz, so in general **harmonics will go way out of tune.** It is similar to a ring-modulator, but less extreme and more versatile. + +## Getting good sounds from Booty Shifter + +Feed in music and shift the frequency a good amount. + +Feed in **speech or radio** and shift it. + +Feed the CV from a **sequencer** to sequence the mayhem. + +Shift **drums** up or down a little bit to re-tune them without the usual pitch-shifting artifacts. + +Small shifts in conjunction with delays can make a chorus-like effect to thicken music. + +## Inputs and outputs + +* **IN** is the audio input. +* **CV** is the pitch shift control voltage. -5V will give minimum shift, +5 will give maximum. +* **DN** is the down-shifted output. +* **UP** is the up-shifted output. + +## Controls + +**RANGE** sets the total shift range in Hz. For example, the 50 Hz setting means that the minimum shift is 50 Hz down, and the maximum is 50 Hz up. + +Range value **Exp is different**. Here minimum shift is 2 Hz, maximum is 2 kHz, with an exponential response. As of version 0.6.2 the response is an accurate 1 Volt per Octave. + +Shift **AMT** is added to the control voltage, with a range of -5..5. + +## Oddities and limitations + +If you shift the frequency up too far, it will alias. There is no anti-aliasing, so if the highest input frequency + shift amount > sample_rate / 2, you will get aliasing. Of course the Bode analog original did not alias. + +If you shift the input down a lot, frequencies will go **below zero and wrap around**. Taken far enough this will completely **reverse the spectrum** of the input. This was a prized feature of the Bode original. + +As you shift the input down, you may start to generate a lot of subsonic energy. A **High Pass filter** may clean this up. + +The down shift **frequency fold-over**, while true to the original, does cause problems when trying to pitch drum tracks down a lot. High pass filtering the input before it is down-shifted can control this. diff --git a/plugins/community/repos/squinkylabs-plug1/docs/smooth.png b/plugins/community/repos/squinkylabs-plug1/docs/smooth.png new file mode 100644 index 0000000000000000000000000000000000000000..77c0b1781771ffeb29de9e7b6bbfb053735f70e6 GIT binary patch literal 9409 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 literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/thread-booster.png b/plugins/community/repos/squinkylabs-plug1/docs/thread-booster.png new file mode 100644 index 0000000000000000000000000000000000000000..64a5db75b2599fa8bf1e7282908573c022b488a3 GIT binary patch literal 10152 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 Dy^vhZ literal 0 HcmV?d00001 diff --git a/plugins/community/repos/squinkylabs-plug1/docs/vco-optimization.md b/plugins/community/repos/squinkylabs-plug1/docs/vco-optimization.md new file mode 100644 index 00000000..3eccca33 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/docs/vco-optimization.md @@ -0,0 +1,72 @@ +# Notes about the creation of Functional VCO-1 + +## About the Original + +Fundamental VCO-1 is a very high quality, excellent sounding VCO. It does exactly what it claims to do with very little digital artifacts. VCO-1 is a very popular module, but it does use a lot of CPU. For this reason it seemed like a good candidate for a CPU diet. VCV users continue to complain about popping and clicking with large patches, so we hope improvements to this popular module will help. + +Fundamental VCO-1 uses 16X oversampling to generate standard waveforms, in both "analog" and "digital" versions. The oversampling keeps the aliasing low, allows hard and soft sync with low aliasing, and suppresses aliasing from audio rate modulation. + +As such, Fundamental VCO-1 is a very good substitute for an analog VCO. The only down-side is that the 16X oversampling increases the CPU usage dramatically. + +In revamping this VCO, we wanted to try as much as possible to preserve the sound exactly like the original. We did not add any new features, or try to make anything "better". And when we put the code on a diet we did not want to lower the sound quality of this workhorse module. + +## Initial Measurements + +It is difficult to accurately measure the CPU usage of a VCV module. Since version 0.6 there have been CPU meters which are useful for getting an overall picture of CPU usage; but the CPU meters do not enable stable, accurate, and repeatable measurements. + +So we more or less run the plugins in an isolated test framework. This lets us get precise measurements. The down side is that the isolated system is different from running in VCV, and the numbers won’t correlate exactly. + +We use an arbitrary scale for our measurements, where "100" means that the plugin under test seems to be using 1% of the available CPU on one core of our quite old Intel Core i5 Windows-7 computer. + +Here are the initial measurements we took before any optimizations were done, along with some Squinky Labs modules for reference: + +* Fundamental VCO-1, all outputs patched, digital: 798 +* Fundamental VCO-1, saw only, digital: 489 +* Fundamental VCO-1, saw only, analog: 270 +* SL Formants: 84.1 +* SL Growler: 50.9 +* SL Chopper: 14.9 +* SL Booty Shifter: 11.2 +* SL Colors: 11.6 + +Fundamental VCO-1 uses a *lot* of CPU. Since it is so heavy in its CPU usage, we thought it would be easy to make it much faster. But it was not as easy as we had hoped. + +## General approach to optimization + +Every theory must be validated by experiment. So we look at the code, formulate a theory, throw together a simplified implementation of the theory, and compare before and after measurements. + +If the CPU usage goes down a lot, the experiment is a success, and we try to make a full implementation that preserves the drop in CPU usage without compromising the quality. + +Then repeat this process over and over until done. + +## What we did to Fundamental VCO-1 + +VCO-1 already had some optimization. Although the waveform generation runs for all waveforms all the time, the decimation filters are only run for outputs that are connected. The decimation filters are the same ones used by the VCV Rack audio engine, so we assume they are linear phase FIR filters, as is customary for high quality sample rate conversion. + +But, since this is an oversampling VCO, the waveform generation is running at 16X sample rate. Any extra work in this "inner loop" is going to be magnified by 16. + +That said, our experiments showed few surprises. + +* Since cosf() is called all the time in the 16X waveform generation loop, it was a no-brainer to replace it with the same sin lookup table we use in most of our modules. Likewise, we made sure that the cosf lookup is only called if the SIN output is connected. +* The powf() call is also slow and it was worthwhile getting rid of the powf call, although the gain was not enormous since powf is only called once per sample. +* We refactored the inner loop to make sure that the waveform generation is only done for waveforms whose output is patched. +* The decimation filters use a lot of CPU, so we replaced the stock ones with simple 6-pole butterworth lowpass filters. +* It would of course save CPU to reduce the oversampling rate, but we did not want to decrease the quality. + +Again, most of the software required was already in the code-base for our other modules. The one thing that was difficult here was devising test software to measure the aliasing. We wanted to be sure that our faster decimation filters were not increasing the level of aliasing. While this new alias test is not perfect, it did give us confidence that we were not increasing the aliasing with our substituted filters. + +## Results + +Before and after: + +* Fundamental VCO-1, all outputs patched, digital: 798 -> 187.8 (X4.2) +* Fundamental VCO-1, saw only, digital: 489 -> 83.7 (X5.8) +* Fundamental VCO-1, saw only, analog: 270 -> 83 (X2.3) + +## Addendum for EV3 VCO + +When we looked at EvenVCO, we found many of the same issues as we found in Fundamental VCO-1. The same extremely slow trig and exponential functions that we replaced with lookup tables. Work was being done for waveforms that weren't patched. + +But some other things were different. Since EvenVCO is a MinBLEP VCO, it does not need anti-alias filters (as such). The existing MinBLEP code is quite efficient. But in the VCO we did achieve significant speedup by getting rid of the one routine that generates all the waves, and instead have dedicated routines for each waveform. This eliminated a lot of conditional branching. + +While EvenVCO is already quite efficient, it was still worthwhile to make it faster. We believe out triple version uses about the same CPU as a single instance of EvenVCO. \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.cpp index ab4c736c..3f55b9cd 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.cpp +++ b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.cpp @@ -49,7 +49,6 @@ bool FFT::forward(FFTDataCpx* out, const FFTDataReal& in) return true; } - bool FFT::inverse(FFTDataReal* out, const FFTDataCpx& in) { if (out->buffer.size() != in.buffer.size()) { @@ -83,16 +82,16 @@ bool FFT::inverse(FFTDataReal* out, const FFTDataCpx& in) return true; } -int FFT::freqToBin(float freq, float sampleRate, int numBins) +int FFT::freqToBin(double freq, double sampleRate, int numBins) { assert(freq <= (sampleRate / 2)); // bin(numBins) <> sr / 2; - return (int)((freq / sampleRate)*(numBins * 2)); + return (int)((freq / sampleRate)*(numBins)); } -float FFT::bin2Freq(int bin, float sampleRate, int numBins) +double FFT::bin2Freq(int bin, double sampleRate, int numBins) { - return sampleRate * float(bin) / (float(numBins) * 2); + return sampleRate * double(bin) / double(numBins); } static float randomPhase() @@ -120,8 +119,8 @@ static void makeNegSlope(FFTDataCpx* output, const ColoredNoiseSpec& spec) static float k = -spec.slope * log2(lowFreqCorner); for (int i = bin40 + 1; i < numBins; ++i) { if (i < numBins / 2) { - const float f = FFT::bin2Freq(i, spec.sampleRate, numBins); - const float gainDb = std::log2(f) * spec.slope + k; + const double f = FFT::bin2Freq(i, spec.sampleRate, numBins); + const double gainDb = std::log2(f) * spec.slope + k; const float gain = float(AudioMath::gainFromDb(gainDb)); output->set(i, std::polar(gain, randomPhase())); } else { @@ -143,8 +142,8 @@ static void makePosSlope(FFTDataCpx* output, const ColoredNoiseSpec& spec) static float k = -spec.slope * log2(spec.highFreqCorner); for (int i = binHigh - 1; i > 0; --i) { if (i < numBins / 2) { - const float f = FFT::bin2Freq(i, spec.sampleRate, numBins); - const float gainDb = std::log2(f) * spec.slope + k; + const double f = FFT::bin2Freq(i, spec.sampleRate, numBins); + const double gainDb = std::log2(f) * spec.slope + k; const float gain = float(AudioMath::gainFromDb(gainDb)); gainMax = std::max(gain, gainMax); output->set(i, std::polar(gain, randomPhase())); @@ -189,10 +188,11 @@ static float getPeak(const FFTDataReal& data) return peak; } -void FFT::normalize(FFTDataReal* data) +void FFT::normalize(FFTDataReal* data, float maxValue) { + assert(maxValue > 0); const float peak = getPeak(*data); - const float correction = 1.0f / peak; + const float correction = maxValue / peak; for (int i = 0; i < data->size(); ++i) { float x = data->get(i); x *= correction; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.h b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.h index 01b717bb..a2a9de32 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFT.h @@ -1,8 +1,9 @@ #pragma once -class FFTDataCpx; -class FFTDataReal; +//class FFTDataCpx; +//class FFTDataReal; +#include "FFTData.h" class ColoredNoiseSpec { @@ -33,7 +34,7 @@ public: */ static void makeNoiseSpectrum(FFTDataCpx* output, const ColoredNoiseSpec&); - static void normalize(FFTDataReal*); - static float bin2Freq(int bin, float sampleRate, int numBins); - static int freqToBin(float freq, float sampleRate, int numBins); + static void normalize(FFTDataReal*, float maxValue); + static double bin2Freq(int bin, double sampleRate, int numBins); + static int freqToBin(double freq, double sampleRate, int numBins); }; \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTCrossFader.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTCrossFader.cpp index ecda08d5..7c5a1f5a 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTCrossFader.cpp +++ b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTCrossFader.cpp @@ -15,12 +15,12 @@ NoiseMessage* FFTCrossFader::step(float* out) // curPlayOffset1 is the index into buffer 1, but also the crossfade index assert(curPlayOffset[1] < crossfadeSamples); - float buffer0Value = dataFrames[0]->dataBuffer->get(curPlayOffset[0]) * - (crossfadeSamples - (curPlayOffset[1]+1)); + float buffer0Value = dataFrames[0]->dataBuffer->get(curPlayOffset[0]) * + (crossfadeSamples - (curPlayOffset[1] + 1)); float buffer1Value = dataFrames[1]->dataBuffer->get(curPlayOffset[1]) * curPlayOffset[1]; // TODO: do we need to pre-divide - *out = (buffer1Value + buffer0Value) / (crossfadeSamples-1); + *out = (buffer1Value + buffer0Value) / (crossfadeSamples - 1); if (makeupGain) { float gain = std::sqrt(2.0f) - 1; float offset = float(curPlayOffset[1]); @@ -70,8 +70,7 @@ NoiseMessage * FFTCrossFader::acceptData(NoiseMessage* msg) if (dataFrames[0] == nullptr) { dataFrames[0] = msg; curPlayOffset[0] = 0; - } - else if (dataFrames[1] == nullptr) { + } else if (dataFrames[1] == nullptr) { dataFrames[1] = msg; curPlayOffset[1] = 0; } else { diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.cpp index 7324028c..26712e0a 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.cpp +++ b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.cpp @@ -1,67 +1,10 @@ #include "FFTData.h" -#include "kiss_fft.h" -#include "kiss_fftr.h" -#include +//template -int FFTDataCpx::_count = 0; -FFTDataCpx::FFTDataCpx(int numBins) : - buffer(numBins) -{ - ++_count; -} +template <> +int FFTData::_count = 0; -FFTDataCpx::~FFTDataCpx() -{ - // We need to manually delete the cfg, since only "we" know - // what type it is. - if (kiss_cfg) { - free(kiss_cfg); - } - --_count; -} - -cpx FFTDataCpx::get(int index) const -{ - assert(index < (int)buffer.size()); - return buffer[index]; -} - - -void FFTDataCpx::set(int index, cpx value) -{ - assert(index < (int)buffer.size()); - buffer[index] = value; -} - -/******************************************************************/ -int FFTDataReal::_count = 0; -FFTDataReal::FFTDataReal(int numBins) : - buffer(numBins) -{ - ++_count; -} - -FFTDataReal::~FFTDataReal() -{ - // We need to manually delete the cfg, since only "we" know - // what type it is. - if (kiss_cfg) { - free(kiss_cfg); - } - --_count; -} - -float FFTDataReal::get(int index) const -{ - assert(index < (int)buffer.size()); - return buffer[index]; -} - - -void FFTDataReal::set(int index, float value) -{ - assert(index < (int)buffer.size()); - buffer[index] = value; -} +template <> +int FFTDataReal::_count = 0; \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.h b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.h index 6db2c050..5b33fac6 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/fft/FFTData.h @@ -2,6 +2,7 @@ #include #include +#include class FFT; @@ -13,22 +14,34 @@ class FFT; */ using cpx = std::complex; -class FFTDataCpx +template +class FFTData { public: friend FFT; - FFTDataCpx(int numBins); - ~FFTDataCpx(); - cpx get(int bin) const; - void set(int bin, cpx value); + FFTData(int numBins); + ~FFTData(); + T get(int bin) const; + void set(int bin, T value); int size() const { return (int) buffer.size(); } + + T * data() + { + return buffer.data(); + } + + float getAbs(int bin) const + { + return std::abs(buffer[bin]); + } + static int _count; private: - std::vector buffer; + std::vector buffer; /** * we store this without type so that clients don't need @@ -40,31 +53,39 @@ private: mutable void * kiss_cfg = 0; }; -/** - * Holds an fft frame of real data. - */ -class FFTDataReal +using FFTDataReal = FFTData; +using FFTDataCpx = FFTData; + +//int FFTDataCpx::_count = 0; + +template +inline FFTData::FFTData(int numBins) : + buffer(numBins) { -public: - friend FFT; - FFTDataReal(int numBins); - ~FFTDataReal(); - float get(int numBin) const; - void set(int numBin, float value); - int size() const - { - return (int) buffer.size(); + ++_count; +} + +template +inline FFTData::~FFTData() +{ + // We need to manually delete the cfg, since only "we" know + // what type it is. + if (kiss_cfg) { + free(kiss_cfg); } - static int _count; -private: - std::vector buffer; + --_count; +} - /** - * we store this without type so that clients don't need - * to pull in the kiss_fft headers. It's mutable so it can - * be lazy created by FFT functions. - * Note that the cfg has a "direction" baked into it. For - * now we assume that all FFT with real input will be forward FFTs. - */ - mutable void * kiss_cfg = 0; -}; \ No newline at end of file +template +inline T FFTData::get(int index) const +{ + assert(index < (int) buffer.size() && index >= 0); + return buffer[index]; +} + +template +inline void FFTData::set(int index, T value) +{ + assert(index < (int) buffer.size() && index >= 0); + buffer[index] = value; +} diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadParams.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadParams.h index 3fa84dab..c50946c5 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadParams.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadParams.h @@ -34,6 +34,13 @@ public: T A2(int stage) const; void dump() const; + + /** + * Direct access for the rare client that + * wants to see taps as a straight array. + */ + T getAtIndex(int index); + void setAtIndex(T x, int index); private: T _taps[5 * N]; }; @@ -88,50 +95,64 @@ inline T& BiquadParams::B2(int stage) } template -T BiquadParams::A1(int stage) const +inline T BiquadParams::A1(int stage) const { assert(stage >= 0 && stage < N); return _taps[stage * 5 + 3]; } template -T BiquadParams::A2(int stage) const +inline T BiquadParams::A2(int stage) const { assert(stage >= 0 && stage < N); return _taps[stage * 5 + 4]; } template -T BiquadParams::B0(int stage) const +inline T BiquadParams::B0(int stage) const { assert(stage >= 0 && stage < N); return _taps[stage * 5]; } template -T BiquadParams::B1(int stage) const +inline T BiquadParams::B1(int stage) const { assert(stage >= 0 && stage < N); return _taps[stage * 5 + 1]; } template -T BiquadParams::B2(int stage) const +inline T BiquadParams::B2(int stage) const { assert(stage >= 0 && stage < N); return _taps[stage * 5 + 2]; } template -T& BiquadParams::A1(int stage) +inline T& BiquadParams::A1(int stage) { assert(stage >= 0 && stage < N); return _taps[stage * 5 + 3]; } template -T& BiquadParams::A2(int stage) +inline T& BiquadParams::A2(int stage) { assert(stage >= 0 && stage < N); return _taps[stage * 5 + 4]; +} + +template +inline T BiquadParams::getAtIndex(int index) +{ + assert(index < N * 5); + return _taps[index]; +} + +template +inline void BiquadParams::setAtIndex(T x, int index) +{ + assert(index < N * 5); + _taps[index] = x; } \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadState.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadState.h index 9ab8e217..87f543fc 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadState.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/BiquadState.h @@ -1,6 +1,8 @@ #pragma once +extern int _numBiquads; + /** * Structure to hold the mutable state of a biquad filter: in this case the delay memory. * diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.cpp index 2064a8b0..4cfa0d21 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.cpp +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.cpp @@ -8,6 +8,37 @@ #include "BiquadFilter.h" #include + +template +void ButterworthFilterDesigner::designEightPoleLowpass(BiquadParams& outParams, T frequency) +{ + using Filter = Dsp::ButterLowPass<8, 1>; + std::unique_ptr lp(new Filter()); // std::make_unique is not until C++14 + lp->SetupAs(frequency); + assert(lp->GetStageCount() == 4); + BiquadFilter::fillFromStages(outParams, lp->Stages(), lp->GetStageCount()); +} + +template +void ButterworthFilterDesigner::designSixPoleLowpass(BiquadParams& outParams, T frequency) +{ + using Filter = Dsp::ButterLowPass<6, 1>; + std::unique_ptr lp6(new Filter()); // std::make_unique is not until C++14 + lp6->SetupAs(frequency); + assert(lp6->GetStageCount() == 3); + BiquadFilter::fillFromStages(outParams, lp6->Stages(), lp6->GetStageCount()); +} + +template +void ButterworthFilterDesigner::designFivePoleLowpass(BiquadParams& outParams, T frequency) +{ + using Filter = Dsp::ButterLowPass<5, 1>; + std::unique_ptr lp5(new Filter()); // std::make_unique is not until C++14 + lp5->SetupAs(frequency); + assert(lp5->GetStageCount() == 3); + BiquadFilter::fillFromStages(outParams, lp5->Stages(), lp5->GetStageCount()); +} + template void ButterworthFilterDesigner::designThreePoleLowpass(BiquadParams& outParams, T frequency) { @@ -18,6 +49,25 @@ void ButterworthFilterDesigner::designThreePoleLowpass(BiquadParams& ou BiquadFilter::fillFromStages(outParams, lp3->Stages(), lp3->GetStageCount()); } +template +void ButterworthFilterDesigner::designFourPoleLowpass(BiquadParams& outParams, T frequency) +{ + using Filter = Dsp::ButterLowPass<4, 1>; + std::unique_ptr lp4(new Filter()); // std::make_unique is not until C++14 + lp4->SetupAs(frequency); + assert(lp4->GetStageCount() == 2); + BiquadFilter::fillFromStages(outParams, lp4->Stages(), lp4->GetStageCount()); +} + +template +void ButterworthFilterDesigner::designFourPoleHighpass(BiquadParams& outParams, T frequency) +{ + using Filter = Dsp::ButterHighPass<4, 1>; + std::unique_ptr lp4(new Filter()); // std::make_unique is not until C++14 + lp4->SetupAs(frequency); + assert(lp4->GetStageCount() == 2); + BiquadFilter::fillFromStages(outParams, lp4->Stages(), lp4->GetStageCount()); +} template void ButterworthFilterDesigner::designTwoPoleLowpass(BiquadParams& outParams, T frequency) { @@ -28,6 +78,32 @@ void ButterworthFilterDesigner::designTwoPoleLowpass(BiquadParams& outP BiquadFilter::fillFromStages(outParams, lp2->Stages(), lp2->GetStageCount()); } +template +void ButterworthFilterDesigner::designSixPoleElliptic(BiquadParams& outParams, T frequency, T rippleDb, T stopbandAttenDb) +{ + assert(stopbandAttenDb > 0); + using Filter = Dsp::EllipticLowPass<6, 1>; + std::unique_ptr ellip6(new Filter()); + // void SetupAs( CalcT cutoffFreq, CalcT passRippleDb, CalcT rollOff ) + ellip6->SetupAs(frequency, rippleDb, stopbandAttenDb); + assert(ellip6->GetStageCount() == 3); + + BiquadFilter::fillFromStages(outParams, ellip6->Stages(), ellip6->GetStageCount()); +} + +template +void ButterworthFilterDesigner::designEightPoleElliptic(BiquadParams& outParams, T frequency, T rippleDb, T stopbandAttenDb) +{ + assert(stopbandAttenDb > 0); + using Filter = Dsp::EllipticLowPass<8, 1>; + std::unique_ptr ellip8(new Filter()); + // void SetupAs( CalcT cutoffFreq, CalcT passRippleDb, CalcT rollOff ) + ellip8->SetupAs(frequency, rippleDb, stopbandAttenDb); + assert(ellip8->GetStageCount() == 4); + + BiquadFilter::fillFromStages(outParams, ellip8->Stages(), ellip8->GetStageCount()); +} + // Explicit instantiation, so we can put implementation into .cpp file // TODO: option to take out float version (if we don't need it) // Or put all in header diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.h index 8f0ef436..a562d1c1 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthFilterDesigner.h @@ -9,6 +9,14 @@ class ButterworthFilterDesigner { public: ButterworthFilterDesigner() = delete; // we are only static + static void designEightPoleLowpass(BiquadParams& pOut, T frequency); + static void designSixPoleLowpass(BiquadParams& pOut, T frequency); static void designThreePoleLowpass(BiquadParams& pOut, T frequency); + static void designFourPoleLowpass(BiquadParams& pOut, T frequency); + static void designFourPoleHighpass(BiquadParams& pOut, T frequency); + static void designFivePoleLowpass(BiquadParams& pOut, T frequency); static void designTwoPoleLowpass(BiquadParams& pOut, T frequency); + + static void designSixPoleElliptic(BiquadParams& pOut, T frequency, T rippleDb, T stopbandAttenDb); + static void designEightPoleElliptic(BiquadParams& pOut, T frequency, T rippleDb, T stopbandAttenDb); }; \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthLookup.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthLookup.h new file mode 100644 index 00000000..f3b984cd --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/ButterworthLookup.h @@ -0,0 +1,41 @@ +#pragma once + +#include "BiquadParams.h" +#include "ButterworthFilterDesigner.h" +#include "LookupTable.h" + +/** +* Interpolating lookup for filter parameters +*/ +class ButterworthLookup4PHP +{ +public: + ButterworthLookup4PHP(); + void get(BiquadParams& params, float normalizedCutoff); +private: + static const int numTables = 10; + LookupTableParams tables[numTables]; // five params per two biquads +}; + +inline ButterworthLookup4PHP::ButterworthLookup4PHP() +{ + const int numBins = 256; + for (int index = 0; index < numTables; ++index) { + LookupTable::init(tables[index], numBins, 100.0f / 44100.0f, 2000 / 44100.0f, [index](double x) { + // first design a filter at x hz + BiquadParams params; + ButterworthFilterDesigner::designFourPoleHighpass(params, float(x)); + // then save off tap 0; + return params.getAtIndex(index); + }); + } +} + +inline void ButterworthLookup4PHP::get(BiquadParams& params, float normalizedCutoff) +{ + for (int i = 0; i < numTables; ++i) { + // const int stage = i < numTables / 2; + float p = LookupTable::lookup(tables[i], normalizedCutoff, true); + params.setAtIndex(p, i); + } +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/GraphicEq.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/GraphicEq.h new file mode 100644 index 00000000..1c73e677 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/GraphicEq.h @@ -0,0 +1,134 @@ +#pragma once + +#include "StateVariableFilter.h" + +// Unfinished single stage eq +class GraphicEq +{ +public: + + GraphicEq(int stages, float bw); + + float run(float); + void setGain(int stage, float g) + { + gain[stage] = g; + // printf("just set gain[%d] to %f\n", stage, g); + } +private: + StateVariableFilterParams params[6]; + StateVariableFilterState states[6]; + float gain[6]; + const int _stages; + +}; + +// todo: refactor +inline GraphicEq::GraphicEq(int stages, float bw) : _stages(stages) +{ + assert(stages < 6); + // .5, 1 stage is 78..128. 2stage 164 273 / + // .8 67..148 / 63..314 / 72..456 + const float baseFreq = 100.f / 44100.f; + float freq = baseFreq; + for (int i = 0; i < stages; ++i) { + params[i].setMode(StateVariableFilterParams::Mode::BandPass); + params[i].setFreq(freq); + params[i].setNormalizedBandwidth(bw); + freq *= 2.f; + gain[i] = 1; + + } +} + +inline float GraphicEq::run(float input) +{ + // printf("run filter with "); + float out = 0; + for (int i = 0; i < _stages; ++i) { + // printf("%f ", gain[i]); + out += StateVariableFilter::run(input, states[i], params[i]) * gain[i]; + } + // printf("\n"); + return out; +} + +/** + * Two bandpass filters in series. + */ +class TwoStageBandpass +{ +public: + TwoStageBandpass(); + float run(float); + void setFreq(float); +private: + StateVariableFilterParams params[2]; + StateVariableFilterState state[2]; +}; + +inline TwoStageBandpass::TwoStageBandpass() +{ + for (int i = 0; i <= 1; ++i) { + params[i].setMode(StateVariableFilterParams::Mode::BandPass); + params[i].setFreq(.1f); + params[i].setNormalizedBandwidth(1); + } +} + +inline void TwoStageBandpass::setFreq(float freq) +{ + for (int i = 0; i <= 1; ++i) { + params[i].setFreq(freq); + } +} + +inline float TwoStageBandpass::run(float input) +{ + auto y = StateVariableFilter::run(input, state[0], params[0]); + auto z = StateVariableFilter::run(y, state[1], params[1]); + return z; +} + +/** + * Octave EQ using dual bandpass sections + * Currently hard-wired to 100 Hz. + */ +template +class GraphicEq2 +{ +public: + GraphicEq2() + { + float freq = 100.0f / 44100.0f; + for (int i = 0; i < NumStages; ++i) { + filters[i].setFreq(freq); + freq *= 2.0f; + } + } + float run(float); + void setGain(int stage, float g) + { + assert(stage < NumStages); + gain[stage] = g; + + } + int getNumStages() + { + return NumStages; + } +private: + TwoStageBandpass filters[NumStages]; + float gain[NumStages]; +}; + +template +inline float GraphicEq2::run(float input) +{ + float out = 0; + for (int i = 0; i < NumStages; ++i) { + out += filters[i].run(input) * gain[i]; + } +; + return out; +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/LowpassFilter.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/LowpassFilter.h new file mode 100644 index 00000000..7e3d6e1d --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/LowpassFilter.h @@ -0,0 +1,53 @@ +#pragma once + +#include +#include "AudioMath.h" + +template +class LowpassFilterState +{ +public: + T z=0; +}; + +template +class LowpassFilterParams +{ +public: + T k=0; + T l=0; +}; + +template +class LowpassFilter +{ +public: + /** + * fs is normalize frequency + */ + static void setCutoff(LowpassFilterParams& params, T fs); + + static T run(T input, LowpassFilterState& state, const LowpassFilterParams& params); +}; + +template +inline void LowpassFilter::setCutoff(LowpassFilterParams& params, T fs) +{ + assert(fs > 00 && fs < .5); + params.k = T(1.0 - (std::exp(-2.0 * AudioMath::Pi * fs))); + params.l = T(1.0 - params.k); +} + + +/* +void go_dbl(double x) +{ +_z = _z * _l + _k * x; +} +*/ +template +inline T LowpassFilter::run(T input, LowpassFilterState& state, const LowpassFilterParams& params) +{ + state.z = state.z * params.l + params.k * input; + return state.z; +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/filters/StateVariableFilter.h b/plugins/community/repos/squinkylabs-plug1/dsp/filters/StateVariableFilter.h index a9a61109..924fae52 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/filters/StateVariableFilter.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/filters/StateVariableFilter.h @@ -111,6 +111,7 @@ public: * units are 1 == sample rate */ void setFreq(T f); + void setFreqAccurate(T f); void setMode(Mode m) { mode = m; @@ -145,6 +146,12 @@ inline void StateVariableFilterParams::setFreq(T fc) fcGain = T(AudioMath::Pi) * T(2) * fc; } +template +inline void StateVariableFilterParams::setFreqAccurate(T fc) +{ + fcGain = T(2) * std::sin( T(AudioMath::Pi) * fc); +} + /*******************************************************************************************/ template diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/generators/MinBLEPVCO.h b/plugins/community/repos/squinkylabs-plug1/dsp/generators/MinBLEPVCO.h new file mode 100644 index 00000000..0549e28d --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/generators/MinBLEPVCO.h @@ -0,0 +1,588 @@ +#pragma once + + +// Need to make this compile in MS tools for unit tests +#if defined(_MSC_VER) +#define __attribute__(x) + +#pragma warning (push) +#pragma warning ( disable: 4244 4267 ) +#endif + +#ifndef _CLAMP +#define _CLAMP +namespace std { + inline float clamp(float v, float lo, float hi) + { + assert(lo < hi); +#define sMIN(a,b) (((a)>(b))?(b):(a)) +#define sMAX(a,b) (((a)>(b))?(a):(b)) + //return std::min(hi, std::max(v, lo)); + return sMIN(hi, sMAX(v, lo)); +#undef sMIN +#undef sMAX + } +} +#endif + +//#include "math.hpp" + + +#include "dsp/minblep.hpp" +#include "dsp/filter.hpp" +#include "AudioMath.h" +#include "ObjectCache.h" + +#include + +// until c++17 +#ifndef _CLAMP +#define _CLAMP +namespace std { + inline float clamp(float v, float lo, float hi) + { + assert(lo < hi); + return std::min(hi, std::max(v, lo)); + } +} +#endif + +/* VCO core using MinBLEP to reduce aliasing. + * Originally based on Befaco EvenVCO + */ + +class MinBLEPVCO +{ +public: + friend class TestMB; + + /** + * ph is the "phase (-1..0)" + */ + using SyncCallback = std::function; + + MinBLEPVCO(); + enum class Waveform + { + Sin, Tri, Saw, Square, Even, END + }; + + void step(); + + void setNormalizedFreq(float f, float st) + { + normalizedFreq = std::clamp(f, 1e-6f, 0.5f); + sampleTime = st; + } + + void setWaveform(Waveform); + + float getOutput() const + { + return output; + } + + /** + * Send the sync waveform to VCO. + * usually called from outside. + */ + void onMasterSync(float phase); + void setSyncCallback(SyncCallback); + void setPulseWidth(float); + void setSyncEnabled(bool f) + { + syncEnabled = f; + } + +private: + + float output = 0; + Waveform waveform = Waveform::Saw; + + float phase = 0.0; + float normalizedFreq = 0; + float sampleTime = 0; + SyncCallback syncCallback = nullptr; + float tri = 0; + bool syncEnabled = false; + + bool gotSyncCallback = false; + float syncCallbackCrossing = 0; + + /** + * References to shared lookup tables. + * Destructor will free them automatically. + */ + + std::shared_ptr> sinLookup = {ObjectCache::getSinLookup()}; + + /** Whether we are past the pulse width already */ + bool halfPhase = false; + + int loopCounter = 0; // still used? + float pulseWidth = .5; + + + rack::MinBLEP<16> syncMinBLEP; + rack::MinBLEP<16> aMinBLEP; + rack::MinBLEP<16> bMinBLEP; + bool aIsNext = false; + rack::MinBLEP<16>* getNextMinBLEP(); + + + + /** + * Waveform generation helper + */ + void step_even(); + void step_saw(); + void step_sq(); + void step_sin(); + void step_tri(); + + /** + * input = phase, 0..1 + * output = sin(2pi * input) + */ + float sineLook(float input) const; + + float evenLook(float input) const; + + std::string name; + bool lastSq = false; + bool isSqHigh() const; +}; + +inline MinBLEPVCO::MinBLEPVCO() +{ + syncMinBLEP.minblep = rack::minblep_16_32; + syncMinBLEP.oversample = 32; + aMinBLEP.minblep = rack::minblep_16_32; + aMinBLEP.oversample = 32; + bMinBLEP.minblep = rack::minblep_16_32; + bMinBLEP.oversample = 32; +} + +inline rack::MinBLEP<16>* MinBLEPVCO::getNextMinBLEP() +{ + aIsNext = !aIsNext; + return aIsNext ? &aMinBLEP : &bMinBLEP; +} + +inline void MinBLEPVCO::setSyncCallback(SyncCallback cb) +{ + assert(!syncCallback); + syncCallback = cb; +} + +inline void MinBLEPVCO::setWaveform(Waveform wf) +{ + waveform = wf; +} + +inline void MinBLEPVCO::setPulseWidth(float pw) +{ + pulseWidth = pw; +} + +inline void MinBLEPVCO::step() +{ + // call the dedicated dispatch routines for the special case waveforms. + switch (waveform) { + case Waveform::Saw: + step_saw(); + break; + case Waveform::Square: + step_sq(); + break; + case Waveform::Sin: + step_sin(); + break; + case Waveform::Tri: + // Tri sync doesn't work -> use sin + if (syncEnabled) { + step_sin(); + } else { + step_tri(); + } + break; + case Waveform::Even: + step_even(); + break; + case Waveform::END: + output = 0; + break; // don't do anything if no outputs + default: + assert(false); + } +} + +// callback from master sync when it rolls over +inline void MinBLEPVCO::onMasterSync(float masterPhase) +{ + gotSyncCallback = true; + syncCallbackCrossing = masterPhase; +} + +inline void MinBLEPVCO::step_saw() +{ + phase += normalizedFreq; + const float predictedPhase = phase; + if (gotSyncCallback) { + const float excess = -syncCallbackCrossing * normalizedFreq; + // Figure out where our sub-sample phase should be after reset + // reset to zero + const float newPhase = excess; + phase = newPhase; + } + if (phase >= 1.0) { + phase -= 1.0; + } + + // see if we jumped + if (phase != predictedPhase) { + const float jump = phase - predictedPhase; + // printf("%s jump = %f\n", name.c_str(), jump); fflush(stdout); + if (gotSyncCallback) { + const float crossing = syncCallbackCrossing; + syncMinBLEP.jump(crossing, jump); + if (syncCallback) { + syncCallback(crossing); + } + } else { + // phase overflowed + const float crossing = -phase / normalizedFreq; + aMinBLEP.jump(crossing, jump); + if (syncCallback) { + syncCallback(crossing); + } + } + } + + float totalPhase = phase; + totalPhase += aMinBLEP.shift(); + totalPhase += syncMinBLEP.shift(); + float saw = -1.0 + 2.0 * totalPhase; + output = 5.0*saw; + + gotSyncCallback = false; +} + +inline bool MinBLEPVCO::isSqHigh() const +{ + return phase >= pulseWidth; +} + +inline void MinBLEPVCO::step_sq() +{ + bool phaseDidOverflow = false; + phase += normalizedFreq; + if (gotSyncCallback) { + const float excess = -syncCallbackCrossing * normalizedFreq; + // reset phase to near zero on sync + phase = excess; + } + if (phase > 1.0f) { + phase -= 1.0f; + phaseDidOverflow = true; + } + + // now examine for any pending edges, + // and if found apply minBLEP and + // send sync signal + bool newSq = isSqHigh(); + if (newSq != lastSq) { + lastSq = newSq; + const float jump = newSq ? 2 : -2; + if (gotSyncCallback) { + const float crossing = syncCallbackCrossing; + syncMinBLEP.jump(crossing, jump); + if (syncCallback) { + syncCallback(crossing); + } + } else if (phaseDidOverflow) { + const float crossing = -phase / normalizedFreq; + aMinBLEP.jump(crossing, jump); + if (syncCallback) { + syncCallback(crossing); + } + } else { + // crossed PW boundary + const float crossing = -(phase - pulseWidth) / normalizedFreq; + bMinBLEP.jump(crossing, jump); + } + } + + float square = newSq ? 1.0f : -1.0f; + square += aMinBLEP.shift(); + square += bMinBLEP.shift(); + square += syncMinBLEP.shift(); + + output = 5.0*square; + + gotSyncCallback = false; +} + +inline float MinBLEPVCO::sineLook(float input) const +{ + // want cosine, but only have sine lookup + float adjPhase = input + .25f; + if (adjPhase >= 1) { + adjPhase -= 1; + } + + return -LookupTable::lookup(*sinLookup, adjPhase, true); +} + +inline void MinBLEPVCO::step_sin() +{ + if (gotSyncCallback) { + gotSyncCallback = false; + + // All calculations based on slave sync discontinuity happening at + // the same sub-sample as the mater discontinuity. + + // First, figure out how much excess phase we are going to have after reset + const float excess = -syncCallbackCrossing * normalizedFreq; + + // Figure out where our sub-sample phase should be after reset + const float newPhase = .5 + excess; + + const float oldOutput = sineLook(phase); + const float newOutput = sineLook(newPhase); + const float jump = newOutput - oldOutput; + + syncMinBLEP.jump(syncCallbackCrossing, jump); + this->phase = newPhase; + // return; + } else { + + phase += normalizedFreq; + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + if (syncCallback) { + float crossing = -phase / normalizedFreq; + syncCallback(crossing); + } + } + } + + float sine = sineLook(phase); + sine += syncMinBLEP.shift(); + output = 5.0*sine; +} + +inline void MinBLEPVCO::step_tri() +{ + if (gotSyncCallback) { + gotSyncCallback = false; + + // All calculations based on slave sync discontinuity happening at + // the same sub-sample as the mater discontinuity. + + // First, figure out how much excess phase we are going to have after reset + const float excess = -syncCallbackCrossing * normalizedFreq; + + // Figure out where our sub-sample phase should be after reset + const float newPhase = .5 + excess; + const float jump = -2.f * (phase - newPhase); +#ifdef _LOG + printf("%s: got sync ph=%.2f nph=%.2f excess=%.2f send cross %.2f jump %.2f \n", name.c_str(), + phase, newPhase, + excess, + syncCallbackCrossing, jump); +#endif + syncMinBLEP.jump(syncCallbackCrossing, jump); + this->phase = newPhase; + return; + } + float oldPhase = phase; + phase += normalizedFreq; + + if (oldPhase < 0.5 && phase >= 0.5) { + const float crossing = -(phase - 0.5) / normalizedFreq; + aMinBLEP.jump(crossing, 2.0); + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / normalizedFreq; + aMinBLEP.jump(crossing, -2.0); + halfPhase = false; + if (syncCallback) { + syncCallback(crossing); + } + } + + // Outputs + float triSquare = (phase < 0.5) ? -1.0 : 1.0; + triSquare += aMinBLEP.shift(); + triSquare += syncMinBLEP.shift(); + + // Integrate square for triangle + tri += 4.0 * triSquare * normalizedFreq; + tri *= (1.0 - 40.0 * sampleTime); + + // Set output + output = 5.0*tri; +} + + +inline float calcDoubleSaw(float phase) +{ + return (phase < 0.5) ? (-1.0 + 4.0*phase) : (-1.0 + 4.0*(phase - 0.5)); +} + + +inline float MinBLEPVCO::evenLook(float input) const +{ + float doubleSaw = calcDoubleSaw(input); + const float sine = sineLook(input); + const float even = 0.55 * (doubleSaw + 1.27 * sine); + return even; +} + +inline void MinBLEPVCO::step_even() +{ + float oldPhase = phase; + phase += normalizedFreq; + float syncJump = 0; + if (gotSyncCallback) { + + + // All calculations based on slave sync discontinuity happening at + // the same sub-sample as the mater discontinuity. + + // First, figure out how much excess phase we are going to have after reset + const float excess = -syncCallbackCrossing * normalizedFreq; + + // Figure out where our sub-sample phase should be after reset + const float newPhase = .5 + excess; + // const float jump = -2.f * (phase - newPhase); +#ifdef _LOG + printf("%s: got sync ph=%.2f nph=%.2f excess=%.2f send cross %.2f jump %.2f \n", name.c_str(), + phase, newPhase, + excess, + syncCallbackCrossing, jump); +#endif + // syncMinBLEP.jump(syncCallbackCrossing, jump); + syncJump = evenLook(newPhase) - evenLook(this->phase); + this->phase = newPhase; + } + + bool jump5 = false; + bool jump1 = false; + if (oldPhase < 0.5 && phase >= 0.5) { + jump5 = true; + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + jump1 = true; + } + + if (gotSyncCallback) { + const float crossing = syncCallbackCrossing; + + // FIXME!! + float jump = syncJump; + syncMinBLEP.jump(crossing, jump); + if (syncCallback) { + syncCallback(crossing); + } + + } else if (jump1) { + const float jump = -2; + float crossing = -phase / normalizedFreq; + aMinBLEP.jump(crossing, jump); + if (syncCallback) { + syncCallback(crossing); + } + + } else if (jump5) { + const float jump = -2; + const float crossing = -(phase - 0.5) / normalizedFreq; + aMinBLEP.jump(crossing, jump); + } + + + // note that non-sync minBLEP is added to double saw, + // but for sync it's added to even. + const float sine = sineLook(phase); + float doubleSaw = (phase < 0.5) ? (-1.0 + 4.0*phase) : (-1.0 + 4.0*(phase - 0.5)); + doubleSaw += aMinBLEP.shift(); + float even = 0.55 * (doubleSaw + 1.27 * sine); + even += syncMinBLEP.shift(); + + output = 5.0*even; + gotSyncCallback = false; +} +#if 0 // old way +inline void MinBLEPVCO::step_even() +{ + if (gotSyncCallback) { + gotSyncCallback = false; + + // All calculations based on slave sync discontinuity happening at + // the same sub-sample as the mater discontinuity. + + // First, figure out how much excess phase we are going to have after reset + const float excess = -syncCallbackCrossing * normalizedFreq; + + // Figure out where our sub-sample phase should be after reset + const float newPhase = .5 + excess; + const float jump = -2.f * (phase - newPhase); +#ifdef _LOG + printf("%s: got sync ph=%.2f nph=%.2f excess=%.2f send cross %.2f jump %.2f \n", name.c_str(), + phase, newPhase, + excess, + syncCallbackCrossing, jump); +#endif + syncMinBLEP.jump(syncCallbackCrossing, jump); + this->phase = newPhase; + return; + } + float oldPhase = phase; + phase += normalizedFreq; + + if (oldPhase < 0.5 && phase >= 0.5) { + float crossing = -(phase - 0.5) / normalizedFreq; + aMinBLEP.jump(crossing, -2.0); + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / normalizedFreq; + aMinBLEP.jump(crossing, -2.0); + if (syncCallback) { + syncCallback(crossing); + } + } + + //sine = -cosf(2*AudioMath::Pi * phase); + // want cosine, but only have sine lookup + float adjPhase = phase + .25f; + if (adjPhase >= 1) { + adjPhase -= 1; + } + const float sine = -LookupTable::lookup(*sinLookup, adjPhase, true); + + float doubleSaw = (phase < 0.5) ? (-1.0 + 4.0*phase) : (-1.0 + 4.0*(phase - 0.5)); + doubleSaw += aMinBLEP.shift(); + doubleSaw += syncMinBLEP.shift(); + const float even = 0.55 * (doubleSaw + 1.27 * sine); + + //TBase::outputs[SINE_OUTPUT].value = 5.0*sine; + output = 5.0*even; +} +#endif + +#if defined(_MSC_VER) +#pragma warning (pop) +#endif + diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/generators/SawOscillator.h b/plugins/community/repos/squinkylabs-plug1/dsp/generators/SawOscillator.h index 1290096c..5c253a9e 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/generators/SawOscillator.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/generators/SawOscillator.h @@ -78,9 +78,9 @@ template inline void SawOscillator::setFrequency(SawOscillatorParams& params, T freq) { if (frequencyCanBeNegative) { - assert(freq >= -.5 && freq < .5); + assert(freq >= -.5 && freq <= .5); } else { - assert(freq >= 0 && freq < .5); + assert(freq >= 0 && freq <= .5); } params.phaseIncrement = freq; } diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/generators/SinOscillator.h b/plugins/community/repos/squinkylabs-plug1/dsp/generators/SinOscillator.h index 1b74b3f8..c9122270 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/generators/SinOscillator.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/generators/SinOscillator.h @@ -1,5 +1,7 @@ #pragma once +#include + #include "AudioMath.h" #include "LookupTable.h" #include "ObjectCache.h" @@ -30,25 +32,14 @@ public: template inline void SinOscillator::setFrequency(SinOscillatorParams& params, T frequency) { - - std::function f = AudioMath::makeFunc_Sin(); - - // TODO: figure out a better initialization strategy - // and a better strategy for table size - // with 4096 thd was -130 db. let's use less memory! - // if (!params.lookupParams.isValid()) { - // LookupTable::init(params.lookupParams, 256, 0, 1, f); - // } assert(params.lookupParams->isValid()); - - SawOscillator::setFrequency(params.sawParams, frequency); + SawOscillator::setFrequency(params.sawParams, frequency); } template inline T SinOscillator::run( SinOscillatorState& state, const SinOscillatorParams& params) { - const T temp = SawOscillator::runSaw(state.sawState, params.sawParams); const T ret = LookupTable::lookup(*params.lookupParams, temp); return ret; @@ -58,7 +49,6 @@ template inline void SinOscillator::runQuadrature( T& output, T& outputQuadrature, SinOscillatorState& state, const SinOscillatorParams& params) { - T saw, quadratureSaw; SawOscillator::runQuadrature(saw, quadratureSaw, state.sawState, params.sawParams); output = LookupTable::lookup(*params.lookupParams, saw); diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO.h b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO.h new file mode 100644 index 00000000..4a82acf5 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO.h @@ -0,0 +1,483 @@ +/** + * This file contains a modified version of EvenVCO.cpp, from the + * Befaco repo. See LICENSE-dist.txt for full license info. + * + * This code has been modified extensively by Squinky Labs. Mainly modifications were: + * re-code hot-spots to lower CPU usage. + * Fix compiler warnings. + * Make it compile in Visual Studio + */ + +// Need to make this compile in MS tools for unit tests +#if defined(_MSC_VER) +#define __attribute__(x) + +#pragma warning (push) +#pragma warning ( disable: 4244 4267 ) +#endif + +#include "dsp/minblep.hpp" +#include "dsp/filter.hpp" +#include "AudioMath.h" +#include "ObjectCache.h" + + +using namespace rack; + +template +struct EvenVCO : TBase +{ + EvenVCO(struct Module * module); + EvenVCO(); + + enum ParamIds + { + OCTAVE_PARAM, + TUNE_PARAM, + PWM_PARAM, + NUM_PARAMS + }; + enum InputIds + { + PITCH1_INPUT, + PITCH2_INPUT, + FM_INPUT, + PWM_INPUT, + NUM_INPUTS + }; + enum OutputIds + { + TRI_OUTPUT, + SINE_OUTPUT, + EVEN_OUTPUT, + SAW_OUTPUT, + SQUARE_OUTPUT, + NUM_OUTPUTS + }; + enum LightIds + { + NUM_LIGHTS + }; + + float phase = 0.0; + float tri = 0.0; + + /** + * References to shared lookup tables. + * Destructor will free them automatically. + */ + std::shared_ptr> sinLookup; + std::function expLookup; + + /** Whether we are past the pulse width already */ + bool halfPhase = false; + + MinBLEP<16> triSquareMinBLEP; + MinBLEP<16> triMinBLEP; + MinBLEP<16> sineMinBLEP; + MinBLEP<16> doubleSawMinBLEP; + MinBLEP<16> sawMinBLEP; + MinBLEP<16> squareMinBLEP; + + void step() override; + void step_even(float deltaPhase); + void step_saw(float deltaPhase); + void step_sq(float deltaPhase); + void step_sin(float deltaPhase); + void step_tri(float deltaPhase); + void step_all(float deltaPhase); + void step_old(); + void initialize(); + void zeroOutputsExcept(int except); + int dispatcher = 0; + int loopCounter = 0; + + + /** + * To avoid scanning outputs for changes every sample, we + * save the state here. + */ + bool doSaw = false; + bool doEven = false; + bool doTri = false; + bool doSq = false; + bool doSin = false; + + /** + * Variables added purely to enable unit testing + */ + float _freq = 0; + float _testFreq = 0; +}; + +template +inline EvenVCO::EvenVCO() : TBase() +{ + initialize(); +} + +template +inline EvenVCO::EvenVCO(struct Module * module) : TBase(module) +{ + initialize(); +} + +template +inline void EvenVCO::initialize() +{ + triSquareMinBLEP.minblep = rack::minblep_16_32; + triSquareMinBLEP.oversample = 32; + triMinBLEP.minblep = minblep_16_32; + triMinBLEP.oversample = 32; + sineMinBLEP.minblep = minblep_16_32; + sineMinBLEP.oversample = 32; + doubleSawMinBLEP.minblep = minblep_16_32; + doubleSawMinBLEP.oversample = 32; + sawMinBLEP.minblep = minblep_16_32; + sawMinBLEP.oversample = 32; + squareMinBLEP.minblep = minblep_16_32; + squareMinBLEP.oversample = 32; + + sinLookup = ObjectCache::getSinLookup(); + expLookup = ObjectCache::getExp2Ex(); +} + +template +void EvenVCO::zeroOutputsExcept(int except) +{ + for (int i = 0; i < NUM_OUTPUTS; ++i) { + if (i != except) { + // if we do even, we do sin at same time + if ((i == SINE_OUTPUT) && (except == EVEN_OUTPUT)) { + } else { + TBase::outputs[i].value = 0; + } + } + } +} + +template +inline void EvenVCO::step_even(float deltaPhase) +{ + float oldPhase = phase; + phase += deltaPhase; + + if (oldPhase < 0.5 && phase >= 0.5) { + float crossing = -(phase - 0.5) / deltaPhase; + doubleSawMinBLEP.jump(crossing, -2.0); + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / deltaPhase; + doubleSawMinBLEP.jump(crossing, -2.0); + } + + + //sine = -cosf(2*AudioMath::Pi * phase); + // want cosine, but only have sine lookup + float adjPhase = phase + .25f; + if (adjPhase >= 1) { + adjPhase -= 1; + } + const float sine = -LookupTable::lookup(*sinLookup, adjPhase, true); + + float doubleSaw = (phase < 0.5) ? (-1.0 + 4.0*phase) : (-1.0 + 4.0*(phase - 0.5)); + doubleSaw += doubleSawMinBLEP.shift(); + const float even = 0.55 * (doubleSaw + 1.27 * sine); + + TBase::outputs[SINE_OUTPUT].value = 5.0*sine; + TBase::outputs[EVEN_OUTPUT].value = 5.0*even; +} + +template +inline void EvenVCO::step_saw(float deltaPhase) +{ + phase += deltaPhase; + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / deltaPhase; + + static float cMin = 100; + static float cMax = -100; + cMin = std::min(crossing, cMin); + cMax = std::max(crossing, cMax); + + // printf("sawJump ph=%.2f, delta=%.2f cross=%.2f (%.2f, %.2f)\n", phase, deltaPhase, crossing, cMin, cMax); + sawMinBLEP.jump(crossing, -2.0); + } + + float saw = -1.0 + 2.0*phase; + saw += sawMinBLEP.shift(); + TBase::outputs[SAW_OUTPUT].value = 5.0*saw; +} + +template +inline void EvenVCO::step_sin(float deltaPhase) +{ + phase += deltaPhase; + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + } + + // want cosine, but only have sine lookup + float adjPhase = phase + .25f; + if (adjPhase >= 1) { + adjPhase -= 1; + } + + const float sine = -LookupTable::lookup(*sinLookup, adjPhase, true); + TBase::outputs[SINE_OUTPUT].value = 5.0*sine; +} + + +template +inline void EvenVCO::step_tri(float deltaPhase) +{ + float oldPhase = phase; + phase += deltaPhase; + + if (oldPhase < 0.5 && phase >= 0.5) { + const float crossing = -(phase - 0.5) / deltaPhase; + triSquareMinBLEP.jump(crossing, 2.0); + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / deltaPhase; + triSquareMinBLEP.jump(crossing, -2.0); + halfPhase = false; + } + + // Outputs + float triSquare = (phase < 0.5) ? -1.0 : 1.0; + triSquare += triSquareMinBLEP.shift(); + + // Integrate square for triangle + tri += 4.0 * triSquare * _freq * TBase::engineGetSampleTime(); + tri *= (1.0 - 40.0 * TBase::engineGetSampleTime()); + + // Set output + TBase::outputs[TRI_OUTPUT].value = 5.0*tri; +} + +template +inline void EvenVCO::step_sq(float deltaPhase) +{ + phase += deltaPhase; + + // Pulse width + float pw; + if (doSq) { + pw = TBase::params[PWM_PARAM].value + TBase::inputs[PWM_INPUT].value / 5.0; + const float minPw = 0.05f; + pw = rescale(clamp(pw, -1.0f, 1.0f), -1.0f, 1.0f, minPw, 1.0f - minPw); + + if (!halfPhase && phase >= pw) { + float crossing = -(phase - pw) / deltaPhase; + squareMinBLEP.jump(crossing, 2.0); + halfPhase = true; + } + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / deltaPhase; + squareMinBLEP.jump(crossing, -2.0); + halfPhase = false; + } + + float square = (phase < pw) ? -1.0 : 1.0; + square += squareMinBLEP.shift(); + TBase::outputs[SQUARE_OUTPUT].value = 5.0*square; +} + +template +inline void EvenVCO::step() +{ + // We don't need to look for connected outputs every cycle. + // do it less often, and store results. + if (--loopCounter < 0) { + loopCounter = 16; + + doSaw = TBase::outputs[SAW_OUTPUT].active; + doEven = TBase::outputs[EVEN_OUTPUT].active; + doTri = TBase::outputs[TRI_OUTPUT].active; + doSq = TBase::outputs[SQUARE_OUTPUT].active; + doSin = TBase::outputs[SINE_OUTPUT].active; + + if (doSaw && !doEven && !doTri && !doSq && !doSin) { + dispatcher = SAW_OUTPUT; + zeroOutputsExcept(SAW_OUTPUT); + } else if (!doSaw && doEven && !doTri && !doSq) { + dispatcher = EVEN_OUTPUT; + zeroOutputsExcept(EVEN_OUTPUT); + } else if (!doSaw && !doEven && !doTri && !doSq && doSin) { + dispatcher = SINE_OUTPUT; + zeroOutputsExcept(SINE_OUTPUT); + } else if (!doSaw && !doEven && doTri && !doSq && !doSin) { + dispatcher = TRI_OUTPUT; + zeroOutputsExcept(TRI_OUTPUT); + } else if (!doSaw && !doEven && !doTri && doSq && !doSin) { + dispatcher = SQUARE_OUTPUT; + zeroOutputsExcept(SQUARE_OUTPUT); + } else { + dispatcher = NUM_OUTPUTS; + } + } + + // Compute frequency, pitch is 1V/oct + float pitch = 1.0 + roundf(TBase::params[OCTAVE_PARAM].value) + TBase::params[TUNE_PARAM].value / 12.0; + pitch += TBase::inputs[PITCH1_INPUT].value + TBase::inputs[PITCH2_INPUT].value; + pitch += TBase::inputs[FM_INPUT].value / 4.0; + +#if 1 // Use lookup table for pitch lookup + const float q = float(log2(261.626)); // move up to pitch range of EvenVCO + pitch += q; + _freq = expLookup(pitch); +#else + _freq = 261.626 * powf(2.0, pitch); + _freq = clamp(_freq, 0.0f, 20000.0f); +#endif + + // Advance phase + float f = (_testFreq) ? _testFreq : _freq; + float deltaPhase = clamp(f * TBase::engineGetSampleTime(), 1e-6f, 0.5f); + + // call the dedicated dispatch routines for the special case waveforms. + switch (dispatcher) { + case SAW_OUTPUT: + step_saw(deltaPhase); + break; + case EVEN_OUTPUT: + step_even(deltaPhase); + break; + case SINE_OUTPUT: + step_sin(deltaPhase); + break; + case TRI_OUTPUT: + step_tri(deltaPhase); + break; + case SQUARE_OUTPUT: + step_sq(deltaPhase); + break; + case NUM_OUTPUTS: + step_all(deltaPhase); + break; + default: + assert(false); + } +} + +/** + * Less optimized version that can do all waveform combinations + */ +template +inline void EvenVCO::step_all(float deltaPhase) +{ + float oldPhase = phase; + phase += deltaPhase; + + if (oldPhase < 0.5 && phase >= 0.5) { + const float crossing = -(phase - 0.5) / deltaPhase; + + if (doTri) { + triSquareMinBLEP.jump(crossing, 2.0); + } + if (doEven) { + doubleSawMinBLEP.jump(crossing, -2.0); + } + } + + // Pulse width + float pw; + if (doSq) { + pw = TBase::params[PWM_PARAM].value + TBase::inputs[PWM_INPUT].value / 5.0; + const float minPw = 0.05f; + pw = rescale(clamp(pw, -1.0f, 1.0f), -1.0f, 1.0f, minPw, 1.0f - minPw); + + if (!halfPhase && phase >= pw) { + const float crossing = -(phase - pw) / deltaPhase; + squareMinBLEP.jump(crossing, 2.0); + halfPhase = true; + } + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / deltaPhase; + if (doTri) { + triSquareMinBLEP.jump(crossing, -2.0); + } + if (doEven) { + doubleSawMinBLEP.jump(crossing, -2.0); + } + if (doSq) { + squareMinBLEP.jump(crossing, -2.0); + } + if (doSaw) { + sawMinBLEP.jump(crossing, -2.0); + } + halfPhase = false; + } + + // Outputs + if (doTri) { + float triSquare = (phase < 0.5) ? -1.0 : 1.0; + triSquare += triSquareMinBLEP.shift(); + + // Integrate square for triangle + tri += 4.0 * triSquare * _freq * TBase::engineGetSampleTime(); + tri *= (1.0 - 40.0 * TBase::engineGetSampleTime()); + } + + float sine = 0; + float even = 0; + float saw = 0; + float square = 0; + if (doSin || doEven) { + //sine = -cosf(2*AudioMath::Pi * phase); + // want cosine, but only have sine lookup + float adjPhase = phase + .25f; + if (adjPhase >= 1) { + adjPhase -= 1; + } + sine = -LookupTable::lookup(*sinLookup, adjPhase, true); + } + if (doEven) { + float doubleSaw = (phase < 0.5) ? (-1.0 + 4.0*phase) : (-1.0 + 4.0*(phase - 0.5)); + doubleSaw += doubleSawMinBLEP.shift(); + even = 0.55 * (doubleSaw + 1.27 * sine); + } + if (doSaw) { + saw = -1.0 + 2.0*phase; + saw += sawMinBLEP.shift(); + } + if (doSq) { + square = (phase < pw) ? -1.0 : 1.0; + square += squareMinBLEP.shift(); + + } else { + TBase::outputs[SQUARE_OUTPUT].value = 0; + } + + // Set outputs + // get rid of redundant stuff here + TBase::outputs[TRI_OUTPUT].value = doTri ? 5.0*tri : 0; + TBase::outputs[SINE_OUTPUT].value = 5.0*sine; + TBase::outputs[EVEN_OUTPUT].value = 5.0*even; + TBase::outputs[SAW_OUTPUT].value = 5.0*saw; + TBase::outputs[SQUARE_OUTPUT].value = 5.0*square; +} + +#if defined(_MSC_VER) +#pragma warning (pop) +#endif diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO_orig.h b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO_orig.h new file mode 100644 index 00000000..c913d2ab --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/EvenVCO_orig.h @@ -0,0 +1,195 @@ +/** + * This file is the original source for Befaco EvenVCO. It has been modified + * slightly to allow it to be compiles in the Squinky Labs test framework. + * + * This file is only use for before/after profiling of EvilVCO. + */ +//#include "Befaco.hpp" +#include "dsp/minblep.hpp" +#include "dsp/filter.hpp" + +#include "AudioMath.h" + +template +struct EvenVCO_orig : TBase +{ + EvenVCO_orig(struct Module * module); + EvenVCO_orig(); + + void initialize(); + + enum ParamIds { + OCTAVE_PARAM, + TUNE_PARAM, + PWM_PARAM, + NUM_PARAMS + }; + enum InputIds { + PITCH1_INPUT, + PITCH2_INPUT, + FM_INPUT, + SYNC_INPUT, + PWM_INPUT, + NUM_INPUTS + }; + enum OutputIds { + TRI_OUTPUT, + SINE_OUTPUT, + EVEN_OUTPUT, + SAW_OUTPUT, + SQUARE_OUTPUT, + NUM_OUTPUTS + }; + + float phase = 0.0; + /** The value of the last sync input */ + float sync = 0.0; + /** The outputs */ + float tri = 0.0; + /** Whether we are past the pulse width already */ + bool halfPhase = false; + + MinBLEP<16> triSquareMinBLEP; + MinBLEP<16> triMinBLEP; + MinBLEP<16> sineMinBLEP; + MinBLEP<16> doubleSawMinBLEP; + MinBLEP<16> sawMinBLEP; + MinBLEP<16> squareMinBLEP; + + RCFilter triFilter; + + + void step() override; + +}; + +template +inline EvenVCO_orig::EvenVCO_orig() : TBase() +{ + initialize(); +} + +template +inline EvenVCO_orig::EvenVCO_orig(struct Module * module) : TBase(module) +{ + initialize(); +} + + + +template +inline void EvenVCO_orig::initialize() +{ + triSquareMinBLEP.minblep = minblep_16_32; + triSquareMinBLEP.oversample = 32; + triMinBLEP.minblep = minblep_16_32; + triMinBLEP.oversample = 32; + sineMinBLEP.minblep = minblep_16_32; + sineMinBLEP.oversample = 32; + doubleSawMinBLEP.minblep = minblep_16_32; + doubleSawMinBLEP.oversample = 32; + sawMinBLEP.minblep = minblep_16_32; + sawMinBLEP.oversample = 32; + squareMinBLEP.minblep = minblep_16_32; + squareMinBLEP.oversample = 32; +} + +template +inline void EvenVCO_orig::step() { + // Compute frequency, pitch is 1V/oct + float pitch = 1.0 + roundf(TBase::params[OCTAVE_PARAM].value) + TBase::params[TUNE_PARAM].value / 12.0; + pitch += TBase::inputs[PITCH1_INPUT].value + TBase::inputs[PITCH2_INPUT].value; + pitch += TBase::inputs[FM_INPUT].value / 4.0; + float freq = 261.626 * powf(2.0, pitch); + freq = clamp(freq, 0.0f, 20000.0f); + + // Pulse width + float pw = TBase::params[PWM_PARAM].value + TBase::inputs[PWM_INPUT].value / 5.0; + const float minPw = 0.05; + pw = rescale(clamp(pw, -1.0f, 1.0f), -1.0f, 1.0f, minPw, 1.0f - minPw); + + // Advance phase + float deltaPhase = clamp(freq * TBase::engineGetSampleTime(), 1e-6f, 0.5f); + float oldPhase = phase; + phase += deltaPhase; + + if (oldPhase < 0.5 && phase >= 0.5) { + float crossing = -(phase - 0.5) / deltaPhase; + triSquareMinBLEP.jump(crossing, 2.0); + doubleSawMinBLEP.jump(crossing, -2.0); + } + + if (!halfPhase && phase >= pw) { + float crossing = -(phase - pw) / deltaPhase; + squareMinBLEP.jump(crossing, 2.0); + halfPhase = true; + } + + // Reset phase if at end of cycle + if (phase >= 1.0) { + phase -= 1.0; + float crossing = -phase / deltaPhase; + triSquareMinBLEP.jump(crossing, -2.0); + doubleSawMinBLEP.jump(crossing, -2.0); + squareMinBLEP.jump(crossing, -2.0); + sawMinBLEP.jump(crossing, -2.0); + halfPhase = false; + } + + // Outputs + float triSquare = (phase < 0.5) ? -1.0 : 1.0; + triSquare += triSquareMinBLEP.shift(); + + // Integrate square for triangle + tri += 4.0 * triSquare * freq * TBase::engineGetSampleTime(); + tri *= (1.0 - 40.0 * TBase::engineGetSampleTime()); + + float sine = -cosf(2*AudioMath::Pi * phase); + float doubleSaw = (phase < 0.5) ? (-1.0 + 4.0*phase) : (-1.0 + 4.0*(phase - 0.5)); + doubleSaw += doubleSawMinBLEP.shift(); + float even = 0.55 * (doubleSaw + 1.27 * sine); + float saw = -1.0 + 2.0*phase; + saw += sawMinBLEP.shift(); + float square = (phase < pw) ? -1.0 : 1.0; + square += squareMinBLEP.shift(); + + // Set outputs + TBase::outputs[TRI_OUTPUT].value = 5.0*tri; + TBase::outputs[SINE_OUTPUT].value = 5.0*sine; + TBase::outputs[EVEN_OUTPUT].value = 5.0*even; + TBase::outputs[SAW_OUTPUT].value = 5.0*saw; + TBase::outputs[SQUARE_OUTPUT].value = 5.0*square; +} + +#if 0 +struct EvenVCOWidget : ModuleWidget { + EvenVCOWidget(EvenVCO *module) : ModuleWidget(module) { + setPanel(SVG::load(assetPlugin(plugin, "res/EvenVCO.svg"))); + + addChild(Widget::create(Vec(15, 0))); + addChild(Widget::create(Vec(15, 365))); + addChild(Widget::create(Vec(15*6, 0))); + addChild(Widget::create(Vec(15*6, 365))); + + addParam(ParamWidget::create(Vec(22, 32), module, EvenVCO::OCTAVE_PARAM, -5.0, 4.0, 0.0)); + addParam(ParamWidget::create(Vec(73, 131), module, EvenVCO::TUNE_PARAM, -7.0, 7.0, 0.0)); + addParam(ParamWidget::create(Vec(16, 230), module, EvenVCO::PWM_PARAM, -1.0, 1.0, 0.0)); + + addInput(Port::create(Vec(8, 120), Port::INPUT, module, EvenVCO::PITCH1_INPUT)); + addInput(Port::create(Vec(19, 157), Port::INPUT, module, EvenVCO::PITCH2_INPUT)); + addInput(Port::create(Vec(48, 183), Port::INPUT, module, EvenVCO::FM_INPUT)); + addInput(Port::create(Vec(86, 189), Port::INPUT, module, EvenVCO::SYNC_INPUT)); + + addInput(Port::create(Vec(72, 236), Port::INPUT, module, EvenVCO::PWM_INPUT)); + + addOutput(Port::create(Vec(10, 283), Port::OUTPUT, module, EvenVCO::TRI_OUTPUT)); + addOutput(Port::create(Vec(87, 283), Port::OUTPUT, module, EvenVCO::SINE_OUTPUT)); + addOutput(Port::create(Vec(48, 306), Port::OUTPUT, module, EvenVCO::EVEN_OUTPUT)); + addOutput(Port::create(Vec(10, 327), Port::OUTPUT, module, EvenVCO::SAW_OUTPUT)); + addOutput(Port::create(Vec(87, 327), Port::OUTPUT, module, EvenVCO::SQUARE_OUTPUT)); + } +}; + + +Model *modelEvenVCO = Model::create("Befaco", "EvenVCO", "EvenVCO", OSCILLATOR_TAG); +#endif diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/FunVCO.h b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/FunVCO.h new file mode 100644 index 00000000..4d5c975d --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/FunVCO.h @@ -0,0 +1,447 @@ +/** + * This is a modified version of the VCV Fundamental VCO. + * See LICENSE-dist.txt for full license info. + * This code has been modified extensively by Squinky Labs. Mainly modifications were: + * re-code hot-spots to lower CPU usage. + * Fix compiler warnings. + * Make it compile in Visual Studio + */ +#pragma once + +#if defined(_MSC_VER) +#pragma warning (push) +#pragma warning (disable: 4305 4244 4267) +#endif + +#if !defined(M_PI) +#define M_PI 3.14159265358979323846264338327950288 +#endif + +#include "dsp/functions.hpp" +#include "dsp/filter.hpp" +#include + +#include "BiquadFilter.h" +#include "BiquadParams.h" +#include "BiquadState.h" +#include "ButterworthFilterDesigner.h" +#include "ObjectCache.h" +#include "IIRDecimator.h" + +extern float sqsawTable[2048]; +extern float sqtriTable[2048]; + +// When this is defined, will use Squinky Labs anti-aliasing decimators, +// rather than rack::Decimator<> +#define _USEIIR + + + +template +struct VoltageControlledOscillator +{ + float sampleTime = 0; + bool analog = false; + bool soft = false; + float lastSyncValue = 0.0f; + float phase = 0.0f; + float freq; + float pw = 0.5f; + float pitch; + bool syncEnabled = false; + bool syncDirection = false; + + /** + * flags to help decide not to do redundant work + */ + bool sinEnabled = false; + bool sqEnabled = false; + bool sawEnabled = false; + bool triEnabled = false; + +#ifdef _USEIIR + IIRDecimator sinDecimator; + IIRDecimator triDecimator; + IIRDecimator sawDecimator; + IIRDecimator sqrDecimator; +#else + rack::Decimator sinDecimator; + rack::Decimator triDecimator; + rack::Decimator sawDecimator; + rack::Decimator sqrDecimator; +#endif + RCFilter sqrFilter; + + // For analog detuning effect + float pitchSlew = 0.0f; + int pitchSlewIndex = 0; + + float sinBuffer[OVERSAMPLE] = {}; + float triBuffer[OVERSAMPLE] = {}; + float sawBuffer[OVERSAMPLE] = {}; + float sqrBuffer[OVERSAMPLE] = {}; + + // Use interpolating lookups for these transcendentals + std::shared_ptr> sinLookup; + std::function expLookup; + + void init() + { + sinLookup = ObjectCache::getSinLookup(); + expLookup = ObjectCache::getExp2Ex(); + + // Set anti-alias 3-db down point an octave below nyquist: .25 + //float cutoff = .25f / float(OVERSAMPLE); + + sinDecimator.setup(16); + sinDecimator.setup(16); + sawDecimator.setup(16); + sqrDecimator.setup(16); + triDecimator.setup(16); + } + + // Use the standard c++ library for random generation + std::default_random_engine generator{99}; + std::normal_distribution distribution{0, 1.0}; + float noise() + { + return (float) distribution(generator); + } + + void setPitch(float pitchKnob, float pitchCv) + { + // Compute frequency + pitch = pitchKnob; + if (analog) { + // Apply pitch slew + const float pitchSlewAmount = 3.0f; + pitch += pitchSlew * pitchSlewAmount; + } else { + // Quantize coarse knob if digital mode + pitch = roundf(pitch); + } + pitch += pitchCv; + + // Note C4 + // freq = 261.626f * powf(2.0f, pitch / 12.0f); + const float q = float(log2(261.626)); // move up to pitch range up + pitch = (pitch / 12.0f) + q; + freq = expLookup(pitch); + } + + void setPulseWidth(float pulseWidth) + { + const float pwMin = 0.01f; + pw = clamp(pulseWidth, pwMin, 1.0f - pwMin); + } + + void process(float deltaTime, float syncValue) + { + assert(sinLookup); + assert(sampleTime > 0); + if (analog) { + // Adjust pitch slew + if (++pitchSlewIndex > 64) { + const float pitchSlewTau = 100.0f; // Time constant for leaky integrator in seconds + pitchSlew += (noise() - pitchSlew / pitchSlewTau) *sampleTime; + pitchSlewIndex = 0; + } + } + + // Advance phase + float deltaPhaseOver = clamp(freq * deltaTime, 1e-6, 0.5f) * (1.0f / OVERSAMPLE); + + // Detect sync + int syncIndex = -1; // Index in the oversample loop where sync occurs [0, OVERSAMPLE) + float syncCrossing = 0.0f; // Offset that sync occurs [0.0f, 1.0f) + if (syncEnabled) { + syncValue -= 0.01f; + if (syncValue > 0.0f && lastSyncValue <= 0.0f) { + float deltaSync = syncValue - lastSyncValue; + syncCrossing = 1.0f - syncValue / deltaSync; + syncCrossing *= OVERSAMPLE; + syncIndex = (int) syncCrossing; + syncCrossing -= syncIndex; + } + lastSyncValue = syncValue; + } + + if (syncDirection) + deltaPhaseOver *= -1.0f; + + if (sqEnabled) { + sqrFilter.setCutoff(40.0f * deltaTime); + } + + for (int i = 0; i < OVERSAMPLE; i++) { + if (syncIndex == i) { + if (soft) { + syncDirection = !syncDirection; + deltaPhaseOver *= -1.0f; + } else { + // phase = syncCrossing * deltaPhase / OVERSAMPLE; + phase = 0.0f; + } + } + + if (sinEnabled) { + if (analog) { + // Quadratic approximation of sine, slightly richer harmonics + if (phase < 0.5f) + sinBuffer[i] = 1.f - 16.f * powf(phase - 0.25f, 2); + else + sinBuffer[i] = -1.f + 16.f * powf(phase - 0.75f, 2); + sinBuffer[i] *= 1.08f; + } else { + // sinBuffer[i] = sinf(2.f*M_PI * phase); + sinBuffer[i] = LookupTable::lookup(*sinLookup, phase, true); + } + } + + if (triEnabled) { + if (analog) { + triBuffer[i] = 1.25f * interpolateLinear(sqtriTable, phase * 2047.f); + } else { + if (phase < 0.25f) + triBuffer[i] = 4.f * phase; + else if (phase < 0.75f) + triBuffer[i] = 2.f - 4.f * phase; + else + triBuffer[i] = -4.f + 4.f * phase; + } + } + + if (sawEnabled) { + if (analog) { + sawBuffer[i] = 1.66f * interpolateLinear(sqsawTable, phase * 2047.f); + } else { + if (phase < 0.5f) + sawBuffer[i] = 2.f * phase; + else + sawBuffer[i] = -2.f + 2.f * phase; + } + } + + if (sqEnabled) { + sqrBuffer[i] = (phase < pw) ? 1.f : -1.f; + if (analog) { + // Simply filter here + sqrFilter.process(sqrBuffer[i]); + sqrBuffer[i] = 0.71f * sqrFilter.highpass(); + } + } + + // don't divide by oversample every time. + // don't do that expensive mod + phase += deltaPhaseOver; + while (phase > 1.0f) { + phase -= 1.0f; + } + while (phase < 0) { + phase += 1.0f; + } + } + } + + float sin() + { + return sinDecimator.process(sinBuffer); + } + float tri() + { + return triDecimator.process(triBuffer); + } + float saw() + { + return sawDecimator.process(sawBuffer); + } + float sqr() + { + return sqrDecimator.process(sqrBuffer); + } +#if 0 + float light() + { + return sinf(2 * M_PI * phase); + } +#endif +}; + + +#if 0 // let's remove from regular builds +template +struct VoltageControlledOscillatorOrig +{ + float sampleTime = 0; + bool analog = false; + bool soft = false; + float lastSyncValue = 0.0f; + float phase = 0.0f; + float freq; + float pw = 0.5f; + float pitch; + bool syncEnabled = false; + bool syncDirection = false; + + rack::Decimator sinDecimator; + rack::Decimator triDecimator; + rack::Decimator sawDecimator; + rack::Decimator sqrDecimator; + RCFilter sqrFilter; + + // For analog detuning effect + float pitchSlew = 0.0f; + int pitchSlewIndex = 0; + + float sinBuffer[OVERSAMPLE] = {}; + float triBuffer[OVERSAMPLE] = {}; + float sawBuffer[OVERSAMPLE] = {}; + float sqrBuffer[OVERSAMPLE] = {}; + + std::default_random_engine generator{99}; + std::normal_distribution distribution{-1.0, 1.0}; + float noise() + { + return (float) distribution(generator); + } + + void setPitch(float pitchKnob, float pitchCv) + { + // Compute frequency + pitch = pitchKnob; + if (analog) { + // Apply pitch slew + const float pitchSlewAmount = 3.0f; + pitch += pitchSlew * pitchSlewAmount; + } else { + // Quantize coarse knob if digital mode + pitch = roundf(pitch); + } + pitch += pitchCv; + // Note C4 + freq = 261.626f * powf(2.0f, pitch / 12.0f); + } + void setPulseWidth(float pulseWidth) + { + const float pwMin = 0.01f; + pw = clamp(pulseWidth, pwMin, 1.0f - pwMin); + } + + void init() + { + } + + void process(float deltaTime, float syncValue) + { + assert(sampleTime > 0); + if (analog) { + // Adjust pitch slew + if (++pitchSlewIndex > 32) { + const float pitchSlewTau = 100.0f; // Time constant for leaky integrator in seconds + // pitchSlew += (randomNormal() - pitchSlew / pitchSlewTau) * sampleTime; + pitchSlew += (noise() - pitchSlew / pitchSlewTau) *sampleTime; + pitchSlewIndex = 0; + } + } + + // Advance phase + float deltaPhase = clamp(freq * deltaTime, 1e-6, 0.5f); + + // Detect sync + int syncIndex = -1; // Index in the oversample loop where sync occurs [0, OVERSAMPLE) + float syncCrossing = 0.0f; // Offset that sync occurs [0.0f, 1.0f) + if (syncEnabled) { + syncValue -= 0.01f; + if (syncValue > 0.0f && lastSyncValue <= 0.0f) { + float deltaSync = syncValue - lastSyncValue; + syncCrossing = 1.0f - syncValue / deltaSync; + syncCrossing *= OVERSAMPLE; + syncIndex = (int) syncCrossing; + syncCrossing -= syncIndex; + } + lastSyncValue = syncValue; + } + + if (syncDirection) + deltaPhase *= -1.0f; + + sqrFilter.setCutoff(40.0f * deltaTime); + + for (int i = 0; i < OVERSAMPLE; i++) { + if (syncIndex == i) { + if (soft) { + syncDirection = !syncDirection; + deltaPhase *= -1.0f; + } else { + // phase = syncCrossing * deltaPhase / OVERSAMPLE; + phase = 0.0f; + } + } + + if (analog) { + // Quadratic approximation of sine, slightly richer harmonics + if (phase < 0.5f) + sinBuffer[i] = 1.f - 16.f * powf(phase - 0.25f, 2); + else + sinBuffer[i] = -1.f + 16.f * powf(phase - 0.75f, 2); + sinBuffer[i] *= 1.08f; + } else { + sinBuffer[i] = sinf(2.f*M_PI * phase); + } + if (analog) { + triBuffer[i] = 1.25f * interpolateLinear(sqtriTable, phase * 2047.f); + } else { + if (phase < 0.25f) + triBuffer[i] = 4.f * phase; + else if (phase < 0.75f) + triBuffer[i] = 2.f - 4.f * phase; + else + triBuffer[i] = -4.f + 4.f * phase; + } + if (analog) { + sawBuffer[i] = 1.66f * interpolateLinear(sqsawTable, phase * 2047.f); + } else { + if (phase < 0.5f) + sawBuffer[i] = 2.f * phase; + else + sawBuffer[i] = -2.f + 2.f * phase; + } + sqrBuffer[i] = (phase < pw) ? 1.f : -1.f; + if (analog) { + // Simply filter here + sqrFilter.process(sqrBuffer[i]); + sqrBuffer[i] = 0.71f * sqrFilter.highpass(); + } + + // Advance phase + phase += deltaPhase / OVERSAMPLE; + phase = eucmod(phase, 1.0f); + } + } + + float sin() + { + return sinDecimator.process(sinBuffer); + } + float tri() + { + return triDecimator.process(triBuffer); + } + float saw() + { + return sawDecimator.process(sawBuffer); + } + float sqr() + { + return sqrDecimator.process(sqrBuffer); + } + float light() + { + return sinf(2 * M_PI * phase); + } +}; +#endif + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/minblep.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/minblep.cpp new file mode 100644 index 00000000..91f60ba0 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/third-party/src/minblep.cpp @@ -0,0 +1,26 @@ +/** + * This is the minblep.cpp from VCVRack. + * Moved here to make it easier to build. + * TODO: don't do this - build from normal folder. + */ + +// Need to make this compile in MS tools for unit tests +#if defined(_MSC_VER) +#define __attribute__(x) + +#pragma warning(disable: 4244 4838 4305) +#endif + +#include "dsp/minblep.hpp" + + +namespace rack { + + +// TODO I should probably compute this on launch +const float minblep_16_32[] = { + 0.00011023, 0.00022416, 0.00034297, 0.00046661, 0.00059353, 0.00072403, 0.00085807, 0.00099544, 0.00113669, 0.00128244, 0.00143357, 0.00159180, 0.00175889, 0.00193681, 0.00212798, 0.00233618, 0.00256460, 0.00281804, 0.00310111, 0.00341981, 0.00378001, 0.00418855, 0.00465331, 0.00518249, 0.00578578, 0.00647247, 0.00725390, 0.00814134, 0.00914690, 0.01028436, 0.01156735, 0.01301055, 0.01462957, 0.01644073, 0.01846137, 0.02070885, 0.02320160, 0.02595890, 0.02900020, 0.03234551, 0.03601537, 0.04003051, 0.04441243, 0.04918219, 0.05436156, 0.05997159, 0.06603400, 0.07256979, 0.07960004, 0.08714473, 0.09522393, 0.10385663, 0.11306075, 0.12285375, 0.13325208, 0.14427035, 0.15592176, 0.16821821, 0.18117011, 0.19478568, 0.20907153, 0.22403158, 0.23966792, 0.25598019, 0.27296567, 0.29061884, 0.30893153, 0.32789305, 0.34748974, 0.36770493, 0.38851914, 0.40990984, 0.43185139, 0.45431516, 0.47726974, 0.50068015, 0.52450907, 0.54871643, 0.57325858, 0.59809023, 0.62316221, 0.64842403, 0.67382252, 0.69930243, 0.72480643, 0.75027585, 0.77565008, 0.80086774, 0.82586610, 0.85058230, 0.87495226, 0.89891225, 0.92239881, 0.94534874, 0.96769959, 0.98939002, 1.01036096, 1.03055346, 1.04991257, 1.06838441, 1.08591819, 1.10246634, 1.11798477, 1.13243258, 1.14577281, 1.15797329, 1.16900539, 1.17884552, 1.18747461, 1.19487906, 1.20105016, 1.20598388, 1.20968246, 1.21215260, 1.21340692, 1.21346366, 1.21234596, 1.21008229, 1.20670640, 1.20225751, 1.19677913, 1.19032025, 1.18293369, 1.17467666, 1.16561043, 1.15579987, 1.14531350, 1.13422263, 1.12260056, 1.11052382, 1.09806967, 1.08531761, 1.07234740, 1.05923963, 1.04607463, 1.03293216, 1.01989150, 1.00703001, 0.99442369, 0.98214602, 0.97026730, 0.95885533, 0.94797397, 0.93768352, 0.92803955, 0.91909295, 0.91089052, 0.90347338, 0.89687651, 0.89113057, 0.88625956, 0.88228178, 0.87920940, 0.87704903, 0.87580091, 0.87545884, 0.87601125, 0.87744081, 0.87972385, 0.88283205, 0.88673097, 0.89138156, 0.89674008, 0.90275854, 0.90938461, 0.91656262, 0.92423326, 0.93233514, 0.94080383, 0.94957352, 0.95857650, 0.96774524, 0.97700989, 0.98630202, 0.99555433, 1.00469887, 1.01367104, 1.02240634, 1.03084445, 1.03892660, 1.04659796, 1.05380774, 1.06050789, 1.06665611, 1.07221341, 1.07714641, 1.08142638, 1.08503044, 1.08793986, 1.09014225, 1.09163105, 1.09240448, 1.09246624, 1.09182608, 1.09049749, 1.08850145, 1.08586180, 1.08260751, 1.07877254, 1.07439494, 1.06951582, 1.06418049, 1.05843639, 1.05233502, 1.04592884, 1.03927267, 1.03242254, 1.02543569, 1.01836896, 1.01127994, 1.00422585, 0.99726236, 0.99044448, 0.98382431, 0.97745323, 0.97137886, 0.96564668, 0.96029860, 0.95537275, 0.95090336, 0.94692129, 0.94345307, 0.94051903, 0.93813735, 0.93632013, 0.93507481, 0.93440408, 0.93430620, 0.93477470, 0.93579876, 0.93736202, 0.93944514, 0.94202399, 0.94507092, 0.94855475, 0.95244062, 0.95669132, 0.96126628, 0.96612370, 0.97121888, 0.97650659, 0.98193920, 0.98746979, 0.99305087, 0.99863440, 1.00417352, 1.00962198, 1.01493454, 1.02006841, 1.02498233, 1.02963722, 1.03399694, 1.03802824, 1.04170084, 1.04498816, 1.04786694, 1.05031765, 1.05232465, 1.05387664, 1.05496621, 1.05558980, 1.05574775, 1.05544484, 1.05468917, 1.05349278, 1.05187225, 1.04984665, 1.04743862, 1.04467380, 1.04158032, 1.03818953, 1.03453457, 1.03065002, 1.02657270, 1.02234089, 1.01799285, 1.01356828, 1.00910676, 1.00464690, 1.00022852, 0.99588913, 0.99166596, 0.98759449, 0.98370826, 0.98003900, 0.97661632, 0.97346693, 0.97061497, 0.96808159, 0.96588528, 0.96404094, 0.96256018, 0.96145141, 0.96072024, 0.96036756, 0.96039182, 0.96078801, 0.96154761, 0.96265966, 0.96410930, 0.96587980, 0.96795046, 0.97029966, 0.97290313, 0.97573400, 0.97876412, 0.98196387, 0.98530257, 0.98874873, 0.99227041, 0.99583501, 0.99940956, 1.00296247, 1.00646222, 1.00987804, 1.01318014, 1.01634085, 1.01933396, 1.02213407, 1.02471924, 1.02706873, 1.02916455, 1.03099120, 1.03253567, 1.03378832, 1.03474081, 1.03538895, 1.03573155, 1.03576887, 1.03550470, 1.03494596, 1.03410137, 1.03298199, 1.03160226, 1.02997768, 1.02812684, 1.02606928, 1.02382588, 1.02142048, 1.01887643, 1.01621914, 1.01347411, 1.01066744, 1.00782573, 1.00497484, 1.00214148, 0.99935061, 0.99662775, 0.99399650, 0.99147928, 0.98909825, 0.98687279, 0.98482132, 0.98295969, 0.98130250, 0.97986293, 0.97865003, 0.97767186, 0.97693449, 0.97644144, 0.97619355, 0.97618985, 0.97642678, 0.97689945, 0.97759926, 0.97851688, 0.97964054, 0.98095751, 0.98245293, 0.98410982, 0.98591143, 0.98783875, 0.98987180, 0.99199086, 0.99417531, 0.99640393, 0.99865520, 1.00090814, 1.00314200, 1.00533652, 1.00747168, 1.00952899, 1.01149011, 1.01333869, 1.01505876, 1.01663721, 1.01806092, 1.01931858, 1.02040136, 1.02130210, 1.02201474, 1.02253604, 1.02286315, 1.02299595, 1.02293634, 1.02268875, 1.02225709, 1.02164853, 1.02087140, 1.01993537, 1.01885104, 1.01763213, 1.01629102, 1.01484251, 1.01330113, 1.01168346, 1.01000535, 1.00828362, 1.00653470, 1.00477552, 1.00302279, 1.00129271, 0.99960083, 0.99796313, 0.99639338, 0.99490535, 0.99351192, 0.99222440, 0.99105316, 0.99000835, 0.98909634, 0.98832458, 0.98769748, 0.98721880, 0.98689038, 0.98671335, 0.98668671, 0.98680866, 0.98707467, 0.98748106, 0.98802143, 0.98868805, 0.98947275, 0.99036646, 0.99135911, 0.99243897, 0.99359548, 0.99481559, 0.99608690, 0.99739677, 0.99873203, 1.00007975, 1.00142658, 1.00276041, 1.00406802, 1.00533855, 1.00655985, 1.00772119, 1.00881267, 1.00982487, 1.01075006, 1.01158035, 1.01230979, 1.01293266, 1.01344562, 1.01384568, 1.01412964, 1.01429844, 1.01435149, 1.01429081, 1.01411796, 1.01383793, 1.01345396, 1.01297212, 1.01239896, 1.01174057, 1.01100540, 1.01020169, 1.00933838, 1.00842452, 1.00746989, 1.00648463, 1.00547814, 1.00446069, 1.00344217, 1.00243223, 1.00143993, 1.00047517, 0.99954665, 0.99866235, 0.99782991, 0.99705631, 0.99634796, 0.99571103, 0.99514896, 0.99466711, 0.99426842, 0.99395454, 0.99372780, 0.99358785, 0.99353504, 0.99356812, 0.99368507, 0.99388355, 0.99415958, 0.99450946, 0.99492884, 0.99541146, 0.99595195, 0.99654400, 0.99718058, 0.99785507, 0.99856061, 0.99928933, 1.00003409, 1.00078654, 1.00154030, 1.00228751, 1.00302088, 1.00373411, 1.00442064, 1.00507402, 1.00568807, 1.00625861, 1.00678062, 1.00724947, 1.00766242, 1.00801611, 1.00830781, 1.00853622, 1.00870037, 1.00880003, 1.00883472, 1.00880599, 1.00871444, 1.00856256, 1.00835276, 1.00808787, 1.00777161, 1.00740683, 1.00699902, 1.00655174, 1.00606918, 1.00555754, 1.00502074, 1.00446463, 1.00389385, 1.00331378, 1.00272894, 1.00214446, 1.00156450, 1.00099480, 1.00043809, 0.99989861, 0.99938035, 0.99888563, 0.99841738, 0.99797773, 0.99756885, 0.99719167, 0.99684638, 0.99653435, 0.99625492, 0.99600822, 0.99579257, 0.99560666, 0.99544859, 0.99531645, 0.99520802, 0.99512035, 0.99504977, 0.99499327, 0.99494720, 0.99490863, 0.99487358, 0.99483842, 0.99479860, 0.99475139, 0.99469274, 0.99461985, 0.99452943, 0.99441826, 0.99428391, 0.99412394, 0.99393618, 0.99371916, 0.99347186, 0.99319351, 0.99288350, 0.99254173, 0.99216926, 0.99176681, 0.99133593, 0.99087846, 0.99039710, 0.98989451, 0.98937410, 0.98883879, 0.98829341, 0.98774183, 0.98718870, 0.98663867, 0.98609704, 0.98556888, 0.98505920, 0.98457366, 0.98411739, 0.98369551, 0.98331392, 0.98297703, 0.98268992, 0.98245704, 0.98228276, 0.98217118, 0.98212564, 0.98214996, 0.98224646, 0.98241693, 0.98266387, 0.98298812, 0.98339027, 0.98387039, 0.98442757, 0.98506147, 0.98577005, 0.98655069, 0.98740059, 0.98831660, 0.98929417, 0.99032903, 0.99141610, 0.99254966, 0.99372399, 0.99493235, 0.99616790, 0.99742448, 0.99869454, 0.99997079, 1.00124514, 1.00251019, 1.00375855, 1.00498211, 1.00617325, 1.00732577, 1.00843060, 1.00948179, 1.01047242, 1.01139629, 1.01224756, 1.01302052, 1.01371098, 1.01431394, 1.01482534, 1.01524329, 1.01556420, 1.01578641, 1.01590872, 1.01593041, 1.01585221, 1.01567483, 1.01539934, 1.01502872, 1.01456475, 1.01401234, 1.01337564, 1.01265824, 1.01186681, 1.01100624, 1.01008308, 1.00910449, 1.00807726, 1.00700867, 1.00590730, 1.00478077, 1.00363719, 1.00248516, 1.00133204, 1.00018704, 0.99905777, 0.99795246, 0.99687880, 0.99584419, 0.99485654, 0.99392235, 0.99304855, 0.99224019, 0.99150354, 0.99084306, 0.99026269, 0.98976678, 0.98935860, 0.98903960, 0.98881179, 0.98867643, 0.98863405, 0.98868364, 0.98882431, 0.98905468, 0.98937207, 0.98977262, 0.99025381, 0.99081081, 0.99143785, 0.99213088, 0.99288279, 0.99368858, 0.99454105, 0.99543440, 0.99635935, 0.99730903, 0.99827605, 0.99925363, 1.00023246, 1.00120509, 1.00216508, 1.00310433, 1.00401509, 1.00489199, 1.00572717, 1.00651467, 1.00724912, 1.00792384, 1.00853491, 1.00907779, 1.00954843, 1.00994480, 1.01026309, 1.01050198, 1.01066041, 1.01073647, 1.01073205, 1.01064730, 1.01048374, 1.01024330, 1.00992775, 1.00954151, 1.00908792, 1.00857103, 1.00799608, 1.00736785, 1.00669181, 1.00597465, 1.00522304, 1.00444114, 1.00363779, 1.00281966, 1.00199306, 1.00116563, 1.00034273, 0.99953192, 0.99873996, 0.99797446, 0.99724007, 0.99654233, 0.99588805, 0.99528110, 0.99472731, 0.99422991, 0.99379259, 0.99341941, 0.99311274, 0.99287349, 0.99270529, 0.99260652, 0.99257857, 0.99261945, 0.99273038, 0.99290955, 0.99315345, 0.99346066, 0.99382687, 0.99424839, 0.99472272, 0.99524361, 0.99580789, 0.99640882, 0.99704123, 0.99769914, 0.99837738, 0.99906975, 0.99976873, 1.00046957, 1.00116682, 1.00185359, 1.00252378, 1.00317132, 1.00379229, 1.00438106, 1.00493193, 1.00543988, 1.00590360, 1.00631797, 1.00667834, 1.00698411, 1.00723267, 1.00742185, 1.00755143, 1.00761986, 1.00762773, 1.00757504, 1.00746322, 1.00729394, 1.00706911, 1.00679159, 1.00646341, 1.00608873, 1.00567114, 1.00521481, 1.00472414, 1.00420344, 1.00365949, 1.00309455, 1.00251555, 1.00192726, 1.00133574, 1.00074565, 1.00016236, 0.99959171, 0.99903804, 0.99850535, 0.99799985, 0.99752414, 0.99708354, 0.99668151, 0.99632025, 0.99600381, 0.99573332, 0.99551266, 0.99534053, 0.99522054, 0.99515241, 0.99513555, 0.99517030, 0.99525541, 0.99538952, 0.99557215, 0.99579948, 0.99607027, 0.99638057, 0.99672699, 0.99710703, 0.99751633, 0.99795067, 0.99840581, 0.99887735, 0.99936110, 0.99985218, 1.00034654, 1.00083947, 1.00132573, 1.00180173, 1.00226319, 1.00270593, 1.00312614, 1.00351942, 1.00388277, 1.00421333, 1.00450921, 1.00476730, 1.00498581, 1.00516307, 1.00529838, 1.00539017, 1.00543821, 1.00544345, 1.00540483, 1.00532460, 1.00520289, 1.00504267, 1.00484514, 1.00461233, 1.00434721, 1.00405192, 1.00373054, 1.00338578, 1.00302088, 1.00264025, 1.00224662, 1.00184488, 1.00143826, 1.00103080, 1.00062573, 1.00022781, 0.99984139, 0.99946749, 0.99911129, 0.99877495, 0.99846184, 0.99817514, 0.99791592, 0.99768758, 0.99749118, 0.99732894, 0.99720013, 0.99710739, 0.99705017, 0.99702936, 0.99704379, 0.99709320, 0.99717599, 0.99729306, 0.99744141, 0.99761915, 0.99782479, 0.99805552, 0.99830848, 0.99858129, 0.99887139, 0.99917626, 0.99949169, 0.99981594, 1.00014460, 1.00047433, 1.00080299, 1.00112653, 1.00144279, 1.00174880, 1.00204086, 1.00231719, 1.00257576, 1.00281310, 1.00302708, 1.00321829, 1.00338340, 1.00352204, 1.00363243, 1.00371420, 1.00376749, 1.00379157, 1.00378597, 1.00375187, 1.00369036, 1.00360274, 1.00348926, 1.00335169, 1.00319159, 1.00301039, 1.00281143, 1.00259674, 1.00236738, 1.00212586, 1.00187516, 1.00161850, 1.00135744, 1.00109494, 1.00083435, 1.00057673, 1.00032485, 1.00008142, 0.99984884, 0.99962848, 0.99942255, 0.99923331, 0.99906200, 0.99890971, 0.99877805, 0.99866712, 0.99857920, 0.99851406, 0.99847245, 0.99845350, 0.99845672, 0.99848276, 0.99853104, 0.99859989, 0.99868929, 0.99879676, 0.99892145, 0.99906349, 0.99921906, 0.99938750, 0.99956673, 0.99975437, 0.99995005, 1.00015068, 1.00035346, 1.00055718, 1.00075948, 1.00095868, 1.00115299, 1.00134051, 1.00151980, 1.00168908, 1.00184536, 1.00198960, 1.00211966, 1.00223446, 1.00233328, 1.00241554, 1.00247967, 1.00252616, 1.00255466, 1.00256550, 1.00255883, 1.00253487, 1.00249410, 1.00243723, 1.00236428, 1.00227737, 1.00217772, 1.00206661, 1.00194490, 1.00181246, 1.00167227, 1.00152564, 1.00137448, 1.00121903, 1.00106311, 1.00090694, 1.00075161, 1.00059938, 1.00045121, 1.00030851, 1.00017321, 1.00004661, 0.99992871, 0.99982160, 0.99972528, 0.99964148, 0.99956852, 0.99950951, 0.99946433, 0.99943203, 0.99941361, 0.99940944, 0.99941790, 0.99943894, 0.99947232, 0.99951869, 0.99957561, 0.99964315, 0.99972034, 0.99980599, 0.99989998, 1.00000000 +}; + + +} // namespace rack diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.cpp new file mode 100644 index 00000000..34767b95 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.cpp @@ -0,0 +1,669 @@ + +#include "AsymWaveShaper.h" + + +extern float symmetry_table_0[]; +extern float symmetry_table_1[]; +extern float symmetry_table_2[]; +extern float symmetry_table_3[]; +extern float symmetry_table_4[]; +extern float symmetry_table_5[]; +extern float symmetry_table_6[]; +extern float symmetry_table_7[]; +extern float symmetry_table_8[]; +extern float symmetry_table_9[]; +extern float symmetry_table_10[]; +extern float symmetry_table_11[]; +extern float symmetry_table_12[]; +extern float symmetry_table_13[]; +extern float symmetry_table_14[]; +extern float symmetry_table_15[]; + +float * lookup_tables[16] = { + symmetry_table_0, + symmetry_table_1, + symmetry_table_2, + symmetry_table_3, + symmetry_table_4, + symmetry_table_5, + symmetry_table_6, + symmetry_table_7, + symmetry_table_8, + symmetry_table_9, + symmetry_table_10, + symmetry_table_11, + symmetry_table_12, + symmetry_table_13, + symmetry_table_14, + symmetry_table_15, +}; + + +AsymWaveShaper::AsymWaveShaper() +{ + for (int i = 0; i < iSymmetryTables; ++i) { + const float* entries = lookup_tables[i]; + LookupTable::initDiscrete(tables[i], iNumPoints, entries); + } +} + +void AsymWaveShaper::genTableValues(const Spline& spline, int numPoints) +{ + const double x0 = spline[0].first; + + // first build non-uniform lookup + NonUniformLookup nu; + const double delta = 1.0 / (numPoints * 8); // let's oversample in t space + for (double t = 0; t <= 1; t += delta) { + auto pt = calcPoint(spline, t); + //printf("adding point to table:%f, %f\n", pt.first, pt.second); + nu.add(pt.first, pt.second); + } + + // next output uniform + for (int i = 0; i < numPoints; ++i) { + double x = x0 + (double(i) / numPoints); + double y = nu.lookup(x); + printf("%ff", y); + if (i != numPoints - 1) { + printf(", "); + + if ((i % 8) == 7) { + printf("\n"); + } + } + } +} + + +void AsymWaveShaper::genTable(int index, double symmetry) +{ + printf("float symmetry_table_%d[%d] = {\n", index, iNumPoints); + + genTableValues(makeSplineLeft(symmetry), iNumPoints / 2); + printf(",\n"); + genTableValues(makeSplineRight(symmetry), iNumPoints / 2); + printf("\n};\n"); + fflush(stdout); +} + +Spline AsymWaveShaper::makeSplineRight(double symmetry) +{ + Spline ret; + ret.push_back(std::pair(0.0, 0.0)); + ret.push_back(std::pair(0.5, 1.0)); + ret.push_back(std::pair(0.5, 1.0)); + ret.push_back(std::pair(1.0, 1.0)); + return ret; +} + +Spline AsymWaveShaper::makeSplineLeft(double symmetry) +{ + // symmetry from 0..1 + Spline ret; + ret.push_back(std::pair(-1, -symmetry)); + ret.push_back(std::pair(-symmetry/2.f, -symmetry)); + ret.push_back(std::pair(-symmetry/2.f, -symmetry)); + ret.push_back(std::pair(0, 0)); + return ret; +} + +std::pair AsymWaveShaper::calcPoint(const Spline& spline, double t) +{ + std::pair ret; + + ret.first = pow(1 - t, 3) * spline[0].first + + 3 * t * pow(1 - t, 2) * spline[1].first + + 3 * pow(t, 2) * (1 - t) * spline[2].first + + pow(t, 3) * spline[3].first; + + ret.second = pow(1 - t, 3) * spline[0].second + + 3 * t * pow(1 - t, 2) * spline[1].second + + 3 * pow(t, 2) * (1 - t) * spline[2].second + + pow(t, 3) * spline[3].second; + return ret; +} +float symmetry_table_0[256] = { +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_1[256] = { +-0.066667f, -0.066667f, -0.066667f, -0.066667f, -0.066667f, -0.066667f, -0.066666f, -0.066666f, +-0.066666f, -0.066666f, -0.066665f, -0.066665f, -0.066664f, -0.066663f, -0.066663f, -0.066662f, +-0.066661f, -0.066659f, -0.066658f, -0.066656f, -0.066654f, -0.066652f, -0.066650f, -0.066647f, +-0.066644f, -0.066641f, -0.066638f, -0.066634f, -0.066630f, -0.066625f, -0.066621f, -0.066615f, +-0.066610f, -0.066603f, -0.066597f, -0.066590f, -0.066582f, -0.066574f, -0.066565f, -0.066556f, +-0.066546f, -0.066535f, -0.066523f, -0.066511f, -0.066498f, -0.066484f, -0.066470f, -0.066454f, +-0.066438f, -0.066420f, -0.066402f, -0.066382f, -0.066361f, -0.066339f, -0.066316f, -0.066292f, +-0.066266f, -0.066238f, -0.066210f, -0.066179f, -0.066147f, -0.066113f, -0.066078f, -0.066040f, +-0.066001f, -0.065959f, -0.065916f, -0.065870f, -0.065821f, -0.065770f, -0.065717f, -0.065660f, +-0.065601f, -0.065538f, -0.065473f, -0.065404f, -0.065331f, -0.065255f, -0.065174f, -0.065089f, +-0.065000f, -0.064906f, -0.064808f, -0.064703f, -0.064594f, -0.064478f, -0.064356f, -0.064228f, +-0.064092f, -0.063949f, -0.063798f, -0.063639f, -0.063470f, -0.063292f, -0.063103f, -0.062903f, +-0.062691f, -0.062465f, -0.062226f, -0.061972f, -0.061702f, -0.061413f, -0.061106f, -0.060777f, +-0.060425f, -0.060048f, -0.059643f, -0.059207f, -0.058737f, -0.058228f, -0.057677f, -0.057076f, +-0.056421f, -0.055703f, -0.054911f, -0.054035f, -0.053059f, -0.051965f, -0.050726f, -0.049311f, +-0.047673f, -0.045747f, -0.043439f, -0.040598f, -0.036977f, -0.032128f, -0.025192f, -0.014656f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_2[256] = { +-0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133332f, +-0.133332f, -0.133331f, -0.133330f, -0.133329f, -0.133328f, -0.133326f, -0.133324f, -0.133322f, +-0.133320f, -0.133317f, -0.133314f, -0.133310f, -0.133306f, -0.133301f, -0.133296f, -0.133290f, +-0.133284f, -0.133276f, -0.133269f, -0.133260f, -0.133251f, -0.133241f, -0.133230f, -0.133218f, +-0.133205f, -0.133191f, -0.133176f, -0.133160f, -0.133143f, -0.133124f, -0.133104f, -0.133083f, +-0.133060f, -0.133036f, -0.133010f, -0.132982f, -0.132953f, -0.132921f, -0.132888f, -0.132852f, +-0.132815f, -0.132775f, -0.132732f, -0.132688f, -0.132640f, -0.132590f, -0.132537f, -0.132480f, +-0.132421f, -0.132358f, -0.132292f, -0.132222f, -0.132148f, -0.132070f, -0.131988f, -0.131902f, +-0.131810f, -0.131714f, -0.131613f, -0.131506f, -0.131393f, -0.131274f, -0.131149f, -0.131018f, +-0.130879f, -0.130733f, -0.130579f, -0.130417f, -0.130246f, -0.130066f, -0.129876f, -0.129676f, +-0.129465f, -0.129243f, -0.129008f, -0.128761f, -0.128500f, -0.128224f, -0.127932f, -0.127624f, +-0.127299f, -0.126954f, -0.126590f, -0.126203f, -0.125794f, -0.125360f, -0.124899f, -0.124410f, +-0.123889f, -0.123335f, -0.122745f, -0.122115f, -0.121442f, -0.120723f, -0.119952f, -0.119125f, +-0.118235f, -0.117277f, -0.116243f, -0.115125f, -0.113911f, -0.112591f, -0.111150f, -0.109572f, +-0.107837f, -0.105920f, -0.103793f, -0.101419f, -0.098751f, -0.095733f, -0.092290f, -0.088326f, +-0.083713f, -0.078285f, -0.071824f, -0.064055f, -0.054668f, -0.043400f, -0.030217f, -0.015502f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_3[256] = { +-0.200000f, -0.200000f, -0.200000f, -0.200000f, -0.200000f, -0.199999f, -0.199999f, -0.199998f, +-0.199997f, -0.199996f, -0.199995f, -0.199993f, -0.199991f, -0.199988f, -0.199985f, -0.199981f, +-0.199977f, -0.199972f, -0.199967f, -0.199960f, -0.199953f, -0.199945f, -0.199937f, -0.199927f, +-0.199916f, -0.199904f, -0.199891f, -0.199877f, -0.199861f, -0.199844f, -0.199825f, -0.199805f, +-0.199783f, -0.199759f, -0.199734f, -0.199706f, -0.199677f, -0.199645f, -0.199611f, -0.199575f, +-0.199536f, -0.199494f, -0.199449f, -0.199402f, -0.199351f, -0.199297f, -0.199240f, -0.199179f, +-0.199114f, -0.199046f, -0.198973f, -0.198895f, -0.198813f, -0.198726f, -0.198634f, -0.198537f, +-0.198434f, -0.198325f, -0.198210f, -0.198089f, -0.197960f, -0.197825f, -0.197681f, -0.197530f, +-0.197370f, -0.197202f, -0.197024f, -0.196837f, -0.196639f, -0.196430f, -0.196210f, -0.195978f, +-0.195733f, -0.195474f, -0.195201f, -0.194914f, -0.194610f, -0.194289f, -0.193951f, -0.193594f, +-0.193216f, -0.192818f, -0.192396f, -0.191951f, -0.191479f, -0.190981f, -0.190453f, -0.189894f, +-0.189302f, -0.188674f, -0.188007f, -0.187300f, -0.186548f, -0.185748f, -0.184897f, -0.183990f, +-0.183023f, -0.181990f, -0.180886f, -0.179704f, -0.178437f, -0.177078f, -0.175616f, -0.174041f, +-0.172341f, -0.170504f, -0.168512f, -0.166349f, -0.163992f, -0.161418f, -0.158598f, -0.155499f, +-0.152081f, -0.148298f, -0.144093f, -0.139402f, -0.134148f, -0.128240f, -0.121576f, -0.114043f, +-0.105522f, -0.095903f, -0.085107f, -0.073109f, -0.059969f, -0.045841f, -0.030958f, -0.015591f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_4[256] = { +-0.266667f, -0.266667f, -0.266667f, -0.266666f, -0.266666f, -0.266666f, -0.266665f, -0.266664f, +-0.266663f, -0.266661f, -0.266659f, -0.266656f, -0.266653f, -0.266649f, -0.266644f, -0.266639f, +-0.266632f, -0.266625f, -0.266617f, -0.266607f, -0.266596f, -0.266584f, -0.266571f, -0.266556f, +-0.266540f, -0.266522f, -0.266502f, -0.266480f, -0.266457f, -0.266431f, -0.266402f, -0.266372f, +-0.266338f, -0.266303f, -0.266264f, -0.266222f, -0.266177f, -0.266128f, -0.266077f, -0.266021f, +-0.265961f, -0.265897f, -0.265829f, -0.265756f, -0.265679f, -0.265596f, -0.265508f, -0.265414f, +-0.265315f, -0.265209f, -0.265096f, -0.264977f, -0.264850f, -0.264716f, -0.264573f, -0.264423f, +-0.264263f, -0.264094f, -0.263915f, -0.263726f, -0.263526f, -0.263314f, -0.263090f, -0.262854f, +-0.262604f, -0.262340f, -0.262061f, -0.261766f, -0.261455f, -0.261126f, -0.260778f, -0.260411f, +-0.260023f, -0.259613f, -0.259180f, -0.258722f, -0.258238f, -0.257726f, -0.257185f, -0.256613f, +-0.256007f, -0.255366f, -0.254687f, -0.253968f, -0.253206f, -0.252398f, -0.251540f, -0.250630f, +-0.249664f, -0.248637f, -0.247544f, -0.246381f, -0.245143f, -0.243822f, -0.242413f, -0.240908f, +-0.239298f, -0.237575f, -0.235729f, -0.233747f, -0.231617f, -0.229325f, -0.226855f, -0.224189f, +-0.221306f, -0.218183f, -0.214794f, -0.211110f, -0.207097f, -0.202719f, -0.197933f, -0.192692f, +-0.186945f, -0.180635f, -0.173704f, -0.166089f, -0.157731f, -0.148574f, -0.138577f, -0.127713f, +-0.115983f, -0.103419f, -0.090082f, -0.076066f, -0.061485f, -0.046465f, -0.031134f, -0.015611f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_5[256] = { +-0.333333f, -0.333333f, -0.333333f, -0.333333f, -0.333333f, -0.333332f, -0.333331f, -0.333330f, +-0.333328f, -0.333325f, -0.333322f, -0.333318f, -0.333314f, -0.333308f, -0.333301f, -0.333294f, +-0.333284f, -0.333274f, -0.333262f, -0.333249f, -0.333234f, -0.333217f, -0.333198f, -0.333177f, +-0.333153f, -0.333128f, -0.333099f, -0.333068f, -0.333034f, -0.332997f, -0.332957f, -0.332913f, +-0.332865f, -0.332814f, -0.332758f, -0.332698f, -0.332633f, -0.332564f, -0.332489f, -0.332409f, +-0.332323f, -0.332231f, -0.332132f, -0.332027f, -0.331915f, -0.331795f, -0.331667f, -0.331531f, +-0.331386f, -0.331232f, -0.331068f, -0.330894f, -0.330710f, -0.330513f, -0.330305f, -0.330085f, +-0.329851f, -0.329603f, -0.329340f, -0.329062f, -0.328767f, -0.328455f, -0.328125f, -0.327775f, +-0.327406f, -0.327014f, -0.326600f, -0.326162f, -0.325699f, -0.325209f, -0.324690f, -0.324141f, +-0.323560f, -0.322946f, -0.322295f, -0.321606f, -0.320877f, -0.320104f, -0.319286f, -0.318419f, +-0.317500f, -0.316525f, -0.315491f, -0.314393f, -0.313228f, -0.311990f, -0.310674f, -0.309274f, +-0.307785f, -0.306199f, -0.304509f, -0.302706f, -0.300783f, -0.298728f, -0.296532f, -0.294183f, +-0.291667f, -0.288969f, -0.286075f, -0.282967f, -0.279625f, -0.276029f, -0.272155f, -0.267977f, +-0.263468f, -0.258598f, -0.253334f, -0.247642f, -0.241485f, -0.234825f, -0.227623f, -0.219844f, +-0.211450f, -0.202413f, -0.192708f, -0.182321f, -0.171248f, -0.159501f, -0.147103f, -0.134096f, +-0.120530f, -0.106468f, -0.091979f, -0.077137f, -0.062014f, -0.046678f, -0.031194f, -0.015618f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_6[256] = { +-0.400000f, -0.400000f, -0.400000f, -0.400000f, -0.399999f, -0.399998f, -0.399997f, -0.399995f, +-0.399992f, -0.399989f, -0.399985f, -0.399979f, -0.399973f, -0.399965f, -0.399956f, -0.399946f, +-0.399933f, -0.399919f, -0.399903f, -0.399885f, -0.399864f, -0.399840f, -0.399814f, -0.399785f, +-0.399753f, -0.399718f, -0.399679f, -0.399636f, -0.399589f, -0.399538f, -0.399482f, -0.399421f, +-0.399355f, -0.399284f, -0.399207f, -0.399123f, -0.399034f, -0.398937f, -0.398833f, -0.398721f, +-0.398601f, -0.398473f, -0.398335f, -0.398188f, -0.398031f, -0.397863f, -0.397684f, -0.397493f, +-0.397289f, -0.397073f, -0.396842f, -0.396597f, -0.396336f, -0.396059f, -0.395765f, -0.395452f, +-0.395120f, -0.394768f, -0.394395f, -0.393999f, -0.393579f, -0.393134f, -0.392662f, -0.392162f, +-0.391632f, -0.391071f, -0.390476f, -0.389846f, -0.389178f, -0.388471f, -0.387721f, -0.386926f, +-0.386084f, -0.385192f, -0.384246f, -0.383243f, -0.382179f, -0.381050f, -0.379852f, -0.378581f, +-0.377232f, -0.375798f, -0.374275f, -0.372655f, -0.370933f, -0.369102f, -0.367152f, -0.365075f, +-0.362862f, -0.360503f, -0.357987f, -0.355302f, -0.352434f, -0.349371f, -0.346095f, -0.342592f, +-0.338842f, -0.334828f, -0.330528f, -0.325920f, -0.320981f, -0.315687f, -0.310013f, -0.303931f, +-0.297415f, -0.290439f, -0.282976f, -0.275004f, -0.266499f, -0.257444f, -0.247826f, -0.237638f, +-0.226877f, -0.215553f, -0.203678f, -0.191275f, -0.178375f, -0.165012f, -0.151228f, -0.137068f, +-0.122577f, -0.107804f, -0.092794f, -0.077591f, -0.062236f, -0.046768f, -0.031219f, -0.015621f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_7[256] = { +-0.466667f, -0.466667f, -0.466667f, -0.466666f, -0.466665f, -0.466664f, -0.466662f, -0.466660f, +-0.466657f, -0.466652f, -0.466646f, -0.466639f, -0.466631f, -0.466621f, -0.466608f, -0.466594f, +-0.466578f, -0.466559f, -0.466537f, -0.466512f, -0.466484f, -0.466453f, -0.466418f, -0.466379f, +-0.466336f, -0.466288f, -0.466235f, -0.466178f, -0.466114f, -0.466045f, -0.465969f, -0.465887f, +-0.465798f, -0.465701f, -0.465596f, -0.465483f, -0.465361f, -0.465229f, -0.465087f, -0.464934f, +-0.464771f, -0.464595f, -0.464407f, -0.464205f, -0.463990f, -0.463759f, -0.463513f, -0.463251f, +-0.462971f, -0.462672f, -0.462354f, -0.462015f, -0.461654f, -0.461270f, -0.460862f, -0.460428f, +-0.459967f, -0.459477f, -0.458956f, -0.458403f, -0.457817f, -0.457194f, -0.456532f, -0.455831f, +-0.455086f, -0.454296f, -0.453458f, -0.452569f, -0.451625f, -0.450624f, -0.449562f, -0.448434f, +-0.447238f, -0.445968f, -0.444620f, -0.443189f, -0.441669f, -0.440054f, -0.438338f, -0.436516f, +-0.434578f, -0.432518f, -0.430327f, -0.427996f, -0.425515f, -0.422875f, -0.420063f, -0.417069f, +-0.413879f, -0.410479f, -0.406856f, -0.402994f, -0.398875f, -0.394484f, -0.389802f, -0.384810f, +-0.379489f, -0.373819f, -0.367779f, -0.361349f, -0.354510f, -0.347243f, -0.339529f, -0.331352f, +-0.322701f, -0.313562f, -0.303931f, -0.293803f, -0.283181f, -0.272071f, -0.260484f, -0.248436f, +-0.235946f, -0.223041f, -0.209746f, -0.196093f, -0.182113f, -0.167839f, -0.153304f, -0.138541f, +-0.123580f, -0.108453f, -0.093188f, -0.077810f, -0.062344f, -0.046811f, -0.031232f, -0.015623f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_8[256] = { +-0.533333f, -0.533333f, -0.533333f, -0.533333f, -0.533332f, -0.533330f, -0.533328f, -0.533325f, +-0.533320f, -0.533314f, -0.533307f, -0.533297f, -0.533286f, -0.533273f, -0.533257f, -0.533238f, +-0.533216f, -0.533191f, -0.533162f, -0.533130f, -0.533093f, -0.533051f, -0.533005f, -0.532953f, +-0.532896f, -0.532832f, -0.532762f, -0.532685f, -0.532601f, -0.532508f, -0.532407f, -0.532297f, +-0.532178f, -0.532048f, -0.531908f, -0.531756f, -0.531591f, -0.531414f, -0.531223f, -0.531018f, +-0.530797f, -0.530560f, -0.530306f, -0.530033f, -0.529741f, -0.529428f, -0.529094f, -0.528737f, +-0.528356f, -0.527949f, -0.527515f, -0.527052f, -0.526559f, -0.526033f, -0.525474f, -0.524878f, +-0.524244f, -0.523570f, -0.522852f, -0.522090f, -0.521279f, -0.520418f, -0.519502f, -0.518529f, +-0.517495f, -0.516397f, -0.515230f, -0.513991f, -0.512674f, -0.511276f, -0.509790f, -0.508211f, +-0.506534f, -0.504753f, -0.502859f, -0.500848f, -0.498710f, -0.496437f, -0.494022f, -0.491454f, +-0.488725f, -0.485822f, -0.482737f, -0.479456f, -0.475967f, -0.472257f, -0.468313f, -0.464120f, +-0.459664f, -0.454928f, -0.449897f, -0.444556f, -0.438887f, -0.432874f, -0.426502f, -0.419754f, +-0.412616f, -0.405075f, -0.397117f, -0.388734f, -0.379917f, -0.370659f, -0.360958f, -0.350815f, +-0.340232f, -0.329217f, -0.317779f, -0.305932f, -0.293690f, -0.281074f, -0.268103f, -0.254800f, +-0.241189f, -0.227294f, -0.213139f, -0.198750f, -0.184152f, -0.169367f, -0.154418f, -0.139327f, +-0.124115f, -0.108799f, -0.093398f, -0.077927f, -0.062402f, -0.046835f, -0.031238f, -0.015624f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_9[256] = { +-0.600000f, -0.600000f, -0.600000f, -0.599999f, -0.599998f, -0.599996f, -0.599993f, -0.599989f, +-0.599983f, -0.599975f, -0.599965f, -0.599953f, -0.599939f, -0.599921f, -0.599900f, -0.599875f, +-0.599847f, -0.599814f, -0.599776f, -0.599734f, -0.599685f, -0.599631f, -0.599570f, -0.599502f, +-0.599426f, -0.599342f, -0.599250f, -0.599148f, -0.599036f, -0.598914f, -0.598780f, -0.598634f, +-0.598475f, -0.598303f, -0.598116f, -0.597913f, -0.597694f, -0.597458f, -0.597203f, -0.596928f, +-0.596632f, -0.596314f, -0.595972f, -0.595606f, -0.595213f, -0.594792f, -0.594341f, -0.593859f, +-0.593343f, -0.592792f, -0.592204f, -0.591576f, -0.590905f, -0.590191f, -0.589428f, -0.588616f, +-0.587750f, -0.586829f, -0.585847f, -0.584802f, -0.583690f, -0.582507f, -0.581248f, -0.579909f, +-0.578484f, -0.576969f, -0.575359f, -0.573646f, -0.571826f, -0.569890f, -0.567833f, -0.565647f, +-0.563323f, -0.560853f, -0.558229f, -0.555441f, -0.552478f, -0.549332f, -0.545990f, -0.542441f, +-0.538673f, -0.534675f, -0.530432f, -0.525932f, -0.521161f, -0.516106f, -0.510752f, -0.505087f, +-0.499096f, -0.492766f, -0.486085f, -0.479041f, -0.471622f, -0.463820f, -0.455626f, -0.447034f, +-0.438039f, -0.428640f, -0.418836f, -0.408630f, -0.398026f, -0.387032f, -0.375656f, -0.363911f, +-0.351811f, -0.339370f, -0.326606f, -0.313536f, -0.300179f, -0.286555f, -0.272683f, -0.258583f, +-0.244274f, -0.229776f, -0.215106f, -0.200282f, -0.185322f, -0.170242f, -0.155055f, -0.139777f, +-0.124420f, -0.108997f, -0.093518f, -0.077994f, -0.062435f, -0.046848f, -0.031242f, -0.015624f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_10[256] = { +-0.666667f, -0.666667f, -0.666666f, -0.666666f, -0.666664f, -0.666661f, -0.666657f, -0.666652f, +-0.666644f, -0.666634f, -0.666622f, -0.666606f, -0.666587f, -0.666564f, -0.666537f, -0.666505f, +-0.666468f, -0.666425f, -0.666376f, -0.666320f, -0.666257f, -0.666185f, -0.666105f, -0.666016f, +-0.665917f, -0.665807f, -0.665685f, -0.665551f, -0.665404f, -0.665242f, -0.665065f, -0.664872f, +-0.664662f, -0.664434f, -0.664186f, -0.663917f, -0.663625f, -0.663310f, -0.662970f, -0.662604f, +-0.662208f, -0.661783f, -0.661326f, -0.660834f, -0.660307f, -0.659741f, -0.659135f, -0.658485f, +-0.657789f, -0.657045f, -0.656250f, -0.655400f, -0.654491f, -0.653522f, -0.652486f, -0.651382f, +-0.650204f, -0.648948f, -0.647610f, -0.646184f, -0.644665f, -0.643047f, -0.641325f, -0.639491f, +-0.637540f, -0.635465f, -0.633257f, -0.630910f, -0.628414f, -0.625761f, -0.622943f, -0.619948f, +-0.616769f, -0.613393f, -0.609811f, -0.606010f, -0.601981f, -0.597711f, -0.593187f, -0.588399f, +-0.583333f, -0.577978f, -0.572322f, -0.566353f, -0.560059f, -0.553431f, -0.546459f, -0.539134f, +-0.531447f, -0.523393f, -0.514967f, -0.506166f, -0.496987f, -0.487431f, -0.477501f, -0.467200f, +-0.456535f, -0.445512f, -0.434141f, -0.422433f, -0.410401f, -0.398057f, -0.385417f, -0.372494f, +-0.359306f, -0.345868f, -0.332196f, -0.318307f, -0.304217f, -0.289941f, -0.275495f, -0.260893f, +-0.246151f, -0.231281f, -0.216296f, -0.201208f, -0.186029f, -0.170770f, -0.155440f, -0.140049f, +-0.124605f, -0.109117f, -0.093591f, -0.078035f, -0.062455f, -0.046857f, -0.031245f, -0.015624f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_11[256] = { +-0.733333f, -0.733333f, -0.733333f, -0.733332f, -0.733330f, -0.733327f, -0.733321f, -0.733314f, +-0.733304f, -0.733292f, -0.733275f, -0.733255f, -0.733230f, -0.733201f, -0.733165f, -0.733124f, +-0.733075f, -0.733020f, -0.732955f, -0.732882f, -0.732800f, -0.732706f, -0.732602f, -0.732485f, +-0.732354f, -0.732210f, -0.732050f, -0.731873f, -0.731679f, -0.731466f, -0.731233f, -0.730978f, +-0.730700f, -0.730397f, -0.730067f, -0.729710f, -0.729322f, -0.728903f, -0.728449f, -0.727960f, +-0.727432f, -0.726862f, -0.726250f, -0.725591f, -0.724882f, -0.724122f, -0.723305f, -0.722430f, +-0.721492f, -0.720487f, -0.719412f, -0.718261f, -0.717032f, -0.715717f, -0.714313f, -0.712813f, +-0.711213f, -0.709506f, -0.707686f, -0.705745f, -0.703678f, -0.701476f, -0.699131f, -0.696636f, +-0.693982f, -0.691160f, -0.688161f, -0.684974f, -0.681591f, -0.678000f, -0.674191f, -0.670154f, +-0.665877f, -0.661350f, -0.656561f, -0.651499f, -0.646154f, -0.640515f, -0.634571f, -0.628313f, +-0.621732f, -0.614820f, -0.607570f, -0.599974f, -0.592029f, -0.583730f, -0.575074f, -0.566062f, +-0.556694f, -0.546972f, -0.536899f, -0.526482f, -0.515726f, -0.504639f, -0.493233f, -0.481515f, +-0.469498f, -0.457195f, -0.444618f, -0.431780f, -0.418696f, -0.405378f, -0.391842f, -0.378100f, +-0.364167f, -0.350056f, -0.335780f, -0.321352f, -0.306784f, -0.292087f, -0.277273f, -0.262352f, +-0.247335f, -0.232229f, -0.217046f, -0.201792f, -0.186475f, -0.171104f, -0.155684f, -0.140221f, +-0.124723f, -0.109194f, -0.093638f, -0.078062f, -0.062468f, -0.046862f, -0.031246f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_12[256] = { +-0.800000f, -0.800000f, -0.800000f, -0.799998f, -0.799996f, -0.799991f, -0.799985f, -0.799975f, +-0.799963f, -0.799946f, -0.799925f, -0.799899f, -0.799867f, -0.799828f, -0.799782f, -0.799728f, +-0.799665f, -0.799592f, -0.799509f, -0.799413f, -0.799305f, -0.799183f, -0.799045f, -0.798892f, +-0.798720f, -0.798530f, -0.798319f, -0.798086f, -0.797830f, -0.797548f, -0.797238f, -0.796900f, +-0.796531f, -0.796128f, -0.795690f, -0.795213f, -0.794696f, -0.794136f, -0.793530f, -0.792874f, +-0.792166f, -0.791402f, -0.790579f, -0.789693f, -0.788739f, -0.787714f, -0.786613f, -0.785431f, +-0.784164f, -0.782805f, -0.781350f, -0.779792f, -0.778126f, -0.776344f, -0.774441f, -0.772407f, +-0.770238f, -0.767923f, -0.765456f, -0.762828f, -0.760029f, -0.757050f, -0.753883f, -0.750518f, +-0.746943f, -0.743150f, -0.739128f, -0.734866f, -0.730354f, -0.725583f, -0.720540f, -0.715218f, +-0.709606f, -0.703694f, -0.697475f, -0.690940f, -0.684083f, -0.676897f, -0.669377f, -0.661520f, +-0.653321f, -0.644781f, -0.635898f, -0.626674f, -0.617111f, -0.607214f, -0.596986f, -0.586434f, +-0.575567f, -0.564391f, -0.552918f, -0.541156f, -0.529117f, -0.516812f, -0.504253f, -0.491452f, +-0.478422f, -0.465174f, -0.451722f, -0.438077f, -0.424251f, -0.410255f, -0.396103f, -0.381803f, +-0.367368f, -0.352806f, -0.338128f, -0.323344f, -0.308461f, -0.293488f, -0.278434f, -0.263304f, +-0.248107f, -0.232849f, -0.217536f, -0.202174f, -0.186768f, -0.171323f, -0.155844f, -0.140335f, +-0.124801f, -0.109244f, -0.093669f, -0.078079f, -0.062477f, -0.046865f, -0.031247f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_13[256] = { +-0.866667f, -0.866667f, -0.866666f, -0.866664f, -0.866661f, -0.866655f, -0.866647f, -0.866635f, +-0.866618f, -0.866597f, -0.866570f, -0.866535f, -0.866494f, -0.866443f, -0.866383f, -0.866313f, +-0.866230f, -0.866135f, -0.866025f, -0.865900f, -0.865757f, -0.865596f, -0.865415f, -0.865212f, +-0.864986f, -0.864734f, -0.864455f, -0.864146f, -0.863805f, -0.863430f, -0.863019f, -0.862568f, +-0.862075f, -0.861536f, -0.860950f, -0.860312f, -0.859619f, -0.858866f, -0.858051f, -0.857169f, +-0.856216f, -0.855186f, -0.854075f, -0.852878f, -0.851590f, -0.850204f, -0.848714f, -0.847114f, +-0.845398f, -0.843558f, -0.841586f, -0.839477f, -0.837220f, -0.834808f, -0.832233f, -0.829485f, +-0.826556f, -0.823435f, -0.820114f, -0.816581f, -0.812828f, -0.808845f, -0.804621f, -0.800146f, +-0.795410f, -0.790404f, -0.785119f, -0.779546f, -0.773676f, -0.767502f, -0.761016f, -0.754213f, +-0.747087f, -0.739635f, -0.731852f, -0.723737f, -0.715290f, -0.706510f, -0.697400f, -0.687961f, +-0.678199f, -0.668118f, -0.657724f, -0.647026f, -0.636029f, -0.624744f, -0.613180f, -0.601348f, +-0.589256f, -0.576917f, -0.564342f, -0.551541f, -0.538527f, -0.525309f, -0.511900f, -0.498310f, +-0.484549f, -0.470629f, -0.456560f, -0.442350f, -0.428010f, -0.413549f, -0.398974f, -0.384295f, +-0.369519f, -0.354653f, -0.339705f, -0.324681f, -0.309587f, -0.294429f, -0.279214f, -0.263945f, +-0.248628f, -0.233267f, -0.217867f, -0.202433f, -0.186966f, -0.171472f, -0.155953f, -0.140413f, +-0.124854f, -0.109279f, -0.093691f, -0.078091f, -0.062483f, -0.046868f, -0.031248f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_14[256] = { +-0.933333f, -0.933333f, -0.933332f, -0.933330f, -0.933326f, -0.933319f, -0.933308f, -0.933292f, +-0.933271f, -0.933243f, -0.933207f, -0.933162f, -0.933107f, -0.933041f, -0.932963f, -0.932870f, +-0.932761f, -0.932635f, -0.932490f, -0.932324f, -0.932136f, -0.931922f, -0.931682f, -0.931413f, +-0.931111f, -0.930775f, -0.930403f, -0.929990f, -0.929534f, -0.929032f, -0.928480f, -0.927874f, +-0.927211f, -0.926487f, -0.925697f, -0.924836f, -0.923900f, -0.922883f, -0.921781f, -0.920587f, +-0.919295f, -0.917900f, -0.916394f, -0.914770f, -0.913022f, -0.911142f, -0.909121f, -0.906952f, +-0.904625f, -0.902133f, -0.899466f, -0.896614f, -0.893569f, -0.890320f, -0.886857f, -0.883171f, +-0.879252f, -0.875090f, -0.870674f, -0.865996f, -0.861046f, -0.855816f, -0.850296f, -0.844480f, +-0.838360f, -0.831930f, -0.825184f, -0.818118f, -0.810729f, -0.803014f, -0.794973f, -0.786603f, +-0.777908f, -0.768889f, -0.759549f, -0.749893f, -0.739926f, -0.729655f, -0.719086f, -0.708227f, +-0.697088f, -0.685677f, -0.674004f, -0.662078f, -0.649911f, -0.637512f, -0.624893f, -0.612063f, +-0.599033f, -0.585813f, -0.572414f, -0.558845f, -0.545117f, -0.531238f, -0.517218f, -0.503066f, +-0.488789f, -0.474396f, -0.459895f, -0.445293f, -0.430597f, -0.415813f, -0.400948f, -0.386007f, +-0.370997f, -0.355923f, -0.340789f, -0.325601f, -0.310363f, -0.295078f, -0.279752f, -0.264387f, +-0.248988f, -0.233557f, -0.218097f, -0.202612f, -0.187104f, -0.171576f, -0.156029f, -0.140467f, +-0.124891f, -0.109303f, -0.093706f, -0.078100f, -0.062487f, -0.046870f, -0.031248f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_15[256] = { +-1.000000f, -1.000000f, -0.999999f, -0.999996f, -0.999990f, -0.999981f, -0.999966f, -0.999946f, +-0.999918f, -0.999881f, -0.999834f, -0.999775f, -0.999702f, -0.999615f, -0.999511f, -0.999387f, +-0.999243f, -0.999076f, -0.998882f, -0.998661f, -0.998409f, -0.998124f, -0.997802f, -0.997440f, +-0.997035f, -0.996583f, -0.996081f, -0.995524f, -0.994908f, -0.994229f, -0.993482f, -0.992661f, +-0.991762f, -0.990778f, -0.989704f, -0.988534f, -0.987260f, -0.985876f, -0.984375f, -0.982748f, +-0.980989f, -0.979089f, -0.977038f, -0.974829f, -0.972452f, -0.969898f, -0.967157f, -0.964218f, +-0.961074f, -0.957712f, -0.954123f, -0.950296f, -0.946223f, -0.941893f, -0.937297f, -0.932426f, +-0.927270f, -0.921822f, -0.916075f, -0.910022f, -0.903657f, -0.896976f, -0.889974f, -0.882649f, +-0.875000f, -0.867024f, -0.858724f, -0.850101f, -0.841157f, -0.831897f, -0.822325f, -0.812447f, +-0.802270f, -0.791801f, -0.781047f, -0.770018f, -0.758723f, -0.747171f, -0.735373f, -0.723337f, +-0.711074f, -0.698593f, -0.685907f, -0.673023f, -0.659952f, -0.646704f, -0.633288f, -0.619714f, +-0.605989f, -0.592123f, -0.578125f, -0.564001f, -0.549760f, -0.535409f, -0.520954f, -0.506403f, +-0.491762f, -0.477036f, -0.462232f, -0.447354f, -0.432408f, -0.417399f, -0.402331f, -0.387208f, +-0.372035f, -0.356815f, -0.341552f, -0.326249f, -0.310909f, -0.295536f, -0.280132f, -0.264701f, +-0.249243f, -0.233762f, -0.218261f, -0.202740f, -0.187202f, -0.171650f, -0.156084f, -0.140506f, +-0.124918f, -0.109321f, -0.093716f, -0.078106f, -0.062490f, -0.046871f, -0.031249f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.h new file mode 100644 index 00000000..b44c0289 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AsymWaveShaper.h @@ -0,0 +1,84 @@ +#pragma once + +#include +#include +#include +#include "LookupTable.h" + +using Spline = std::vector< std::pair >; + + + +class NonUniformLookup +{ +public: + void add(double x, double y) + { + data[x] = y; + } + double lookup(double x) + { + // printf("lookup %f\n", x); + auto l = data.lower_bound(x); + assert(l != data.end()); + // printf("lower = %f, %f\n", l->first, l->second); + auto p = l; + p--; + if (p == data.end()) { + assert(l->first == x); + return l->second; + } + assert(p != data.end()); + // printf("p = %f, %f\n", p->first, p->second); + + // construct line y = y0 + (y1 -y0)/(x1 - x0) * x-x0; + // = b + a(x -b); + const double b = p->second; + const double a = (l->second - p->second) / (l->first - p->first); + + const double ret = b + a * (x - p->first); + // printf("ret = %f\n", ret); + + return ret; + } +private: + std::map data; +}; + +class AsymWaveShaper +{ +public: + const static int iNumPoints = 256; + const static int iSymmetryTables = 16; +private: + LookupTableParams tables[iSymmetryTables]; +public: + + AsymWaveShaper(); + + float lookup(float x, int index) const + { + float x_scaled = 0; + if (x >= 1) { + x_scaled = iNumPoints - 1; + } else if (x < -1) { + x_scaled = 0; + } else { + x_scaled = (x + 1) * iNumPoints / 2; + } + + assert(index >= 0 && index < iSymmetryTables); + const LookupTableParams& table = tables[index]; + // TODO: we are going outside of domain!. + const float y = LookupTable::lookup(table, x_scaled, true); + // printf("lookup %f -> %f ret %f\n", x, x_scaled, y); + return y; + } + + static void genTableValues(const Spline& spline, int numPoints); + static void genTable(int index, double symmetry); + static Spline makeSplineRight(double symmetry); + static Spline makeSplineLeft(double symmetry); + static std::pair calcPoint(const Spline& spline, double t); +}; + diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.cpp index caad2afc..17216d89 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.cpp +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.cpp @@ -1,10 +1,12 @@ #include #include +#include #include "AudioMath.h" #include "LookupTable.h" #include "ObjectCache.h" + const double AudioMath::Pi = 3.1415926535897932384626433832795028841971; const double AudioMath::Pi_2 = 1.5707963267948966192313216916397514420986; const double AudioMath::Ln2 = 0.693147180559945309417; @@ -62,7 +64,7 @@ std::function AudioMath::makeFunc_AudioTaper(double dbAtten) }; } -AudioMath::ScaleFun AudioMath::makeBipolarAudioScaler(float y0, float y1) +AudioMath::ScaleFun AudioMath::makeScalerWithBipolarAudioTrim(float y0, float y1) { // Use a cached singleton for the lookup table - don't need to have unique copies std::shared_ptr> lookup = ObjectCache::getBipolarAudioTaper(); @@ -82,6 +84,57 @@ AudioMath::ScaleFun AudioMath::makeBipolarAudioScaler(float y0, float y1) }; } +AudioMath::SimpleScaleFun AudioMath::makeSimpleScalerAudioTaper(float y0, float y1) +{ + // Use a cached singleton for the lookup table - don't need to have unique copies + std::shared_ptr> lookup = ObjectCache::getAudioTaper(); + const float x0 = 0; + const float x1 = 1; + const float a = (y1 - y0) / (x1 - x0); + const float b = y0 - a * x0; + + return [a, b, lookup](float cv, float knob) { + // get the clipped sum of the inputs + float x = cv + knob; + x = std::max(-5.0f, x); + x = std::min(5.0f, x); + + // adjust to 0..1 and map + x += 5.f; + x /= 10.f; + assert(x >= 0 && x <= 1); + x = LookupTable::lookup(*lookup, x); + + // scale to output + return a * x + b; + }; +} + +// TODO: move this to audio math +AudioMath::RandomUniformFunc AudioMath::random() +{ + return []() { + std::default_random_engine generator{57}; + std::uniform_real_distribution distribution{0, 1.0}; + return distribution(generator); + }; +} + + // declare some test variables here int _numLookupParams = 0; -int _numBiquads = 0; \ No newline at end of file +int _numBiquads = 0; + + +// TOOD: put these in their own file +// These are the MinBLEP lookup tables from the Befaco EvenVCO +#if defined(_MSC_VER) +#pragma warning(disable: 132 4305) +#endif +float sqsawTable[2048] = { + 0.00221683, 0.00288535, 0.00382874, 0.00493397, 0.006088, 0.00717778, 0.0080962, 0.00887097, 0.00957292, 0.0102536, 0.0109644, 0.0117569, 0.0126765, 0.0137091, 0.014811, 0.0159388, 0.0170492, 0.0180987, 0.0190781, 0.0200243, 0.0209441, 0.0218439, 0.0227299, 0.023608, 0.0244664, 0.0253042, 0.0261303, 0.0269533, 0.0277823, 0.0286234, 0.0294678, 0.0303142, 0.0311635, 0.0320168, 0.0328749, 0.0337369, 0.0346001, 0.0354672, 0.0363411, 0.0372246, 0.0381206, 0.0390346, 0.039964, 0.0409017, 0.0418407, 0.042774, 0.0436961, 0.0446189, 0.0455409, 0.0464563, 0.047359, 0.0482433, 0.0491029, 0.049938, 0.0507563, 0.0515658, 0.0523744, 0.0531901, 0.0540067, 0.0548165, 0.0556269, 0.0564456, 0.0572799, 0.0581378, 0.0590252, 0.059934, 0.0608529, 0.0617707, 0.0626761, 0.0635623, 0.0644415, 0.0653142, 0.0661789, 0.0670339, 0.0678778, 0.0687058, 0.0695165, 0.070317, 0.0711147, 0.0719168, 0.0727304, 0.0735539, 0.0743828, 0.075215, 0.0760485, 0.0768811, 0.07771, 0.0785292, 0.0793449, 0.0801652, 0.080998, 0.0818513, 0.082737, 0.0836581, 0.0845968, 0.0855346, 0.0864532, 0.0873342, 0.0881769, 0.0889945, 0.0897932, 0.0905797, 0.0913603, 0.0921398, 0.0929034, 0.0936544, 0.0944023, 0.0951566, 0.0959267, 0.0967196, 0.0975297, 0.0983516, 0.09918, 0.10001, 0.100836, 0.101666, 0.102504, 0.103342, 0.104172, 0.104985, 0.105773, 0.106533, 0.107272, 0.107999, 0.108722, 0.109449, 0.110184, 0.110909, 0.11163, 0.112359, 0.113107, 0.113883, 0.114701, 0.115559, 0.116438, 0.117321, 0.118187, 0.119019, 0.11982, 0.120602, 0.121371, 0.122131, 0.122889, 0.123648, 0.124405, 0.125157, 0.125905, 0.126649, 0.127387, 0.128116, 0.128828, 0.129533, 0.130244, 0.130971, 0.131727, 0.132522, 0.133348, 0.134189, 0.13503, 0.135856, 0.136654, 0.137426, 0.138182, 0.13893, 0.13968, 0.140439, 0.141215, 0.142006, 0.142805, 0.143602, 0.144389, 0.145159, 0.145905, 0.146633, 0.147351, 0.148066, 0.148785, 0.149516, 0.150256, 0.151, 0.151747, 0.152495, 0.153242, 0.15399, 0.154742, 0.155496, 0.156248, 0.156992, 0.157725, 0.158443, 0.15915, 0.159849, 0.160542, 0.16123, 0.161916, 0.162592, 0.163258, 0.163921, 0.164589, 0.165267, 0.165962, 0.166664, 0.167374, 0.168094, 0.168827, 0.169575, 0.170347, 0.171149, 0.171967, 0.172788, 0.173595, 0.174376, 0.175127, 0.17586, 0.17658, 0.177293, 0.178003, 0.178717, 0.179439, 0.180163, 0.180879, 0.181579, 0.182254, 0.182887, 0.183461, 0.184006, 0.184553, 0.185136, 0.185786, 0.186519, 0.187312, 0.188146, 0.189001, 0.189859, 0.190701, 0.191556, 0.192426, 0.193296, 0.194149, 0.194968, 0.195739, 0.19647, 0.197172, 0.197852, 0.198518, 0.199177, 0.199827, 0.200455, 0.20107, 0.201683, 0.202303, 0.202941, 0.203594, 0.204255, 0.204924, 0.205599, 0.206279, 0.206967, 0.207672, 0.208389, 0.209106, 0.209812, 0.210497, 0.211154, 0.211791, 0.212413, 0.213022, 0.213622, 0.214216, 0.214789, 0.215338, 0.21588, 0.216432, 0.21701, 0.217632, 0.218309, 0.219022, 0.219748, 0.220466, 0.221152, 0.221789, 0.222391, 0.22297, 0.223536, 0.224097, 0.224665, 0.225227, 0.225769, 0.22631, 0.226866, 0.227457, 0.2281, 0.228809, 0.229566, 0.230349, 0.231134, 0.231897, 0.232619, 0.233316, 0.233998, 0.234672, 0.235345, 0.236023, 0.236715, 0.237415, 0.238118, 0.238815, 0.239499, 0.240162, 0.240802, 0.241424, 0.242035, 0.242638, 0.24324, 0.243846, 0.244452, 0.245055, 0.245654, 0.24625, 0.246841, 0.247425, 0.248001, 0.248572, 0.249141, 0.249711, 0.250285, 0.250867, 0.251454, 0.252043, 0.252627, 0.253202, 0.253762, 0.254314, 0.254859, 0.255395, 0.255918, 0.256428, 0.256916, 0.257372, 0.257809, 0.258245, 0.258695, 0.259177, 0.259689, 0.260217, 0.260762, 0.26133, 0.261924, 0.262549, 0.263221, 0.263934, 0.264667, 0.2654, 0.266114, 0.266792, 0.267451, 0.268097, 0.268732, 0.269357, 0.269973, 0.270576, 0.271158, 0.271729, 0.2723, 0.272879, 0.273479, 0.274107, 0.274757, 0.275414, 0.276063, 0.27669, 0.277282, 0.277837, 0.278368, 0.278887, 0.279406, 0.279937, 0.280489, 0.281057, 0.281633, 0.282207, 0.282772, 0.283319, 0.283845, 0.284355, 0.284855, 0.285351, 0.285848, 0.286353, 0.286861, 0.287368, 0.287877, 0.288389, 0.288904, 0.289424, 0.289941, 0.290461, 0.290987, 0.291524, 0.292076, 0.292648, 0.293238, 0.293841, 0.294449, 0.295058, 0.295663, 0.296276, 0.296899, 0.297519, 0.298127, 0.29871, 0.299257, 0.299765, 0.300247, 0.300716, 0.301185, 0.301669, 0.302178, 0.302707, 0.303244, 0.303774, 0.304286, 0.304765, 0.305192, 0.305574, 0.305941, 0.306323, 0.306748, 0.307245, 0.307827, 0.308466, 0.309123, 0.309764, 0.310351, 0.310859, 0.311312, 0.311727, 0.312122, 0.312512, 0.312915, 0.313329, 0.313739, 0.314148, 0.314558, 0.314972, 0.315393, 0.315812, 0.316231, 0.316656, 0.317095, 0.317554, 0.318043, 0.318572, 0.319125, 0.319683, 0.320227, 0.320739, 0.321207, 0.321641, 0.322057, 0.322467, 0.322886, 0.323327, 0.32378, 0.324239, 0.324707, 0.325188, 0.325686, 0.326205, 0.326755, 0.327327, 0.327907, 0.328484, 0.329045, 0.329585, 0.330116, 0.33064, 0.331156, 0.331664, 0.332165, 0.332653, 0.33313, 0.3336, 0.334068, 0.334539, 0.33502, 0.33552, 0.33603, 0.336536, 0.337024, 0.337481, 0.337893, 0.338261, 0.3386, 0.338927, 0.339258, 0.33961, 0.339982, 0.340358, 0.340742, 0.341136, 0.341541, 0.34196, 0.342407, 0.342874, 0.343348, 0.343815, 0.344261, 0.344675, 0.345061, 0.345429, 0.345787, 0.346144, 0.346507, 0.346879, 0.347253, 0.347628, 0.348002, 0.348377, 0.34875, 0.349118, 0.349481, 0.349845, 0.350216, 0.350597, 0.350995, 0.351411, 0.351838, 0.352273, 0.352708, 0.353139, 0.353563, 0.353984, 0.354404, 0.354824, 0.355243, 0.355661, 0.356077, 0.356489, 0.356901, 0.357316, 0.357737, 0.358168, 0.358608, 0.359055, 0.359506, 0.35996, 0.360414, 0.360869, 0.361328, 0.361789, 0.36225, 0.362706, 0.363154, 0.363596, 0.364034, 0.364466, 0.364893, 0.365313, 0.365724, 0.366133, 0.366538, 0.366935, 0.367317, 0.367681, 0.36802, 0.368324, 0.368606, 0.36888, 0.369159, 0.369458, 0.369786, 0.370135, 0.370494, 0.370854, 0.371206, 0.371541, 0.371852, 0.372145, 0.372432, 0.372726, 0.373037, 0.373377, 0.373753, 0.374151, 0.374555, 0.374948, 0.375316, 0.375645, 0.375944, 0.376225, 0.376497, 0.376772, 0.377061, 0.377367, 0.377681, 0.377998, 0.378314, 0.378622, 0.378916, 0.379197, 0.379469, 0.379735, 0.380002, 0.380274, 0.380552, 0.380831, 0.38111, 0.381395, 0.381687, 0.381992, 0.382311, 0.382642, 0.382983, 0.383329, 0.383676, 0.384021, 0.384367, 0.384716, 0.385066, 0.385417, 0.385767, 0.386116, 0.38647, 0.386824, 0.387177, 0.387522, 0.387858, 0.388187, 0.388517, 0.388841, 0.389149, 0.389433, 0.389684, 0.389883, 0.390037, 0.390171, 0.39031, 0.390476, 0.390693, 0.390945, 0.391221, 0.391516, 0.391825, 0.392141, 0.392465, 0.392808, 0.393164, 0.393524, 0.393881, 0.394226, 0.39456, 0.394891, 0.395217, 0.395538, 0.395851, 0.396157, 0.396451, 0.396736, 0.397016, 0.397296, 0.39758, 0.397874, 0.39818, 0.39849, 0.398797, 0.399095, 0.399375, 0.399634, 0.399877, 0.400107, 0.400331, 0.400554, 0.40078, 0.401001, 0.401216, 0.401431, 0.401652, 0.401885, 0.402136, 0.402411, 0.402699, 0.402992, 0.403279, 0.403551, 0.403804, 0.404051, 0.404289, 0.404515, 0.404728, 0.404924, 0.405086, 0.405215, 0.405334, 0.405465, 0.405629, 0.405848, 0.406118, 0.406424, 0.406751, 0.407085, 0.407412, 0.407728, 0.408054, 0.408384, 0.408707, 0.409011, 0.409286, 0.40952, 0.409718, 0.409896, 0.410074, 0.410268, 0.410495, 0.410756, 0.411038, 0.411329, 0.411618, 0.411891, 0.412139, 0.41237, 0.412589, 0.412802, 0.413013, 0.413229, 0.413447, 0.413663, 0.413878, 0.414097, 0.414321, 0.414556, 0.4148, 0.415051, 0.415309, 0.41557, 0.415834, 0.416101, 0.416385, 0.416677, 0.416965, 0.417238, 0.417483, 0.417691, 0.417871, 0.418029, 0.418173, 0.418311, 0.418451, 0.418583, 0.418702, 0.418816, 0.418934, 0.419064, 0.419214, 0.419382, 0.419563, 0.419752, 0.419942, 0.42013, 0.420312, 0.420491, 0.420669, 0.420849, 0.42103, 0.421215, 0.421399, 0.421577, 0.421758, 0.421949, 0.42216, 0.422397, 0.422673, 0.422978, 0.423295, 0.423607, 0.4239, 0.424162, 0.424418, 0.424664, 0.424892, 0.425091, 0.425255, 0.425365, 0.425417, 0.425437, 0.425453, 0.425491, 0.425579, 0.425726, 0.425913, 0.426116, 0.426313, 0.426481, 0.426598, 0.42666, 0.426688, 0.426709, 0.426745, 0.42682, 0.426953, 0.427125, 0.427325, 0.427539, 0.427754, 0.427957, 0.428158, 0.428365, 0.428571, 0.42877, 0.428954, 0.429116, 0.429254, 0.429373, 0.429483, 0.429592, 0.429707, 0.429833, 0.429956, 0.43008, 0.430211, 0.430356, 0.43052, 0.430711, 0.430923, 0.431151, 0.431385, 0.431618, 0.431843, 0.432075, 0.432315, 0.43255, 0.432772, 0.432969, 0.43313, 0.43326, 0.433365, 0.433455, 0.433539, 0.433624, 0.4337, 0.433748, 0.43379, 0.433848, 0.433947, 0.434111, 0.434373, 0.434713, 0.435083, 0.435437, 0.435726, 0.435907, 0.435996, 0.436022, 0.436011, 0.435989, 0.435982, 0.435999, 0.436012, 0.436022, 0.436035, 0.436054, 0.436083, 0.436125, 0.436177, 0.436234, 0.436294, 0.436352, 0.436403, 0.436434, 0.436453, 0.436478, 0.436526, 0.436614, 0.43676, 0.436966, 0.437211, 0.43747, 0.43772, 0.437936, 0.438113, 0.438274, 0.43842, 0.438554, 0.438679, 0.438796, 0.438898, 0.438986, 0.439067, 0.439145, 0.439229, 0.439323, 0.439421, 0.439522, 0.439625, 0.43973, 0.439836, 0.439943, 0.440053, 0.440164, 0.440277, 0.440389, 0.440502, 0.440621, 0.440748, 0.440873, 0.440989, 0.441088, 0.441163, 0.441213, 0.441245, 0.441266, 0.441282, 0.441302, 0.441323, 0.441334, 0.441341, 0.441354, 0.441383, 0.441436, 0.44152, 0.441628, 0.441752, 0.441883, 0.442013, 0.442135, 0.44226, 0.44239, 0.442518, 0.442638, 0.442745, 0.44283, 0.442892, 0.442939, 0.442982, 0.443033, 0.4431, 0.443186, 0.443279, 0.443381, 0.443494, 0.443621, 0.443764, 0.443936, 0.444132, 0.444338, 0.444539, 0.44472, 0.444871, 0.445005, 0.445125, 0.445231, 0.445322, 0.445397, 0.445451, 0.445479, 0.445491, 0.445496, 0.445505, 0.445526, 0.445556, 0.445586, 0.445621, 0.445663, 0.445715, 0.445779, 0.445858, 0.445947, 0.446044, 0.446145, 0.446248, 0.44635, 0.446452, 0.446557, 0.446667, 0.446784, 0.446909, 0.447046, 0.447194, 0.447348, 0.447505, 0.447661, 0.447814, 0.447987, 0.448173, 0.448351, 0.4485, 0.448599, 0.448623, 0.448552, 0.448426, 0.448289, 0.448186, 0.448161, 0.448239, 0.448392, 0.44859, 0.448805, 0.449007, 0.449168, 0.449302, 0.449424, 0.449536, 0.449637, 0.449728, 0.44981, 0.449878, 0.449934, 0.449982, 0.450025, 0.450064, 0.450101, 0.45013, 0.450154, 0.450176, 0.450199, 0.450225, 0.450252, 0.450279, 0.450307, 0.450338, 0.450373, 0.450413, 0.450461, 0.450514, 0.45057, 0.450625, 0.450677, 0.450725, 0.450775, 0.450825, 0.45087, 0.450906, 0.450929, 0.450938, 0.450934, 0.450921, 0.450901, 0.450877, 0.45085, 0.450811, 0.450761, 0.45071, 0.450664, 0.450633, 0.450621, 0.45062, 0.450628, 0.450649, 0.450683, 0.450732, 0.450802, 0.450892, 0.450997, 0.45111, 0.451225, 0.451334, 0.451451, 0.451579, 0.451705, 0.451819, 0.451909, 0.451964, 0.451985, 0.451981, 0.451963, 0.451939, 0.451919, 0.451906, 0.451887, 0.451865, 0.451845, 0.451832, 0.45183, 0.451841, 0.451861, 0.451888, 0.451919, 0.451949, 0.451977, 0.452007, 0.452039, 0.452071, 0.452102, 0.452129, 0.452153, 0.452177, 0.452199, 0.452217, 0.452231, 0.452237, 0.452233, 0.452219, 0.452199, 0.452179, 0.452163, 0.452155, 0.452151, 0.452149, 0.452152, 0.452159, 0.452173, 0.452194, 0.452227, 0.452267, 0.45231, 0.452352, 0.452388, 0.452422, 0.45246, 0.452497, 0.452525, 0.452538, 0.452531, 0.452507, 0.452471, 0.45242, 0.452351, 0.452262, 0.452146, 0.451988, 0.451802, 0.451605, 0.451418, 0.45126, 0.451143, 0.451054, 0.450984, 0.450924, 0.450866, 0.450801, 0.450725, 0.450645, 0.450566, 0.450496, 0.45044, 0.450406, 0.450404, 0.450422, 0.450449, 0.450469, 0.450469, 0.450438, 0.450381, 0.450308, 0.450229, 0.450154, 0.450093, 0.450049, 0.450013, 0.449983, 0.449957, 0.449933, 0.449908, 0.449892, 0.449885, 0.449877, 0.449858, 0.449822, 0.44976, 0.449688, 0.449602, 0.449498, 0.449371, 0.449217, 0.449034, 0.448826, 0.448593, 0.448337, 0.448059, 0.447758, 0.447436, 0.44709, 0.446721, 0.446331, 0.445918, 0.445483, 0.445027, 0.444548, 0.444047, 0.443524, 0.44298, 0.442413, 0.441818, 0.441202, 0.440567, 0.439919, 0.439262, 0.438614, 0.437974, 0.437319, 0.436626, 0.43587, 0.435049, 0.434402, 0.433835, 0.433123, 0.432039, 0.430358, 0.428368, 0.427503, 0.426601, 0.424216, 0.418905, 0.409225, 0.396402, 0.382576, 0.365547, 0.34307, 0.312906, 0.272788, 0.221013, 0.159633, 0.091601, 0.0198945, -0.0525338, -0.124172, -0.201123, -0.28145, -0.361514, -0.437677, -0.506323, -0.565947, -0.61981, -0.668566, -0.712743, -0.752877, -0.789483, -0.821637, -0.849041, -0.872562, -0.893078, -0.911459, -0.928371, -0.94253, -0.953999, -0.963373, -0.971244, -0.978205, -0.984408, -0.988963, -0.992177, -0.994451, -0.996186, -0.997786, -0.999106, -0.999791, -1.0, -0.999892, -0.999627, -0.99935, -0.998924, -0.998293, -0.997489, -0.996544, -0.99549, -0.994324, -0.992938, -0.9914, -0.989797, -0.988217, -0.98675, -0.985459, -0.984295, -0.983177, -0.982026, -0.98076, -0.9793, -0.977576, -0.975661, -0.973667, -0.971707, -0.969891, -0.968331, -0.967043, -0.965911, -0.964815, -0.963632, -0.962241, -0.960532, -0.958548, -0.956417, -0.954273, -0.952245, -0.950466, -0.948995, -0.947739, -0.946587, -0.94543, -0.944156, -0.942662, -0.940966, -0.939147, -0.937271, -0.935407, -0.933622, -0.931964, -0.930389, -0.928864, -0.927356, -0.925834, -0.924266, -0.922637, -0.920969, -0.919284, -0.917603, -0.915947, -0.914338, -0.912774, -0.91124, -0.909724, -0.908215, -0.9067, -0.905174, -0.903657, -0.902144, -0.900623, -0.899085, -0.897519, -0.895907, -0.894246, -0.892562, -0.890886, -0.889245, -0.887668, -0.886183, -0.884763, -0.883367, -0.881952, -0.880476, -0.878893, -0.877185, -0.875402, -0.873605, -0.871856, -0.870213, -0.868734, -0.867403, -0.866151, -0.864909, -0.863607, -0.862175, -0.86057, -0.85884, -0.857056, -0.855289, -0.853607, -0.852081, -0.850725, -0.849477, -0.848268, -0.847031, -0.845696, -0.844208, -0.842597, -0.840914, -0.839205, -0.83752, -0.835907, -0.834385, -0.83292, -0.831484, -0.830055, -0.828605, -0.827111, -0.825575, -0.824013, -0.82244, -0.820868, -0.81931, -0.817777, -0.816267, -0.814769, -0.813273, -0.811771, -0.810251, -0.808705, -0.807134, -0.805552, -0.803974, -0.802414, -0.800886, -0.799393, -0.797924, -0.796471, -0.795025, -0.793575, -0.792118, -0.790676, -0.78924, -0.787798, -0.786332, -0.784828, -0.78326, -0.781618, -0.77994, -0.778267, -0.776639, -0.775098, -0.773676, -0.772344, -0.771056, -0.769763, -0.768417, -0.766973, -0.765427, -0.763815, -0.762179, -0.760556, -0.758986, -0.757505, -0.756108, -0.754755, -0.753405, -0.752018, -0.750554, -0.748967, -0.747275, -0.745539, -0.743822, -0.742186, -0.740694, -0.739378, -0.738183, -0.737041, -0.735882, -0.734639, -0.73325, -0.731736, -0.730147, -0.728531, -0.726936, -0.725409, -0.723977, -0.722606, -0.721272, -0.719951, -0.718621, -0.717259, -0.715868, -0.714464, -0.713052, -0.711638, -0.710226, -0.708824, -0.707431, -0.706042, -0.704652, -0.703255, -0.701847, -0.700422, -0.698983, -0.697535, -0.696081, -0.694629, -0.693182, -0.691736, -0.690286, -0.688838, -0.687396, -0.685967, -0.684557, -0.683176, -0.681815, -0.680459, -0.679094, -0.677703, -0.676271, -0.674794, -0.673291, -0.671787, -0.670306, -0.668872, -0.66751, -0.666213, -0.664942, -0.663664, -0.66234, -0.660935, -0.659418, -0.657823, -0.656203, -0.654607, -0.653087, -0.651693, -0.650422, -0.649228, -0.648061, -0.64687, -0.645608, -0.64424, -0.642798, -0.641314, -0.639821, -0.638352, -0.636938, -0.635586, -0.634273, -0.63298, -0.631688, -0.630378, -0.629033, -0.627661, -0.626273, -0.624876, -0.623477, -0.622085, -0.620705, -0.619334, -0.617966, -0.616596, -0.615218, -0.613827, -0.612416, -0.61099, -0.609555, -0.608122, -0.606697, -0.60529, -0.603898, -0.602516, -0.60114, -0.599766, -0.598392, -0.597014, -0.595638, -0.594262, -0.592886, -0.59151, -0.590132, -0.588747, -0.587351, -0.585953, -0.584565, -0.583196, -0.581857, -0.580561, -0.579296, -0.578045, -0.576789, -0.575509, -0.574187, -0.572823, -0.571433, -0.570038, -0.568655, -0.567304, -0.566, -0.564732, -0.563486, -0.562244, -0.560992, -0.559712, -0.558394, -0.557048, -0.555694, -0.55435, -0.553035, -0.551767, -0.550554, -0.549377, -0.548213, -0.547039, -0.545833, -0.544579, -0.543296, -0.541991, -0.540673, -0.539347, -0.538023, -0.536698, -0.535368, -0.534033, -0.532691, -0.531345, -0.529992, -0.528625, -0.527247, -0.525867, -0.524493, -0.523133, -0.521796, -0.520479, -0.519176, -0.517878, -0.51658, -0.515273, -0.513957, -0.512638, -0.511316, -0.509991, -0.508665, -0.507338, -0.506007, -0.504673, -0.503337, -0.502003, -0.500672, -0.499347, -0.498028, -0.496714, -0.495401, -0.494085, -0.492762, -0.491429, -0.490084, -0.488734, -0.487386, -0.486047, -0.484726, -0.483416, -0.482114, -0.480822, -0.479543, -0.478281, -0.477039, -0.475822, -0.474626, -0.473441, -0.47226, -0.471073, -0.469878, -0.468688, -0.467499, -0.466305, -0.465101, -0.463881, -0.462642, -0.461385, -0.460117, -0.458846, -0.457581, -0.456327, -0.455092, -0.453867, -0.452643, -0.451408, -0.450154, -0.448868, -0.447541, -0.44619, -0.444838, -0.443506, -0.442214, -0.44098, -0.439791, -0.438628, -0.437473, -0.436306, -0.43511, -0.433885, -0.432645, -0.431396, -0.430143, -0.428894, -0.427652, -0.426416, -0.425183, -0.423949, -0.422711, -0.421466, -0.420212, -0.418951, -0.417684, -0.416414, -0.415141, -0.413868, -0.412589, -0.411302, -0.410015, -0.408732, -0.407459, -0.406204, -0.404969, -0.403749, -0.402535, -0.401316, -0.400084, -0.398829, -0.397551, -0.396262, -0.394973, -0.393697, -0.392445, -0.391224, -0.390027, -0.388843, -0.387665, -0.386484, -0.385291, -0.384089, -0.382883, -0.381676, -0.380469, -0.379266, -0.378068, -0.37687, -0.375674, -0.374482, -0.373293, -0.372111, -0.370936, -0.369768, -0.368605, -0.367445, -0.366287, -0.365128, -0.36397, -0.362812, -0.361657, -0.360503, -0.359351, -0.358203, -0.357061, -0.355922, -0.354784, -0.353643, -0.352495, -0.351336, -0.350168, -0.348994, -0.34782, -0.346649, -0.345486, -0.344334, -0.343189, -0.342048, -0.340906, -0.339762, -0.338611, -0.337458, -0.336305, -0.335148, -0.333984, -0.33281, -0.331624, -0.330426, -0.329218, -0.328005, -0.326791, -0.32558, -0.324371, -0.323158, -0.321945, -0.320736, -0.319535, -0.318345, -0.317165, -0.315991, -0.314825, -0.313666, -0.312516, -0.311376, -0.310249, -0.309132, -0.30802, -0.30691, -0.305796, -0.304683, -0.30358, -0.302479, -0.301367, -0.300236, -0.299074, -0.297859, -0.296599, -0.295325, -0.294068, -0.292855, -0.291717, -0.290659, -0.289654, -0.28867, -0.287676, -0.286641, -0.28555, -0.284431, -0.28329, -0.282128, -0.280946, -0.279746, -0.278513, -0.277246, -0.27596, -0.274674, -0.273405, -0.272167, -0.270948, -0.26974, -0.268546, -0.26737, -0.266215, -0.265084, -0.263983, -0.262904, -0.261837, -0.260774, -0.259706, -0.258637, -0.257578, -0.256522, -0.255458, -0.254379, -0.253276, -0.252151, -0.251008, -0.249851, -0.248684, -0.247511, -0.246333, -0.245133, -0.243922, -0.242709, -0.241508, -0.240329, -0.239178, -0.238042, -0.236921, -0.235815, -0.234725, -0.233651, -0.232605, -0.231587, -0.230582, -0.229575, -0.228551, -0.227496, -0.226409, -0.225303, -0.22419, -0.223083, -0.221996, -0.22094, -0.219911, -0.218897, -0.217885, -0.216863, -0.215818, -0.214744, -0.213651, -0.212546, -0.211438, -0.210337, -0.209249, -0.208177, -0.207112, -0.20605, -0.204984, -0.203909, -0.202819, -0.201716, -0.200605, -0.19949, -0.198377, -0.197271, -0.196173, -0.195078, -0.193985, -0.192896, -0.191809, -0.190725, -0.189653, -0.188591, -0.187529, -0.186458, -0.185368, -0.18425, -0.183097, -0.181922, -0.180741, -0.179569, -0.17842, -0.1773, -0.17619, -0.175094, -0.174015, -0.172958, -0.171927, -0.170938, -0.169986, -0.169054, -0.168122, -0.167172, -0.166186, -0.165179, -0.164157, -0.163123, -0.162077, -0.161021, -0.159952, -0.158857, -0.157749, -0.15664, -0.155542, -0.15447, -0.153432, -0.152424, -0.151428, -0.150429, -0.149413, -0.148364, -0.147283, -0.146183, -0.145069, -0.14395, -0.142834, -0.141724, -0.140608, -0.139489, -0.138373, -0.137265, -0.136171, -0.135093, -0.134025, -0.132968, -0.131919, -0.130878, -0.129844, -0.128821, -0.127809, -0.126804, -0.125801, -0.124797, -0.123787, -0.122773, -0.121758, -0.120744, -0.119733, -0.118728, -0.117733, -0.11675, -0.115771, -0.114792, -0.113806, -0.112807, -0.111794, -0.110771, -0.109741, -0.108707, -0.107672, -0.106636, -0.105591, -0.104541, -0.103491, -0.102448, -0.10142, -0.100412, -0.0994198, -0.0984399, -0.0974673, -0.0964976, -0.0955265, -0.0945581, -0.0935982, -0.0926402, -0.0916777, -0.0907045, -0.0897139, -0.0887001, -0.0876694, -0.0866321, -0.0855982, -0.0845778, -0.0835811, -0.0826095, -0.0816517, -0.0806952, -0.0797277, -0.0787369, -0.0777107, -0.0766526, -0.075579, -0.0745061, -0.0734503, -0.0724281, -0.0714473, -0.0704955, -0.0695569, -0.0686153, -0.067655, -0.0666595, -0.0656228, -0.0645626, -0.0634995, -0.0624539, -0.0614458, -0.0604904, -0.0595764, -0.0586898, -0.0578174, -0.0569453, -0.0560601, -0.0551719, -0.0542917, -0.0534099, -0.0525163, -0.0516014, -0.0506555, -0.0496757, -0.0486708, -0.0476511, -0.0466261, -0.0456061, -0.044596, -0.0435836, -0.0425703, -0.0415587, -0.040552, -0.0395533, -0.0385637, -0.0375815, -0.0366045, -0.0356314, -0.0346604, -0.0336902, -0.0327247, -0.0317635, -0.0308037, -0.0298422, -0.0288762, -0.0279032, -0.026925, -0.025943, -0.0249582, -0.0239714, -0.0229839, -0.0219896, -0.0209822, -0.0199722, -0.0189704, -0.0179881, -0.0170357, -0.0161152, -0.0152188, -0.0143404, -0.0134736, -0.0126123, -0.0117534, -0.0109179, -0.0100977, -0.00927668, -0.00843894, -0.0075681, -0.00664104, -0.0056472, -0.00462252, -0.00360524, -0.00263304, -0.00174417 +}; + +float sqtriTable[2048] = { + 0.00205034, 0.00360933, 0.00578754, 0.00835358, 0.0110761, 0.0137236, 0.0160981, 0.0183687, 0.020617, 0.0228593, 0.0251122, 0.027392, 0.0297206, 0.0321003, 0.034499, 0.0368839, 0.0392222, 0.0414812, 0.0436497, 0.0457532, 0.0478204, 0.0498797, 0.0519597, 0.0540801, 0.0562156, 0.0583599, 0.0605111, 0.0626673, 0.0648265, 0.0669885, 0.069155, 0.0713261, 0.0735021, 0.0756831, 0.0778692, 0.0800601, 0.0822559, 0.0844568, 0.086663, 0.0888749, 0.091096, 0.0933308, 0.095572, 0.097812, 0.100043, 0.102257, 0.104463, 0.106663, 0.108853, 0.111028, 0.113181, 0.115309, 0.11741, 0.11949, 0.121555, 0.123613, 0.125667, 0.127712, 0.129738, 0.131757, 0.133783, 0.135828, 0.137904, 0.140002, 0.142116, 0.144248, 0.146397, 0.148564, 0.150756, 0.152981, 0.155227, 0.157478, 0.159719, 0.161935, 0.164142, 0.166348, 0.16854, 0.170706, 0.172831, 0.174903, 0.176915, 0.178884, 0.180829, 0.18277, 0.184725, 0.186695, 0.188658, 0.190622, 0.192593, 0.194577, 0.196582, 0.198611, 0.200659, 0.202715, 0.204773, 0.206824, 0.208863, 0.210895, 0.212924, 0.214952, 0.216985, 0.219024, 0.221064, 0.223103, 0.225147, 0.227201, 0.229273, 0.231368, 0.23349, 0.235633, 0.237784, 0.239934, 0.242072, 0.244201, 0.246336, 0.248466, 0.250583, 0.252677, 0.254738, 0.256759, 0.258749, 0.260722, 0.26269, 0.264667, 0.26666, 0.268659, 0.27066, 0.272662, 0.274664, 0.276664, 0.278666, 0.280672, 0.282676, 0.284675, 0.286663, 0.288636, 0.290596, 0.292546, 0.294487, 0.296422, 0.298354, 0.300276, 0.30218, 0.304077, 0.305982, 0.307905, 0.309861, 0.311873, 0.313923, 0.315983, 0.318021, 0.320007, 0.321913, 0.323747, 0.325536, 0.327304, 0.329078, 0.330883, 0.33272, 0.334568, 0.336425, 0.338291, 0.340166, 0.342047, 0.34393, 0.345818, 0.347717, 0.349633, 0.351571, 0.353541, 0.355551, 0.357581, 0.359612, 0.361626, 0.363604, 0.365556, 0.367494, 0.369414, 0.371311, 0.373181, 0.375019, 0.376812, 0.378576, 0.380325, 0.382078, 0.38385, 0.385646, 0.387452, 0.389264, 0.391078, 0.39289, 0.394698, 0.396507, 0.398318, 0.400125, 0.401927, 0.403717, 0.405494, 0.407256, 0.40901, 0.41076, 0.41251, 0.414267, 0.416024, 0.41778, 0.419538, 0.421301, 0.423072, 0.424857, 0.426659, 0.428472, 0.430287, 0.432097, 0.433893, 0.435678, 0.437459, 0.439233, 0.440997, 0.442746, 0.444477, 0.446184, 0.44787, 0.449548, 0.451226, 0.452915, 0.454622, 0.456343, 0.45807, 0.459797, 0.461518, 0.463227, 0.464921, 0.466606, 0.468285, 0.469962, 0.47164, 0.473324, 0.475015, 0.476707, 0.478398, 0.480083, 0.481759, 0.483424, 0.485082, 0.486734, 0.488379, 0.490016, 0.491647, 0.493268, 0.49488, 0.496487, 0.49809, 0.499692, 0.501294, 0.502892, 0.504487, 0.506082, 0.507679, 0.509283, 0.510886, 0.512485, 0.514089, 0.515705, 0.51734, 0.519007, 0.520729, 0.522484, 0.524239, 0.52596, 0.527614, 0.529175, 0.530657, 0.532094, 0.533515, 0.534954, 0.53644, 0.537952, 0.539475, 0.541016, 0.542579, 0.544171, 0.545804, 0.547497, 0.549225, 0.550958, 0.552666, 0.554319, 0.555907, 0.557451, 0.558968, 0.560474, 0.561985, 0.563516, 0.565063, 0.566615, 0.568164, 0.569701, 0.571217, 0.572711, 0.574192, 0.575659, 0.577106, 0.578532, 0.579932, 0.581296, 0.582629, 0.583943, 0.585252, 0.586569, 0.5879, 0.589228, 0.590557, 0.591892, 0.593238, 0.594602, 0.595985, 0.597385, 0.598797, 0.600218, 0.601643, 0.603069, 0.604501, 0.605938, 0.60738, 0.608827, 0.610277, 0.61173, 0.613187, 0.614649, 0.616114, 0.617584, 0.619058, 0.620545, 0.622044, 0.623545, 0.625037, 0.62651, 0.627958, 0.629403, 0.630838, 0.632249, 0.633624, 0.634949, 0.636201, 0.63738, 0.63852, 0.639657, 0.640828, 0.642065, 0.643361, 0.644693, 0.646047, 0.647405, 0.648753, 0.650083, 0.651415, 0.652746, 0.654072, 0.655389, 0.656694, 0.65799, 0.659279, 0.660559, 0.661826, 0.663078, 0.664312, 0.665526, 0.666724, 0.667911, 0.66909, 0.670267, 0.671435, 0.672582, 0.673724, 0.674874, 0.676046, 0.677253, 0.678497, 0.679767, 0.681053, 0.682348, 0.683643, 0.684935, 0.686242, 0.687554, 0.688863, 0.690158, 0.691429, 0.692672, 0.693896, 0.695105, 0.696306, 0.697506, 0.698708, 0.699909, 0.701106, 0.7023, 0.703489, 0.704673, 0.705857, 0.707048, 0.708236, 0.709408, 0.710553, 0.711661, 0.712721, 0.713743, 0.714746, 0.715747, 0.716765, 0.71781, 0.718864, 0.719926, 0.720996, 0.722076, 0.723167, 0.724272, 0.725391, 0.726519, 0.727651, 0.728784, 0.729915, 0.731064, 0.732222, 0.733373, 0.734501, 0.73559, 0.736625, 0.737607, 0.738559, 0.739503, 0.740458, 0.741448, 0.742462, 0.74349, 0.744529, 0.745577, 0.746634, 0.747701, 0.748797, 0.749906, 0.751012, 0.752098, 0.753145, 0.754144, 0.755107, 0.756048, 0.756979, 0.757913, 0.758861, 0.759812, 0.760762, 0.761714, 0.76267, 0.763634, 0.76461, 0.765599, 0.766594, 0.76759, 0.768579, 0.769555, 0.770513, 0.77146, 0.772402, 0.773347, 0.774301, 0.775274, 0.776266, 0.777269, 0.778272, 0.779266, 0.780239, 0.781189, 0.782124, 0.783047, 0.783961, 0.784869, 0.785775, 0.786678, 0.787576, 0.788467, 0.78935, 0.790223, 0.791082, 0.791926, 0.79276, 0.793589, 0.794419, 0.795256, 0.796098, 0.79694, 0.797783, 0.79863, 0.799482, 0.80034, 0.801205, 0.802075, 0.802947, 0.80382, 0.804691, 0.805566, 0.806452, 0.807338, 0.808211, 0.80906, 0.809874, 0.810645, 0.811386, 0.81211, 0.812829, 0.813558, 0.814304, 0.815056, 0.815811, 0.816566, 0.81732, 0.818071, 0.818818, 0.819561, 0.820303, 0.821046, 0.821791, 0.82254, 0.823293, 0.824047, 0.824803, 0.825561, 0.82632, 0.827082, 0.827848, 0.828615, 0.829381, 0.830142, 0.830896, 0.83163, 0.832351, 0.833072, 0.833807, 0.83457, 0.835373, 0.83622, 0.837092, 0.837972, 0.838841, 0.839683, 0.840509, 0.841335, 0.842146, 0.842929, 0.84367, 0.844352, 0.844957, 0.845509, 0.846038, 0.846575, 0.847151, 0.847775, 0.848416, 0.849075, 0.849755, 0.850456, 0.851183, 0.85195, 0.852752, 0.85357, 0.854387, 0.855184, 0.855947, 0.856677, 0.857391, 0.858105, 0.858834, 0.859596, 0.860406, 0.861255, 0.862121, 0.86298, 0.863811, 0.864592, 0.86533, 0.86604, 0.866731, 0.867413, 0.868096, 0.868783, 0.869464, 0.87014, 0.870811, 0.871481, 0.872149, 0.872817, 0.873483, 0.874146, 0.874806, 0.875459, 0.876105, 0.876739, 0.877367, 0.877993, 0.878622, 0.879259, 0.879906, 0.880561, 0.88122, 0.881879, 0.882535, 0.883182, 0.883819, 0.884449, 0.885079, 0.885715, 0.886363, 0.887038, 0.887757, 0.888489, 0.889203, 0.889868, 0.890451, 0.890953, 0.891393, 0.891786, 0.892143, 0.892477, 0.8928, 0.89311, 0.893397, 0.893649, 0.893858, 0.894011, 0.894122, 0.894207, 0.894245, 0.894213, 0.894089, 0.893852, 0.893506, 0.893064, 0.892538, 0.891937, 0.891272, 0.890547, 0.889748, 0.888879, 0.887944, 0.886946, 0.885891, 0.884773, 0.883588, 0.882343, 0.881043, 0.879694, 0.878299, 0.876848, 0.875342, 0.87379, 0.872197, 0.87057, 0.868908, 0.867204, 0.86546, 0.863682, 0.861874, 0.860039, 0.858177, 0.856286, 0.854363, 0.852406, 0.850414, 0.848385, 0.846323, 0.844227, 0.842095, 0.839925, 0.837715, 0.835457, 0.83315, 0.830807, 0.82844, 0.826061, 0.82368, 0.821277, 0.818856, 0.816424, 0.81399, 0.811562, 0.80915, 0.806747, 0.804345, 0.801937, 0.799514, 0.797067, 0.7946, 0.792119, 0.789623, 0.787112, 0.784586, 0.782038, 0.779443, 0.776826, 0.774214, 0.771636, 0.76912, 0.766686, 0.764314, 0.761978, 0.759652, 0.757309, 0.754927, 0.752535, 0.750137, 0.747724, 0.745288, 0.742821, 0.740305, 0.737727, 0.73512, 0.732517, 0.72995, 0.727452, 0.725032, 0.722667, 0.72033, 0.717997, 0.715644, 0.713254, 0.710851, 0.708438, 0.706014, 0.703575, 0.701121, 0.698641, 0.696136, 0.693616, 0.691095, 0.688585, 0.686098, 0.683641, 0.6812, 0.678761, 0.676308, 0.673827, 0.671306, 0.668755, 0.666184, 0.663599, 0.661012, 0.65843, 0.655845, 0.653253, 0.65066, 0.64807, 0.645488, 0.64292, 0.640369, 0.637827, 0.635287, 0.632742, 0.630183, 0.6276, 0.624998, 0.622388, 0.619784, 0.617199, 0.614645, 0.612122, 0.60962, 0.607132, 0.60465, 0.602168, 0.599682, 0.597203, 0.594727, 0.592252, 0.589774, 0.58729, 0.584793, 0.582286, 0.579778, 0.577277, 0.57479, 0.572324, 0.569874, 0.567436, 0.56501, 0.562592, 0.560181, 0.557782, 0.555401, 0.553029, 0.550655, 0.548272, 0.545869, 0.543444, 0.541004, 0.538559, 0.536116, 0.533683, 0.531266, 0.52886, 0.52646, 0.524064, 0.521671, 0.519279, 0.516893, 0.514518, 0.512143, 0.50976, 0.507362, 0.504938, 0.502484, 0.50001, 0.497529, 0.495055, 0.4926, 0.490175, 0.487775, 0.485386, 0.482995, 0.480589, 0.478154, 0.475672, 0.473159, 0.47064, 0.468141, 0.46569, 0.463311, 0.460999, 0.458729, 0.456477, 0.454215, 0.451918, 0.449584, 0.44723, 0.444865, 0.442494, 0.440126, 0.437766, 0.43542, 0.433079, 0.430733, 0.428371, 0.425982, 0.423555, 0.421087, 0.418597, 0.416105, 0.413627, 0.411182, 0.408763, 0.406361, 0.403972, 0.401595, 0.399227, 0.396868, 0.394526, 0.392195, 0.389871, 0.387547, 0.385218, 0.382886, 0.380556, 0.378225, 0.375891, 0.373548, 0.371195, 0.368828, 0.366452, 0.364071, 0.361691, 0.359317, 0.356948, 0.354579, 0.352212, 0.349851, 0.347498, 0.345159, 0.342839, 0.340534, 0.338236, 0.335938, 0.333632, 0.331313, 0.328992, 0.326667, 0.324335, 0.321992, 0.319635, 0.317258, 0.314862, 0.312455, 0.310044, 0.307636, 0.305238, 0.30284, 0.300442, 0.298047, 0.29566, 0.293284, 0.290916, 0.288546, 0.286183, 0.283838, 0.281522, 0.279246, 0.277034, 0.274878, 0.272745, 0.270602, 0.268418, 0.266164, 0.263851, 0.261499, 0.259129, 0.256758, 0.254405, 0.25208, 0.249766, 0.247457, 0.245146, 0.242826, 0.240491, 0.238132, 0.235759, 0.233382, 0.231014, 0.228664, 0.22634, 0.224037, 0.221748, 0.219468, 0.217193, 0.214919, 0.212651, 0.210391, 0.208136, 0.205878, 0.203614, 0.201338, 0.19905, 0.196756, 0.194458, 0.192161, 0.189868, 0.187578, 0.185288, 0.182999, 0.180713, 0.178434, 0.176164, 0.173903, 0.171648, 0.1694, 0.167155, 0.164912, 0.162674, 0.16045, 0.158231, 0.156008, 0.153768, 0.151502, 0.149211, 0.146903, 0.144578, 0.142234, 0.139871, 0.137483, 0.135038, 0.132556, 0.130074, 0.127626, 0.125247, 0.12297, 0.120783, 0.118646, 0.116519, 0.114362, 0.112133, 0.109827, 0.107474, 0.105099, 0.102728, 0.100388, 0.0980987, 0.0958451, 0.0936141, 0.0913946, 0.0891749, 0.0869439, 0.084699, 0.0824483, 0.0801958, 0.0779458, 0.0757025, 0.073469, 0.0712418, 0.06902, 0.066804, 0.0645945, 0.0623925, 0.0602031, 0.0580333, 0.0558718, 0.0537071, 0.0515269, 0.0493195, 0.0470875, 0.0448382, 0.0425741, 0.0402977, 0.0380118, 0.0357137, 0.0333861, 0.0310419, 0.028698, 0.0263721, 0.0240815, 0.0218298, 0.019603, 0.0173978, 0.015211, 0.013039, 0.0108804, 0.00875302, 0.00665008, 0.00455578, 0.00245417, 0.000329488, -0.00183022, -0.00401578, -0.00621704, -0.00842485, -0.0106295, -0.0128215, -0.0149995, -0.0171705, -0.019339, -0.0215093, -0.0236866, -0.0258755, -0.0280772, -0.0302866, -0.0324974, -0.0347034, -0.0368983, -0.0390758, -0.0412378, -0.0433932, -0.0455518, -0.0477225, -0.0499145, -0.0521294, -0.0543603, -0.056599, -0.0588375, -0.0610684, -0.0632876, -0.0655037, -0.0677167, -0.0699247, -0.0721264, -0.0743201, -0.0765108, -0.0786993, -0.0808802, -0.0830487, -0.0851995, -0.0873284, -0.089439, -0.0915334, -0.0936121, -0.0956753, -0.0977242, -0.0997517, -0.101752, -0.103736, -0.105717, -0.107708, -0.10972, -0.111741, -0.113769, -0.115806, -0.117857, -0.119925, -0.122017, -0.124138, -0.126278, -0.128425, -0.130568, -0.132695, -0.134806, -0.136907, -0.139004, -0.141099, -0.143195, -0.145297, -0.147412, -0.149533, -0.151649, -0.15375, -0.155824, -0.157859, -0.159851, -0.161824, -0.163796, -0.16579, -0.167825, -0.169907, -0.172019, -0.174147, -0.176275, -0.178386, -0.18047, -0.182542, -0.184604, -0.186657, -0.188702, -0.19074, -0.192767, -0.19478, -0.196787, -0.198791, -0.200797, -0.202811, -0.204826, -0.206843, -0.208861, -0.210884, -0.212911, -0.214946, -0.216992, -0.219043, -0.221093, -0.223135, -0.225165, -0.227174, -0.229169, -0.231159, -0.233156, -0.235167, -0.237203, -0.239262, -0.241337, -0.243416, -0.245491, -0.247553, -0.249605, -0.251657, -0.253703, -0.255735, -0.257747, -0.25973, -0.261673, -0.263588, -0.265491, -0.267398, -0.269325, -0.271286, -0.27327, -0.275268, -0.277268, -0.279258, -0.281228, -0.283188, -0.285145, -0.28709, -0.289016, -0.290914, -0.292773, -0.294573, -0.296337, -0.298095, -0.299876, -0.301711, -0.303622, -0.305594, -0.307596, -0.309599, -0.311574, -0.313491, -0.315348, -0.31717, -0.318975, -0.320785, -0.322621, -0.324499, -0.326405, -0.328328, -0.330257, -0.332182, -0.334093, -0.33599, -0.337882, -0.339769, -0.341653, -0.343533, -0.345412, -0.347287, -0.34916, -0.351029, -0.352894, -0.354757, -0.356615, -0.358471, -0.360323, -0.362171, -0.364016, -0.365857, -0.367695, -0.36953, -0.371361, -0.373187, -0.375008, -0.376822, -0.378625, -0.380423, -0.382218, -0.384017, -0.385823, -0.387639, -0.389461, -0.391286, -0.393111, -0.39493, -0.396744, -0.398568, -0.400394, -0.402209, -0.404001, -0.405756, -0.407455, -0.409092, -0.410699, -0.412308, -0.41395, -0.415656, -0.417438, -0.419271, -0.421126, -0.422972, -0.424782, -0.426532, -0.428234, -0.429909, -0.431572, -0.433239, -0.434928, -0.436646, -0.438382, -0.440124, -0.44186, -0.443579, -0.445267, -0.446914, -0.448535, -0.450152, -0.451785, -0.453454, -0.455174, -0.456935, -0.458721, -0.460517, -0.462308, -0.464079, -0.465839, -0.467598, -0.46935, -0.471092, -0.472818, -0.474526, -0.476213, -0.477884, -0.479547, -0.481207, -0.482871, -0.484546, -0.486228, -0.487908, -0.489577, -0.491226, -0.492845, -0.49444, -0.496014, -0.497571, -0.499113, -0.500644, -0.502158, -0.503643, -0.505112, -0.506581, -0.508065, -0.509579, -0.511122, -0.512685, -0.514262, -0.515847, -0.517436, -0.519026, -0.520626, -0.522233, -0.523842, -0.525448, -0.527046, -0.528634, -0.530216, -0.531793, -0.533369, -0.534945, -0.536525, -0.538114, -0.539707, -0.541298, -0.542879, -0.544443, -0.545986, -0.54751, -0.549021, -0.550522, -0.552019, -0.553515, -0.555017, -0.556521, -0.558019, -0.559502, -0.56096, -0.562383, -0.563768, -0.565125, -0.566468, -0.567813, -0.569172, -0.57054, -0.571898, -0.573261, -0.574643, -0.576059, -0.577525, -0.579052, -0.580624, -0.582221, -0.583824, -0.585413, -0.586978, -0.588546, -0.590111, -0.591667, -0.593204, -0.594717, -0.596205, -0.597674, -0.599125, -0.600559, -0.601977, -0.60338, -0.604764, -0.606132, -0.607485, -0.608824, -0.610153, -0.611468, -0.612764, -0.614047, -0.615324, -0.616602, -0.617887, -0.619173, -0.620458, -0.621743, -0.623032, -0.624325, -0.625623, -0.626915, -0.628209, -0.629514, -0.630837, -0.632189, -0.633581, -0.635008, -0.636455, -0.637902, -0.639332, -0.640731, -0.642122, -0.643505, -0.644871, -0.646211, -0.647516, -0.648774, -0.649981, -0.651157, -0.652322, -0.653495, -0.654696, -0.655923, -0.657163, -0.658409, -0.659653, -0.660887, -0.662105, -0.66331, -0.664506, -0.6657, -0.666896, -0.668101, -0.669321, -0.670557, -0.671796, -0.673025, -0.674233, -0.675407, -0.676535, -0.677633, -0.678721, -0.679822, -0.680957, -0.682138, -0.683351, -0.684586, -0.685833, -0.687084, -0.688329, -0.689583, -0.69085, -0.692118, -0.69337, -0.694595, -0.69578, -0.696928, -0.698049, -0.699154, -0.700253, -0.701358, -0.702475, -0.703598, -0.704718, -0.705824, -0.70691, -0.707963, -0.708967, -0.709937, -0.710897, -0.711871, -0.712884, -0.713953, -0.715065, -0.716205, -0.717357, -0.718507, -0.719638, -0.720763, -0.721891, -0.723013, -0.724122, -0.725208, -0.726265, -0.72729, -0.728292, -0.72928, -0.730265, -0.731255, -0.732248, -0.73323, -0.734211, -0.7352, -0.736205, -0.737238, -0.738311, -0.739412, -0.740521, -0.741619, -0.742686, -0.743708, -0.744696, -0.745661, -0.746613, -0.747561, -0.748516, -0.749476, -0.750434, -0.75139, -0.752341, -0.753286, -0.754223, -0.75515, -0.756071, -0.756987, -0.757902, -0.758819, -0.759739, -0.760661, -0.761581, -0.762501, -0.763418, -0.764331, -0.765241, -0.76615, -0.767056, -0.767958, -0.768856, -0.769747, -0.770623, -0.771492, -0.772365, -0.773251, -0.77416, -0.775104, -0.776077, -0.777062, -0.778043, -0.779001, -0.779922, -0.780812, -0.781681, -0.782536, -0.783385, -0.784234, -0.785089, -0.785946, -0.7868, -0.787644, -0.788474, -0.789283, -0.790058, -0.790807, -0.791546, -0.792295, -0.793069, -0.793885, -0.79474, -0.795619, -0.796505, -0.797383, -0.798236, -0.799069, -0.799894, -0.800708, -0.801505, -0.802282, -0.803032, -0.80375, -0.804442, -0.80512, -0.805793, -0.806474, -0.807167, -0.807859, -0.808552, -0.809247, -0.809944, -0.810644, -0.811352, -0.812064, -0.812778, -0.813491, -0.814198, -0.814899, -0.815595, -0.816289, -0.816978, -0.817663, -0.818343, -0.819017, -0.819684, -0.820347, -0.821007, -0.821667, -0.822327, -0.822983, -0.823637, -0.824291, -0.824947, -0.82561, -0.826279, -0.826953, -0.827631, -0.828313, -0.829, -0.82969, -0.830403, -0.831135, -0.831867, -0.832579, -0.833252, -0.833867, -0.834421, -0.834934, -0.835429, -0.835926, -0.836447, -0.836999, -0.837564, -0.838138, -0.838714, -0.839288, -0.839852, -0.840397, -0.840932, -0.841471, -0.842025, -0.842609, -0.843234, -0.843893, -0.844576, -0.845274, -0.845979, -0.846681, -0.847395, -0.848127, -0.848861, -0.849583, -0.850275, -0.850926, -0.851554, -0.85216, -0.852739, -0.853287, -0.853801, -0.85427, -0.854693, -0.855083, -0.855456, -0.855826, -0.856207, -0.85659, -0.856966, -0.857339, -0.857712, -0.858088, -0.858469, -0.858855, -0.859243, -0.85963, -0.860011, -0.860383, -0.86074, -0.861083, -0.861421, -0.861764, -0.862121, -0.862499, -0.862889, -0.863289, -0.863701, -0.86413, -0.864576, -0.865053, -0.865568, -0.866101, -0.866632, -0.867139, -0.867603, -0.86803, -0.868434, -0.868816, -0.86918, -0.869529, -0.869881, -0.870272, -0.870662, -0.871001, -0.871238, -0.871324, -0.87118, -0.870828, -0.870378, -0.869937, -0.869614, -0.869502, -0.869488, -0.869554, -0.869727, -0.870037, -0.870513, -0.871247, -0.872318, -0.873557, -0.874789, -0.875836, -0.876525, -0.876945, -0.877194, -0.877256, -0.877115, -0.876754, -0.87615, -0.875272, -0.874164, -0.872877, -0.871464, -0.869974, -0.868396, -0.866678, -0.864844, -0.862921, -0.860934, -0.858903, -0.856797, -0.854614, -0.852368, -0.850075, -0.84775, -0.845392, -0.842974, -0.840512, -0.838024, -0.83553, -0.833047, -0.830567, -0.828078, -0.825584, -0.823086, -0.820586, -0.818085, -0.815569, -0.813046, -0.810528, -0.808027, -0.805556, -0.803131, -0.800752, -0.798393, -0.796028, -0.79363, -0.791176, -0.788669, -0.786125, -0.783558, -0.780983, -0.778414, -0.775859, -0.773306, -0.770751, -0.768194, -0.765633, -0.763064, -0.76048, -0.757883, -0.755282, -0.752691, -0.750121, -0.747581, -0.745068, -0.742576, -0.740095, -0.737621, -0.735144, -0.732669, -0.730205, -0.727744, -0.725278, -0.722802, -0.720306, -0.717784, -0.715244, -0.712698, -0.710156, -0.707631, -0.70513, -0.702646, -0.700175, -0.697711, -0.695248, -0.692784, -0.69032, -0.687859, -0.6854, -0.682941, -0.680482, -0.67802, -0.675555, -0.673088, -0.670622, -0.668159, -0.665703, -0.663256, -0.660822, -0.658392, -0.655958, -0.653513, -0.651048, -0.64856, -0.646055, -0.643541, -0.641026, -0.63852, -0.636029, -0.633553, -0.631083, -0.628611, -0.626129, -0.62363, -0.62111, -0.618576, -0.616031, -0.613479, -0.610924, -0.608366, -0.605796, -0.603217, -0.600638, -0.598067, -0.59551, -0.592974, -0.590451, -0.58794, -0.585435, -0.582935, -0.580436, -0.577928, -0.575415, -0.572911, -0.570425, -0.567972, -0.565563, -0.563209, -0.560889, -0.55858, -0.55626, -0.553906, -0.551515, -0.549106, -0.546682, -0.544246, -0.541801, -0.53935, -0.536897, -0.534438, -0.531967, -0.529476, -0.526961, -0.524413, -0.521828, -0.519219, -0.516602, -0.513988, -0.511392, -0.508796, -0.506192, -0.503597, -0.501024, -0.498489, -0.496007, -0.493576, -0.491182, -0.488812, -0.486449, -0.484079, -0.481706, -0.479345, -0.476989, -0.474628, -0.472254, -0.46986, -0.467445, -0.465015, -0.462576, -0.460135, -0.457698, -0.455269, -0.452846, -0.450424, -0.448, -0.445567, -0.443123, -0.440673, -0.438221, -0.435759, -0.433282, -0.430783, -0.428251, -0.425661, -0.423039, -0.420415, -0.417822, -0.415292, -0.412848, -0.410474, -0.40814, -0.405816, -0.40347, -0.401075, -0.39863, -0.396155, -0.393671, -0.391196, -0.388748, -0.386341, -0.38396, -0.381597, -0.379251, -0.376914, -0.374584, -0.372274, -0.369988, -0.367709, -0.365422, -0.36311, -0.360759, -0.358377, -0.355973, -0.353552, -0.35112, -0.348683, -0.346232, -0.343757, -0.341272, -0.338791, -0.33633, -0.333904, -0.331509, -0.329135, -0.326778, -0.324435, -0.322102, -0.319783, -0.317494, -0.315222, -0.312948, -0.310658, -0.308332, -0.305972, -0.303591, -0.301191, -0.298771, -0.296331, -0.293869, -0.291362, -0.288824, -0.286279, -0.28375, -0.281261, -0.278825, -0.276424, -0.274049, -0.27169, -0.269337, -0.266981, -0.264622, -0.262268, -0.259921, -0.257585, -0.255261, -0.252955, -0.250671, -0.248402, -0.246138, -0.243872, -0.241594, -0.239308, -0.237026, -0.234738, -0.232437, -0.230116, -0.227767, -0.225386, -0.222981, -0.220562, -0.218139, -0.215721, -0.213308, -0.210888, -0.208467, -0.206051, -0.203648, -0.201264, -0.198897, -0.196543, -0.194201, -0.191873, -0.18956, -0.187264, -0.184994, -0.182742, -0.180497, -0.178248, -0.175985, -0.173709, -0.17143, -0.169145, -0.16685, -0.164542, -0.162215, -0.159862, -0.15749, -0.15511, -0.152733, -0.150369, -0.148029, -0.145705, -0.143391, -0.141079, -0.138761, -0.136432, -0.134085, -0.131728, -0.129367, -0.127009, -0.124661, -0.122327, -0.119997, -0.117672, -0.115358, -0.113058, -0.110777, -0.108528, -0.106311, -0.10411, -0.101907, -0.0996853, -0.097427, -0.0951316, -0.0928122, -0.0904801, -0.0881476, -0.0858269, -0.0835248, -0.0812303, -0.0789414, -0.0766578, -0.074378, -0.0721014, -0.0698264, -0.0675536, -0.0652851, -0.0630235, -0.0607712, -0.0585312, -0.0563106, -0.0541026, -0.0518976, -0.0496861, -0.0474588, -0.0452096, -0.0429452, -0.040671, -0.0383926, -0.0361152, -0.0338438, -0.0315732, -0.0293009, -0.0270301, -0.024764, -0.0225054, -0.0202499, -0.0179787, -0.0157089, -0.0134595, -0.011251, -0.00910325 +}; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.h index fa9cc2e8..bbebbc0a 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/AudioMath.h @@ -24,6 +24,16 @@ public: return 20 * log(g) / Ln10; } + static double cents(double f1, double f2) + { + return 1200 * std::log2(f1 / f2); + } + + static double acents(double f1, double f2) + { + return std::abs(cents(f1, f2)); + } + static double gainFromDb(double db) { return std::exp(Ln10 * db / 20.0); @@ -32,6 +42,9 @@ public: /** * Returns a function that generates one period of sin for x = {0..1}. * Range (output) is -1 to 1. + * + * All makeFunc_xxx functions return functions that are not optimized. + * They do not use lookup tables. */ static std::function makeFunc_Sin(); @@ -53,7 +66,8 @@ public: /** * ScaleFun is a function the combines CV, knob, and trim into a voltage. - * Typically a ScaleFun is like an "attenuverter" + * Typically a ScaleFun is like an "attenuverter", where the trim input + * is the attenuverter. */ template using ScaleFun = std::function; @@ -66,6 +80,10 @@ public: * * This particular function is used when knobs are -5..5, * and CV range is -5..5. + * + * + * Can easily be used to add, clip and scale just a knob an a CV by + * passing 1 for the trim param. */ template static ScaleFun makeLinearScaler(T y0, T y1) @@ -87,6 +105,67 @@ public: * Details the same as makeLinearScaler except that the CV * scaling will be exponential for most values, becoming * linear near zero. + * + * Note that the cv and knob will have linear taper, only the + * attenuverter is audio taper. + * + * Implemented with a cached lookup table - + * only the final scaling is done at run time */ - static ScaleFun makeBipolarAudioScaler(float y0, float y1); + static ScaleFun makeScalerWithBipolarAudioTrim(float y0, float y1); + + /** + * SimpleScaleFun is a function the combines CV, and knob, into a voltage. + * Usually in a synth module that has knob and cv, but no trim. + * + * cv and knob are -5 to +5. They are summed, and the sum is limited to 5, -5. + * Then the sum gets an audio taper + */ + template + using SimpleScaleFun = std::function; + + /** + * maps +/- 5 volts from cv and knob to y0, y1 + * with an audio taper. + */ + static SimpleScaleFun makeSimpleScalerAudioTaper(float y0, float y1); + + template + static std::pair getMinMax(const T* data, int numSamples) + { + T min = 1, max = -1; + for (int i = 0; i < numSamples; ++i) { + const T x = data[i]; + min = std::min(min, x); + max = std::max(max, x); + } + return std::pair(min, max); + } + + /** + * A random number generator function. uniform random 0..1 + */ + using RandomUniformFunc = std::function; + + static RandomUniformFunc random(); + + + /** + * Folds numbers between +1 and -1 + */ + static inline float fold(float x) + { + float fold; + const float bias = (x < 0) ? -1.f : 1.f; + int phase = int((x + bias) / 2.f); + bool isEven = !(phase & 1); + // printf(" wrap(%f) phase=%d, isEven=%d", x, phase, isEven); + if (isEven) { + fold = x - 2.f * phase; + } else { + fold = -x + 2.f * phase; + } + // printf(" y=%f\n", wrap); + return fold; + } }; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/Decimator.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/Decimator.h new file mode 100644 index 00000000..a2dc2bc0 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/Decimator.h @@ -0,0 +1,46 @@ +#pragma once + +/** + * Outputs a stair-step decimation. + * So maybe it's the integral or a decimation? + */ +class Decimator +{ +public: + + /** + * ret the next sample from the decimator. + * if (needsInput), then next call must be acceptData. + */ + float clock(bool& needsInput) + { + --phaseAccumulator; // one more sample + if (phaseAccumulator <= 0) { + needsInput = true; + phaseAccumulator += rate; + } else { + needsInput = false; + } + return memory; + } + + void acceptData(float data) + { + memory = data; + } + + /** + * Rate must be > 1. + * Fractional rates are fine. + */ + void setDecimationRate(float r) + { + rate = r; + phaseAccumulator = rate; + } + +private: + float rate=0; + float memory=0; + float phaseAccumulator = 0; +}; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRDecimator.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRDecimator.h new file mode 100644 index 00000000..355eed2a --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRDecimator.h @@ -0,0 +1,52 @@ +#pragma once + +#include "BiquadParams.h" +#include "BiquadState.h" +#include "BiquadFilter.h" + +/** + * A traditional decimator, using IIR filters for interpolation + * + * template parameter OVERSAMPLE is the + * decimation rate. + */ +class IIRDecimator +{ +public: + float process(const float * input) + { + float x = 0; + for (int i = 0; i < oversample; ++i) { + x = BiquadFilter::run(input[i], state, *params); + } + return x; + } + + /** + * cutoff is normalized freq (.5 = nyquist). + * typically cutoff will be < (.5 / OVERSAMPLE), + * if not, the filters wouldn't work. + */ +#if 0 + void setCutoff(float cutoff) + { + assert(cutoff > 0 && cutoff < .5f); + params = ObjectCache::get6PLPParams(cutoff); + } +#endif + /** + * will set the oversample factor, and set the filter cutoff. + * NOrmalized cutoff is fixed at 1 / 4 * oversample, for a one + * octave passband + */ + void setup(int oversampleFactor) + { + assert(oversampleFactor == 4 || oversampleFactor == 16); + oversample = oversampleFactor; + params = ObjectCache::get6PLPParams(1.f / (4.0f * oversample)); + } +private: + std::shared_ptr> params; + BiquadState state; + int oversample = 16; +}; \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRUpsampler.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRUpsampler.h new file mode 100644 index 00000000..16763de0 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/IIRUpsampler.h @@ -0,0 +1,48 @@ +#pragma once + +#include "BiquadParams.h" +#include "BiquadState.h" +#include "BiquadFilter.h" +#include "ObjectCache.h" + +class IIRUpsampler +{ +public: + void process(float * outputBuffer, float input) + { + input *= oversample; + for (int i = 0; i < oversample; ++i) { + outputBuffer[i] = BiquadFilter::run(input, state, *params); + input = 0; // just filter a delta - don't average the whole signal + } + } + /** + * cutoff is normalized freq (.5 = nyquist). + * typically cutoff will be < (.5 / FACTOR), + * if not, the filters wouldn't work. + */ +#if 0 + void setCutoff(float cutoff) + { + assert(cutoff > 0 && cutoff < .5f); + // ButterworthFilterDesigner::designSixPoleLowpass(params, cutoff); + params = ObjectCache::get6PLPParams(cutoff); + } +#endif + + /** + * Will set the oversample factor, and set the filter cutoff. + * NOrmalized cutoff is fixed at 1 / 4 * oversample, for a one + * octave passband + */ + void setup(int oversampleFactor) + { + assert(oversampleFactor == 4 || oversampleFactor == 16); + oversample = oversampleFactor; + params = ObjectCache::get6PLPParams(1.f / (4.0f * oversample)); + } +private: + std::shared_ptr> params; + BiquadState state; + int oversample = 16; +}; \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTable.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTable.h index 6359681b..105fe70e 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTable.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTable.h @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTableFactory.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTableFactory.h index 6ef5b4b4..67754d70 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTableFactory.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/LookupTableFactory.h @@ -7,7 +7,16 @@ template class LookupTableFactory { public: + /** + * domain (x) = -1 .. +1 + */ static void makeBipolarAudioTaper(LookupTableParams& params); + + /** + * domain (x) = 0..1 + */ + static void makeAudioTaper(LookupTableParams& params); + static double audioTaperKnee() { return -24; @@ -18,32 +27,99 @@ public: * range = 20..20k (for now). but should be .001 to 1.0? */ static void makeExp2(LookupTableParams& params); - static double expYMin() + static double exp2YMin() { return 4; } - static double expYMax() + static double exp2YMax() { return 40000; } - static double expXMin() + static double exp2XMin() + { + return std::log2(exp2YMin()); + } + static double exp2XMax() + { + return std::log2(exp2YMax()); + } + + static void makeExp2ExLow(LookupTableParams& params); + static double exp2ExLowYMin() + { + return 2; + } + + static double exp2ExLowYMax() + { + return 400; + } + static double exp2ExLowXMin() { - return std::log2(expYMin()); + return std::log2(exp2ExLowYMin()); } - static double expXMax() + static double exp2ExLowXMax() { - return std::log2(expYMax()); + return std::log2(exp2ExLowYMax()); } + + static void makeExp2ExHigh(LookupTableParams& params); + static double exp2ExHighYMin() + { + return 400; + } + static double exp2ExHighYMax() + { + return 20000; + } + static double exp2ExHighXMin() + { + return std::log2(exp2ExHighYMin()); + } + + static double exp2ExHighXMax() + { + return std::log2(exp2ExHighYMax()); + } + + }; template inline void LookupTableFactory::makeExp2(LookupTableParams& params) { - // 128 not enough for one cent + // 256 enough for one cent const int bins = 256; - const T xMin = (T) std::log2(expYMin()); - const T xMax = (T) std::log2(expYMax()); + const T xMin = (T) std::log2(exp2YMin()); + const T xMax = (T) std::log2(exp2YMax()); + assert(xMin < xMax); + LookupTable::init(params, bins, xMin, xMax, [](double x) { + return std::pow(2, x); + }); +} + +// hit specs with 256 / 128 @200 crossover +// try 800 ng - need 256/256 +// 400 need 256 / 128 +template +inline void LookupTableFactory::makeExp2ExHigh(LookupTableParams& params) +{ + const int bins = 512; + const T xMin = (T) std::log2(exp2ExHighYMin()); + const T xMax = (T) std::log2(exp2ExHighYMax()); + assert(xMin < xMax); + LookupTable::init(params, bins, xMin, xMax, [](double x) { + return std::pow(2, x); + }); +} + +template +inline void LookupTableFactory::makeExp2ExLow(LookupTableParams& params) +{ + const int bins = 256; + const T xMin = (T) std::log2(exp2ExLowYMin()); + const T xMax = (T) std::log2(exp2ExLowYMax()); assert(xMin < xMax); LookupTable::init(params, bins, xMin, xMax, [](double x) { return std::pow(2, x); @@ -61,4 +137,17 @@ inline void LookupTableFactory::makeBipolarAudioTaper(LookupTableParams& p return (x >= 0) ? audioTaper(x) : -audioTaper(-x); }); +} + +template +inline void LookupTableFactory::makeAudioTaper(LookupTableParams& params) +{ + const int bins = 32; + std::function audioTaper = AudioMath::makeFunc_AudioTaper(audioTaperKnee()); + const T xMin = 0; + const T xMax = 1; + LookupTable::init(params, bins, xMin, xMax, [audioTaper](double x) { + return audioTaper(x); + }); + } \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.cpp b/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.cpp index 2fee4982..518062de 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.cpp +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.cpp @@ -2,6 +2,7 @@ #include #include "AudioMath.h" +#include "ButterworthFilterDesigner.h" #include "LookupTableFactory.h" #include "ObjectCache.h" @@ -17,6 +18,21 @@ std::shared_ptr> ObjectCache::getBipolarAudioTaper() return ret; } +template +std::shared_ptr> ObjectCache::getAudioTaper() +{ + + std::shared_ptr< LookupTableParams> ret = audioTaper.lock(); + if (!ret) { + ret = std::make_shared>(); + LookupTableFactory::makeAudioTaper(*ret); + audioTaper = ret; + } + return ret; + + return nullptr; +} + template std::shared_ptr> ObjectCache::getSinLookup() { @@ -24,8 +40,8 @@ std::shared_ptr> ObjectCache::getSinLookup() if (!ret) { ret = std::make_shared>(); std::function f = AudioMath::makeFunc_Sin(); - // Used to use 4096, but 256 gives about 80db snr, so let's save memory - LookupTable::init(*ret, 256, 0, 1, f); + // Used to use 4096, but 512 gives about 92db snr, so let's save memory + LookupTable::init(*ret, 512, 0, 1, f); sinLookupTable = ret; } return ret; @@ -43,6 +59,30 @@ std::shared_ptr> ObjectCache::getExp2() return ret; } +template +std::shared_ptr> ObjectCache::getExp2ExtendedLow() +{ + std::shared_ptr< LookupTableParams> ret = exp2ExLow.lock(); + if (!ret) { + ret = std::make_shared>(); + LookupTableFactory::makeExp2ExLow(*ret); + exp2ExLow = ret; + } + return ret; +} + +template +std::shared_ptr> ObjectCache::getExp2ExtendedHigh() +{ + std::shared_ptr< LookupTableParams> ret = exp2ExHigh.lock(); + if (!ret) { + ret = std::make_shared>(); + LookupTableFactory::makeExp2ExHigh(*ret); + exp2ExHigh = ret; + } + return ret; +} + template @@ -53,7 +93,7 @@ std::shared_ptr> ObjectCache::getDb2Gain() ret = std::make_shared>(); LookupTable::init(*ret, 32, -80, 20, [](double x) { return AudioMath::gainFromDb(x); - }); + }); db2Gain = ret; } return ret; @@ -66,7 +106,7 @@ std::shared_ptr> ObjectCache::getTanh5() std::shared_ptr< LookupTableParams> ret = tanh5.lock(); if (!ret) { ret = std::make_shared>(); - LookupTable::init(*ret, 256, -5, 5, [](double x) { + LookupTable::init(*ret, 256, -5, 5, [](double x) { return std::tanh(x); }); tanh5 = ret; @@ -74,16 +114,71 @@ std::shared_ptr> ObjectCache::getTanh5() return ret; } -// The weak pointer that hold our singletons. +/** + * Lambda capture two smart pointers to lookup table params, + * so lifetime of the lambda control their reft. + */ +template +std::function ObjectCache::getExp2Ex() +{ + std::shared_ptr < LookupTableParams> low = getExp2ExtendedLow(); + std::shared_ptr < LookupTableParams> high = getExp2ExtendedHigh(); + const T xDivide = (T) LookupTableFactory::exp2ExHighXMin(); + return [low, high, xDivide](T x) { + auto params = (x < xDivide) ? low : high; + return LookupTable::lookup(*params, x, true); + }; +} + +template +std::shared_ptr> ObjectCache::get6PLPParams(float normalizedFc) +{ + const int div = (int) std::round(1.0 / normalizedFc); + if (div == 64) { + std::shared_ptr < BiquadParams> ret = lowpass64.lock(); + if (!ret) { + ret = std::make_shared>(); + ButterworthFilterDesigner::designSixPoleLowpass(*ret, normalizedFc); + lowpass64 = ret; + } + return ret; + } else if (div == 16) { + std::shared_ptr < BiquadParams> ret = lowpass16.lock(); + if (!ret) { + ret = std::make_shared>(); + ButterworthFilterDesigner::designSixPoleLowpass(*ret, normalizedFc); + lowpass16 = ret; + } + return ret; + } + else assert(false); + return nullptr; +} + +// The weak pointers that hold our singletons. +template +std::weak_ptr< BiquadParams > ObjectCache::lowpass64; +template +std::weak_ptr< BiquadParams > ObjectCache::lowpass16; + template std::weak_ptr> ObjectCache::bipolarAudioTaper; +template +std::weak_ptr> ObjectCache::audioTaper; + template std::weak_ptr> ObjectCache::sinLookupTable; template std::weak_ptr> ObjectCache::exp2; +template +std::weak_ptr> ObjectCache::exp2ExLow; + +template +std::weak_ptr> ObjectCache::exp2ExHigh; + template std::weak_ptr> ObjectCache::db2Gain; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.h index 78c63568..9f517bb1 100644 --- a/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.h +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/ObjectCache.h @@ -2,6 +2,7 @@ #include "LookupTable.h" +#include "BiquadParams.h" /** * This class creates objects and caches them. @@ -18,6 +19,7 @@ class ObjectCache { public: static std::shared_ptr> getBipolarAudioTaper(); + static std::shared_ptr> getAudioTaper(); static std::shared_ptr> getSinLookup(); /** @@ -30,6 +32,14 @@ public: * accuracy = 1 cent (1V/octave) */ static std::shared_ptr> getExp2(); + + static std::function getExp2Ex(); + + static std::shared_ptr> getExp2ExtendedLow(); + static std::shared_ptr> getExp2ExtendedHigh(); + + + static std::shared_ptr> getDb2Gain(); /** @@ -37,14 +47,22 @@ public: */ static std::shared_ptr> getTanh5(); + static std::shared_ptr> get6PLPParams(float normalizedFc); + private: /** * Cache uses weak pointers. This allows the cached objects to be * freed when the last client reference goes away. */ static std::weak_ptr> bipolarAudioTaper; + static std::weak_ptr> audioTaper; static std::weak_ptr> sinLookupTable; static std::weak_ptr> exp2; + static std::weak_ptr> exp2ExHigh; + static std::weak_ptr> exp2ExLow; static std::weak_ptr> db2Gain; static std::weak_ptr> tanh5; + + static std::weak_ptr< BiquadParams> lowpass64; + static std::weak_ptr< BiquadParams> lowpass16; }; diff --git a/plugins/community/repos/squinkylabs-plug1/dsp/utils/poly.h b/plugins/community/repos/squinkylabs-plug1/dsp/utils/poly.h new file mode 100644 index 00000000..200dc50b --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/dsp/utils/poly.h @@ -0,0 +1,64 @@ +#pragma once +template +class Poly +{ +public: + Poly(); + float run(float x) + { + fillPowers(x); + return (float) doSum(); + } + void setGain(int index, float value) + { + assert(index >= 0 && index < order); + gains[index] = value; + } +private: + T gains[order]; + + // powers[0] = x, powers[1] = x**2 + T powers[order]; + + void fillPowers(T); + T doSum(); +}; + +template +inline Poly::Poly() +{ + assert(order == 11); + for (int i = 0; i < order; ++i) { + gains[i] = 0; + powers[i] = 0; + } +} + +template +inline void Poly::fillPowers(T x) +{ + T value = x; + for (int i = 0; i < order; ++i) { + powers[i] = value; + value *= x; + } +} + + + +template +inline T Poly::doSum() +{ + T ret = gains[0] * powers[0]; + ret += gains[1] * (2 * powers[1] - 1); + ret += gains[2] * (4 * powers[2] - 3 * powers[0]); + ret += gains[3] * (8 * powers[3] - 8 * powers[1] + 1); + ret += gains[4] * (16 * powers[4] - 20 * powers[2] + 5 * powers[0]); + ret += gains[5] * (32 * powers[5] - 48 * powers[3] + 18 * powers[1] - 1); + ret += gains[6] * (64 * powers[6] - 112 * powers[4] + 56 * powers[2] - 7 * powers[0]); + ret += gains[7] * (128 * powers[7] - 256 * powers[5] + 160 * powers[3] - 32 * powers[1] + 1); + ret += gains[8] * (256 * powers[8] - 576 * powers[6] + 432 * powers[4] - 120 * powers[2] + 9 * powers[0]); + ret += gains[9] * (512 * powers[9] - 1280 * powers[7] + 1120 * powers[5] - 400 * powers[3] + 50 * powers[1] - 1); + ret += gains[10] * (1024 * powers[10] - 2816 * powers[8] + 2816 * powers[6] - 1232 * powers[4] + 220 * powers[2] - 11 * powers[0]); + return ret; +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/gfx/lfn-panel-design.xd b/plugins/community/repos/squinkylabs-plug1/gfx/lfn-panel-design.xd new file mode 100644 index 0000000000000000000000000000000000000000..561c3b7e6c631c1ed3cfcd6eb668568f48f2b65e GIT binary patch literal 22017 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 jH@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -72,21 +101,37 @@ + + + + + + + + + + + + + + + + @@ -96,6 +141,8 @@ + + @@ -164,7 +211,7 @@ Level3 ProgramDatabase Disabled - ..\..\dsp\third-party\falco;..\..\dsp\utils;..\..\dsp\generators;..\..\dsp\filters;%(AdditionalIncludeDirectories) + ..\..\dsp\utils;..\..\dsp\fft;..\..\dsp\filters;..\..\dsp\generators;..\..\dsp\third-party\src;..\..\dsp\third-party\falco;..\..\dsp\third-party\kiss_fft130;..\..\dsp\third-party\kiss_fft130\tools;..\..\composites;..\..\sqsrc\util;..\..\sqsrc\thread;..\..\sqsrc\grammar;..\..\sqsrc\clock;..\..\..\..\include;..\..\..\..\dep\speexdsp-SpeexDSP-1.2rc3\include;D:\VCVRack\x6\dep\jpommier-pffft-29e4f76ac53b;%(AdditionalIncludeDirectories) stdcpp14 @@ -180,7 +227,7 @@ Level3 ProgramDatabase Disabled - ..\..\dsp\fft;..\..\dsp\generators;..\..\dsp\filters;..\..\dsp\third-party\falco;..\..\composites;..\..\sqsrc\clock;..\..\sqsrc\util;..\..\sqsrc\thread;..\..\dsp\utils;..\..\dsp\third-party\kiss_fft130;..\..\dsp\third-party\kiss_fft130\tools;%(AdditionalIncludeDirectories) + ..\..\sqsrc\grammar;..\..\dsp\fft;..\..\dsp\generators;..\..\dsp\filters;..\..\dsp\third-party\src;..\..\dsp\third-party\falco;..\..\composites;..\..\sqsrc\clock;..\..\sqsrc\delay;..\..\sqsrc\util;..\..\sqsrc\thread;..\..\dsp\utils;..\..\dsp\third-party\kiss_fft130;..\..\dsp\third-party\kiss_fft130\tools;..\..\..\..\include;..\..\..\..\dep\speexdsp-SpeexDSP-1.2rc3\include;..\..\..\..\dep\jpommier-pffft-29e4f76ac53b;%(AdditionalIncludeDirectories) stdcpp14 @@ -195,6 +242,7 @@ MultiThreadedDLL Level3 ProgramDatabase + ..\..\dsp\utils;..\..\dsp\fft;..\..\dsp\filters;..\..\dsp\generators;..\..\dsp\third-party\src;..\..\dsp\third-party\falco;..\..\dsp\third-party\kiss_fft130;..\..\dsp\third-party\kiss_fft130\tools;..\..\composites;..\..\sqsrc\util;..\..\sqsrc\thread;..\..\sqsrc\grammar;..\..\sqsrc\clock;..\..\..\..\include;..\..\..\..\dep\speexdsp-SpeexDSP-1.2rc3\include;D:\VCVRack\x6\dep\jpommier-pffft-29e4f76ac53b;%(AdditionalIncludeDirectories) MachineX86 @@ -210,7 +258,7 @@ MultiThreadedDLL Level3 ProgramDatabase - ..\..\dsp\fft;..\..\dsp\generators;..\..\dsp\filters;..\..\dsp\third-party\falco;..\..\composites;..\..\sqsrc\clock;..\..\sqsrc\util;..\..\sqsrc\thread;..\..\dsp\utils;..\..\dsp\third-party\kiss_fft130;..\..\dsp\third-party\kiss_fft130\tools;%(AdditionalIncludeDirectories) + ..\..\sqsrc\grammar;..\..\dsp\fft;..\..\dsp\generators;..\..\dsp\filters;..\..\dsp\third-party\src;..\..\dsp\third-party\falco;..\..\composites;..\..\sqsrc\clock;..\..\sqsrc\delay;..\..\sqsrc\util;..\..\sqsrc\thread;..\..\dsp\utils;..\..\dsp\third-party\kiss_fft130;..\..\dsp\third-party\kiss_fft130\tools;..\..\..\..\include;..\..\..\..\dep\speexdsp-SpeexDSP-1.2rc3\include;..\..\..\..\dep\jpommier-pffft-29e4f76ac53b;%(AdditionalIncludeDirectories) true diff --git a/plugins/community/repos/squinkylabs-plug1/projects/vs_windows/Squinky.vcxproj.filters b/plugins/community/repos/squinkylabs-plug1/projects/vs_windows/Squinky.vcxproj.filters index b646a4d4..3bee6a04 100644 --- a/plugins/community/repos/squinkylabs-plug1/projects/vs_windows/Squinky.vcxproj.filters +++ b/plugins/community/repos/squinkylabs-plug1/projects/vs_windows/Squinky.vcxproj.filters @@ -85,6 +85,24 @@ {6c381890-e472-4d98-a18a-8c768ec7a670} + + {c8db16de-4e6f-4c6d-bd7a-aeb75e464495} + + + {d8e54a08-bbcc-4495-8f95-cd2178b57811} + + + {726b598f-f9ad-4df3-9db8-7cb86dc1cd03} + + + {bcce7e7a-2123-42c9-8557-a31f6444e05e} + + + {fc621d2c-8726-4e99-a6dd-bbc7135bee28} + + + {2b1546d2-0426-4a86-9aa8-0d5448be9ad0} + @@ -198,6 +216,66 @@ Source Files\test + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\sqsrc\grammar + + + Source Files\test + + + Source Files\test + + + Source Files\dsp\third-party\src + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\test + + + Source Files\sqsrc\delay + + + Source Files\test + + + Source Files\dsp\utils + + + Source Files\test + @@ -332,5 +410,86 @@ Header Files\sqsrc\thread + + Source Files\test + + + Header Files\sqsrc\grammar + + + Header Files\dsp\filters + + + Header Files\dsp\filters + + + Header Files\dsp\utils + + + Header Files\composites + + + Header Files\composites + + + Header Files\sqsrc\clock + + + Header Files\sqsrc\clock + + + Header Files\dsp\utils + + + Header Files\composites + + + Header Files\sqsrc\util + + + Header Files\dsp\third-party\src + + + Header Files\composites + + + Header Files\dsp\third-party\src + + + Header Files\dsp\third-party\src + + + Header Files\dsp\generators + + + Header Files\composites + + + Header Files\dsp\utils + + + Header Files\dsp\utils + + + Header Files\sqsrc\delay + + + Header Files\composites + + + Header Files\composites + + + Header Files\composites + + + Header Files\dsp\utils + + + Header Files\dsp\filters + + + Header Files\composites + \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/res/Blue30.svg b/plugins/community/repos/squinkylabs-plug1/res/Blue30.svg new file mode 100644 index 00000000..ce7b8ad3 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/Blue30.svg @@ -0,0 +1,9 @@ + + Blue302 + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/BluePush_0.svg b/plugins/community/repos/squinkylabs-plug1/res/BluePush_0.svg new file mode 100644 index 00000000..7a292df1 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/BluePush_0.svg @@ -0,0 +1,10 @@ + + BluePush_0 + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/BluePush_1.svg b/plugins/community/repos/squinkylabs-plug1/res/BluePush_1.svg new file mode 100644 index 00000000..30e3aa9c --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/BluePush_1.svg @@ -0,0 +1,10 @@ + + BluePush_1 + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/BlueTrimmer.svg b/plugins/community/repos/squinkylabs-plug1/res/BlueTrimmer.svg new file mode 100644 index 00000000..81aefcd2 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/BlueTrimmer.svg @@ -0,0 +1,7 @@ + + TrimBlueOrig2 + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_0.svg b/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_0.svg new file mode 100644 index 00000000..946b5d2c --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_0.svg @@ -0,0 +1,13 @@ + + Artboard 1 + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_1.svg b/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_1.svg new file mode 100644 index 00000000..b25bbfe9 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_1.svg @@ -0,0 +1,13 @@ + + Artboard 1 + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_2.svg b/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_2.svg new file mode 100644 index 00000000..3f314d45 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/NKKSmall_2.svg @@ -0,0 +1,13 @@ + + Artboard 1 + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/blank_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/blank_panel.svg index 4e30c038..9b9869fc 100644 --- a/plugins/community/repos/squinkylabs-plug1/res/blank_panel.svg +++ b/plugins/community/repos/squinkylabs-plug1/res/blank_panel.svg @@ -1,16 +1,20 @@ - + - + panel-6b-flat - + - - + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/chb_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/chb_panel.svg new file mode 100644 index 00000000..13269abf --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/chb_panel.svg @@ -0,0 +1,32 @@ + + cb_panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/ev3_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/ev3_panel.svg new file mode 100644 index 00000000..5df1b04a --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/ev3_panel.svg @@ -0,0 +1,26 @@ + + ev3-3-ghost + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/formants_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/formants_panel.svg index de591576..6c24b440 100644 --- a/plugins/community/repos/squinkylabs-plug1/res/formants_panel.svg +++ b/plugins/community/repos/squinkylabs-plug1/res/formants_panel.svg @@ -7,7 +7,10 @@ formants_panel - + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/fun_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/fun_panel.svg new file mode 100644 index 00000000..02625237 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/fun_panel.svg @@ -0,0 +1,52 @@ + + + + + + + fun-panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/gray.svg b/plugins/community/repos/squinkylabs-plug1/res/gray.svg new file mode 100644 index 00000000..4688975e --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/gray.svg @@ -0,0 +1,30 @@ + + gray-narrow-ghost + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/lfn_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/lfn_panel.svg new file mode 100644 index 00000000..8ac5fbdd --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/lfn_panel.svg @@ -0,0 +1,42 @@ + + + + + + + lfn_panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/saw_wave-1.svg b/plugins/community/repos/squinkylabs-plug1/res/saw_wave-1.svg new file mode 100644 index 00000000..266745c4 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/saw_wave-1.svg @@ -0,0 +1,4 @@ + + Artboard 1 + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/saw_wave.svg b/plugins/community/repos/squinkylabs-plug1/res/saw_wave.svg new file mode 100644 index 00000000..9fc992ac --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/saw_wave.svg @@ -0,0 +1,5 @@ + + ramp3 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/saw_wave_on.svg b/plugins/community/repos/squinkylabs-plug1/res/saw_wave_on.svg new file mode 100644 index 00000000..127e3091 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/saw_wave_on.svg @@ -0,0 +1,5 @@ + + ramp3 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/saw_wave_on1.svg b/plugins/community/repos/squinkylabs-plug1/res/saw_wave_on1.svg new file mode 100644 index 00000000..027e6318 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/saw_wave_on1.svg @@ -0,0 +1,4 @@ + + Artboard 1 + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/shaper.svg b/plugins/community/repos/squinkylabs-plug1/res/shaper.svg new file mode 100644 index 00000000..9d372b59 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/shaper.svg @@ -0,0 +1,35 @@ + + shaper2-ghost-01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/thread_booster_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/thread_booster_panel.svg index c73c52ef..07f92a01 100644 --- a/plugins/community/repos/squinkylabs-plug1/res/thread_booster_panel.svg +++ b/plugins/community/repos/squinkylabs-plug1/res/thread_booster_panel.svg @@ -7,7 +7,11 @@ thread_booster_panel + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/trem_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/trem_panel.svg index eb70aaa7..abff6e93 100644 --- a/plugins/community/repos/squinkylabs-plug1/res/trem_panel.svg +++ b/plugins/community/repos/squinkylabs-plug1/res/trem_panel.svg @@ -7,10 +7,9 @@ trem_panel - - - - + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/vocal_animator_panel.svg b/plugins/community/repos/squinkylabs-plug1/res/vocal_animator_panel.svg index a567e16f..1b2cafb4 100644 --- a/plugins/community/repos/squinkylabs-plug1/res/vocal_animator_panel.svg +++ b/plugins/community/repos/squinkylabs-plug1/res/vocal_animator_panel.svg @@ -7,9 +7,12 @@ vocal_animator_panel - - - + + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-01.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-01.svg new file mode 100644 index 00000000..c1c091c5 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-01.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-02.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-02.svg new file mode 100644 index 00000000..be844fe0 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-02.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-03.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-03.svg new file mode 100644 index 00000000..6f855985 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-03.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-04.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-04.svg new file mode 100644 index 00000000..f613f355 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-04.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-05.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-05.svg new file mode 100644 index 00000000..3abdedf7 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-05.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-06.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-06.svg new file mode 100644 index 00000000..0eb0f217 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-06.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-07.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-07.svg new file mode 100644 index 00000000..81284e26 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-07.svg @@ -0,0 +1,4 @@ + + waveforms-6 + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-08.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-08.svg new file mode 100644 index 00000000..21798e91 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-08.svg @@ -0,0 +1,4 @@ + + waveforms-6 + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-09.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-09.svg new file mode 100644 index 00000000..0f9cedf7 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-09.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-10.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-10.svg new file mode 100644 index 00000000..e606a0d2 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-10.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-11.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-11.svg new file mode 100644 index 00000000..b591d4e5 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-11.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-12.svg b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-12.svg new file mode 100644 index 00000000..ee663399 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/res/waveforms-6-12.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.cpp b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.cpp index 82e8b695..51e27726 100644 --- a/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.cpp +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.cpp @@ -32,7 +32,7 @@ void ClockMult::sampleClockLockedMode() case State::TRAINING: ++trainingCounter; break; - case State::RUNNING: + case State::RUNNING: ++trainingCounter; // we are still training, even while running sawPhase += learnedFrequency; if (sawPhase >= 1) { @@ -47,7 +47,7 @@ void ClockMult::sampleClockLockedMode() break; - default: + default: assert(false); } // printf("leave sampleClock: state=%d saw=%f\n", state, sawPhase); @@ -75,14 +75,14 @@ void ClockMult::refClock() trainingCounter = 0; learnedFrequency = (float) freqMultFactor / learnedPeriod; state = State::RUNNING; - + startNewClock(); // printf("refClock moved from TRAINING to RUNNING. period = %d freq=%f clockOut=%d\n", learnedPeriod, learnedFrequency, clockOutValue); break; - + default: assert(0); - + } //printf("leave refClock: state=%d\n", state); } diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.h index 931e1f39..66b552d0 100644 --- a/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.h +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/ClockMult.h @@ -58,7 +58,7 @@ private: int trainingCounter = 12345; int learnedPeriod = 999; float learnedFrequency = 0; - int freqMultFactor = 0; // if 0, free run, else mult by n. + int freqMultFactor = 0; // if 0, free run, else multiply by n. State state = State::INIT; bool clockOutValue = 0; diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/GenerativeTriggerGenerator.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/GenerativeTriggerGenerator.h new file mode 100644 index 00000000..2c1bab96 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/GenerativeTriggerGenerator.h @@ -0,0 +1,114 @@ +#ifndef GENERATIVETRIGGERGENERATOR +#define GENERATIVETRIGGERGENERATOR + +#include "StochasticGrammar.h" +#include "TriggerSequencer.h" + +/* Knows how to generate trigger sequence data + * when evaluating a grammar + */ +class GTGEvaluator : public ProductionRule::EvaluationState +{ +public: + GTGEvaluator(AudioMath::RandomUniformFunc xr, TriggerSequencer::Event * buf) : + ProductionRule::EvaluationState(xr), + _buf(buf), + _delay(0) + { + } + + void writeSymbol(GKEY key) override + { + // first: write out a trigger at "current delay" + _buf->evt = TriggerSequencer::TRIGGER; + _buf->delay = _delay; + ++_buf; + + // then set current dealy to duration of key + _delay = ProductionRuleKeys::getDuration(key); + } + + // call this to write final event + void writeEnd() + { + _buf->evt = TriggerSequencer::END; + _buf->delay = _delay; + } +private: + TriggerSequencer::Event * _buf; + int _delay; +}; + + +/* wraps up some stochastic gnerative grammar stuff feeding + * a trigger sequencer + */ +class GenerativeTriggerGenerator +{ +public: + GenerativeTriggerGenerator(AudioMath::RandomUniformFunc r, const ProductionRule * rules, int numRules, GKEY initialState) : + _r(r), + _rules(rules), + _numRules(numRules), + _initKey(initialState) + { + _data[0].delay = 0; + _data[0].evt = TriggerSequencer::END; + _seq = new TriggerSequencer(_data); + } + ~GenerativeTriggerGenerator() + { + delete _seq; + } + + + void setGrammar(const ProductionRule * rules, int numRules, GKEY initialState) + { + _rules = rules; + _numRules = numRules; + _initKey = initialState; + } + + // returns true if trigger generated + bool clock() + { + _seq->clock(); + bool ret = _seq->getTrigger(); + if (_seq->getEnd()) { + // when we finish playing the seq, generate a new random one + generate(); + ret |= _seq->getTrigger(); + //printf("this should be getTrigger!!!\n"); + } + return ret; + } +private: + TriggerSequencer * _seq; + TriggerSequencer::Event _data[33]; + AudioMath::RandomUniformFunc _r; + const ProductionRule * _rules; + int _numRules; + GKEY _initKey; + // + void generate() + { + GTGEvaluator es(_r, _data); + es.rules = _rules; + es.numRules = _numRules; + ProductionRule::evaluate(es, _initKey); + + es.writeEnd(); + TriggerSequencer::isValid(_data); + _seq->reset(_data); + assert(!_seq->getEnd()); +#if 0 + printf("just generated trigger seq\n"); + TriggerSequencer::Event * p; + for (p = _data; p->evt != TriggerSequencer::END; ++p) { + printf("evt=%d, delay=%d\n", p->evt, p->delay); + } + printf("delay to end = %d\n", p->delay); +#endif + } +}; +#endif \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/TriggerSequencer.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/TriggerSequencer.h new file mode 100644 index 00000000..b724f4da --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/clock/TriggerSequencer.h @@ -0,0 +1,114 @@ +#ifndef TRIGGERSEQUENCER +#define TRIGGERSEQUENCER + +class TriggerSequencer +{ +public: + enum EVT + { + TRIGGER, + END + }; + class Event + { + public: + short int evt; + short int delay; + }; + + // data is a buffer that will be bound to the sequencer, although it is "owned" + // by the caller + TriggerSequencer(const Event * data) : curEvent(data), trigger(false), delay(0) + { + reset(data); + } + + // send one clock to the seq + void clock(); + + // reset by concatenating new data to seq + // note that reset may generate a trigger + void reset(const Event * data) + { + //printf("reset: initial delay = %d\n", delay); + curEvent = data; + delay += data->delay; // should this be += delay?? + //printf("after reset: delay = %d\n", delay); + processClocks(); + } + + bool getTrigger() const + { + return trigger; + } // get trigger state after last clock + bool getEnd() const + { + return curEvent == 0; + } // did sequencer end after last clock? + + + // checks that a sequence is valid + static bool isValid(const Event * data); +private: + const Event * curEvent; + bool trigger; + short delay; + + void processClocks(); +}; + +inline void TriggerSequencer::clock() +{ + --delay; + processClocks(); +} + +inline void TriggerSequencer::processClocks() +{ + trigger = false; + //printf("enter proc clock, curevt =%p, delay = %d\n", curEvent, delay); + if (!curEvent) { + //printf("leave clock early - ended\n"); + return; // seq is stopped + } + + + while (delay < 0) { + //printf("delay went to %d, evt=%d\n", delay, curEvent->evt); + switch (curEvent->evt) { + case END: + //printf("setting end at 58\n"); + curEvent = 0; // stop seq by clering ptr + return; + case TRIGGER: + trigger = true; + ++curEvent; // and go to next one + //printf("trigger set true\n"); + break; + + default: + assert(false); + } + + delay += curEvent->delay; + } + + //printf("leave clock %d\n", delay); +}; + + +inline bool TriggerSequencer::isValid(const Event * data) +{ + while (data->evt != END) { + assert(data->evt == TRIGGER); + assert(data->delay >= 0); + assert(data->delay < 2000); // just for now - we expect them to be small + ++data; + } + + return true; +} + + + +#endif diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.cpp b/plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.cpp new file mode 100644 index 00000000..9aa1701f --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.cpp @@ -0,0 +1,97 @@ +#include "FractionalDelay.h" + +#include + + +float FractionalDelay::getOutput() +{ +#ifdef _LOG + printf("\n"); +#endif + int delayTimeSamples = (int) delayTime; + const double x = delayTime - delayTimeSamples; + + const double y0 = getDelayedOutput(delayTimeSamples - 1); + const double y1 = getDelayedOutput(delayTimeSamples); + const double y2 = getDelayedOutput(delayTimeSamples + 1); + const double y3 = getDelayedOutput(delayTimeSamples + 2); +#ifdef _LOG + printf("dt=%.2f, dts=%d x=%.2f ", delayTime, delayTimeSamples, x); + printf("y0=%.2f y1=%.2f y2=%.2f y3=%.2f\n", y0, y1, y2, y3); +#endif + + const double x0 = -1.0; + const double x1 = 0.0; + const double x2 = 1.0; + const double x3 = 2.0; + assert(x >= x1); + assert(x <= x2); + + double dRet = -(1.0 / 6.0)*y0*(x - x1)*(x - x2)*(x - x3); + dRet += (1.0 / 2.0)* y1*(x - x0) * (x - x2) * (x - x3); + dRet += (-1.0 / 2.0)*y2*(x - x0) * (x - x1) * (x - x3); + dRet += (1.0 / 6.0) * y3*(x - x0) * (x - x1) * (x - x2); + +#if 0 + static int ct = 0; + if (++ct > 100) { + ct = 0; + char buf[500]; + sprintf(buf, "del = %f int=%d, rem=%f ret=%f\n", time, delayTimeSamples, x, dRet); + DebugUtil::trace(buf); + sprintf(buf, " y0=%f y1=%f y2=%f y3=%f\n", y0, y1, y2, y3); + DebugUtil::trace(buf); + + + } +#endif + + return float(dRet); + +} + +float FractionalDelay::getDelayedOutput(int delaySamples) +{ + int index = inputPointerIndex; + + index -= delaySamples; // indexes increase as time goes by, + // to the output (in the past), is at a lower index + if (index < 0) { + //int n = state.numSamples' + index += numSamples; + + assert(index >= 0 && index < numSamples); + } +#ifdef _LOG + printf("getting output from area of %d\n", index); +#endif + + return delayMemory[index]; + +} + +void FractionalDelay::setInput(float input) +{ + //printf("setting input at %d\n", inputPointerIndex); + delayMemory[inputPointerIndex++] = input; + if (inputPointerIndex >= numSamples) { + inputPointerIndex = 0; + } +} + + +/* +float run(float input) +{ +float ret = getOutput(); +setInput(input); +return ret; +} +*/ +float RecirculatingFractionalDelay::run(float input) +{ + float output = getOutput(); + input += (output * feedback); + setInput(input); + return output; +} diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.h new file mode 100644 index 00000000..03cfd3fe --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/delay/FractionalDelay.h @@ -0,0 +1,88 @@ +#pragma once + +#include +#include + +/** + * When ignoring wrap, inputIndex > outputIndex. + * so output "pull up the rear", reading the samples that were written + * delayTime samples ago. + */ +class FractionalDelay +{ +public: + FractionalDelay(int numSamples) : numSamples(numSamples), delayMemory( new float[numSamples]) + { + for (int i = 0; i < numSamples; ++i) { + delayMemory[i] = 0; + } + } + ~FractionalDelay() + { + delete delayMemory; + } + + void setDelay(float samples) + { + assert(samples < numSamples); + delayTime = samples; + } + float run(float input) + { + float ret = getOutput(); + setInput(input); + return ret; + } +protected: + + /** + * get the fractional delayed output, based in delayTime + */ + float getOutput(); + + /** + * send the next input to the delay line + */ + void setInput(float); +private: + /** + * get delay output with integer (non-fractional) delay time + */ + float getDelayedOutput(int delaySamples); + + double delayTime = 0; + int inputPointerIndex = 0; + + /** + * The size of the delay line, in samples + */ + const int numSamples; + + float* delayMemory; +}; + +class RecirculatingFractionalDelay : public FractionalDelay +{ +public: + RecirculatingFractionalDelay(int numSamples) : FractionalDelay(numSamples) + { + } +#if 0 + void setDelay(float samples) + { + delay.setDelay(samples); + } +#endif + void setFeedback(float in_feedback) + { + assert(feedback < 1); + assert(feedback > -1); + feedback = in_feedback; + } + + float run(float); +private: + // FractionalDelay delay; + float feedback = 0; +}; + diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.cpp b/plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.cpp new file mode 100644 index 00000000..d5cfd0f6 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.cpp @@ -0,0 +1,644 @@ + +#include "StochasticGrammar.h" +#include + +#if 0 +// eventually get rid of this global random generator +std::default_random_engine generator{57}; +std::uniform_real_distribution distribution{0, 1.0}; +float Random::get() +{ + return distribution(generator); +} +#endif + + +/*************************************************************************************************************** + * + * ProductionRuleKeys + * + ***************************************************************************************************************/ + +void ProductionRuleKeys::breakDown(GKEY key, GKEY * outKeys) +{ + switch (key) { + // terminal keys expand to themselves + case sg_w2: + case sg_w: + case sg_h: + case sg_q: + case sg_e: + case sg_e3: + case sg_sx: + case sg_68: + case sg_78: + case sg_98: + case sg_dq: + case sg_dh: + case sg_de: + //case sg_hdq: + //case sg_qhe: + *outKeys++ = key; + *outKeys++ = sg_invalid; + break; + case sg_798: + *outKeys++ = sg_78; + *outKeys++ = sg_98; + *outKeys++ = sg_invalid; + break; + case sg_ww: + *outKeys++ = sg_w; + *outKeys++ = sg_w; + *outKeys++ = sg_invalid; + break; + case sg_hh: + *outKeys++ = sg_h; + *outKeys++ = sg_h; + *outKeys++ = sg_invalid; + break; + case sg_qq: + *outKeys++ = sg_q; + *outKeys++ = sg_q; + *outKeys++ = sg_invalid; + break; + case sg_sxsx: + *outKeys++ = sg_sx; + *outKeys++ = sg_sx; + *outKeys++ = sg_invalid; + break; + case sg_ee: + *outKeys++ = sg_e; + *outKeys++ = sg_e; + *outKeys++ = sg_invalid; + break; + case sg_e3e3e3: + *outKeys++ = sg_e3; + *outKeys++ = sg_e3; + *outKeys++ = sg_e3; + *outKeys++ = sg_invalid; + break; + case sg_hdq: + *outKeys++ = sg_h; + *outKeys++ = sg_dq; + *outKeys++ = sg_invalid; + break; + case sg_hq: + *outKeys++ = sg_h; + *outKeys++ = sg_q; + *outKeys++ = sg_invalid; + break; + case sg_qh: + *outKeys++ = sg_q; + *outKeys++ = sg_h; + *outKeys++ = sg_invalid; + break; + + case sg_qhe: + *outKeys++ = sg_q; + *outKeys++ = sg_h; + *outKeys++ = sg_e; + *outKeys++ = sg_invalid; + break; + case sg_q78: + *outKeys++ = sg_q; + *outKeys++ = sg_78; + *outKeys++ = sg_invalid; + break; + case sg_qe68: + *outKeys++ = sg_q; + *outKeys++ = sg_e; + *outKeys++ = sg_68; + *outKeys++ = sg_invalid; + break; + default: + assert(false); + } +} + + +const char * ProductionRuleKeys::toString(GKEY key) +{ + const char * ret; + switch (key) { + case sg_w2: ret = "2xw"; break; + case sg_ww: ret = "w,w"; break; + case sg_w: ret = "w"; break; + case sg_h: ret = "h"; break; + case sg_hh: ret = "h,h"; break; + case sg_q: ret = "q"; break; + case sg_qq: ret = "q,q"; break; + case sg_e: ret = "e"; break; + case sg_ee: ret = "e,e"; break; + + case sg_e3e3e3: ret = "3e,3e,3e"; break; + case sg_e3: ret = "3e"; break; + + case sg_sx: ret = "sx"; break; + case sg_sxsx: ret = "sx, sx"; break; + case sg_68: ret = "<6/8>"; break; + case sg_78: ret = "<7/8>"; break; + case sg_98: ret = "<9/8>"; break; + case sg_798: ret = "7+9/8"; break; + + case sg_dq: ret = "q."; break; + case sg_dh: ret = "h."; break; + case sg_de: ret = "e."; break; + + case sg_hdq: ret = "h,q."; break; + case sg_qhe: ret = "q,h,e"; break; + case sg_qh: ret = "q,h"; break; + case sg_hq: ret = "h,q"; break; + case sg_q78: ret = "q,<7/8>"; break; + case sg_qe68: ret = "q,e,<6/8>"; break; + + + default: + printf("can't print key %d\n", key); + assert(false); + ret = "error"; + } + return ret; +} + +int ProductionRuleKeys::getDuration(GKEY key) +{ + int ret; + + assert((PPQ % 3) == 0); + switch (key) { + case sg_798: + case sg_w2: ret = 2 * 4 * PPQ; break; + case sg_ww: ret = 2 * 4 * PPQ; break; + case sg_w: ret = 4 * PPQ; break; + case sg_h: ret = 2 * PPQ; break; + case sg_hh: ret = 2 * 2 * PPQ; break; + case sg_q: ret = 1 * PPQ; break; + case sg_qq: ret = 2 * PPQ; break; + case sg_e: + assert((PPQ % 2) == 0); + ret = PPQ / 2; + break; + case sg_ee: ret = PPQ; break; + case sg_sxsx: ret = PPQ / 2; break; + case sg_sx: + assert((PPQ % 4) == 0); + ret = PPQ / 4; + break; + case sg_e3e3e3: ret = PPQ; break; + case sg_e3: + assert(PPQ % 3 == 0); + ret = PPQ / 3; + break; + case sg_68: ret = 6 * (PPQ / 2); break; + case sg_78: ret = 7 * (PPQ / 2); break; + + case sg_q78: + case sg_qe68: + case sg_98: + ret = 9 * (PPQ / 2); break; + + case sg_dq: ret = 3 * PPQ / 2; break; + case sg_dh: ret = 3 * PPQ; break; + case sg_de: ret = 3 * PPQ / 4; break; + + case sg_hdq: ret = 2 * PPQ + 3 * PPQ / 2; break; + case sg_qhe: ret = PPQ * 3 + PPQ / 2; break; + + + + case sg_hq: + case sg_qh: ret = PPQ * 3; break; + + + default: +#ifdef _MSC_VER + printf("can't get dur key %d\n", key); +#endif + assert(false); + ret = 0; + } + return ret; + +} + + +/*************************************************************************************************************** +* +* ProductionRule +* +***************************************************************************************************************/ + + +// generate production, return code for what happened +int ProductionRule::_evaluateRule(const ProductionRule& rule, float random) +{ + assert(random >= 0 && random <= 1); + + int i = 0; + for (bool done2 = false; !done2; ++i) { + assert(i < numEntries); + //printf("prob[%d] is %d\n", i, rule.entries[i].probability); + if (rule.entries[i].probability >= random) { + GKEY code = rule.entries[i].code; + //printf("rule fired on code abs val=%d\n", code); + return code; + } + } + assert(false); // no rule fired + return 0; +} + +void ProductionRule::evaluate(EvaluationState& es, int ruleToEval) +{ + //printf("\n evaluate called on rule #%d\n", ruleToEval); + const ProductionRule& rule = es.rules[ruleToEval]; + +#ifdef _MSC_VER + assert(rule._isValid(ruleToEval)); +#endif + GKEY result = _evaluateRule(rule, es.r()); + if (result == sg_invalid) // request to terminate recursion + { + GKEY code = ruleToEval; // our "real" terminal code is our table index + //printf("production rule #%d terminated\n", ruleToEval); + //printf("rule terminated! execute code %s\n", ProductionRuleKeys::toString(code)); + es.writeSymbol(code); + } else { + //printf("production rule #%d expanded to %d\n", ruleToEval, result); + + // need to expand,then eval all of the expanded codes + + GKEY buffer[ProductionRuleKeys::bufferSize]; + ProductionRuleKeys::breakDown(result, buffer); + for (GKEY * p = buffer; *p != sg_invalid; ++p) { + //printf("expanding rule #%d with %d\n", ruleToEval, *p); + evaluate(es, *p); + } + //printf("done expanding %d\n", ruleToEval); + } +} + +// is the data self consistent, and appropriate for index +#if defined(_MSC_VER) && defined(_DEBUG) +bool ProductionRule::_isValid(int index) const +{ + if (index == sg_invalid) { + printf("rule not allowed in first slot\n"); + return false; + } + + + if (entries[0] == ProductionRuleEntry()) { + printf("rule at index %d is ininitizlied. bad graph (%s)\n", + index, + ProductionRuleKeys::toString(index)); + return false; + } + + float last = -1; + bool foundTerminator = false; + for (int i = 0; !foundTerminator; ++i) { + if (i >= numEntries) { + printf("entries not terminated index=%d 'i' is too big: %d\n", index, i); + return false; + } + const ProductionRuleEntry& e = entries[i]; + if (e.probability > 1.0f) { + printf("probability %f > 1 \n", e.probability); + return false; + } + if (e.probability == 0.f) { + printf("zero probability in rule\n"); + return false; + } + if (e.probability <= last) // probabilities grow + { + printf("probability not growing is %f was %f\n", e.probability, last); + return false; + } + if (e.probability == 1.0f) { + foundTerminator = true; // must have a 255 to end it + if (e.code == index) { + printf("rule terminates on self: recursion not allowed\n"); + return false; + } + } + + if (e.code < sg_invalid || e.code > sg_last) { + printf("rule[%d] entry[%d] had invalid code: %d\n", index, i, e.code); + return false; + } + + // if we are terminating recursion, then by definition our duration is correct + if (e.code != sg_invalid) { + // otherwise, make sure the entry has the right duration + int entryDuration = ProductionRuleKeys::getDuration(e.code); + int ruleDuration = ProductionRuleKeys::getDuration(index); + if (entryDuration != ruleDuration) { + printf("production rule[%d] (name %s) duration mismatch (time not conserved) rule dur = %d entry dur %d\n", + index, ProductionRuleKeys::toString(index), ruleDuration, entryDuration); + return false; + } + } + last = e.probability; + } + return true; +} +#endif + +#ifdef _DEBUG +bool ProductionRule::isGrammarValid(const ProductionRule * rules, int numRules, GKEY firstRule) +{ + //printf("is grammar valid, numRules = %d first = %d\n", numRules, firstRule); + if (firstRule < sg_first) { + printf("first rule index (%d) bad\n", firstRule); + return false; + } + if (numRules != (sg_last + 1)) { + printf("bad number of rules\n"); + return false; + } + + const ProductionRule& r = rules[firstRule]; + + if (!r._isValid(firstRule)) { + return false; + } + + // now, make sure every entry goes to something real + bool foundTerminator = false; + for (int i = 0; !foundTerminator; ++i) { + const ProductionRuleEntry& e = r.entries[i]; + if (e.probability == 1.0f) + foundTerminator = true; // must have a 255 to end it + GKEY _newKey = e.code; + if (_newKey != sg_invalid) { + GKEY outKeys[4]; + ProductionRuleKeys::breakDown(_newKey, outKeys); + for (GKEY * p = outKeys; *p != sg_invalid; ++p) { + if (!isGrammarValid(rules, numRules, *p)) { + printf("followed rules to bad one\n"); + return false; + } + } + } + } + + return true; +} +#endif + + + +/* + +StochasticGrammarDictionary + +maybe move this to a test file? +**/ + +static ProductionRule _rules0[fullRuleTableSize]; +static ProductionRule _rules1[fullRuleTableSize]; +static ProductionRule _rules2[fullRuleTableSize]; +static ProductionRule _rules3[fullRuleTableSize]; + +bool StochasticGrammarDictionary::_didInitRules = false; + +void StochasticGrammarDictionary::initRules() +{ + initRule0(_rules0); + initRule1(_rules1); + initRule2(_rules2); + initRule3(_rules3); +} + + + + +// super dumb one - makes quarter notes +void StochasticGrammarDictionary::initRule0(ProductionRule * rules) +{ + // break w2 into w,w prob 100 + { + ProductionRule& r = rules[sg_w2]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_ww; + } + + // break w into h, h + { + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_hh; + } + + // break h into q,q + { + ProductionRule&r = rules[sg_h]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_qq; + } + // stop on q + rules[sg_q].makeTerminal(); + +} + +void StochasticGrammarDictionary::initRule1(ProductionRule * rules) +{ + + // break w2 into w,w prob 100 + { + ProductionRule& r = rules[sg_w2]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_ww; + } + + // break w into h, h + { + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_hh; + } + + // break h into q,q, or h + { + ProductionRule&r = rules[sg_h]; + r.entries[0].probability = .75f; + r.entries[0].code = sg_qq; + + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; + } + + // stop on q, or make e + { + + ProductionRule&r = rules[sg_q]; + r.entries[0].probability = .3f; + r.entries[0].code = sg_ee; + + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; + } + + // stop on e, or make sx + { + + ProductionRule&r = rules[sg_e]; + r.entries[0].probability = .3f; + r.entries[0].code = sg_sxsx; + + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; + } + + rules[sg_sx].makeTerminal(); +} + +void StochasticGrammarDictionary::initRule2(ProductionRule * rules) +{ + // break w2 into 7+9/8 prob 100 + { + ProductionRule& r = rules[sg_w2]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_798; + } + + // 9/8 -> different combos + { + ProductionRule& r = rules[sg_98]; + r.entries[0].probability = .5f; + r.entries[0].code = sg_q78; + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_qe68; + } + + // 6/8 -> + { + ProductionRule& r = rules[sg_68]; + r.entries[0].probability = .5f; + r.entries[0].code = sg_hq; + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_qh; + } + + + //78 -> different combos + { + ProductionRule& r = rules[sg_78]; + r.entries[0].probability = .5f; + r.entries[0].code = sg_qhe; + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_hdq; + } + + + + // terminate on these + rules[sg_hdq].makeTerminal(); + rules[sg_qhe].makeTerminal(); + rules[sg_q].makeTerminal(); + rules[sg_dq].makeTerminal(); + rules[sg_h].makeTerminal(); + rules[sg_e].makeTerminal(); +} + +// 3 is like 1, but with some trips +void StochasticGrammarDictionary::initRule3(ProductionRule * rules) +{ + + // break w2 into w,w prob 100 + { + ProductionRule& r = rules[sg_w2]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_ww; + } + + // break w into h, h + { + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_hh; + } + + // break h into q,q, or h + { + ProductionRule&r = rules[sg_h]; + r.entries[0].probability = .75f; + r.entries[0].code = sg_qq; + + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; + } + + // stop on q, or make e, or make trips + { + + ProductionRule&r = rules[sg_q]; + r.entries[0].probability = .3f; + r.entries[0].code = sg_ee; + + r.entries[1].probability = .7f; + r.entries[1].code = sg_e3e3e3; + + r.entries[2].probability = 1.0f; + r.entries[2].code = sg_invalid; + } + + // expand trip 8ths + rules[sg_e3].makeTerminal(); + + + // stop on e, or make sx, + { + + ProductionRule&r = rules[sg_e]; + r.entries[0].probability = .3f; + r.entries[0].code = sg_sxsx; + + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; + } + + rules[sg_sx].makeTerminal(); +} + + +int StochasticGrammarDictionary::getNumGrammars() +{ + return 4; +} + +StochasticGrammarDictionary::Grammar StochasticGrammarDictionary::getGrammar(int index) +{ + if (!_didInitRules) + initRules(); + + assert(index >= 0 && index < getNumGrammars()); + + + Grammar ret; + ret.firstRule = sg_w2; + ret.numRules = fullRuleTableSize; + + switch (index) { + case 0: + ret.rules = _rules0; + break; + case 1: + ret.rules = _rules1; + break; + case 2: + ret.rules = _rules2; + break; + case 3: + ret.rules = _rules3; + break; + default: + assert(false); + } + return ret; +} + + + diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.h new file mode 100644 index 00000000..7572be74 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/grammar/StochasticGrammar.h @@ -0,0 +1,205 @@ + +#pragma once + +#include +#include +#include +#include "AudioMath.h" + +/*********************************************** + ********** rhythmic grouping codes ************* +************************************************/ + +typedef unsigned short GKEY; + +/* Rules for keys - super important! + * + * There are two kinds of keys: terminal keys and non-terminal + * + * Terminal keys either directly generate themselves, or may be divided if there is a + * specific production rule to divide them. As an example, sg_q (quarter note) is a terminal key. + * It will always generate itself unless a production rule divides it. + * + * On the other hand sg_w2 is a non-terminal representing all the time in two bars of 4/4. + * sg_w2 will NEVER generate itself. Lacking a specific rule, it will auto generate two whole notes + * + * programmer must be aware of the difference in two places: + * when making production rules for a specific grammar + * when implementing ProductionRuleKeys::breakDown + */ + + +const GKEY sg_invalid = 0; // either uninitialized rule, or return value that stops recursion. + // Note that this means table of production rules must have a dummy entry up front +const GKEY sg_w2 = 1; // duration of two whole notes +const GKEY sg_w = 2; // whole +const GKEY sg_ww = 3; // w,w +const GKEY sg_h = 4; +const GKEY sg_hh = 5; +const GKEY sg_q = 6; +const GKEY sg_qq = 7; +const GKEY sg_e = 8; +const GKEY sg_ee = 9; + +// triplets +const GKEY sg_e3e3e3 = 10; // three trip eights +const GKEY sg_e3 = 11; // trip eight + +const GKEY sg_sx = 12; +const GKEY sg_sxsx = 13; + +// crazy stuff for syncopation (unequal measure divisions) +// Note that there are not "tuples", they are just straight durations +// of a group of notes. +const GKEY sg_68 = 14; // the time duration of 6/8 +const GKEY sg_78 = 15; // the time duration of 7/8 +const GKEY sg_98 = 16; // the time duration of 9/8 +const GKEY sg_798 = 17; // 7/8 + 9/8 = 2w + +// dotted notes +const GKEY sg_dq = 18; // dotted quarter +const GKEY sg_dh = 19; // dotted half +const GKEY sg_de = 20; // dotted eighth + +// odd groupings +const GKEY sg_hdq = 21; // half + dotted Q +const GKEY sg_qhe = 22; // q,h,e +const GKEY sg_hq = 23; // h,q +const GKEY sg_qh = 24; // h,q +const GKEY sg_q78 = 25; // q + 7x8 +const GKEY sg_qe68 = 26; // q+e+6x8 + +const GKEY sg_first = 1; // first valid one +const GKEY sg_last = 26; + +const int fullRuleTableSize = sg_last + 1; + +// Do we really want to use something this coarse? +const int PPQ = 24; + +/* class ProductionRuleKeys + * collection of utility functions around rule keys + */ +class ProductionRuleKeys +{ +public: + static const int bufferSize = 6; // size of a buffer that must be passed to breakDown + + /** + * Turn a key into a 0 terminated list of keys for individual notes. + * If called with a terminal key, just returns itself. + */ + static void breakDown(GKEY key, GKEY * outKeys); + + /** + * get the duration in clocks for a key + */ + static int getDuration(GKEY key); + + /** + * Get a human readable string representation + */ + static const char * toString(GKEY key); +}; + + +/* class ProductionRuleEntry + * A single entry in a production rule. + * if A -> B or A -> C, then each of these would be a separate rule entry + */ +class ProductionRuleEntry +{ +public: + ProductionRuleEntry() : probability(0), code(sg_invalid) + { + } + float probability; // 0 to 1 + GKEY code; // what to do if this one fires +}; + +inline bool operator == (const ProductionRuleEntry& a, const ProductionRuleEntry& b) +{ + return a.probability == b.probability && a.code == b.code; +} + +/* class ProductionRule + * A production rule encapsulates every way that a starting symbol + * can produce others. + * if A -> B or A -> C, then a single production rule could represent this + * + */ +class ProductionRule +{ +public: + static const int numEntries = 3; + class EvaluationState + { + public: + EvaluationState(AudioMath::RandomUniformFunc xr) : r(xr) + { + } + const ProductionRule * rules; + int numRules; + AudioMath::RandomUniformFunc r; //random number generator to use + virtual void writeSymbol(GKEY) + { + } + }; + + ProductionRule() + { + } + + void makeTerminal() + { + entries[0].code = sg_invalid; + entries[0].probability = 1.0f; + } + + /* the data */ + + // each possible production rule for this state + ProductionRuleEntry entries[numEntries]; + + static void evaluate(EvaluationState& es, int ruleToEval); +#ifdef _DEBUG + static bool isGrammarValid(const ProductionRule * rules, int numRules, GKEY firstRule); +#endif +private: + static int _evaluateRule(const ProductionRule& rule, float random); +#ifdef _DEBUG + bool _isValid(int index) const; +#endif +}; + + + +/* class StochasticGrammarDictionary + * + * just a collection of pre-made grammars + * + * 0: simple test + * 1: mixed duration, with some trips + * 2: some syncopation, no trips + */ +class StochasticGrammarDictionary +{ +public: + class Grammar + { + public: + const ProductionRule * rules; + int numRules; + GKEY firstRule; + }; + static Grammar getGrammar(int index); + static int getNumGrammars(); +private: + static bool _didInitRules; + static void initRules(); + static void initRule0(ProductionRule * rules); + static void initRule1(ProductionRule * rules); + static void initRule2(ProductionRule * rules); + static void initRule3(ProductionRule * rules); +}; + diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/Constants.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/Constants.h index 917f436c..e25ee3c8 100644 --- a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/Constants.h +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/Constants.h @@ -10,3 +10,10 @@ const float cGateLow = .8f; */ const float cGateHi = 1.6f; +const float cGateOutHi = 10.0f; + +const float cGateOutLow = 0.0f; + +const int TRIGGER_OUT_TIME_MS = 5; + + diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/GateTrigger.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/GateTrigger.h index 74e19e7f..6de5ec16 100644 --- a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/GateTrigger.h +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/GateTrigger.h @@ -4,16 +4,27 @@ #include +/** + * Gate trigger if for processing gate and trigger inputs. + * Features: + * SchmidtTrigger on the input, to condition it. + * Level sensor, for gate inputs. + * Edge detector, for trigger inputs. + */ class GateTrigger { public: - GateTrigger() : + GateTrigger(bool wantResetLogic) : _gate(false), _trigger(false), - _reset(true) + _reset(wantResetLogic) { } + /** + * Clock in one input sample. Afterwards may query + * gate() and trigger() + */ void go(float v) { const bool newGate = _sc.go(v); diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/ManagedPool.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/ManagedPool.h index 339ab7cc..fca5d02f 100644 --- a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/ManagedPool.h +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/ManagedPool.h @@ -6,7 +6,7 @@ #include "RingBuffer.h" /** - * A very specialized container. Made for holding one free + * A very specialized container. Made for holding one free * work buffers, and making sure they are destroyed. * * At construction time, objects are created to fill the pool. @@ -17,7 +17,7 @@ * * Note that unlike RingBuffer, ManagePool manages T*, not T. * - * All public functions are no-blocking, so may be called from the audio thread + * All public functions are no-blocking, so may be called from the audio thread * without danger. Of course the constructor and destructor are exceptions - they may block. */ template @@ -38,7 +38,7 @@ private: * this ring buffer is where the raw T* are kept. * client pops and pushes here */ - RingBuffer ringBuffer; + SqRingBuffer ringBuffer; std::vector< std::unique_ptr> lifetimeManager; }; diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/RingBuffer.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/RingBuffer.h index 120250c6..95f16799 100644 --- a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/RingBuffer.h +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/RingBuffer.h @@ -10,10 +10,10 @@ * Objects in RingBuffer are not owned by RingBuffer - they will not be destroyed. */ template -class RingBuffer +class SqRingBuffer { public: - RingBuffer() + SqRingBuffer() { for (int i = 0; i < SIZE; ++i) { memory[i] = 0; @@ -38,7 +38,7 @@ private: }; template -inline void RingBuffer::push(T value) +inline void SqRingBuffer::push(T value) { assert(!full()); memory[inIndex] = value; @@ -48,7 +48,7 @@ inline void RingBuffer::push(T value) template -inline T RingBuffer::pop() +inline T SqRingBuffer::pop() { assert(!empty()); T value = memory[outIndex]; @@ -58,19 +58,19 @@ inline T RingBuffer::pop() } template -inline bool RingBuffer::full() const +inline bool SqRingBuffer::full() const { return (inIndex == outIndex) && couldBeFull; } template -inline bool RingBuffer::empty() const +inline bool SqRingBuffer::empty() const { return (inIndex == outIndex) && !couldBeFull; } template -inline void RingBuffer::advance(int &p) +inline void SqRingBuffer::advance(int &p) { if (++p >= SIZE) p = 0; } diff --git a/plugins/community/repos/squinkylabs-plug1/sqsrc/util/TriggerOutput.h b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/TriggerOutput.h new file mode 100644 index 00000000..15ff624a --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/sqsrc/util/TriggerOutput.h @@ -0,0 +1,39 @@ +#pragma once + +#include "GateTrigger.h" + +/** + * Output processing for triggers. + * Outputs a finite duration trigger when gate changes. + */ +class TriggerOutput +{ +public: + TriggerOutput() : + _gateProcessor(false), // defeat reset logic that we don't want + _counter(0), + _duration(TRIGGER_OUT_TIME_MS * 44100 / 1000) // TODO: make this better + { + } + void go(bool gate) + { + if (_counter) { + --_counter; + return; + } + _gateProcessor.go(gate ? cGateOutHi : cGateOutLow); + if (_gateProcessor.trigger()) { + _counter = _duration; + } + + } + float get() const + { + return (_counter > 0) ? cGateOutHi : cGateOutLow; // TODO: 0..10 for gates/trig/clock? + } +private: + GateTrigger _gateProcessor; + int _counter; + const int _duration; +}; + diff --git a/plugins/community/repos/squinkylabs-plug1/src/BlankModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/BlankModule.cpp new file mode 100644 index 00000000..a2152183 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/BlankModule.cpp @@ -0,0 +1,96 @@ + +#include +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#include "Blank.h" + + +/** + */ +struct BlankModule : Module +{ +public: + BlankModule(); + /** + * + * Overrides of Module functions + */ + void step() override; + void onSampleRateChange() override; + + Blank blank; +private: + +}; + +void BlankModule::onSampleRateChange() +{ +} + +BlankModule::BlankModule() + : Module(blank.NUM_PARAMS, + blank.NUM_INPUTS, + blank.NUM_OUTPUTS, + blank.NUM_LIGHTS), + blank(this) +{ + onSampleRateChange(); + blank.init(); +} + +void BlankModule::step() +{ + blank.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct BlankWidget : ModuleWidget +{ + BlankWidget(BlankModule *); + + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } +}; + + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +BlankWidget::BlankWidget(BlankModule *module) : ModuleWidget(module) +{ + box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/blank_panel.svg"))); + addChild(panel); + } + + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, Blank) { + Model *modelBlankModule = Model::create("Squinky Labs", + "squinkylabs-blank", + "-- Blank --", RANDOM_TAG); + return modelBlankModule; +} diff --git a/plugins/community/repos/squinkylabs-plug1/src/BootyModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/BootyModule.cpp index 6e0b1891..fbc7e716 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/BootyModule.cpp +++ b/plugins/community/repos/squinkylabs-plug1/src/BootyModule.cpp @@ -213,7 +213,7 @@ BootyWidget::BootyWidget(BootyModule *module) : ModuleWidget(module) RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, Booty) { Model *modelBootyModule = Model::create("Squinky Labs", "squinkylabs-freqshifter", - "Booty Frequency Shifter", EFFECT_TAG, RING_MODULATOR_TAG); + "Booty Shifter: Frequency Shifter", EFFECT_TAG, RING_MODULATOR_TAG); return modelBootyModule; } diff --git a/plugins/community/repos/squinkylabs-plug1/src/CHBModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/CHBModule.cpp new file mode 100644 index 00000000..1b13de2b --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/CHBModule.cpp @@ -0,0 +1,391 @@ + + + +#include "Squinky.hpp" +#include "SQWidgets.h" +#include "WidgetComposite.h" + +#include + +#ifdef _CHB +#include "CHB.h" + +/** + */ +struct CHBModule : Module +{ +public: + CHBModule(); + /** + * + * + * Overrides of Module functions + */ + void step() override; + + CHB chb; +private: +}; + +CHBModule::CHBModule() + : Module(chb.NUM_PARAMS, + chb.NUM_INPUTS, + chb.NUM_OUTPUTS, + chb.NUM_LIGHTS), + chb(this) +{ +} + +void CHBModule::step() +{ + chb.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct CHBWidget : ModuleWidget +{ + friend struct CHBEconomyItem; + CHBWidget(CHBModule *); + + /** + * Helper to add a text label to this widget + */ + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + + void addHarmonics(CHBModule *module); + void addVCOKnobs(CHBModule *module); + void addOtherKnobs(CHBModule *module); + void addMisc(CHBModule *module); + void addBottomJacks(CHBModule *module); + void resetMe(CHBModule *module); +private: + bool fake; + const float defaultGainParam = .63; + + const int numHarmonics; + CHBModule* const module; + std::vector harmonicParams; + std::vector harmonicParamMemory; + ParamWidget* gainParam=nullptr; +}; + +/** + * Global coordinate contstants + */ +const float colHarmonicsJacks = 21; +const float rowFirstHarmonicJackY = 47; +const float harmonicJackSpacing = 32; +const float harmonicTrimDeltax = 27.5; + +// columns of knobs +const float col1 = 95; +const float col2 = 150; +const float col3 = 214; + +// rows of knobs +const float row1 = 75; +const float row2 = 131; +const float row3 = 228; +const float row4 = 287; +const float row5 = 332; + +const float labelAboveKnob = 33; +const float labelAboveJack = 30; + +inline void CHBWidget::addHarmonics(CHBModule *module) +{ + for (int i = 0; i < numHarmonics; ++i) { + const float row = rowFirstHarmonicJackY + i * harmonicJackSpacing; + addInput(createInputCentered( + Vec(colHarmonicsJacks, row), + module, + module->chb.H0_INPUT + i)); + + const float defaultValue = (i == 0) ? 1 : 0; + auto p = createParamCentered( + Vec(colHarmonicsJacks + harmonicTrimDeltax, row), + module, + module->chb.PARAM_H0 + i, + 0.0f, 1.0f, defaultValue); + addParam(p); + harmonicParams.push_back(p); + } +} + +inline void CHBWidget::addVCOKnobs(CHBModule *module) +{ + addParam(createParamCentered( + Vec(col2, row1), + module, + module->chb.PARAM_OCTAVE, + -5.0f, 4.0f, 0.f)); + addLabel(Vec(col2 - 27, row1 - labelAboveKnob), "Octave"); + + addParam(createParamCentered( + Vec(col3, row1), + module, + module->chb.PARAM_TUNE, + -7.0f, 7.0f, 0)); + addLabel(Vec(col3 - 22, row1 - labelAboveKnob), "Tune"); + + addParam(createParamCentered( + Vec(col2, row2), + module, + module->chb.PARAM_PITCH_MOD_TRIM, + 0, 1.0f, 0.0f)); + addLabel(Vec(col2 - 20, row2 - labelAboveKnob), "Mod"); + + addParam(createParamCentered( + Vec(col3, row2), + module, + module->chb.PARAM_LINEAR_FM_TRIM, + 0, 1.0f, 0.0f)); + addLabel(Vec(col3 - 18, row2 - labelAboveKnob), "LFM"); +} + +inline void CHBWidget::addOtherKnobs(CHBModule *module) +{ + // gain + + gainParam = createParamCentered( + Vec(col1, row2), + module, + module->chb.PARAM_EXTGAIN, + -5.0f, 5.0f, defaultGainParam); + addParam(gainParam); + + addLabel(Vec(col1 - 22, row2 - labelAboveKnob), "Gain"); + + addParam(createParamCentered( + Vec(col1, row2+30), + module, + module->chb.PARAM_EXTGAIN_TRIM, + 0, 1, 0)); + + + // slope + addParam(createParamCentered( + Vec(185, 188), + module, + module->chb.PARAM_SLOPE, + -5, 5, 5)); + addLabel(Vec(185 - 23, 188 - labelAboveKnob), "Slope"); + + //even + addParam(createParamCentered( + Vec(col2, row3), + module, + module->chb.PARAM_MAG_EVEN, + 0, 1, 1)); + addLabel(Vec(col2 - 21.5, row3 - labelAboveKnob), "Even"); + + //odd + addParam(createParamCentered( + Vec(col3, row3), + module, + module->chb.PARAM_MAG_ODD, + 0, 1, 1)); + addLabel(Vec(col3 - 20, row3 - labelAboveKnob), "Odd"); +} + +void CHBWidget::addMisc(CHBModule *module) +{ + auto sw = new SQPush(); + Vec pos(col1, row1); + sw->center(pos); + sw->onClick([this, module]() { + this->resetMe(module); + }); + + addChild(sw); + addLabel(Vec(col1 - 25, row1 - labelAboveKnob), "Preset"); + + const float switchY = 219; + addParam(createParamCentered( + Vec(col1, switchY), + module, + module->chb.PARAM_FOLD, + 0.0f, 1.0f, 0.0f)); + auto l = addLabel(Vec(col1 - 18, 219 - 30), "Fold"); + l->fontSize = 11; + l = addLabel(Vec(col1 - 17, 219 + 10), "Clip"); + l->fontSize = 11; + + // Vec(col1, 165), + addChild(createLightCentered>( + Vec(col1-16, switchY), + module, + module->chb.GAIN_GREEN_LIGHT)); +} + +static const char* labels[] = { + "V/Oct", + "Mod", + "LFM", + "Slope", + "Ext In", + "Gain", + "EG", + "Out", +}; +static const int offsets[] = { + -1, + 1, + 2, + -1, + -1, + 1, + 5, + 2 +}; + +static const int ids[] = { + CHB::CV_INPUT, + CHB::PITCH_MOD_INPUT, + CHB::LINEAR_FM_INPUT, + CHB::SLOPE_INPUT, + CHB::AUDIO_INPUT, + CHB::GAIN_INPUT, + CHB::ENV_INPUT, + CHB::MIX_OUTPUT +}; + +void CHBWidget::addBottomJacks(CHBModule *module) +{ + const int deltaX = .5f + ((col3 - col1) / 3.0); + for (int jackRow = 0; jackRow < 2; ++jackRow) { + for (int jackCol = 0; jackCol < 4; ++jackCol) { + const Vec pos(col1 + deltaX * jackCol, + jackRow == 0 ? row4 : row5); + const int index = jackCol + 4 * jackRow; + + auto color = COLOR_BLACK; + if (index == 7) { + color = COLOR_WHITE; + } + + const int id = ids[index]; + if (index == 7) { + addOutput(createOutputCentered( + pos, + module, + id)); + } else { + addInput(createInputCentered( + pos, + module, + id)); + } + auto l = addLabel(Vec(pos.x - 20 + offsets[index], pos.y - labelAboveJack), + labels[index], + color); + l->fontSize = 11; + // printf("def font size %f\n", l->fontSize); + } + } +} + +void CHBWidget::resetMe(CHBModule *module) +{ + bool isOnlyFundamental = true; + bool isAll = true; + bool havePreset = !harmonicParamMemory.empty(); + const float val0 = harmonicParams[0]->value; + if (val0 < .99) { + isOnlyFundamental = false; + isAll = false; + } + + for (int i = 1; i < numHarmonics; ++i) { + const float value = harmonicParams[i]->value; + if (value < .9) { + isAll = false; + } + + if (value > .1) { + isOnlyFundamental = false; + } + } + + if (!isOnlyFundamental && !isAll) { + // take snapshot + if (harmonicParamMemory.empty()) { + harmonicParamMemory.resize(numHarmonics); + } + for (int i = 0; i < numHarmonics; ++i) { + harmonicParamMemory[i] = harmonicParams[i]->value; + } + } + + // fundamental -> all + if (isOnlyFundamental) { + for (int i = 0; i < numHarmonics; ++i) { + harmonicParams[i]->setValue(1); + } + } + // all -> preset, if any + else if (isAll && havePreset) { + for (int i = 0; i < numHarmonics; ++i) { + harmonicParams[i]->setValue(harmonicParamMemory[i]); + } + } + // preset -> fund. if no preset all -> fund + else { + for (int i = 0; i < numHarmonics; ++i) { + harmonicParams[i]->setValue((i == 0) ? 1 : 0); + } + } + + gainParam->setValue(defaultGainParam); +} + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +CHBWidget::CHBWidget(CHBModule *module) : + ModuleWidget(module), + numHarmonics(module->chb.numHarmonics), + module(module) +{ + box.size = Vec(16 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/chb_panel.svg"))); + addChild(panel); + } + + addHarmonics(module); + addVCOKnobs(module); + addOtherKnobs(module); + addMisc(module); + addBottomJacks(module); + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, CHB) { + Model *modelCHBModule = Model::create("Squinky Labs", + "squinkylabs-CHB", + "Chebyshev: Waveshaper VCO", EFFECT_TAG, OSCILLATOR_TAG, WAVESHAPER_TAG); + return modelCHBModule; +} +#endif diff --git a/plugins/community/repos/squinkylabs-plug1/src/CPU_Hog.cpp b/plugins/community/repos/squinkylabs-plug1/src/CPU_Hog.cpp index ee529ed2..6643dcce 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/CPU_Hog.cpp +++ b/plugins/community/repos/squinkylabs-plug1/src/CPU_Hog.cpp @@ -31,7 +31,7 @@ struct CPU_HogModule : Module */ void step() override; - int stepsWhileDrawing=0; + int stepsWhileDrawing = 0; private: typedef float T; std::vector< std::shared_ptr > threads; @@ -40,29 +40,30 @@ private: class PServer : public ThreadServer { public: - PServer(std::shared_ptr state) - : ThreadServer(state) + PServer(std::shared_ptr state) + : ThreadServer(state) { } - virtual void threadFunction () override; + virtual void threadFunction() override; - ~PServer() { + ~PServer() + { } private: bool didRun = false; double dummy = 0; }; - void PServer::threadFunction() - { +void PServer::threadFunction() +{ sharedState->serverRunning = true; for (bool done = false; !done; ) { if (sharedState->serverStopRequested.load()) { done = true; } else { // now kill a lot of time - for (int i=0; i< 10000; ++i) { + for (int i = 0; i < 10000; ++i) { dummy += std::log(rand()) * std::sin(rand()); } @@ -71,19 +72,19 @@ private: thread->detach(); sharedState->serverRunning = false; - } +} -CPU_HogModule::CPU_HogModule() : Module(0,0,0,0) +CPU_HogModule::CPU_HogModule() : Module(0, 0, 0, 0) { - for (int i=0; i state = std::make_shared(); std::unique_ptr server(new PServer(state)); - threads.push_back( + threads.push_back( std::make_shared( - state, - std::move(server))); + state, + std::move(server))); } - + // TODO: can we assume onSampleRateChange() gets called first, so this is unnecessary? onSampleRateChange(); } @@ -114,7 +115,7 @@ struct CPU_HogWidget : ModuleWidget std::stringstream s; s << pMod->stepsWhileDrawing; steps->text = s.str(); - + ModuleWidget::draw(vg); if (drawMillisecondSleep) { drawIsSleeping = true; @@ -141,13 +142,13 @@ CPU_HogWidget::CPU_HogWidget(CPU_HogModule *module) : ModuleWidget(module) addChild(panel); } - Label* label=new Label(); + Label* label = new Label(); label->box.pos = Vec(10, 140); label->text = "SleepSteps"; label->color = COLOR_BLACK; addChild(label); - steps=new Label(); + steps = new Label(); steps->box.pos = Vec(10, 180); steps->text = ""; steps->color = COLOR_BLACK; diff --git a/plugins/community/repos/squinkylabs-plug1/src/ColoredNoiseModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/ColoredNoiseModule.cpp index dd461583..7867e5ca 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/ColoredNoiseModule.cpp +++ b/plugins/community/repos/squinkylabs-plug1/src/ColoredNoiseModule.cpp @@ -244,6 +244,3 @@ RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, ColoredNoise) { "Colored Noise", NOISE_TAG); return modelColoredNoiseModule; } - - - diff --git a/plugins/community/repos/squinkylabs-plug1/src/DGModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/DGModule.cpp new file mode 100644 index 00000000..af81b26b --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/DGModule.cpp @@ -0,0 +1,143 @@ + +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#ifdef _DG +#include "daveguide.h" + +/** + */ +struct DGModule : Module +{ +public: + DGModule(); + /** + * + * + * Overrides of Module functions + */ + void step() override; + + Daveguide dave; +private: +}; + +DGModule::DGModule() + : Module(dave.NUM_PARAMS, + dave.NUM_INPUTS, + dave.NUM_OUTPUTS, + dave.NUM_LIGHTS), + dave(this) +{ +} + +void DGModule::step() +{ + dave.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct DGWidget : ModuleWidget +{ + DGWidget(DGModule *); + + /** + * Helper to add a text label to this widget + */ + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + + +private: + DGModule* const module; +}; + + + + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +DGWidget::DGWidget(DGModule *module) : + ModuleWidget(module), + module(module) +{ + box.size = Vec(10 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/blank_panel.svg"))); + addChild(panel); + } + + addLabel(Vec(35, 20), "Daveguide"); + + addInput(createInputCentered( + Vec(40,340), + module, + Daveguide::AUDIO_INPUT)); + + addOutput(createOutputCentered( + Vec(120,340), + module, + Daveguide::AUDIO_OUTPUT)); + + + const float labelDeltaY = 25; + const float gainX = 40; + const float offsetX = 114; + const float labelDeltaX = -20; + const float y = 100; + const float y2 = y + 70; + + addParam(createParamCentered( + Vec(gainX, y), + module, Daveguide::OCTAVE_PARAM, -5, 5, 0)); + addLabel(Vec(gainX+labelDeltaX, y + labelDeltaY), "octave"); + + addParam(createParamCentered( + Vec(offsetX, y), + module, Daveguide::TUNE_PARAM, -5, 5, 0)); + addLabel(Vec(offsetX+labelDeltaX, y + labelDeltaY), "tune"); + + addParam(createParamCentered( + Vec(gainX, y2), + module, Daveguide::DECAY_PARAM, -5, 5, 0)); + addLabel(Vec(gainX+labelDeltaX, y2 + labelDeltaY), "decay"); + + addParam(createParamCentered( + Vec(offsetX, y2), + module, Daveguide::FC_PARAM, -5, 5, 0)); + addLabel(Vec(offsetX+labelDeltaX, y2 + labelDeltaY), "filter"); + + + + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, DG) { + Model *modelDGModule = Model::create("Squinky Labs", + "squinkylabs-dvg", + "dg", EFFECT_TAG, OSCILLATOR_TAG, WAVESHAPER_TAG); + return modelDGModule; +} +#endif + diff --git a/plugins/community/repos/squinkylabs-plug1/src/EV3Module.cpp b/plugins/community/repos/squinkylabs-plug1/src/EV3Module.cpp new file mode 100644 index 00000000..ec9a7074 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/EV3Module.cpp @@ -0,0 +1,421 @@ +#include "Squinky.hpp" +#include "WaveformSelector.h" +#include "SQWidgets.h" +#include "WidgetComposite.h" + +#ifdef _EV3 + +#include "EV3.h" +#include + +struct EV3Module : Module +{ + EV3Module(); + void step() override; + EV3 ev3; +}; + +EV3Module::EV3Module() + : Module(ev3.NUM_PARAMS, + ev3.NUM_INPUTS, + ev3.NUM_OUTPUTS, + ev3.NUM_LIGHTS), + ev3(this) +{ +} + +void EV3Module::step() +{ + ev3.step(); +} + +/************************************************************/ + +class PitchDisplay +{ +public: + PitchDisplay(EV3Module * mod) : module(mod) {} + void step(); + + /** + * Labels must be added in order + */ + void addOctLabel(Label*); + void addSemiLabel(Label*); + +private: + EV3Module * const module; + + std::vector octLabels; + std::vector semiLabels; + std::vector semiX; + int lastOctave[3] = {100, 100, 100}; + int lastSemi[3] = {100, 100, 100}; + void update(int); +}; + +void PitchDisplay::step() +{ + const int delta = EV3::OCTAVE2_PARAM - EV3::OCTAVE1_PARAM; + for (int i=0; i<3; ++i) { + const int octaveParam = EV3::OCTAVE1_PARAM + delta * i; + const int semiParam = EV3::SEMI1_PARAM + delta * i; + const int oct = module->params[octaveParam].value; + const int semi = module->params[semiParam].value; + if (semi != lastSemi[i] || oct != lastOctave[i]) { + lastSemi[i] = semi; + lastOctave[i] = oct; + update(i); + } + } +} + +static const char* names[] = { + "0", + "m2nd", + "2nd", + "m3rd", + "M3rd", + "4th", + "Dim5th", + "5th", + "m6th", + "M6th", + "m7th", + "M7th", + "oct" +}; + +static int offsets[] = { + 11, + 0, + 5, // 2nd + 0, + 0, + 4, // 4th + -2, + 3, // 5th + 0, + 0, + 0, + 2, + 2 // M7 +}; + +void PitchDisplay::addOctLabel(Label* l) +{ + octLabels.push_back(l); +} + +void PitchDisplay::addSemiLabel(Label* l) +{ + semiLabels.push_back(l); + semiX.push_back(l->box.pos.x); +} + +void PitchDisplay::update(int osc) { + std::stringstream so; + int oct = 5 + lastOctave[osc]; + int semi = lastSemi[osc]; + + if (semi < 0) { + --oct; + semi += 12; + } + so << oct; + + octLabels[osc]->text = so.str(); + semiLabels[osc]->text = names[semi]; + semiLabels[osc]->box.pos.x = semiX[osc] + offsets[semi]; +} + +struct EV3Widget : ModuleWidget +{ + EV3Widget(EV3Module *); + void makeSections(EV3Module *); + void makeSection(EV3Module *, int index); + void makeInputs(EV3Module *); + void makeInput(EV3Module* module, int row, int col, int input, + const char* name, float labelDeltaX); + void makeOutputs(EV3Module *); + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + + void step() override; + + PitchDisplay pitchDisplay; +}; + +void EV3Widget::step() +{ + ModuleWidget::step(); + pitchDisplay.step(); +} + +const int dy = -6; // apply to everything + +void EV3Widget::makeSection(EV3Module *module, int index) +{ + const float x = (30-4) + index * (86+4); + const float x2 = x + (36+2); + const float y = 80+dy; + const float y2 = y + 56+dy; + const float y3 = y2 + 40 + dy; + + const int delta = EV3::OCTAVE2_PARAM - EV3::OCTAVE1_PARAM; + + pitchDisplay.addOctLabel( + addLabel(Vec(x - 10, y - 32), "Oct")); + pitchDisplay.addSemiLabel( + addLabel(Vec(x2 - 22, y - 32), "Semi")); + + addParam(createParamCentered( + Vec(x, y), module, + EV3::OCTAVE1_PARAM + delta * index, + -5.0f, 4.0f, 0.f)); + + addParam(createParamCentered( + Vec(x2, y), module, + EV3::SEMI1_PARAM + delta * index, + -11.f, 11.0f, 0.f)); + + addParam(createParamCentered( + Vec(x, y2), module, + EV3::FINE1_PARAM + delta * index, + -1.0f, 1.0f, 0)); + addLabel(Vec(x - 20, y2 - 34), "Fine"); + + addParam(createParamCentered( + Vec(x2, y2), module, + EV3::FM1_PARAM + delta * index, + 0.f, 1.f, 0)); + addLabel(Vec(x2 - 20, y2 - 34), "Mod"); + + const float dy = 27; + const float x0 = x; + + addParam(createParamCentered( + Vec(x0, y3), module, EV3::PW1_PARAM + delta * index, + -1.f, 1.f, 0)); + if (index == 0) + addLabel(Vec(x0 + 10, y3 - 12), "pw"); + + addParam(createParamCentered( + Vec(x0, y3 + dy), module, + EV3::PWM1_PARAM + delta * index, + -1.0f, 1.0f, 0)); + if (index == 0) + addLabel(Vec(x0 + 10, y3 + dy - 12), "pwm"); + + // sync switches + const float swx = x + 29; + const float lbx = x + 19; + + if (index != 0) { + addParam(ParamWidget::create( + Vec(swx, y3), module, EV3::SYNC1_PARAM + delta * index, + 0.0f, 1.0f, 0.0f)); + addLabel(Vec(lbx-2, y3 - 20), "sync"); + addLabel(Vec(lbx+1, y3 + 20), "off"); + } + + const float y4 = y3 + 43; + const float xx = x - 12; + // include one extra wf - none + const float numWaves = (float) EV3::Waves::END; + const float defWave = (float) EV3::Waves::SIN; + addParam(ParamWidget::create( + Vec(xx, y4), + module, + EV3::WAVE1_PARAM + delta * index, + 0.0f, numWaves, defWave)); +} + +void EV3Widget::makeSections(EV3Module* module) +{ + makeSection(module, 0); + makeSection(module, 1); + makeSection(module, 2); +} + +const float row1Y = 280+dy-4; // -4 = move the last section up +const float rowDY = 30; +const float colDX = 45; + +void EV3Widget::makeInput(EV3Module* module, int row, int col, + int inputNum, const char* name, float labelXDelta) +{ + EV3::InputIds input = EV3::InputIds(inputNum); + const float y = row1Y + row * rowDY; + const float x = 14 + col * colDX; + const float labelX = labelXDelta + x - 6; + addInput(Port::create( + Vec(x, y), Port::INPUT, module, input)); + if (row == 0) + addLabel(Vec(labelX, y - 20), name); +} + +void EV3Widget::makeInputs(EV3Module* module) +{ +#ifdef _FLIPROWS + auto row2Input = [](int row, EV3::InputIds baseInput) { + // map inputs directly to rows + return baseInput + (2 - row); + }; +#else + // Row 0 = top row, 2 = bottom row + auto row2Input = [](int row, EV3::InputIds baseInput) { + // map inputs directly to rows + return baseInput + row; + }; +#endif + + for (int row = 0; row < 3; ++row) { + makeInput(module, row, 0, + row2Input(row, EV3::CV1_INPUT), + "V/oct", -3); + makeInput(module, row, 1, + row2Input(row, EV3::FM1_INPUT), + "Fm", 3); + makeInput(module, row, 2, + row2Input(row, EV3::PWM1_INPUT), + "Pwm", -2); + } +} + + +#ifdef _FLIPROWS +void EV3Widget::makeOutputs(EV3Module *) +{ + const float x = 160; + const float trimY = row1Y + 11; + const float outX = x + 30; + + + addParam(createParamCentered( + Vec(x, trimY), module, EV3::MIX3_PARAM, + 0.0f, 1.0f, 0)); + addParam(createParamCentered( + Vec(x, trimY + rowDY), module, EV3::MIX2_PARAM, + 0.0f, 1.0f, 0)); + addParam(createParamCentered( + Vec(x, trimY + 2 * rowDY), module, EV3::MIX1_PARAM, + 0.0f, 1.0f, 0)); + + addOutput(Port::create( + Vec(outX, row1Y), + Port::OUTPUT, module, EV3::VCO3_OUTPUT)); + addLabel(Vec(outX + 20, row1Y + 0 * rowDY+2), "3", COLOR_WHITE); + + addOutput(Port::create( + Vec(outX, row1Y + rowDY), + Port::OUTPUT, module, EV3::VCO2_OUTPUT)); + addLabel(Vec(outX + 20, row1Y + 1 * rowDY+2), "2", COLOR_WHITE); + + addOutput(Port::create( + Vec(outX, row1Y + 2 * rowDY), + Port::OUTPUT, module, EV3::VCO1_OUTPUT)); + addLabel(Vec(outX + 20, row1Y + 2 * rowDY+2), "1", COLOR_WHITE); + + addOutput(Port::create( + Vec(outX + 41, row1Y + rowDY), + Port::OUTPUT, module, EV3::MIX_OUTPUT)); + addLabel(Vec(outX + 41, row1Y + rowDY - 17), "+", COLOR_WHITE); + addLabel(Vec(outX + 41, row1Y + rowDY + 20), "+", COLOR_WHITE); + +} +#endif + + +#ifndef _FLIPROWS +void EV3Widget::makeOutputs(EV3Module *) +{ + const float x = 160; + const float trimY = row1Y + 11; + const float outX = x + 30; + + + addParam(createParamCentered( + Vec(x, trimY), module, EV3::MIX1_PARAM, + 0.0f, 1.0f, 0)); + addParam(createParamCentered( + Vec(x, trimY + rowDY), module, EV3::MIX2_PARAM, + 0.0f, 1.0f, 0)); + addParam(createParamCentered( + Vec(x, trimY + 2 * rowDY), module, EV3::MIX3_PARAM, + 0.0f, 1.0f, 0)); + + addOutput(Port::create( + Vec(outX, row1Y), + Port::OUTPUT, module, EV3::VCO1_OUTPUT)); + addLabel(Vec(outX + 20, row1Y + 0 * rowDY+2), "1", COLOR_WHITE); + + addOutput(Port::create( + Vec(outX, row1Y + rowDY), + Port::OUTPUT, module, EV3::VCO2_OUTPUT)); + addLabel(Vec(outX + 20, row1Y + 1 * rowDY+2), "2", COLOR_WHITE); + + addOutput(Port::create( + Vec(outX, row1Y + 2 * rowDY), + Port::OUTPUT, module, EV3::VCO3_OUTPUT)); + addLabel(Vec(outX + 20, row1Y + 2 * rowDY+2), "3", COLOR_WHITE); + + addOutput(Port::create( + Vec(outX + 41, row1Y + rowDY), + Port::OUTPUT, module, EV3::MIX_OUTPUT)); + addLabel(Vec(outX + 41, row1Y + rowDY - 17), "+", COLOR_WHITE); + addLabel(Vec(outX + 41, row1Y + rowDY + 20), "+", COLOR_WHITE); + +} +#endif + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +EV3Widget::EV3Widget(EV3Module *module) : + ModuleWidget(module), + pitchDisplay(module) +{ + box.size = Vec(18 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/ev3_panel.svg"))); + addChild(panel); + } + + // auto l = addLabel( Vec(110, 10), "EV3"); + // l->fontSize = 18; + + makeSections(module); + makeInputs(module); + makeOutputs(module); + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + +} + + + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, EV3) { + Model *modelEV3Module = Model::create("Squinky Labs", + "squinkylabs-ev3", + "EV3: Triple VCO with even waveform", OSCILLATOR_TAG); + return modelEV3Module; +} +#endif + diff --git a/plugins/community/repos/squinkylabs-plug1/src/EVModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/EVModule.cpp new file mode 100644 index 00000000..6410d199 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/EVModule.cpp @@ -0,0 +1,225 @@ + +#include +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#ifdef _EV + +#include "EvenVCO.h" + + +/** + */ +struct EVModule : Module +{ +public: + EVModule(); + /** + * + * Overrides of Module functions + */ + void step() override; + void onSampleRateChange() override; + + EvenVCO vco; +private: +}; + +void EVModule::onSampleRateChange() +{ + // TODO + // float rate = engineGetSampleRate(); + //vco.setSampleRate(rate); + printf("on sample rate change\n"); fflush(stdout); +} + +EVModule::EVModule() + : Module(vco.NUM_PARAMS, + vco.NUM_INPUTS, + vco.NUM_OUTPUTS, + vco.NUM_LIGHTS), + vco(this) +{ + onSampleRateChange(); + // vco.init(); + printf("ctor\n"); fflush(stdout); +} + +void EVModule::step() +{ + vco.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct EVWidget : ModuleWidget +{ + EVWidget(EVModule *); + + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + void draw(NVGcontext *vg) override; + + void addPWM(EVModule *, float verticalShift); + void addMiddle(EVModule *, float verticalShift); + void addOutputs(EVModule *, float verticalShift); + + Label* octaveLabel; + ParamWidget* octaveKnob; + int lastOctave = -100; +}; + + void EVWidget::draw(NVGcontext *vg) +{ + float value = octaveKnob->value; + int oct = roundf(value); + if (oct != lastOctave) { + const char * val="yy"; + switch(oct) { + case -5: + val = "32'"; + break; + case -4: + val = "16'"; + break; + case -3: + val = "8'"; + break; + case -2: + val = "4'"; + break; + case -1: + val = "2'"; + break; + case 0: + val = "1'"; + break; + case 1: + val = "1/2'"; + break; + case 2: + val = "1/4'"; + break; + case 3: + val = "1/8'"; + break; + case 4: + val = "1/16'"; + break; + } + + + + octaveLabel->text = val; + } + + ModuleWidget::draw(vg); +} + +void EVWidget::addPWM(EVModule * module, float verticalShift) +{ + addInput(Port::create(Vec(72, 236+verticalShift), + Port::INPUT, module, module->vco.PWM_INPUT)); + + addParam(ParamWidget::create(Vec(16, 212+verticalShift), + module, module->vco.PWM_PARAM, -1.0, 1.0, 0.0)); + + addLabel(Vec(30, 246+verticalShift), "pwm"); +} + +void EVWidget::addMiddle(EVModule * module, float verticalShift) +{ + addParam(ParamWidget::create(Vec(73, 125+verticalShift), + module, module->vco.TUNE_PARAM, -7.0, 7.0, 0.0)); + addLabel(Vec(69, 164 + verticalShift), "tune"); + + addInput(Port::create(Vec(10, 124+verticalShift), + Port::INPUT, module, module->vco.PITCH1_INPUT)); + + addInput(Port::create(Vec(34, 160+verticalShift), + Port::INPUT, module, module->vco.PITCH2_INPUT)); + addLabel(Vec(6, 164+verticalShift), "cv"); + addInput(Port::create(Vec(62, 194+verticalShift), + Port::INPUT, module, module->vco.FM_INPUT)); + addLabel(Vec(84, 200+verticalShift), "fm"); +// addInput(Port::create(Vec(86, 189), Port::INPUT, module, module->vco.SYNC_INPUT)); + + +} + +void EVWidget::addOutputs(EVModule * module, float verticalShift) +{ + const float penultimateRow = 273 + verticalShift; + const float penultimateLabelRow = penultimateRow + 24; + + addOutput(Port::create(Vec(10, penultimateRow), Port::OUTPUT, module, module->vco.TRI_OUTPUT)); + addLabel(Vec(8, penultimateLabelRow), "tri"); + + addOutput(Port::create(Vec(87, penultimateRow), Port::OUTPUT, module, module->vco.SINE_OUTPUT)); + addLabel(Vec(84, penultimateLabelRow), "sin"); + + const float bottomRow = 317 + verticalShift; // 320 -> 317 to make room? + const float bottomLabelRow = bottomRow + 24; + + addOutput(Port::create(Vec(48, bottomRow), Port::OUTPUT, module, module->vco.EVEN_OUTPUT)); + addLabel(Vec(38, bottomLabelRow), "even"); + addOutput(Port::create(Vec(10, bottomRow), Port::OUTPUT, module, module->vco.SAW_OUTPUT)); + addLabel(Vec(4, bottomLabelRow), "saw"); + addOutput(Port::create(Vec(87, bottomRow), Port::OUTPUT, module, module->vco.SQUARE_OUTPUT)); + addLabel(Vec(83, bottomLabelRow), "sqr"); +} + + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +EVWidget::EVWidget(EVModule *module) : ModuleWidget(module) +{ + box.size = Vec(8 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/blank_panel.svg"))); + addChild(panel); + } + + addPWM(module, -10); + addMiddle(module, -14); + addOutputs(module, -12); + + addChild(Widget::create(Vec(15, 0))); + addChild(Widget::create(Vec(15, 365))); + addChild(Widget::create(Vec(15 * 6, 0))); + addChild(Widget::create(Vec(15 * 6, 365))); + + octaveKnob = ParamWidget::create(Vec(34, 32), + module, module->vco.OCTAVE_PARAM, -5.0, 4.0, 0.0); + + addParam(octaveKnob); + addLabel(Vec(20, 88), "octave:"); + //label->fontSize = 16; + + octaveLabel = addLabel(Vec(70, 90), "xx"); + } + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, EV) { + Model *modelEVModule = Model::create("Squinky Labs", + "squinkylabs-evco", + "EvilVCO", OSCILLATOR_TAG); + return modelEVModule; +} + +#endif + diff --git a/plugins/community/repos/squinkylabs-plug1/src/FunVModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/FunVModule.cpp new file mode 100644 index 00000000..e2eb4dd1 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/FunVModule.cpp @@ -0,0 +1,179 @@ + +#include +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#if 1 +#include "FunVCOComposite.h" + +/** + */ +struct FunVModule : Module +{ +public: + FunVModule(); + /** + * + * Overrides of Module functions + */ + void step() override; + void onSampleRateChange() override; + + FunVCOComposite vco; +private: +}; + +void FunVModule::onSampleRateChange() +{ + float rate = engineGetSampleRate(); + vco.setSampleRate(rate); +} + +FunVModule::FunVModule() + : Module(vco.NUM_PARAMS, + vco.NUM_INPUTS, + vco.NUM_OUTPUTS, + vco.NUM_LIGHTS), + vco(this) +{ + onSampleRateChange(); +} + +void FunVModule::step() +{ + vco.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct FunVWidget : ModuleWidget +{ + FunVWidget(FunVModule *); + + void addTop3(FunVModule *, float verticalShift); + void addMiddle4(FunVModule *, float verticalShift); + void addJacks(FunVModule *, float verticalShift); + + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } +}; + +void FunVWidget::addTop3(FunVModule * module, float verticalShift) +{ + const float left = 8; + const float right = 112; + const float center = 49; + + addParam(ParamWidget::create(Vec(left, 66 + verticalShift), + module, module->vco.MODE_PARAM, 0.0f, 1.0f, 1.0f)); + addLabel(Vec(left -4, 48+ verticalShift), "anlg"); + addLabel(Vec(left -3, 108+ verticalShift), "dgtl"); + + addParam(ParamWidget::create(Vec(center, 61 + verticalShift), + module, module->vco.FREQ_PARAM, -54.0f, 54.0f, 0.0f)); + auto label = addLabel(Vec(center + 3, 40+ verticalShift), "pitch"); + label->fontSize = 16; + + addParam(ParamWidget::create(Vec(right, 66 + verticalShift), + module, module->vco.SYNC_PARAM, 0.0f, 1.0f, 1.0f)); + addLabel(Vec(right-5, 48+ verticalShift), "hard"); + addLabel(Vec(right-2, 108+ verticalShift), "soft"); +} + +void FunVWidget::addMiddle4(FunVModule * module, float verticalShift) +{ + addParam(ParamWidget::create(Vec(23, 143 + verticalShift), + module, module->vco.FINE_PARAM, -1.0f, 1.0f, 0.0f)); + addLabel(Vec(25, 124 +verticalShift), "fine"); + + addParam(ParamWidget::create(Vec(91, 143 + verticalShift), + module, module->vco.PW_PARAM, 0.0f, 1.0f, 0.5f)); + addLabel(Vec(84, 124 +verticalShift), "p width"); + + addParam(ParamWidget::create(Vec(23, 208 + verticalShift), + module, module->vco.FM_PARAM, 0.0f, 1.0f, 0.0f)); + addLabel(Vec(19, 188 +verticalShift), "fm cv"); + + addParam(ParamWidget::create(Vec(91, 208 + verticalShift), + module, module->vco.PWM_PARAM, 0.0f, 1.0f, 0.0f)); + addLabel(Vec(82, 188 +verticalShift), "pwm cv"); +} + +void FunVWidget::addJacks(FunVModule * module, float verticalShift) +{ + const float col1 = 12; + const float col2 = 46; + const float col3 = 81; + const float col4 = 115; + const float outputLabelY = 300; + + addInput(Port::create(Vec(col1, 273+verticalShift), Port::INPUT, module, module->vco.PITCH_INPUT)); + addLabel(Vec(9, 255+verticalShift), "cv"); + + addInput(Port::create(Vec(col2, 273+verticalShift), Port::INPUT, module, module->vco.FM_INPUT)); + addLabel(Vec(43, 255+verticalShift), "fm"); + + addInput(Port::create(Vec(col3, 273+verticalShift), Port::INPUT, module, module->vco.SYNC_INPUT)); + addLabel(Vec(72, 255+verticalShift), "sync"); + + addInput(Port::create(Vec(col4, 273+verticalShift), Port::INPUT, module, module->vco.PW_INPUT)); + addLabel(Vec(107, 255+verticalShift), "pwm"); + + addOutput(Port::create(Vec(col1, 317+verticalShift), Port::OUTPUT, module, module->vco.SIN_OUTPUT)); + addLabel(Vec(8, outputLabelY+verticalShift), "sin", COLOR_WHITE); + + addOutput(Port::create(Vec(col2, 317+verticalShift), Port::OUTPUT, module, module->vco.TRI_OUTPUT)); + addLabel(Vec(44, outputLabelY+verticalShift), "tri", COLOR_WHITE); + + addOutput(Port::create(Vec(col3, 317+verticalShift), Port::OUTPUT, module, module->vco.SAW_OUTPUT)); + addLabel(Vec(75, outputLabelY+verticalShift), "saw", COLOR_WHITE); + + addOutput(Port::create(Vec(col4, 317+verticalShift), Port::OUTPUT, module, module->vco.SQR_OUTPUT)); + addLabel(Vec(111, outputLabelY+verticalShift), "sqr", COLOR_WHITE); +} + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +FunVWidget::FunVWidget(FunVModule *module) : ModuleWidget(module) +{ + box.size = Vec(10 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/fun_panel.svg"))); + addChild(panel); + } + + addTop3(module, 0); + addMiddle4(module, 0); + addJacks(module, 0); + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, FunV) { + Model *modelFunVModule = Model::create("Squinky Labs", + "squinkylabs-funv", + "Functional VCO-1", OSCILLATOR_TAG); + return modelFunVModule; +} + +#endif + diff --git a/plugins/community/repos/squinkylabs-plug1/src/GMRModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/GMRModule.cpp new file mode 100644 index 00000000..84f0e749 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/GMRModule.cpp @@ -0,0 +1,104 @@ + +#include +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#ifdef _GMR +#include "GMR.h" + + +/** + */ +struct GMRModule : Module +{ +public: + GMRModule(); + /** + * + * Overrides of Module functions + */ + void step() override; + void onSampleRateChange() override; + + GMR gmr; +private: +}; + +void GMRModule::onSampleRateChange() +{ + float rate = engineGetSampleRate(); + gmr.setSampleRate(rate); +} + +GMRModule::GMRModule() + : Module(gmr.NUM_PARAMS, + gmr.NUM_INPUTS, + gmr.NUM_OUTPUTS, + gmr.NUM_LIGHTS), + gmr(this) +{ + onSampleRateChange(); + gmr.init(); +} + +void GMRModule::step() +{ + gmr.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct GMRWidget : ModuleWidget +{ + GMRWidget(GMRModule *); + + void addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + } +}; + + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +GMRWidget::GMRWidget(GMRModule *module) : ModuleWidget(module) +{ + box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/blank_panel.svg"))); + addChild(panel); + } + + addInput(Port::create( + Vec(40, 200), Port::INPUT, module, module->gmr.CLOCK_INPUT)); + addOutput(Port::create( + Vec(40, 300), Port::OUTPUT, module, module->gmr.TRIGGER_OUTPUT)); + + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, GMR) { + Model *modelGMRModule = Model::create("Squinky Labs", + "squinkylabs-GMR", + "GMR", EFFECT_TAG, LFO_TAG); + return modelGMRModule; +} +#endif + diff --git a/plugins/community/repos/squinkylabs-plug1/src/GrayModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/GrayModule.cpp new file mode 100644 index 00000000..a4d8d5cf --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/GrayModule.cpp @@ -0,0 +1,136 @@ + +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#include "Gray.h" + +/** + */ +struct GrayModule : Module +{ +public: + GrayModule(); + /** + * + * + * Overrides of Module functions + */ + void step() override; + + Gray gray; +private: +}; + +GrayModule::GrayModule() + : Module(gray.NUM_PARAMS, + gray.NUM_INPUTS, + gray.NUM_OUTPUTS, + gray.NUM_LIGHTS), + gray(this) +{ +} + +void GrayModule::step() +{ + gray.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct GrayWidget : ModuleWidget +{ + GrayWidget(GrayModule *); + + /** + * Helper to add a text label to this widget + */ + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + +private: + void addBits(GrayModule *module); + + GrayModule* const module; +}; + +const float jackCol = 99.5; +const float ledCol = 69; +const float vertSpace = 31; // 31.4 +const float firstBitY = 64; + +inline void GrayWidget::addBits(GrayModule *module) +{ + printf("add bits\n"); fflush(stdout); + for (int i=0; i<8; ++i) { + const Vec v(jackCol, firstBitY + i * vertSpace); + addOutput(createOutputCentered( + v, + module, + Gray::OUTPUT_0 + i)); + addChild(ModuleLightWidget::create>( + Vec(ledCol, firstBitY + i * vertSpace - 6), + module, + Gray::LIGHT_0+i)); + } +} + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +GrayWidget::GrayWidget(GrayModule *module) : + ModuleWidget(module), + module(module) +{ + box.size = Vec(8 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/gray.svg"))); + addChild(panel); + } + + addBits(module); + addInput(createInputCentered( + Vec(22, 339), + module, + Gray::INPUT_CLOCK)); + addLabel(Vec(0, 310), "Clock"); + + addParam(createParamCentered( + Vec(71,33), + module, + Gray::PARAM_CODE, + 0.0f, 1.0f, 0.0f)); + addLabel(Vec(2, 27), "Balanced"); + + addOutput(createOutputCentered( + Vec(100, 339), + module, + Gray::OUTPUT_MIXED)); + addLabel(Vec(81, 310), "Mix", COLOR_WHITE); + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, Gray) { + Model *modelGrayModule = Model::create("Squinky Labs", + "squinkylabs-gry", + "Gray Code: Eclectic clock divider", CLOCK_MODULATOR_TAG, RANDOM_TAG); + return modelGrayModule; +} diff --git a/plugins/community/repos/squinkylabs-plug1/src/LFNModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/LFNModule.cpp new file mode 100644 index 00000000..481a1d1c --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/LFNModule.cpp @@ -0,0 +1,180 @@ + +#include +#include "Squinky.hpp" +#include "WidgetComposite.h" + +#include "LFN.h" + + +/** + */ +struct LFNModule : Module +{ +public: + LFNModule(); + /** + * + * Overrides of Module functions + */ + void step() override; + void onSampleRateChange() override; + + LFN lfn; +private: + +}; + +void LFNModule::onSampleRateChange() +{ + // engineGetSampleTime(); + // float rate = Module::engineGetSampleRate(); + // float rate = 1.0f / engineGetSampleTime(); // TODO: what's up with this? this used to work! + lfn.setSampleTime(engineGetSampleTime()); +} + +LFNModule::LFNModule() + : Module(lfn.NUM_PARAMS, + lfn.NUM_INPUTS, + lfn.NUM_OUTPUTS, + lfn.NUM_LIGHTS), + lfn(this) +{ + onSampleRateChange(); + lfn.init(); +} + +void LFNModule::step() +{ + lfn.step(); +} + +//////////////////// +// module widget +//////////////////// + +class LFNLabelUpdater +{ +public: + void update(struct LFNWidget& widget); + void makeLabel(struct LFNWidget& widget, int index, float x, float y); +private: + LFNModule * module; + Label* labels[5] = {0,0,0,0,0}; + float baseFrequency = -1; +}; + + + +struct LFNWidget : ModuleWidget +{ + LFNWidget(LFNModule *); + + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + + void draw(NVGcontext *vg) override + { + updater.update(*this); + module.lfn.pollForChangeOnUIThread(); + ModuleWidget::draw(vg); + } + + void addStage(int i); + + LFNLabelUpdater updater; + LFNModule& module; +}; + +static const float knobX = 42; +static const float knobY = 100; +static const float knobDy = 50; +static const float inputY = knobY + 16; +static const float inputX = 6; +static const float labelX = 2; + +void LFNWidget::addStage(int index) +{ + const float gmin = -5; + const float gmax = 5; + const float gdef = 0; + addParam(ParamWidget::create( + Vec(knobX, knobY + index * knobDy), + &module, module.lfn.EQ0_PARAM + index, gmin, gmax, gdef)); + + updater.makeLabel((*this), index, labelX, knobY - 2 + index * knobDy); + + addInput(Port::create(Vec(inputX, inputY + index * knobDy), + Port::INPUT, &module, module.lfn.EQ0_INPUT + index)); +} +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +LFNWidget::LFNWidget(LFNModule *module) : ModuleWidget(module), module(*module) +{ + box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/lfn_panel.svg"))); + addChild(panel); + } + + addOutput(Port::create( + Vec(59, inputY - knobDy -1), Port::OUTPUT, module, module->lfn.OUTPUT)); + addLabel( + Vec(54 , inputY - knobDy - 18), "out", COLOR_WHITE); + + addParam(ParamWidget::create( + Vec(10, knobY - 1 * knobDy), module, module->lfn.FREQ_RANGE_PARAM, -5, 5, 0)); + + // addLabel(Vec(59, knobY - 1 * knobDy), "R"); + + for (int i = 0; i < 5; ++i) { + addStage(i); + } + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +void LFNLabelUpdater::makeLabel(struct LFNWidget& widget, int index, float x, float y) +{ + labels[index] = widget.addLabel(Vec(x, y), "Hz"); +} + +void LFNLabelUpdater::update(struct LFNWidget& widget) +{ + float baseFreq = widget.module.lfn.getBaseFrequency(); + if (baseFreq != baseFrequency) { + baseFrequency = baseFreq; + for (int i = 0; i < 5; ++i) { + std::stringstream str; + str.precision(1); + str.setf(std::ios::fixed, std::ios::floatfield); + str << baseFreq; + labels[i]->text = str.str(); + baseFreq *= 2.0f; + } + } +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, LFN) { + Model *modelLFNModule = Model::create("Squinky Labs", + "squinkylabs-lfn", + "LFN: Random Voltages", NOISE_TAG, RANDOM_TAG, LFO_TAG); + return modelLFNModule; +} + diff --git a/plugins/community/repos/squinkylabs-plug1/src/SQWidgets.h b/plugins/community/repos/squinkylabs-plug1/src/SQWidgets.h new file mode 100644 index 00000000..342826d4 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/SQWidgets.h @@ -0,0 +1,94 @@ +#pragma once + +#include "rack.hpp" +#include "WidgetComposite.h" + +#include + + +/** + * Like Trimpot, but with blue stripe + */ +struct BlueTrimmer : SVGKnob { + BlueTrimmer() { + // printf("ctrol of blue trimmer\n"); fflush(stdout); + minAngle = -0.75*M_PI; + maxAngle = 0.75*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/BlueTrimmer.svg"))); + } +}; + +/** + * Like Rogan1PSBlue, but smaller. + */ +struct Blue30Knob : SVGKnob { + Blue30Knob() { + minAngle = -0.83*M_PI; + maxAngle = 0.83*M_PI; + setSVG(SVG::load(assetPlugin(plugin, "res/Blue30.svg"))); + } +}; + +struct Blue30SnapKnob : Blue30Knob { + Blue30SnapKnob() { + snap = true; + smooth = false; + } +}; + +struct NKKSmall : SVGSwitch, ToggleSwitch { + NKKSmall() { + addFrame(SVG::load(assetPlugin(plugin, "res/NKKSmall_0.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/NKKSmall_1.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/NKKSmall_2.svg"))); + } +}; + +struct BlueToggle : public SVGSwitch, ToggleSwitch { + BlueToggle() { + addFrame(SVG::load(assetPlugin(plugin, "res/BluePush_1.svg"))); + addFrame(SVG::load(assetPlugin(plugin, "res/BluePush_0.svg"))); + #if 0 + setSVGs( + SVG::load(assetPlugin(plugin, "res/BluePush_0.svg")), + SVG::load(assetPlugin(plugin, "res/BluePush_1.svg")) + ); + #endif + } +}; + +/** + * A very basic momentary push button. + */ +struct SQPush : SVGButton +{ + SQPush() + { + setSVGs( + SVG::load(assetPlugin(plugin, "res/BluePush_0.svg")), + SVG::load(assetPlugin(plugin, "res/BluePush_1.svg")) + ); + } + void center(Vec& pos) + { + this->box.pos = pos.minus(this->box.size.div(2)); + } + + void onDragEnd(EventDragEnd &e) override + { + SVGButton::onDragEnd(e); + if (clickHandler) { + clickHandler(); + } + } + + /** + * User of button passes in a callback lamba here + */ + void onClick(std::function callback) + { + clickHandler = callback; + } + + std::function clickHandler; +}; diff --git a/plugins/community/repos/squinkylabs-plug1/src/ShaperModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/ShaperModule.cpp new file mode 100644 index 00000000..ddd07c9a --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/ShaperModule.cpp @@ -0,0 +1,232 @@ + +#include "Squinky.hpp" +#include "WidgetComposite.h" + + +#include "Shaper.h" + +/** + */ +struct ShaperModule : Module +{ +public: + ShaperModule(); + /** + * + * + * Overrides of Module functions + */ + void step() override; + + Shaper shaper; +private: +}; + +ShaperModule::ShaperModule() + : Module(shaper.NUM_PARAMS, + shaper.NUM_INPUTS, + shaper.NUM_OUTPUTS, + shaper.NUM_LIGHTS), + shaper(this) +{ +} + +void ShaperModule::step() +{ + shaper.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct ShaperWidget : ModuleWidget +{ + ShaperWidget(ShaperModule *); + + /** + * Helper to add a text label to this widget + */ + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + label->fontSize = 16; + addChild(label); + return label; + } + + void step() override; +private: + Label* shapeLabel=nullptr; + Label* shapeLabel2=nullptr; + Label* oversampleLabel=nullptr; + ParamWidget* shapeParam = nullptr; + ParamWidget* oversampleParam = nullptr; + Shaper::Shapes curShape = Shaper::Shapes::Invalid; + // ShaperModule* const module; + void addSelector(ShaperModule* module); + int curOversample =-1; +}; + +void ShaperWidget::step() +{ + ModuleWidget::step(); + const int iShape = (int) std::round(shapeParam->value); + const Shaper::Shapes shape = Shaper::Shapes(iShape); + if (shape != curShape) { + curShape = shape; + std::string shapeString = Shaper::getString(shape); + if (shapeString.length() > 8) { + auto pos = shapeString.find(' '); + if (pos != std::string::npos) { + shapeLabel->text = shapeString.substr(0, pos); + shapeLabel2->text = shapeString.substr(pos+1); + } else { + shapeLabel->text = "too"; + shapeLabel2->text = "big"; + } + } else { + shapeLabel->text = shapeString; + shapeLabel2->text = ""; + } + } + const int overS = (int) std::round(oversampleParam->value); + if (overS != curOversample) { + curOversample = overS; + const char * str = ""; + switch (curOversample) { + case 0: + str = "16X"; + break; + case 1: + str = "4X"; + break; + case 2: + str = "1X"; + break; + } + oversampleLabel->text = str; + + } + +} + +void ShaperWidget::addSelector(ShaperModule* module) +{ + const float x = 37; + const float y = 80; + auto p = createParamCentered( + Vec(x, y), + module, Shaper::PARAM_SHAPE, + 0, + float(Shaper::Shapes::Invalid)-1, + 0); + p->snap = true; + p->smooth = false; + addParam(p); + shapeLabel = addLabel(Vec(70, 60), ""); + shapeLabel2 = addLabel(Vec(70, 60+18), ""); + shapeParam = p; + shapeLabel->fontSize = 18; +} + +/** + * Global coordinate constants + */ +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +ShaperWidget::ShaperWidget(ShaperModule *module) : + ModuleWidget(module) +{ + box.size = Vec(10 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/shaper.svg"))); + addChild(panel); + } + + addSelector(module); + + + const float gainX = 35; + const float offsetX = 108; + const float gainY = 232; + const float offsetY = 147; + + addParam(createParamCentered( + Vec(gainX, gainY), + module, Shaper::PARAM_GAIN, -5, 5, 0)); + addLabel(Vec(8, 191), "Gain"); + + addParam(createParamCentered( + Vec(offsetX, offsetY), + module, Shaper::PARAM_OFFSET, -5, 5, 0)); + addLabel(Vec(34, 135), "Offset"); + + addParam(createParamCentered( + Vec(56, 275), + module, Shaper::PARAM_GAIN_TRIM, -1, 1, 0)); + addParam(createParamCentered( + Vec(81, 199), + module, Shaper::PARAM_OFFSET_TRIM, -1, 1, 0)); + + const float jackY = 327; + const float jackLabelY = jackY - 29; + addInput(createInputCentered( + Vec(30,jackY), + module, + Shaper::INPUT_AUDIO)); + addLabel(Vec(17, jackLabelY), "In")->fontSize = 12; + + addOutput(createOutputCentered( + Vec(127,jackY), + module, + Shaper::OUTPUT_AUDIO)); + addLabel(Vec(109, jackLabelY), "Out", COLOR_WHITE)->fontSize = 12; + + + addInput(createInputCentered( + Vec(62, jackY), + module, + Shaper::INPUT_GAIN)); + addInput(createInputCentered( + Vec(95,jackY), + module, + Shaper::INPUT_OFFSET)); + + const float swX = 127; + const float swY = 235; + oversampleParam = createParamCentered( + Vec(swX, swY+4), + module, + Shaper::PARAM_OVERSAMPLE, + 0.0f, 2.0f, 0.0f + ); + + addParam(oversampleParam); + oversampleLabel = addLabel(Vec(swX-32, swY+30), "x"); + oversampleLabel->box.size.x = 60; + oversampleLabel->alignment = Label::Alignment::CENTER_ALIGNMENT; + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, Shaper) { + Model *modelShaperModule = Model::create("Squinky Labs", + "squinkylabs-shp", + "Shaper: Precision Wave Shaper", WAVESHAPER_TAG, DISTORTION_TAG); + return modelShaperModule; +} + diff --git a/plugins/community/repos/squinkylabs-plug1/src/Squinky.cpp b/plugins/community/repos/squinkylabs-plug1/src/Squinky.cpp index 0ab926b4..e1ddfe9d 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/Squinky.cpp +++ b/plugins/community/repos/squinkylabs-plug1/src/Squinky.cpp @@ -1,18 +1,59 @@ // plugin main #include "Squinky.hpp" +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Blank); RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Booty); +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, CHB); +#ifdef _DG +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, DG); +#endif +#ifdef _EV3 +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, EV3); +#endif +#ifdef _EV +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, EV); +#endif +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, FunV); +#ifdef _GMR +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, GMR); +#endif +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Gray); +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, LFN); +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Shaper); +RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Super); RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Vocal); RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, VocalFilter); RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, ColoredNoise); RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, Tremolo); +#ifdef _CPU_HOG RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, CPU_Hog); +#endif RACK_PLUGIN_MODEL_DECLARE(squinkylabs_plug1, ThreadBoost); RACK_PLUGIN_INIT(squinkylabs_plug1) { RACK_PLUGIN_INIT_ID(); + RACK_PLUGIN_INIT_VERSION("0.6.9"); + // RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, Blank); // crashes RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, Booty); + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, CHB); +#ifdef _DG + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, DG); +#endif +#ifdef _EV3 + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, EV3); +#endif +#ifdef _EV + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, EV); +#endif + // RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, FunV); // crashes (read from 0xfffffff) +#ifdef _GMR + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, GMR); +#endif + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, Gray); + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, LFN); + // RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, Shaper); // crashes (read from 0x00000010) + RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, Super); RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, Vocal); RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, VocalFilter); RACK_PLUGIN_MODEL_ADD(squinkylabs_plug1, ColoredNoise); diff --git a/plugins/community/repos/squinkylabs-plug1/src/Squinky.hpp b/plugins/community/repos/squinkylabs-plug1/src/Squinky.hpp index c9122bf8..0876a9b7 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/Squinky.hpp +++ b/plugins/community/repos/squinkylabs-plug1/src/Squinky.hpp @@ -1,5 +1,10 @@ #include "rack.hpp" +//#define _GMR +#define _CHB +#define _EV3 +//#define _SUPER + using namespace rack; RACK_PLUGIN_DECLARE(squinkylabs_plug1); diff --git a/plugins/community/repos/squinkylabs-plug1/src/SuperModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/SuperModule.cpp new file mode 100644 index 00000000..12f9f630 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/SuperModule.cpp @@ -0,0 +1,149 @@ + +#include +#include "Squinky.hpp" +#include "WidgetComposite.h" +#include "SQWidgets.h" + +#include "Super.h" + + +/** + */ +struct SuperModule : Module +{ +public: + SuperModule(); + /** + * + * Overrides of Module functions + */ + void step() override; + void onSampleRateChange() override; + + Super super; +private: + +}; + +void SuperModule::onSampleRateChange() +{ +} + +SuperModule::SuperModule() + : Module(super.NUM_PARAMS, + super.NUM_INPUTS, + super.NUM_OUTPUTS, + super.NUM_LIGHTS), + super(this) +{ + onSampleRateChange(); + super.init(); +} + +void SuperModule::step() +{ + super.step(); +} + +//////////////////// +// module widget +//////////////////// + +struct superWidget : ModuleWidget +{ + superWidget(SuperModule *); + + Label* addLabel(const Vec& v, const char* str, const NVGcolor& color = COLOR_BLACK) + { + Label* label = new Label(); + label->box.pos = v; + label->text = str; + label->color = color; + addChild(label); + return label; + } + void addDebug(SuperModule*); +}; + +void superWidget::addDebug(SuperModule*) +{ + addInput(Port::create( + Vec(60, 10), Port::INPUT, module, Super::DEBUG_INPUT)); + addOutput(Port::create( + Vec(60, 40), Port::OUTPUT, module, Super::DEBUG_OUTPUT)); +} + + +/** + * Widget constructor will describe my implementation structure and + * provide meta-data. + * This is not shared by all modules in the DLL, just one + */ +superWidget::superWidget(SuperModule *module) : ModuleWidget(module) +{ + box.size = Vec(6 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT); + { + SVGPanel *panel = new SVGPanel(); + panel->box.size = box.size; + panel->setBackground(SVG::load(assetPlugin(plugin, "res/blank_panel.svg"))); + addChild(panel); + } + + addOutput(Port::create( + Vec(60, 330), Port::OUTPUT, module, Super::MAIN_OUTPUT)); + addLabel( + Vec(60 , 310), "out"); + + addInput(Port::create( + Vec(6, 330), Port::INPUT, module, Super::CV_INPUT)); + addLabel( + Vec(2 , 310), "V/8"); + + addInput(Port::create( + Vec(34, 330), Port::INPUT, module, Super::GATE_INPUT)); + addLabel( + Vec(34 , 310), "Trig"); + + addParam(ParamWidget::create( + Vec(10, 30), module, Super::OCTAVE_PARAM, -5, 5, 0)); + addLabel( + Vec(10, 10), "Oct"); + + addDebug(module); + + addParam(ParamWidget::create( + Vec(10, 95), module, Super::SEMI_PARAM, -5, 5, 0)); + addLabel( + Vec(10, 75), "Semi"); + + addParam(ParamWidget::create( + Vec(10, 160), module, Super::FINE_PARAM, -5, 5, 0)); + addLabel( + Vec(10, 140), "Fine"); + + addParam(ParamWidget::create( + Vec(10, 220), module, Super::DETUNE_PARAM, -5, 5, 0)); + addLabel( + Vec(10, 200), "Detune"); + + addParam(ParamWidget::create( + Vec(10, 270), module, Super::MIX_PARAM, -5, 5, 0)); + addLabel( + Vec(10, 250), "Mix"); + + // screws + addChild(Widget::create(Vec(RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, 0))); + addChild(Widget::create(Vec(RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); + addChild(Widget::create(Vec(box.size.x - 2 * RACK_GRID_WIDTH, RACK_GRID_HEIGHT - RACK_GRID_WIDTH))); +} + + +RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, Super) { + Model *modelSuperModule = Model::create("Squinky Labs", + "squinkylabs-super", + "-- super --", RANDOM_TAG); + return modelSuperModule; +} + diff --git a/plugins/community/repos/squinkylabs-plug1/src/VocalFilterModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/VocalFilterModule.cpp index 526b821a..e0bee5c4 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/VocalFilterModule.cpp +++ b/plugins/community/repos/squinkylabs-plug1/src/VocalFilterModule.cpp @@ -260,6 +260,6 @@ VocalFilterWidget::VocalFilterWidget(VocalFilterModule *module) : ModuleWidget(m RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, VocalFilter) { Model *modelVocalFilterModule = Model::create("Squinky Labs", "squinkylabs-vocalfilter", - "Vocal Filter", EFFECT_TAG, FILTER_TAG); + "Formants: Vocal Filter", EFFECT_TAG, FILTER_TAG); return modelVocalFilterModule; } diff --git a/plugins/community/repos/squinkylabs-plug1/src/VocalModule.cpp b/plugins/community/repos/squinkylabs-plug1/src/VocalModule.cpp index ce5576ea..03e31741 100644 --- a/plugins/community/repos/squinkylabs-plug1/src/VocalModule.cpp +++ b/plugins/community/repos/squinkylabs-plug1/src/VocalModule.cpp @@ -195,6 +195,6 @@ VocalWidget::VocalWidget(VocalModule *module) : ModuleWidget(module) RACK_PLUGIN_MODEL_INIT(squinkylabs_plug1, Vocal) { Model *modelVocalModule = Model::create("Squinky Labs", "squinkylabs-vocalanimator", - "Vocal Animator", EFFECT_TAG, FILTER_TAG, LFO_TAG, RANDOM_TAG); + "Growler: Vocal Animator", EFFECT_TAG, FILTER_TAG, LFO_TAG, RANDOM_TAG); return modelVocalModule; } diff --git a/plugins/community/repos/squinkylabs-plug1/src/WaveformSelector.h b/plugins/community/repos/squinkylabs-plug1/src/WaveformSelector.h new file mode 100644 index 00000000..788a4d46 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/src/WaveformSelector.h @@ -0,0 +1,151 @@ +#pragma once + +#include "widgets.hpp" + +class ButtonCell +{ +public: + friend class WaveformSelector; + ButtonCell(const ButtonCell&) = delete; + ButtonCell& operator = (const ButtonCell&) = delete; + + ButtonCell(float x) : value(x) {} + void loadSVG(const char* res, const char* resOn); + + const float value; + rack::Rect box; + + void dump(const char*); +private: + SVGWidget svg; + SVGWidget svgOn; +}; + +inline void ButtonCell::loadSVG(const char* res, const char* resOn) +{ + svg.setSVG(SVG::load (assetPlugin(plugin, res))); + svgOn.setSVG(SVG::load (assetPlugin(plugin, resOn))); + this->box.size = svg.box.size; +} + +inline void ButtonCell::dump(const char* label) +{ + printf("cell(%.2f) {%s} box size=%f, %f po %f, %f\n", + value, + label, + box.size.x, + box.size.y, + box.pos.x, + box.pos.y); +} + +using CellPtr = std::shared_ptr; + +struct WaveformSelector : ParamWidget +{ + WaveformSelector(); + void draw(NVGcontext *vg) override; + ~WaveformSelector() override; + + std::vector< std::vector< CellPtr>> svgs; + void addSvg(int row, const char* res, const char* resOn); + void drawSVG(NVGcontext *vg, SVGWidget&, float x, float y); + void onMouseDown( EventMouseDown &e ) override; + CellPtr hitTest(float x, float y); + // + float nextValue = 0; +}; + + CellPtr WaveformSelector::hitTest(float x, float y) + { + const Vec pos(x, y); + for (auto& r : svgs) { + for (auto& s : r) { + if (s->box.contains(pos)) { + return s; + } + } + } + return nullptr; + } + +inline void WaveformSelector::addSvg(int row, const char* res, const char* resOn) +{ + if ((int)svgs.size() < row+1) { + svgs.resize(row+1); + } + + // make a new cell, put the SVGs in it + CellPtr cell = std::make_shared(nextValue++); + cell->loadSVG(res, resOn); + svgs[row].push_back(cell); + + // now set the box for cell + float y = 0; + if (row > 0) { + // if we are going in the second row, y = height of first + assert(!svgs[row-1].empty()); + CellPtr otherCell = svgs[row-1][0]; + y = otherCell->box.pos.y + otherCell->box.size.y; + } + cell->box.pos.y = y; + + const int cellsInRow = (int) svgs[row].size(); + if (cellsInRow == 1) { + cell->box.pos.x = 0; + } else { + cell->box.pos.x = + svgs[row][cellsInRow-2]->box.pos.x + + svgs[row][cellsInRow-2]->box.size.x; + } +} + +inline WaveformSelector::WaveformSelector() +{ + addSvg(0, "res/waveforms-6-08.svg","res/waveforms-6-07.svg"); + addSvg(0, "res/waveforms-6-06.svg","res/waveforms-6-05.svg"); + addSvg(0, "res/waveforms-6-02.svg","res/waveforms-6-01.svg"); + addSvg(1, "res/waveforms-6-04.svg","res/waveforms-6-03.svg"); + addSvg(1, "res/waveforms-6-12.svg","res/waveforms-6-11.svg"); + addSvg(1, "res/waveforms-6-10.svg","res/waveforms-6-09.svg"); +} + +inline WaveformSelector::~WaveformSelector() +{ +} + +inline void WaveformSelector::drawSVG(NVGcontext *vg, SVGWidget& svg, float x, float y) +{ + nvgSave(vg); + float transform[6]; + nvgTransformIdentity(transform); + nvgTransformTranslate(transform, x, y); + nvgTransform(vg, transform[0], transform[1], transform[2], transform[3], transform[4], transform[5]); + svg.draw(vg); + nvgRestore(vg); +} + +void inline WaveformSelector::draw(NVGcontext *vg) +{ + for (auto& r : svgs) { + for (auto& s : r) { + const bool on = (this->value == s->value); + drawSVG(vg, on ? s->svgOn : s->svg, s->box.pos.x, s->box.pos.y); + } + } +} + +inline void WaveformSelector::onMouseDown( EventMouseDown &e ) +{ + e.consumed = false; + + CellPtr hit = hitTest(e.pos.x, e.pos.y); + if (hit) { + e.consumed = true; + if (hit->value == this->value) { + printf("value same\n"); fflush(stdout); + return; + } + setValue(hit->value); + } +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/table.txt b/plugins/community/repos/squinkylabs-plug1/table.txt new file mode 100644 index 00000000..7b018fbe --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/table.txt @@ -0,0 +1,544 @@ +float symmetry_table_0[256] = { +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_1[256] = { +-0.066667f, -0.066667f, -0.066667f, -0.066667f, -0.066667f, -0.066667f, -0.066666f, -0.066666f, +-0.066666f, -0.066666f, -0.066665f, -0.066665f, -0.066664f, -0.066663f, -0.066663f, -0.066662f, +-0.066661f, -0.066659f, -0.066658f, -0.066656f, -0.066654f, -0.066652f, -0.066650f, -0.066647f, +-0.066644f, -0.066641f, -0.066638f, -0.066634f, -0.066630f, -0.066625f, -0.066621f, -0.066615f, +-0.066610f, -0.066603f, -0.066597f, -0.066590f, -0.066582f, -0.066574f, -0.066565f, -0.066556f, +-0.066546f, -0.066535f, -0.066523f, -0.066511f, -0.066498f, -0.066484f, -0.066470f, -0.066454f, +-0.066438f, -0.066420f, -0.066402f, -0.066382f, -0.066361f, -0.066339f, -0.066316f, -0.066292f, +-0.066266f, -0.066238f, -0.066210f, -0.066179f, -0.066147f, -0.066113f, -0.066078f, -0.066040f, +-0.066001f, -0.065959f, -0.065916f, -0.065870f, -0.065821f, -0.065770f, -0.065717f, -0.065660f, +-0.065601f, -0.065538f, -0.065473f, -0.065404f, -0.065331f, -0.065255f, -0.065174f, -0.065089f, +-0.065000f, -0.064906f, -0.064808f, -0.064703f, -0.064594f, -0.064478f, -0.064356f, -0.064228f, +-0.064092f, -0.063949f, -0.063798f, -0.063639f, -0.063470f, -0.063292f, -0.063103f, -0.062903f, +-0.062691f, -0.062465f, -0.062226f, -0.061972f, -0.061702f, -0.061413f, -0.061106f, -0.060777f, +-0.060425f, -0.060048f, -0.059643f, -0.059207f, -0.058737f, -0.058228f, -0.057677f, -0.057076f, +-0.056421f, -0.055703f, -0.054911f, -0.054035f, -0.053059f, -0.051965f, -0.050726f, -0.049311f, +-0.047673f, -0.045747f, -0.043439f, -0.040598f, -0.036977f, -0.032128f, -0.025192f, -0.014656f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_2[256] = { +-0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133333f, -0.133332f, +-0.133332f, -0.133331f, -0.133330f, -0.133329f, -0.133328f, -0.133326f, -0.133324f, -0.133322f, +-0.133320f, -0.133317f, -0.133314f, -0.133310f, -0.133306f, -0.133301f, -0.133296f, -0.133290f, +-0.133284f, -0.133276f, -0.133269f, -0.133260f, -0.133251f, -0.133241f, -0.133230f, -0.133218f, +-0.133205f, -0.133191f, -0.133176f, -0.133160f, -0.133143f, -0.133124f, -0.133104f, -0.133083f, +-0.133060f, -0.133036f, -0.133010f, -0.132982f, -0.132953f, -0.132921f, -0.132888f, -0.132852f, +-0.132815f, -0.132775f, -0.132732f, -0.132688f, -0.132640f, -0.132590f, -0.132537f, -0.132480f, +-0.132421f, -0.132358f, -0.132292f, -0.132222f, -0.132148f, -0.132070f, -0.131988f, -0.131902f, +-0.131810f, -0.131714f, -0.131613f, -0.131506f, -0.131393f, -0.131274f, -0.131149f, -0.131018f, +-0.130879f, -0.130733f, -0.130579f, -0.130417f, -0.130246f, -0.130066f, -0.129876f, -0.129676f, +-0.129465f, -0.129243f, -0.129008f, -0.128761f, -0.128500f, -0.128224f, -0.127932f, -0.127624f, +-0.127299f, -0.126954f, -0.126590f, -0.126203f, -0.125794f, -0.125360f, -0.124899f, -0.124410f, +-0.123889f, -0.123335f, -0.122745f, -0.122115f, -0.121442f, -0.120723f, -0.119952f, -0.119125f, +-0.118235f, -0.117277f, -0.116243f, -0.115125f, -0.113911f, -0.112591f, -0.111150f, -0.109572f, +-0.107837f, -0.105920f, -0.103793f, -0.101419f, -0.098751f, -0.095733f, -0.092290f, -0.088326f, +-0.083713f, -0.078285f, -0.071824f, -0.064055f, -0.054668f, -0.043400f, -0.030217f, -0.015502f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_3[256] = { +-0.200000f, -0.200000f, -0.200000f, -0.200000f, -0.200000f, -0.199999f, -0.199999f, -0.199998f, +-0.199997f, -0.199996f, -0.199995f, -0.199993f, -0.199991f, -0.199988f, -0.199985f, -0.199981f, +-0.199977f, -0.199972f, -0.199967f, -0.199960f, -0.199953f, -0.199945f, -0.199937f, -0.199927f, +-0.199916f, -0.199904f, -0.199891f, -0.199877f, -0.199861f, -0.199844f, -0.199825f, -0.199805f, +-0.199783f, -0.199759f, -0.199734f, -0.199706f, -0.199677f, -0.199645f, -0.199611f, -0.199575f, +-0.199536f, -0.199494f, -0.199449f, -0.199402f, -0.199351f, -0.199297f, -0.199240f, -0.199179f, +-0.199114f, -0.199046f, -0.198973f, -0.198895f, -0.198813f, -0.198726f, -0.198634f, -0.198537f, +-0.198434f, -0.198325f, -0.198210f, -0.198089f, -0.197960f, -0.197825f, -0.197681f, -0.197530f, +-0.197370f, -0.197202f, -0.197024f, -0.196837f, -0.196639f, -0.196430f, -0.196210f, -0.195978f, +-0.195733f, -0.195474f, -0.195201f, -0.194914f, -0.194610f, -0.194289f, -0.193951f, -0.193594f, +-0.193216f, -0.192818f, -0.192396f, -0.191951f, -0.191479f, -0.190981f, -0.190453f, -0.189894f, +-0.189302f, -0.188674f, -0.188007f, -0.187300f, -0.186548f, -0.185748f, -0.184897f, -0.183990f, +-0.183023f, -0.181990f, -0.180886f, -0.179704f, -0.178437f, -0.177078f, -0.175616f, -0.174041f, +-0.172341f, -0.170504f, -0.168512f, -0.166349f, -0.163992f, -0.161418f, -0.158598f, -0.155499f, +-0.152081f, -0.148298f, -0.144093f, -0.139402f, -0.134148f, -0.128240f, -0.121576f, -0.114043f, +-0.105522f, -0.095903f, -0.085107f, -0.073109f, -0.059969f, -0.045841f, -0.030958f, -0.015591f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_4[256] = { +-0.266667f, -0.266667f, -0.266667f, -0.266666f, -0.266666f, -0.266666f, -0.266665f, -0.266664f, +-0.266663f, -0.266661f, -0.266659f, -0.266656f, -0.266653f, -0.266649f, -0.266644f, -0.266639f, +-0.266632f, -0.266625f, -0.266617f, -0.266607f, -0.266596f, -0.266584f, -0.266571f, -0.266556f, +-0.266540f, -0.266522f, -0.266502f, -0.266480f, -0.266457f, -0.266431f, -0.266402f, -0.266372f, +-0.266338f, -0.266303f, -0.266264f, -0.266222f, -0.266177f, -0.266128f, -0.266077f, -0.266021f, +-0.265961f, -0.265897f, -0.265829f, -0.265756f, -0.265679f, -0.265596f, -0.265508f, -0.265414f, +-0.265315f, -0.265209f, -0.265096f, -0.264977f, -0.264850f, -0.264716f, -0.264573f, -0.264423f, +-0.264263f, -0.264094f, -0.263915f, -0.263726f, -0.263526f, -0.263314f, -0.263090f, -0.262854f, +-0.262604f, -0.262340f, -0.262061f, -0.261766f, -0.261455f, -0.261126f, -0.260778f, -0.260411f, +-0.260023f, -0.259613f, -0.259180f, -0.258722f, -0.258238f, -0.257726f, -0.257185f, -0.256613f, +-0.256007f, -0.255366f, -0.254687f, -0.253968f, -0.253206f, -0.252398f, -0.251540f, -0.250630f, +-0.249664f, -0.248637f, -0.247544f, -0.246381f, -0.245143f, -0.243822f, -0.242413f, -0.240908f, +-0.239298f, -0.237575f, -0.235729f, -0.233747f, -0.231617f, -0.229325f, -0.226855f, -0.224189f, +-0.221306f, -0.218183f, -0.214794f, -0.211110f, -0.207097f, -0.202719f, -0.197933f, -0.192692f, +-0.186945f, -0.180635f, -0.173704f, -0.166089f, -0.157731f, -0.148574f, -0.138577f, -0.127713f, +-0.115983f, -0.103419f, -0.090082f, -0.076066f, -0.061485f, -0.046465f, -0.031134f, -0.015611f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_5[256] = { +-0.333333f, -0.333333f, -0.333333f, -0.333333f, -0.333333f, -0.333332f, -0.333331f, -0.333330f, +-0.333328f, -0.333325f, -0.333322f, -0.333318f, -0.333314f, -0.333308f, -0.333301f, -0.333294f, +-0.333284f, -0.333274f, -0.333262f, -0.333249f, -0.333234f, -0.333217f, -0.333198f, -0.333177f, +-0.333153f, -0.333128f, -0.333099f, -0.333068f, -0.333034f, -0.332997f, -0.332957f, -0.332913f, +-0.332865f, -0.332814f, -0.332758f, -0.332698f, -0.332633f, -0.332564f, -0.332489f, -0.332409f, +-0.332323f, -0.332231f, -0.332132f, -0.332027f, -0.331915f, -0.331795f, -0.331667f, -0.331531f, +-0.331386f, -0.331232f, -0.331068f, -0.330894f, -0.330710f, -0.330513f, -0.330305f, -0.330085f, +-0.329851f, -0.329603f, -0.329340f, -0.329062f, -0.328767f, -0.328455f, -0.328125f, -0.327775f, +-0.327406f, -0.327014f, -0.326600f, -0.326162f, -0.325699f, -0.325209f, -0.324690f, -0.324141f, +-0.323560f, -0.322946f, -0.322295f, -0.321606f, -0.320877f, -0.320104f, -0.319286f, -0.318419f, +-0.317500f, -0.316525f, -0.315491f, -0.314393f, -0.313228f, -0.311990f, -0.310674f, -0.309274f, +-0.307785f, -0.306199f, -0.304509f, -0.302706f, -0.300783f, -0.298728f, -0.296532f, -0.294183f, +-0.291667f, -0.288969f, -0.286075f, -0.282967f, -0.279625f, -0.276029f, -0.272155f, -0.267977f, +-0.263468f, -0.258598f, -0.253334f, -0.247642f, -0.241485f, -0.234825f, -0.227623f, -0.219844f, +-0.211450f, -0.202413f, -0.192708f, -0.182321f, -0.171248f, -0.159501f, -0.147103f, -0.134096f, +-0.120530f, -0.106468f, -0.091979f, -0.077137f, -0.062014f, -0.046678f, -0.031194f, -0.015618f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_6[256] = { +-0.400000f, -0.400000f, -0.400000f, -0.400000f, -0.399999f, -0.399998f, -0.399997f, -0.399995f, +-0.399992f, -0.399989f, -0.399985f, -0.399979f, -0.399973f, -0.399965f, -0.399956f, -0.399946f, +-0.399933f, -0.399919f, -0.399903f, -0.399885f, -0.399864f, -0.399840f, -0.399814f, -0.399785f, +-0.399753f, -0.399718f, -0.399679f, -0.399636f, -0.399589f, -0.399538f, -0.399482f, -0.399421f, +-0.399355f, -0.399284f, -0.399207f, -0.399123f, -0.399034f, -0.398937f, -0.398833f, -0.398721f, +-0.398601f, -0.398473f, -0.398335f, -0.398188f, -0.398031f, -0.397863f, -0.397684f, -0.397493f, +-0.397289f, -0.397073f, -0.396842f, -0.396597f, -0.396336f, -0.396059f, -0.395765f, -0.395452f, +-0.395120f, -0.394768f, -0.394395f, -0.393999f, -0.393579f, -0.393134f, -0.392662f, -0.392162f, +-0.391632f, -0.391071f, -0.390476f, -0.389846f, -0.389178f, -0.388471f, -0.387721f, -0.386926f, +-0.386084f, -0.385192f, -0.384246f, -0.383243f, -0.382179f, -0.381050f, -0.379852f, -0.378581f, +-0.377232f, -0.375798f, -0.374275f, -0.372655f, -0.370933f, -0.369102f, -0.367152f, -0.365075f, +-0.362862f, -0.360503f, -0.357987f, -0.355302f, -0.352434f, -0.349371f, -0.346095f, -0.342592f, +-0.338842f, -0.334828f, -0.330528f, -0.325920f, -0.320981f, -0.315687f, -0.310013f, -0.303931f, +-0.297415f, -0.290439f, -0.282976f, -0.275004f, -0.266499f, -0.257444f, -0.247826f, -0.237638f, +-0.226877f, -0.215553f, -0.203678f, -0.191275f, -0.178375f, -0.165012f, -0.151228f, -0.137068f, +-0.122577f, -0.107804f, -0.092794f, -0.077591f, -0.062236f, -0.046768f, -0.031219f, -0.015621f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_7[256] = { +-0.466667f, -0.466667f, -0.466667f, -0.466666f, -0.466665f, -0.466664f, -0.466662f, -0.466660f, +-0.466657f, -0.466652f, -0.466646f, -0.466639f, -0.466631f, -0.466621f, -0.466608f, -0.466594f, +-0.466578f, -0.466559f, -0.466537f, -0.466512f, -0.466484f, -0.466453f, -0.466418f, -0.466379f, +-0.466336f, -0.466288f, -0.466235f, -0.466178f, -0.466114f, -0.466045f, -0.465969f, -0.465887f, +-0.465798f, -0.465701f, -0.465596f, -0.465483f, -0.465361f, -0.465229f, -0.465087f, -0.464934f, +-0.464771f, -0.464595f, -0.464407f, -0.464205f, -0.463990f, -0.463759f, -0.463513f, -0.463251f, +-0.462971f, -0.462672f, -0.462354f, -0.462015f, -0.461654f, -0.461270f, -0.460862f, -0.460428f, +-0.459967f, -0.459477f, -0.458956f, -0.458403f, -0.457817f, -0.457194f, -0.456532f, -0.455831f, +-0.455086f, -0.454296f, -0.453458f, -0.452569f, -0.451625f, -0.450624f, -0.449562f, -0.448434f, +-0.447238f, -0.445968f, -0.444620f, -0.443189f, -0.441669f, -0.440054f, -0.438338f, -0.436516f, +-0.434578f, -0.432518f, -0.430327f, -0.427996f, -0.425515f, -0.422875f, -0.420063f, -0.417069f, +-0.413879f, -0.410479f, -0.406856f, -0.402994f, -0.398875f, -0.394484f, -0.389802f, -0.384810f, +-0.379489f, -0.373819f, -0.367779f, -0.361349f, -0.354510f, -0.347243f, -0.339529f, -0.331352f, +-0.322701f, -0.313562f, -0.303931f, -0.293803f, -0.283181f, -0.272071f, -0.260484f, -0.248436f, +-0.235946f, -0.223041f, -0.209746f, -0.196093f, -0.182113f, -0.167839f, -0.153304f, -0.138541f, +-0.123580f, -0.108453f, -0.093188f, -0.077810f, -0.062344f, -0.046811f, -0.031232f, -0.015623f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_8[256] = { +-0.533333f, -0.533333f, -0.533333f, -0.533333f, -0.533332f, -0.533330f, -0.533328f, -0.533325f, +-0.533320f, -0.533314f, -0.533307f, -0.533297f, -0.533286f, -0.533273f, -0.533257f, -0.533238f, +-0.533216f, -0.533191f, -0.533162f, -0.533130f, -0.533093f, -0.533051f, -0.533005f, -0.532953f, +-0.532896f, -0.532832f, -0.532762f, -0.532685f, -0.532601f, -0.532508f, -0.532407f, -0.532297f, +-0.532178f, -0.532048f, -0.531908f, -0.531756f, -0.531591f, -0.531414f, -0.531223f, -0.531018f, +-0.530797f, -0.530560f, -0.530306f, -0.530033f, -0.529741f, -0.529428f, -0.529094f, -0.528737f, +-0.528356f, -0.527949f, -0.527515f, -0.527052f, -0.526559f, -0.526033f, -0.525474f, -0.524878f, +-0.524244f, -0.523570f, -0.522852f, -0.522090f, -0.521279f, -0.520418f, -0.519502f, -0.518529f, +-0.517495f, -0.516397f, -0.515230f, -0.513991f, -0.512674f, -0.511276f, -0.509790f, -0.508211f, +-0.506534f, -0.504753f, -0.502859f, -0.500848f, -0.498710f, -0.496437f, -0.494022f, -0.491454f, +-0.488725f, -0.485822f, -0.482737f, -0.479456f, -0.475967f, -0.472257f, -0.468313f, -0.464120f, +-0.459664f, -0.454928f, -0.449897f, -0.444556f, -0.438887f, -0.432874f, -0.426502f, -0.419754f, +-0.412616f, -0.405075f, -0.397117f, -0.388734f, -0.379917f, -0.370659f, -0.360958f, -0.350815f, +-0.340232f, -0.329217f, -0.317779f, -0.305932f, -0.293690f, -0.281074f, -0.268103f, -0.254800f, +-0.241189f, -0.227294f, -0.213139f, -0.198750f, -0.184152f, -0.169367f, -0.154418f, -0.139327f, +-0.124115f, -0.108799f, -0.093398f, -0.077927f, -0.062402f, -0.046835f, -0.031238f, -0.015624f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_9[256] = { +-0.600000f, -0.600000f, -0.600000f, -0.599999f, -0.599998f, -0.599996f, -0.599993f, -0.599989f, +-0.599983f, -0.599975f, -0.599965f, -0.599953f, -0.599939f, -0.599921f, -0.599900f, -0.599875f, +-0.599847f, -0.599814f, -0.599776f, -0.599734f, -0.599685f, -0.599631f, -0.599570f, -0.599502f, +-0.599426f, -0.599342f, -0.599250f, -0.599148f, -0.599036f, -0.598914f, -0.598780f, -0.598634f, +-0.598475f, -0.598303f, -0.598116f, -0.597913f, -0.597694f, -0.597458f, -0.597203f, -0.596928f, +-0.596632f, -0.596314f, -0.595972f, -0.595606f, -0.595213f, -0.594792f, -0.594341f, -0.593859f, +-0.593343f, -0.592792f, -0.592204f, -0.591576f, -0.590905f, -0.590191f, -0.589428f, -0.588616f, +-0.587750f, -0.586829f, -0.585847f, -0.584802f, -0.583690f, -0.582507f, -0.581248f, -0.579909f, +-0.578484f, -0.576969f, -0.575359f, -0.573646f, -0.571826f, -0.569890f, -0.567833f, -0.565647f, +-0.563323f, -0.560853f, -0.558229f, -0.555441f, -0.552478f, -0.549332f, -0.545990f, -0.542441f, +-0.538673f, -0.534675f, -0.530432f, -0.525932f, -0.521161f, -0.516106f, -0.510752f, -0.505087f, +-0.499096f, -0.492766f, -0.486085f, -0.479041f, -0.471622f, -0.463820f, -0.455626f, -0.447034f, +-0.438039f, -0.428640f, -0.418836f, -0.408630f, -0.398026f, -0.387032f, -0.375656f, -0.363911f, +-0.351811f, -0.339370f, -0.326606f, -0.313536f, -0.300179f, -0.286555f, -0.272683f, -0.258583f, +-0.244274f, -0.229776f, -0.215106f, -0.200282f, -0.185322f, -0.170242f, -0.155055f, -0.139777f, +-0.124420f, -0.108997f, -0.093518f, -0.077994f, -0.062435f, -0.046848f, -0.031242f, -0.015624f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_10[256] = { +-0.666667f, -0.666667f, -0.666666f, -0.666666f, -0.666664f, -0.666661f, -0.666657f, -0.666652f, +-0.666644f, -0.666634f, -0.666622f, -0.666606f, -0.666587f, -0.666564f, -0.666537f, -0.666505f, +-0.666468f, -0.666425f, -0.666376f, -0.666320f, -0.666257f, -0.666185f, -0.666105f, -0.666016f, +-0.665917f, -0.665807f, -0.665685f, -0.665551f, -0.665404f, -0.665242f, -0.665065f, -0.664872f, +-0.664662f, -0.664434f, -0.664186f, -0.663917f, -0.663625f, -0.663310f, -0.662970f, -0.662604f, +-0.662208f, -0.661783f, -0.661326f, -0.660834f, -0.660307f, -0.659741f, -0.659135f, -0.658485f, +-0.657789f, -0.657045f, -0.656250f, -0.655400f, -0.654491f, -0.653522f, -0.652486f, -0.651382f, +-0.650204f, -0.648948f, -0.647610f, -0.646184f, -0.644665f, -0.643047f, -0.641325f, -0.639491f, +-0.637540f, -0.635465f, -0.633257f, -0.630910f, -0.628414f, -0.625761f, -0.622943f, -0.619948f, +-0.616769f, -0.613393f, -0.609811f, -0.606010f, -0.601981f, -0.597711f, -0.593187f, -0.588399f, +-0.583333f, -0.577978f, -0.572322f, -0.566353f, -0.560059f, -0.553431f, -0.546459f, -0.539134f, +-0.531447f, -0.523393f, -0.514967f, -0.506166f, -0.496987f, -0.487431f, -0.477501f, -0.467200f, +-0.456535f, -0.445512f, -0.434141f, -0.422433f, -0.410401f, -0.398057f, -0.385417f, -0.372494f, +-0.359306f, -0.345868f, -0.332196f, -0.318307f, -0.304217f, -0.289941f, -0.275495f, -0.260893f, +-0.246151f, -0.231281f, -0.216296f, -0.201208f, -0.186029f, -0.170770f, -0.155440f, -0.140049f, +-0.124605f, -0.109117f, -0.093591f, -0.078035f, -0.062455f, -0.046857f, -0.031245f, -0.015624f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_11[256] = { +-0.733333f, -0.733333f, -0.733333f, -0.733332f, -0.733330f, -0.733327f, -0.733321f, -0.733314f, +-0.733304f, -0.733292f, -0.733275f, -0.733255f, -0.733230f, -0.733201f, -0.733165f, -0.733124f, +-0.733075f, -0.733020f, -0.732955f, -0.732882f, -0.732800f, -0.732706f, -0.732602f, -0.732485f, +-0.732354f, -0.732210f, -0.732050f, -0.731873f, -0.731679f, -0.731466f, -0.731233f, -0.730978f, +-0.730700f, -0.730397f, -0.730067f, -0.729710f, -0.729322f, -0.728903f, -0.728449f, -0.727960f, +-0.727432f, -0.726862f, -0.726250f, -0.725591f, -0.724882f, -0.724122f, -0.723305f, -0.722430f, +-0.721492f, -0.720487f, -0.719412f, -0.718261f, -0.717032f, -0.715717f, -0.714313f, -0.712813f, +-0.711213f, -0.709506f, -0.707686f, -0.705745f, -0.703678f, -0.701476f, -0.699131f, -0.696636f, +-0.693982f, -0.691160f, -0.688161f, -0.684974f, -0.681591f, -0.678000f, -0.674191f, -0.670154f, +-0.665877f, -0.661350f, -0.656561f, -0.651499f, -0.646154f, -0.640515f, -0.634571f, -0.628313f, +-0.621732f, -0.614820f, -0.607570f, -0.599974f, -0.592029f, -0.583730f, -0.575074f, -0.566062f, +-0.556694f, -0.546972f, -0.536899f, -0.526482f, -0.515726f, -0.504639f, -0.493233f, -0.481515f, +-0.469498f, -0.457195f, -0.444618f, -0.431780f, -0.418696f, -0.405378f, -0.391842f, -0.378100f, +-0.364167f, -0.350056f, -0.335780f, -0.321352f, -0.306784f, -0.292087f, -0.277273f, -0.262352f, +-0.247335f, -0.232229f, -0.217046f, -0.201792f, -0.186475f, -0.171104f, -0.155684f, -0.140221f, +-0.124723f, -0.109194f, -0.093638f, -0.078062f, -0.062468f, -0.046862f, -0.031246f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_12[256] = { +-0.800000f, -0.800000f, -0.800000f, -0.799998f, -0.799996f, -0.799991f, -0.799985f, -0.799975f, +-0.799963f, -0.799946f, -0.799925f, -0.799899f, -0.799867f, -0.799828f, -0.799782f, -0.799728f, +-0.799665f, -0.799592f, -0.799509f, -0.799413f, -0.799305f, -0.799183f, -0.799045f, -0.798892f, +-0.798720f, -0.798530f, -0.798319f, -0.798086f, -0.797830f, -0.797548f, -0.797238f, -0.796900f, +-0.796531f, -0.796128f, -0.795690f, -0.795213f, -0.794696f, -0.794136f, -0.793530f, -0.792874f, +-0.792166f, -0.791402f, -0.790579f, -0.789693f, -0.788739f, -0.787714f, -0.786613f, -0.785431f, +-0.784164f, -0.782805f, -0.781350f, -0.779792f, -0.778126f, -0.776344f, -0.774441f, -0.772407f, +-0.770238f, -0.767923f, -0.765456f, -0.762828f, -0.760029f, -0.757050f, -0.753883f, -0.750518f, +-0.746943f, -0.743150f, -0.739128f, -0.734866f, -0.730354f, -0.725583f, -0.720540f, -0.715218f, +-0.709606f, -0.703694f, -0.697475f, -0.690940f, -0.684083f, -0.676897f, -0.669377f, -0.661520f, +-0.653321f, -0.644781f, -0.635898f, -0.626674f, -0.617111f, -0.607214f, -0.596986f, -0.586434f, +-0.575567f, -0.564391f, -0.552918f, -0.541156f, -0.529117f, -0.516812f, -0.504253f, -0.491452f, +-0.478422f, -0.465174f, -0.451722f, -0.438077f, -0.424251f, -0.410255f, -0.396103f, -0.381803f, +-0.367368f, -0.352806f, -0.338128f, -0.323344f, -0.308461f, -0.293488f, -0.278434f, -0.263304f, +-0.248107f, -0.232849f, -0.217536f, -0.202174f, -0.186768f, -0.171323f, -0.155844f, -0.140335f, +-0.124801f, -0.109244f, -0.093669f, -0.078079f, -0.062477f, -0.046865f, -0.031247f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_13[256] = { +-0.866667f, -0.866667f, -0.866666f, -0.866664f, -0.866661f, -0.866655f, -0.866647f, -0.866635f, +-0.866618f, -0.866597f, -0.866570f, -0.866535f, -0.866494f, -0.866443f, -0.866383f, -0.866313f, +-0.866230f, -0.866135f, -0.866025f, -0.865900f, -0.865757f, -0.865596f, -0.865415f, -0.865212f, +-0.864986f, -0.864734f, -0.864455f, -0.864146f, -0.863805f, -0.863430f, -0.863019f, -0.862568f, +-0.862075f, -0.861536f, -0.860950f, -0.860312f, -0.859619f, -0.858866f, -0.858051f, -0.857169f, +-0.856216f, -0.855186f, -0.854075f, -0.852878f, -0.851590f, -0.850204f, -0.848714f, -0.847114f, +-0.845398f, -0.843558f, -0.841586f, -0.839477f, -0.837220f, -0.834808f, -0.832233f, -0.829485f, +-0.826556f, -0.823435f, -0.820114f, -0.816581f, -0.812828f, -0.808845f, -0.804621f, -0.800146f, +-0.795410f, -0.790404f, -0.785119f, -0.779546f, -0.773676f, -0.767502f, -0.761016f, -0.754213f, +-0.747087f, -0.739635f, -0.731852f, -0.723737f, -0.715290f, -0.706510f, -0.697400f, -0.687961f, +-0.678199f, -0.668118f, -0.657724f, -0.647026f, -0.636029f, -0.624744f, -0.613180f, -0.601348f, +-0.589256f, -0.576917f, -0.564342f, -0.551541f, -0.538527f, -0.525309f, -0.511900f, -0.498310f, +-0.484549f, -0.470629f, -0.456560f, -0.442350f, -0.428010f, -0.413549f, -0.398974f, -0.384295f, +-0.369519f, -0.354653f, -0.339705f, -0.324681f, -0.309587f, -0.294429f, -0.279214f, -0.263945f, +-0.248628f, -0.233267f, -0.217867f, -0.202433f, -0.186966f, -0.171472f, -0.155953f, -0.140413f, +-0.124854f, -0.109279f, -0.093691f, -0.078091f, -0.062483f, -0.046868f, -0.031248f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_14[256] = { +-0.933333f, -0.933333f, -0.933332f, -0.933330f, -0.933326f, -0.933319f, -0.933308f, -0.933292f, +-0.933271f, -0.933243f, -0.933207f, -0.933162f, -0.933107f, -0.933041f, -0.932963f, -0.932870f, +-0.932761f, -0.932635f, -0.932490f, -0.932324f, -0.932136f, -0.931922f, -0.931682f, -0.931413f, +-0.931111f, -0.930775f, -0.930403f, -0.929990f, -0.929534f, -0.929032f, -0.928480f, -0.927874f, +-0.927211f, -0.926487f, -0.925697f, -0.924836f, -0.923900f, -0.922883f, -0.921781f, -0.920587f, +-0.919295f, -0.917900f, -0.916394f, -0.914770f, -0.913022f, -0.911142f, -0.909121f, -0.906952f, +-0.904625f, -0.902133f, -0.899466f, -0.896614f, -0.893569f, -0.890320f, -0.886857f, -0.883171f, +-0.879252f, -0.875090f, -0.870674f, -0.865996f, -0.861046f, -0.855816f, -0.850296f, -0.844480f, +-0.838360f, -0.831930f, -0.825184f, -0.818118f, -0.810729f, -0.803014f, -0.794973f, -0.786603f, +-0.777908f, -0.768889f, -0.759549f, -0.749893f, -0.739926f, -0.729655f, -0.719086f, -0.708227f, +-0.697088f, -0.685677f, -0.674004f, -0.662078f, -0.649911f, -0.637512f, -0.624893f, -0.612063f, +-0.599033f, -0.585813f, -0.572414f, -0.558845f, -0.545117f, -0.531238f, -0.517218f, -0.503066f, +-0.488789f, -0.474396f, -0.459895f, -0.445293f, -0.430597f, -0.415813f, -0.400948f, -0.386007f, +-0.370997f, -0.355923f, -0.340789f, -0.325601f, -0.310363f, -0.295078f, -0.279752f, -0.264387f, +-0.248988f, -0.233557f, -0.218097f, -0.202612f, -0.187104f, -0.171576f, -0.156029f, -0.140467f, +-0.124891f, -0.109303f, -0.093706f, -0.078100f, -0.062487f, -0.046870f, -0.031248f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; +float symmetry_table_15[256] = { +-1.000000f, -1.000000f, -0.999999f, -0.999996f, -0.999990f, -0.999981f, -0.999966f, -0.999946f, +-0.999918f, -0.999881f, -0.999834f, -0.999775f, -0.999702f, -0.999615f, -0.999511f, -0.999387f, +-0.999243f, -0.999076f, -0.998882f, -0.998661f, -0.998409f, -0.998124f, -0.997802f, -0.997440f, +-0.997035f, -0.996583f, -0.996081f, -0.995524f, -0.994908f, -0.994229f, -0.993482f, -0.992661f, +-0.991762f, -0.990778f, -0.989704f, -0.988534f, -0.987260f, -0.985876f, -0.984375f, -0.982748f, +-0.980989f, -0.979089f, -0.977038f, -0.974829f, -0.972452f, -0.969898f, -0.967157f, -0.964218f, +-0.961074f, -0.957712f, -0.954123f, -0.950296f, -0.946223f, -0.941893f, -0.937297f, -0.932426f, +-0.927270f, -0.921822f, -0.916075f, -0.910022f, -0.903657f, -0.896976f, -0.889974f, -0.882649f, +-0.875000f, -0.867024f, -0.858724f, -0.850101f, -0.841157f, -0.831897f, -0.822325f, -0.812447f, +-0.802270f, -0.791801f, -0.781047f, -0.770018f, -0.758723f, -0.747171f, -0.735373f, -0.723337f, +-0.711074f, -0.698593f, -0.685907f, -0.673023f, -0.659952f, -0.646704f, -0.633288f, -0.619714f, +-0.605989f, -0.592123f, -0.578125f, -0.564001f, -0.549760f, -0.535409f, -0.520954f, -0.506403f, +-0.491762f, -0.477036f, -0.462232f, -0.447354f, -0.432408f, -0.417399f, -0.402331f, -0.387208f, +-0.372035f, -0.356815f, -0.341552f, -0.326249f, -0.310909f, -0.295536f, -0.280132f, -0.264701f, +-0.249243f, -0.233762f, -0.218261f, -0.202740f, -0.187202f, -0.171650f, -0.156084f, -0.140506f, +-0.124918f, -0.109321f, -0.093716f, -0.078106f, -0.062490f, -0.046871f, -0.031249f, -0.015625f, +0.000000f, 0.015625f, 0.031249f, 0.046871f, 0.062490f, 0.078106f, 0.093716f, 0.109321f, +0.124918f, 0.140506f, 0.156084f, 0.171650f, 0.187202f, 0.202740f, 0.218261f, 0.233762f, +0.249243f, 0.264701f, 0.280132f, 0.295536f, 0.310909f, 0.326249f, 0.341552f, 0.356815f, +0.372035f, 0.387208f, 0.402331f, 0.417399f, 0.432408f, 0.447354f, 0.462232f, 0.477036f, +0.491762f, 0.506403f, 0.520954f, 0.535409f, 0.549760f, 0.564001f, 0.578125f, 0.592123f, +0.605989f, 0.619714f, 0.633288f, 0.646704f, 0.659952f, 0.673023f, 0.685907f, 0.698593f, +0.711074f, 0.723337f, 0.735373f, 0.747171f, 0.758723f, 0.770018f, 0.781047f, 0.791801f, +0.802270f, 0.812447f, 0.822325f, 0.831897f, 0.841157f, 0.850101f, 0.858724f, 0.867024f, +0.875000f, 0.882649f, 0.889974f, 0.896976f, 0.903657f, 0.910022f, 0.916075f, 0.921822f, +0.927270f, 0.932426f, 0.937297f, 0.941893f, 0.946223f, 0.950296f, 0.954123f, 0.957712f, +0.961074f, 0.964218f, 0.967157f, 0.969898f, 0.972452f, 0.974829f, 0.977038f, 0.979089f, +0.980989f, 0.982748f, 0.984375f, 0.985876f, 0.987260f, 0.988534f, 0.989704f, 0.990778f, +0.991762f, 0.992661f, 0.993482f, 0.994229f, 0.994908f, 0.995524f, 0.996081f, 0.996583f, +0.997035f, 0.997440f, 0.997802f, 0.998124f, 0.998409f, 0.998661f, 0.998882f, 0.999076f, +0.999243f, 0.999387f, 0.999511f, 0.999615f, 0.999702f, 0.999775f, 0.999834f, 0.999881f, +0.999918f, 0.999946f, 0.999966f, 0.999981f, 0.999990f, 0.999996f, 0.999999f, 1.000000f +}; diff --git a/plugins/community/repos/squinkylabs-plug1/test.mk b/plugins/community/repos/squinkylabs-plug1/test.mk index 1cbc7e3e..d747dcd6 100644 --- a/plugins/community/repos/squinkylabs-plug1/test.mk +++ b/plugins/community/repos/squinkylabs-plug1/test.mk @@ -6,6 +6,7 @@ TEST_SOURCES = $(wildcard test/*.cpp) TEST_SOURCES += $(wildcard dsp/**/*.cpp) TEST_SOURCES += $(wildcard dsp/third-party/falco/*.cpp) TEST_SOURCES += $(wildcard sqsrc/**/*.cpp) +TEST_SOURCES += dsp/third-party/src/minblep.cpp TEST_SOURCES += dsp/third-party/kiss_fft130/tools/kiss_fftr.c TEST_SOURCES += dsp/third-party/kiss_fft130/kiss_fft.c diff --git a/plugins/community/repos/squinkylabs-plug1/test/Analyzer.cpp b/plugins/community/repos/squinkylabs-plug1/test/Analyzer.cpp new file mode 100644 index 00000000..2a06b69b --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/Analyzer.cpp @@ -0,0 +1,375 @@ +#include + +#include "asserts.h" +#include "Analyzer.h" +#include "AudioMath.h" +#include "FFT.h" +#include "FFTData.h" +#include "SinOscillator.h" +#include "AudioMath.h" + + +int Analyzer::getMax(const FFTDataCpx& data) +{ + return getMaxExcluding(data, std::set()); +} + +int Analyzer::getMaxExcluding(const FFTDataCpx& data, int exclusion) +{ + std::set exclusions; + exclusions.insert(exclusion); + return getMaxExcluding(data, exclusions); +} + +int Analyzer::getMaxExcluding(const FFTDataCpx& data, std::set exclusions) +{ + int maxBin = -1; + float maxMag = 0; + for (int i = 0; i < data.size(); ++i) { + if (exclusions.find(i) == exclusions.end()) { + const float mag = std::abs(data.get(i)); + if (mag > maxMag) { + maxMag = mag; + maxBin = i; + } + } + } + return maxBin; +} + +static int getMaxExcluding(const FFTDataCpx&, int excludeBin); + +float Analyzer::getSlope(const FFTDataCpx& response, float fTest, float sampleRate) +{ + const int bin1 = FFT::freqToBin(fTest, sampleRate, response.size()); + const int bin2 = bin1 * 4; // two octaves + assert(bin2 < response.size()); + const float mag1 = response.getAbs(bin1); + const float mag2 = response.getAbs(bin2); + return float(AudioMath::db(mag2) - AudioMath::db(mag1)) / 2; +} + +std::tuple Analyzer::getMaxAndShoulders(const FFTDataCpx& data, float atten) +{ + assert(atten < 0); + int maxBin = getMax(data); + int iMax = data.size() / 2; + + assert(maxBin >= 0); + const double dbShoulder = atten + AudioMath::db(std::abs(data.get(maxBin))); + + int i; + int iShoulderLow = -1; + int iShoulderHigh = -1; + bool done; + for (done = false, i = maxBin; !done; ) { + const double db = AudioMath::db(std::abs(data.get(i))); + if (i >= iMax) { + done = true; + } else if (db <= dbShoulder) { + iShoulderHigh = i; + done = true; + } else { + i++; + } + } + for (done = false, i = maxBin; !done; ) { + const double db = AudioMath::db(std::abs(data.get(i))); + if (db <= dbShoulder) { + iShoulderLow = i; + done = true; + } else if (i <= 0) { + done = true; + } else { + i--; + } + } + // printf("out of loop, imax=%d, shoulders=%d,%d\n", maxBin, iShoulderLow, iShoulderHigh); + + return std::make_tuple(iShoulderLow, maxBin, iShoulderHigh); +} + +std::tuple Analyzer::getMaxAndShouldersFreq(const FFTDataCpx& data, float atten, float sampleRate) +{ + auto stats = getMaxAndShoulders(data, atten); + return std::make_tuple(FFT::bin2Freq(std::get<0>(stats), sampleRate, data.size()), + FFT::bin2Freq(std::get<1>(stats), sampleRate, data.size()), + FFT::bin2Freq(std::get<2>(stats), sampleRate, data.size()) + ); +} + + +// TODO: pass in cutoff +std::vector Analyzer::getFeatures(const FFTDataCpx& data, float sensitivityDb, float sampleRate, float dbMinCutoff) +{ + // TODO: pass this in + // const float dbMinCutoff = -100; + assert(sensitivityDb > 0); + std::vector ret; + float lastDb = 10000000000; + // only look at the below nyquist stuff + for (int i = 0; i < data.size() / 2; ++i) { + const float db = (float) AudioMath::db(std::abs(data.get(i))); + if ((std::abs(db - lastDb) >= sensitivityDb) && (db > dbMinCutoff)) { + double freq = FFT::bin2Freq(i, sampleRate, data.size()); + FPoint p(float(freq), db); + // printf("feature at bin %d, db=%f raw val=%f\n", i, db, std::abs(data.get(i))); + ret.push_back(p); + lastDb = db; + } + } + return ret; +} + + +std::vector Analyzer::getPeaks(const FFTDataCpx& data, float sampleRate, float minDb) +{ + std::vector ret; + + // only look at the below nyquist stuff + for (int i = 0; i < data.size() / 2; ++i) { + const double mag = std::abs(data.get(i)); + const double db = AudioMath::db(mag); + bool isPeak = false; + if (i < 2 || i >(data.size() / 2) - 2) { + isPeak = true; + } else { + + const double magBelow = std::abs(data.get(i - 1)); + const double magAbove = std::abs(data.get(i + 1)); + if (mag <= magBelow || mag <= magAbove) { + isPeak = false; + } else { + +#if 1 + double average = 0; + for (int j = 0; j < 5; ++j) { + average += std::abs(data.get(i + j - 2)); + } + average -= mag; // subtract out our contribution + average /= 4.0; + double a = std::abs(data.get(i - 2)); + double b = std::abs(data.get(i - 1)); + double c = std::abs(data.get(i - 0)); + double d = std::abs(data.get(i + 1)); + double e = std::abs(data.get(i + 2)); + isPeak = (mag > (average * 2)); +#else + //this way average db + double average = 0; + for (int j = 0; j < 5; ++j) { + average += AudioMath::db(std::abs(data.get(i + j - 2))); + } + isPeak = (db > (average + 3)); +#endif + //if (isPeak) printf("accepted peak at %f db, average was %f\n", db, average); + } + } + if (db < minDb) { + isPeak = false; + } + + if (isPeak) { + //if ((std::abs(db - lastDb) >= sensitivityDb) && (db > dbMinCutoff)) { + double freq = FFT::bin2Freq(i, sampleRate, data.size()); + FPoint p(float(freq), (float) db); + // printf("feature at bin %d, db=%f raw val=%f\n", i, db, std::abs(data.get(i))); + ret.push_back(p); + } + } + return ret; +} + +void Analyzer::getAndPrintFeatures(const FFTDataCpx& data, float sensitivityDb, float sampleRate, float dbMinCutoff) +{ + auto features = getFeatures(data, sensitivityDb, sampleRate, dbMinCutoff); + printf("there are %d features\n", (int) features.size()); + for (int i = 0; i < (int) features.size(); ++i) { + printf("feature: freq=%.2f, db=%.2f\n", features[i].freq, features[i].gainDb); + } +} + +void Analyzer::getAndPrintPeaks(const FFTDataCpx& data, float sampleRate, float minDb) +{ + auto peaks = getPeaks(data, sampleRate, minDb); + printf("there are %d peaks\n", (int) peaks.size()); + for (int i = 0; i < (int) peaks.size(); ++i) { + printf("peak: freq=%f, db=%f\n", peaks[i].freq, peaks[i].gainDb); + } +} + + +void Analyzer::getAndPrintFreqOfInterest(const FFTDataCpx& data, float sampleRate, const std::vector& freqOfInterest) +{ + for (double freq : freqOfInterest) { + int bin = FFT::freqToBin((float) freq, sampleRate, data.size()); + if (bin > 2 && bin < data.size() - 2) { + + ; + double a = AudioMath::db(std::abs(data.get(bin - 2))); + double b = AudioMath::db(std::abs(data.get(bin - 1))); + double c = AudioMath::db(std::abs(data.get(bin))); + double d = AudioMath::db(std::abs(data.get(bin + 1))); + double e = AudioMath::db(std::abs(data.get(bin + 2))); + + double db = std::max(e, std::max( + std::max(a, b), + std::max(c, d))); + + printf("freq=%.2f db=%f range:%.2f,%.2f,%.2f,%.2f,%.2f\n", freq, db, + a, b, c, d, e + ); + } + } + +#if 0 + for (int i = 0; i < data.size() / 2; ++i) { + double freq = FFT::bin2Freq(i, sampleRate, data.size()); + } +#endif + +} + +void Analyzer::getFreqResponse(FFTDataCpx& out, std::function func) +{ + /** + * testSignal is the time domain sweep + * testOutput if the time domain output of "func" + * testSpecrum is the FFT of testSignal + * spectrum is the FFT of testOutput + + */ + // First set up a test signal + const int numSamples = out.size(); + // std::vector testSignal(numSamples); + FFTDataReal testSignal(numSamples); + generateSweep(44100, testSignal.data(), numSamples, 20, 20000); + + // Run the test signal though func, capture output in fft real + FFTDataReal testOutput(numSamples); + for (int i = 0; i < out.size(); ++i) { + const float y = func(testSignal.get(i)); + testOutput.set(i, y); + } + + // then take the inverse fft + FFTDataCpx spectrum(numSamples); + FFT::forward(&spectrum, testOutput); + + + // take the forward FFT of the test signal + FFTDataCpx testSpectrum(numSamples); + FFT::forward(&testSpectrum, testSignal); + + for (int i = 0; i < numSamples; ++i) { + const cpx x = (std::abs(testSpectrum.get(i)) == 0) ? 0 : + spectrum.get(i) / testSpectrum.get(i); + out.set(i, x); + } + +#if 0 + for (int i = 0; i < numSamples; ++i) { + printf("%d, sig=%f out=%f mag(sig)=%f mag(out)=%f rsp=%f\n", + i, testSignal.get(i), testOutput.get(i), + std::abs(testSpectrum.get(i)), + std::abs(spectrum.get(i)), + std::abs(out.get(i)) + ); + } +#endif +} + + +double Analyzer::hamming(int iSample, int totalSamples) +{ + const double a0 = .53836; + double theta = AudioMath::Pi * 2.0 * double(iSample) / double(totalSamples - 1); + return a0 - (1.0 - a0) * std::cos(theta); +} + +void Analyzer::getSpectrum(FFTDataCpx& out, bool useWindow, std::function func) +{ + + const int numSamples = out.size(); + + // Run the test signal though func, capture output in fft real + FFTDataReal testOutput(numSamples); + for (int i = 0; i < out.size(); ++i) { + const float w = useWindow ? (float) hamming(i, out.size()) : 1; + const float y = float(func() * w); + testOutput.set(i, y); + } + + FFT::forward(&out, testOutput); + +#if 0 + for (int i = 0; i < numSamples; ++i) { + printf("%d, sig=%f out=%f mag(sig)=%f mag(out)=%f rsp=%f\n", + i, testSignal.get(i), testOutput.get(i), + std::abs(testSpectrum.get(i)), + std::abs(spectrum.get(i)), + std::abs(out.get(i)) + ); + } +#endif +} + +void Analyzer::generateSweep(float sampleRate, float* out, int numSamples, float minFreq, float maxFreq) +{ + assert(maxFreq > minFreq); + const double minLog = std::log2(minFreq); + const double maxLog = std::log2(maxFreq); + const double delta = (maxLog - minLog) / numSamples; + + SinOscillatorParams params; + SinOscillatorState state; + + double fLog = minLog; + for (int i = 0; i < numSamples; ++i, fLog += delta) { + const double freq = std::pow(2, fLog); + assert(freq < (sampleRate / 2)); + + SinOscillator::setFrequency(params, freq / sampleRate); + double val = SinOscillator::run(state, params); + + // ::printf("out[%d] = %f f=%f\n", i, val, freq); + out[i] = (float) val; + } +} + +double Analyzer::makeEvenPeriod(double desiredFreq, double sampleRate, int numSamples) +{ + assert(desiredFreq <= (sampleRate / 2.0)); + assert(numSamples > 2); + double desiredPeriodSamples = sampleRate / desiredFreq; + double periodsPerFrame = numSamples / desiredPeriodSamples; + + + //printf("desiredFreq = %f, desired period/ samp = %f, periods per frame = %f\n", desiredFreq, desiredPeriodSamples, periodsPerFrame); + + + double evenPeriodsPerFrame = std::floor(periodsPerFrame); + + double period = (double) numSamples / evenPeriodsPerFrame; + //printf("period = %f\n", period); + double freq = sampleRate / period; + //printf("freq = %f\n", freq); + assert(freq > .0001); // don't want zero + return (freq); +} + +void Analyzer::assertSingleFreq(const FFTDataCpx& spectrum, float expectedFreq, float sampleRate) +{ + assert(expectedFreq < (sampleRate / 2)); + int maxBin = Analyzer::getMax(spectrum); + double maxFreq = FFT::bin2Freq(maxBin, sampleRate, spectrum.size()); + + int nextMaxBin = Analyzer::getMaxExcluding(spectrum, maxBin); + float maxPower = std::abs(spectrum.get(maxBin)); + float nextMaxPower = std::abs(spectrum.get(nextMaxBin)); + + double spuriousDb = AudioMath::db(nextMaxPower / maxPower); + + assertClose(maxFreq, expectedFreq, 1); + assertLE(spuriousDb, 70); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/Analyzer.h b/plugins/community/repos/squinkylabs-plug1/test/Analyzer.h new file mode 100644 index 00000000..3f80dfe9 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/Analyzer.h @@ -0,0 +1,83 @@ +#pragma once + +#include +#include +#include + +#include "FFTData.h" +#include "FFT.h" + + +class Analyzer +{ +public: + Analyzer() = delete; + + class FPoint + { + public: + FPoint(float f, float g) : freq(f), gainDb(g) + { + } + float freq; + float gainDb; + }; + + static std::vector getFeatures(const FFTDataCpx&, float sensitivityDb, float sampleRate, float minDb); + static std::vector getPeaks(const FFTDataCpx&, float sampleRate, float minDb); + static void getAndPrintFeatures(const FFTDataCpx&, float sensitivityDb, float sampleRate, float minDb); + static void getAndPrintPeaks(const FFTDataCpx&, float sampleRate, float minDb); + static void getAndPrintFreqOfInterest(const FFTDataCpx&, float sampleRate, const std::vector& freqOfInterest); + + static int getMax(const FFTDataCpx&); + static int getMaxExcluding(const FFTDataCpx&, std::set exclusions); + static int getMaxExcluding(const FFTDataCpx&, int exclusion); + + /** + * 0 = low freq bin # + * 1 = peak bin # + * 2 = high bin# + * dbAtten (typically -3 + */ + static std::tuple getMaxAndShoulders(const FFTDataCpx&, float dbAtten); + + /** + * 0 = low freq + * 1 = peak freq + * 2 = high freq + * dbAtten (typically -3 + */ + static std::tuple getMaxAndShouldersFreq(const FFTDataCpx&, float dbAtten, float sampleRate); + + /** + * Calculates the frequency response of func + * by calling it with a known test signal. + */ + static void getFreqResponse(FFTDataCpx& out, std::function func); + + /** + * Calculates the spectrum of func + * by calling it can capturing its output + */ + static void getSpectrum(FFTDataCpx& out, bool useWindow, std::function func); + + static float getSlope(const FFTDataCpx& response, float fTest, float sampleRate); + + static void generateSweep(float sampleRate, float* out, int numSamples, float minFreq, float maxFreq); + + /** + * Adjusts desiredFreq to a frequency that is close, but is an exact division of + * numSamples. + */ + static double makeEvenPeriod(double desiredFreq, double sampleRate, int numSamples); + + static double hamming(int iSample, int totalSamples); + + /** + * Assert that there is a single frequency in spectrum, and that it is close to + * expectedFreq. + * + * In other words, check that the signal was a reasonably pure sin. + */ + static void assertSingleFreq(const FFTDataCpx& spectrum, float expectedFreq, float sampleRate); +}; diff --git a/plugins/community/repos/squinkylabs-plug1/test/MeasureTime.h b/plugins/community/repos/squinkylabs-plug1/test/MeasureTime.h index 095f381c..5ef56340 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/MeasureTime.h +++ b/plugins/community/repos/squinkylabs-plug1/test/MeasureTime.h @@ -37,13 +37,16 @@ public: /** * Executes function "func" and measures how long it takes. - * Will call func in a tight look lasting minTime seconds. + * Will call func in a tight loop lasting minTime seconds. * When done, prints out statistics. + * + * returns - percent used */ - static void run(const char * name, std::function func, float minTime) + static double run(double overhead, const char * name, std::function func, float minTime) { int64_t iterations; bool done = false; + double percent = 0; //keep increasing the number of iterations until we last at least minTime seconds for (iterations = 100; !done; iterations *= 2) { @@ -51,7 +54,8 @@ public: if (elapsed >= minTime) { double itersPerSec = iterations / elapsed; double full = 44100; - double percent = full * 100 / itersPerSec; + percent = full * 100 / itersPerSec; + percent -= overhead; printf("\nmeasure %s over time %f\n", name, minTime); printf("did %" PRId64 " iterations in %f seconds\n", iterations, elapsed); @@ -63,6 +67,7 @@ public: done = true; } } + return percent; } /** @@ -82,10 +87,9 @@ public: } }; - /** * Simple producer / consumer for test data. - * Serves up a precalculated list of random numbers. + * Serves up a pre-calculated list of random numbers. */ template class TestBuffers @@ -121,7 +125,6 @@ private: static T destData[size]; }; - template T TestBuffers::sourceData[size]; @@ -133,13 +136,3 @@ size_t TestBuffers::sourceIndex = 0; template size_t TestBuffers::destIndex = 512; - - -/** - * Simple timer implementation for running inside Visual Studio - */ - - - - - diff --git a/plugins/community/repos/squinkylabs-plug1/test/SqTime.h b/plugins/community/repos/squinkylabs-plug1/test/SqTime.h index f37b0e0d..44241525 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/SqTime.h +++ b/plugins/community/repos/squinkylabs-plug1/test/SqTime.h @@ -31,7 +31,6 @@ public: private: static double frequency; }; -double SqTime::frequency = 0; #else #include diff --git a/plugins/community/repos/squinkylabs-plug1/test/TestSignal.h b/plugins/community/repos/squinkylabs-plug1/test/TestSignal.h index aa51b8ce..8a451510 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/TestSignal.h +++ b/plugins/community/repos/squinkylabs-plug1/test/TestSignal.h @@ -83,7 +83,7 @@ inline double TestSignal::measureOutput(int numSamples, std::function fu for (int i = 0; i < numSamples; ++i) { buffer[i] = func(); } - + return getRMS(buffer.data(), numSamples); } \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/TimeStatsCollector.h b/plugins/community/repos/squinkylabs-plug1/test/TimeStatsCollector.h index 7941afa0..c03ce22d 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/TimeStatsCollector.h +++ b/plugins/community/repos/squinkylabs-plug1/test/TimeStatsCollector.h @@ -19,7 +19,7 @@ public: */ void start() { - startTime = SqTime::seconds(); + startTime = SqTime::seconds(); } /** @@ -28,36 +28,36 @@ public: */ void stop(int numLoops) { - const double stop = SqTime::seconds(); - const double delta = stop - startTime; - numDataPoints += numLoops; - totalTimeFrame += delta; - if (delta < minTime) { - minTime = delta; - } else if (delta > maxTime) { - maxTime = delta; - } - - if (numDataPoints > 1000) { - const double avgTime = totalTimeFrame / numDataPoints; - const double srTime = (1.0 / 44100.0); - const double ratio = avgTime / srTime; + const double stop = SqTime::seconds(); + const double delta = stop - startTime; + numDataPoints += numLoops; + totalTimeFrame += delta; + if (delta < minTime) { + minTime = delta; + } else if (delta > maxTime) { + maxTime = delta; + } + + if (numDataPoints > 1000) { + const double avgTime = totalTimeFrame / numDataPoints; + const double srTime = (1.0 / 44100.0); + const double ratio = avgTime / srTime; totalTimeGlobal += avgTime; numFramesInTotal++; double runningAvg = totalTimeGlobal / (numFramesInTotal * srTime); printf("\nsrTime=%f avtTime=%f\n", srTime, avgTime); - printf("this block: %f%% min=%f max=%f globalmax=%f running avg=%f\n", + printf("this block: %f%% min=%f max=%f globalmax=%f running avg=%f\n", ratio * 100, minTime, maxTime, globalMax, runningAvg * 100); if (globalMax < maxTime) { globalMax = maxTime; } - numDataPoints=0; - totalTimeFrame = 0; - minTime = 1000000000; - maxTime = -100000000000; - } + numDataPoints = 0; + totalTimeFrame = 0; + minTime = 1000000000; + maxTime = -100000000000; + } } private: diff --git a/plugins/community/repos/squinkylabs-plug1/test/main.cpp b/plugins/community/repos/squinkylabs-plug1/test/main.cpp index 3629eaaf..64323b1f 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/main.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/main.cpp @@ -28,15 +28,37 @@ extern void testFinalLeaks(); extern void testClockMult(); extern void testTremolo(); extern void testGateTrigger(); +extern void testAnalyzer(); +extern void testFilter(); +extern void testStochasticGrammar(); +extern void testGMR(); +extern void testLowpassFilter(); +extern void testPoly(); +extern void testVCO(); +extern void testFilterDesign(); +extern void testVCOAlias(); +extern void testSin(); +extern void testMinBLEPVCO(); +extern void testRateConversion(); +extern void testDelay(); +extern void testSpline(bool emit); +extern void testButterLookup(); int main(int argc, char ** argv) { bool runPerf = false; bool extended = false; + bool runShaperGen = false; if (argc > 1) { std::string arg = argv[1]; if (arg == "--ext") { extended = true; + } else if (arg == "--perf") { + runPerf = true; + } else if (arg == "--shaper") { + runShaperGen = true; + } else { + printf("%s is not a valid command line argument\n", arg.c_str()); } } #ifdef _PERF @@ -49,6 +71,11 @@ int main(int argc, char ** argv) // Want to be sure we are testing the case we care about. assert(sizeof(size_t) == 8); + if (runShaperGen) { + testSpline(true); + return 0; + } + testAudioMath(); testRingBuffer(); testGateTrigger(); @@ -59,25 +86,51 @@ int main(int argc, char ** argv) testBiquad(); testSaw(); testClockMult(); + testDelay(); + testPoly(); testSinOscillator(); + testMinBLEPVCO(); testHilbert(); - testStateVariable(); + testButterLookup(); + testSpline(false); + testVCO(); + + // testSin(); + + testFFT(); + testAnalyzer(); + testRateConversion(); + + + // printf("skipping lots of tests\n"); +#if 1 + testStateVariable(); testFFTCrossFader(); - testThread(extended); + if (extended) { + testThread(extended); + } + + testLowpassFilter(); + testFilter(); + + testStochasticGrammar(); + testGMR(); // after testing all the components, test composites. testTremolo(); testColoredNoise(); testFrequencyShifter(); testVocalAnimator(); - +#endif if (runPerf) { perfTest(); } + + testFilterDesign(); testFinalLeaks(); // When we run inside Visual Studio, don't exit debugger immediately diff --git a/plugins/community/repos/squinkylabs-plug1/test/perfTest.cpp b/plugins/community/repos/squinkylabs-plug1/test/perfTest.cpp index d1569819..9b039c1e 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/perfTest.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/perfTest.cpp @@ -3,6 +3,9 @@ #include #include +#include "EvenVCO.h" +//#include "EvenVCO_orig.h" + #include "AudioMath.h" #include "BiquadParams.h" #include "BiquadFilter.h" @@ -15,6 +18,15 @@ #include "Tremolo.h" #include "VocalAnimator.h" #include "VocalFilter.h" +#include "LFN.h" +#include "GMR.h" +#include "CHB.h" +#include "FunVCOComposite.h" +#include "EV3.h" +#include "daveguide.h" +#include "Shaper.h" +#include "Super.h" + using Shifter = FrequencyShifter; using Animator = VocalAnimator; @@ -22,8 +34,13 @@ using VocFilter = VocalFilter; using Colors = ColoredNoise; using Trem = Tremolo; + #include "MeasureTime.h" +#if defined(_MSC_VER) || defined(ARCH_WIN) +double SqTime::frequency = 0; +#endif + // There are many tests that are disabled with #if 0. // In most cases they still work, but don't need to be run regularly @@ -34,9 +51,7 @@ static void test1() srand(57); const double scale = 1.0 / RAND_MAX; - MeasureTime::run("test1 (do nothing)", [&d, scale]() { - return TestBuffers::get(); - }, 1); + MeasureTime::run("test1 sin", []() { float x = std::sin(TestBuffers::get()); @@ -98,6 +113,26 @@ static void test1() } #endif +double overheadInOut = 0; +double overheadOutOnly = 0; + +static void setup() +{ +#ifdef _DEBUG +// assert(false); // don't run this in debug +#endif + double d = .1; + const double scale = 1.0 / RAND_MAX; + overheadInOut = MeasureTime::run(0.0, "test1 (do nothing i/o)", [&d, scale]() { + return TestBuffers::get(); + }, 1); + + overheadOutOnly = MeasureTime::run(0.0, "test1 (do nothing oo)", [&d, scale]() { + return 0.0f; + }, 1); + +} + template static void testHilbert() { @@ -137,7 +172,8 @@ static void testShifter() fs.inputs[Shifter::AUDIO_INPUT].value = 0; - MeasureTime::run("shifter", [&fs]() { + assert(overheadInOut >= 0); + MeasureTime::run(overheadInOut, "shifter", [&fs]() { fs.inputs[Shifter::AUDIO_INPUT].value = TestBuffers::get(); fs.step(); return fs.outputs[Shifter::SIN_OUTPUT].value; @@ -153,7 +189,7 @@ static void testAnimator() an.inputs[Shifter::AUDIO_INPUT].value = 0; - MeasureTime::run("animator", [&an]() { + MeasureTime::run(overheadInOut, "animator", [&an]() { an.inputs[Shifter::AUDIO_INPUT].value = TestBuffers::get(); an.step(); return an.outputs[Shifter::SIN_OUTPUT].value; @@ -170,15 +206,13 @@ static void testVocalFilter() an.inputs[Shifter::AUDIO_INPUT].value = 0; - MeasureTime::run("vocal filter", [&an]() { + MeasureTime::run(overheadInOut, "vocal filter", [&an]() { an.inputs[Shifter::AUDIO_INPUT].value = TestBuffers::get(); an.step(); return an.outputs[Shifter::SIN_OUTPUT].value; }, 1); } - - static void testColors() { Colors co; @@ -187,7 +221,7 @@ static void testColors() co.init(); - MeasureTime::run("colors", [&co]() { + MeasureTime::run(overheadInOut, "colors", [&co]() { co.step(); return co.outputs[Colors::AUDIO_OUTPUT].value; }, 1); @@ -201,13 +235,447 @@ static void testTremolo() tr.init(); - MeasureTime::run("trem", [&tr]() { + MeasureTime::run(overheadInOut, "trem", [&tr]() { tr.inputs[Trem::AUDIO_INPUT].value = TestBuffers::get(); tr.step(); return tr.outputs[Trem::AUDIO_OUTPUT].value; }, 1); } +static void testLFN() +{ + LFN lfn; + + lfn.setSampleTime(1.0f / 44100.f); + lfn.init(); + + MeasureTime::run(overheadOutOnly, "lfn", [&lfn]() { + lfn.step(); + return lfn.outputs[LFN::OUTPUT].value; + }, 1); +} + +#if 0 +static void testEvenOrig() +{ + EvenVCO_orig lfn; + + lfn.outputs[EvenVCO_orig::EVEN_OUTPUT].active = true; + lfn.outputs[EvenVCO_orig::SINE_OUTPUT].active = true; + lfn.outputs[EvenVCO_orig::TRI_OUTPUT].active = true; + lfn.outputs[EvenVCO_orig::SQUARE_OUTPUT].active = true; + lfn.outputs[EvenVCO_orig::SAW_OUTPUT].active = true; + + for (int i = 0; i < 100; ++i) lfn.step(); + + MeasureTime::run(overheadOutOnly, "Even orig", [&lfn]() { + lfn.inputs[EvenVCO_orig::PITCH1_INPUT].value = TestBuffers::get(); + lfn.step(); + return lfn.outputs[EvenVCO::EVEN_OUTPUT].value; + }, 1); +} +#endif + +static void testEven() +{ + EvenVCO lfn; + + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = true; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = true; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = true; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = true; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = true; + MeasureTime::run(overheadOutOnly, "Even, all outs", [&lfn]() { + lfn.step(); + return lfn.outputs[EvenVCO::EVEN_OUTPUT].value; + }, 1); +} + +static void testEvenEven() +{ + EvenVCO lfn; + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = true; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = false; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = false; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = false; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = false; + + MeasureTime::run(overheadOutOnly, "Even, even only", [&lfn]() { + lfn.step(); + return lfn.outputs[EvenVCO::EVEN_OUTPUT].value; + }, 1); +} + +static void testEvenSin() +{ + EvenVCO lfn; + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = false; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = true; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = false; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = false; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = false; + + MeasureTime::run(overheadOutOnly, "Even, sin only", [&lfn]() { + lfn.step(); + return lfn.outputs[EvenVCO::SAW_OUTPUT].value; + }, 1); +} + +static void testEvenSaw() +{ + EvenVCO lfn; + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = false; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = false; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = false; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = false; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = true; + + for (int i = 0; i < 100; ++i) lfn.step(); + + MeasureTime::run(overheadOutOnly, "Even, saw only", [&lfn]() { + lfn.inputs[EvenVCO::PITCH1_INPUT].value = TestBuffers::get(); + lfn.step(); + return lfn.outputs[EvenVCO::SAW_OUTPUT].value; + }, 1); +} + + +static void testEvenTri() +{ + EvenVCO lfn; + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = false; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = false; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = true; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = false; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = false; + + MeasureTime::run(overheadOutOnly, "Even, tri only", [&lfn]() { + lfn.step(); + return lfn.outputs[EvenVCO::TRI_OUTPUT].value; + }, 1); +} + +static void testEvenSq() +{ + EvenVCO lfn; + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = false; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = false; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = false; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = true; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = false; + + MeasureTime::run(overheadOutOnly, "Even, Sq only", [&lfn]() { + lfn.step(); + return lfn.outputs[EvenVCO::TRI_OUTPUT].value; + }, 1); +} + +static void testEvenSqSaw() +{ + EvenVCO lfn; + + lfn.outputs[EvenVCO::EVEN_OUTPUT].active = false; + lfn.outputs[EvenVCO::SINE_OUTPUT].active = false; + lfn.outputs[EvenVCO::TRI_OUTPUT].active = false; + lfn.outputs[EvenVCO::SQUARE_OUTPUT].active = true; + lfn.outputs[EvenVCO::SAW_OUTPUT].active = true; + + MeasureTime::run(overheadOutOnly, "Even, Sq Saw", [&lfn]() { + lfn.step(); + return lfn.outputs[EvenVCO::TRI_OUTPUT].value; + }, 1); +} + +static void testFun() +{ + FunVCOComposite lfn; + + for (int i = 0; i < lfn.NUM_OUTPUTS; ++i) { + lfn.outputs[i].active = true; + } + + lfn.setSampleRate(44100.f); + const bool isAnalog = false; + lfn.params[FunVCOComposite::MODE_PARAM].value = isAnalog ? 1.0f : 0.f; + + MeasureTime::run(overheadOutOnly, "Fun all on, digital", [&lfn]() { + lfn.step(); + return lfn.outputs[FunVCOComposite::TRI_OUTPUT].value + + lfn.outputs[FunVCOComposite::SAW_OUTPUT].value + + lfn.outputs[FunVCOComposite::SIN_OUTPUT].value + + lfn.outputs[FunVCOComposite::SQR_OUTPUT].value; + }, 1); +} + +static void testFunNone() +{ + FunVCOComposite lfn; + + for (int i = 0; i < lfn.NUM_OUTPUTS; ++i) { + lfn.outputs[i].active = false; + } + + lfn.setSampleRate(44100.f); + + MeasureTime::run(overheadOutOnly, "Fun all off", [&lfn]() { + lfn.step(); + return lfn.outputs[FunVCOComposite::TRI_OUTPUT].value; + }, 1); +} + +static void testFunSaw(bool isAnalog) +{ + FunVCOComposite lfn; + + lfn.outputs[FunVCOComposite::SIN_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::TRI_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::SQR_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::SAW_OUTPUT].active = true; + + // oscillator.analog = TBase::params[MODE_PARAM].value > 0.0f; + lfn.params[FunVCOComposite::MODE_PARAM].value = isAnalog ? 1.0f : 0.f; + + lfn.setSampleRate(44100.f); + + std::string title = isAnalog ? "Fun Saw Analog" : "Fun Saw Digital"; + MeasureTime::run(overheadOutOnly, title.c_str(), [&lfn]() { + lfn.step(); + return lfn.outputs[FunVCOComposite::SAW_OUTPUT].value; + }, 1); +} + +static void testFunSin(bool isAnalog) +{ + FunVCOComposite lfn; + + lfn.outputs[FunVCOComposite::SIN_OUTPUT].active = true; + lfn.outputs[FunVCOComposite::TRI_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::SQR_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::SAW_OUTPUT].active = false; + + lfn.params[FunVCOComposite::MODE_PARAM].value = isAnalog ? 1.0f : 0.f; + + lfn.setSampleRate(44100.f); + + std::string title = isAnalog ? "Fun Sin Analog" : "Fun Sin Digital"; + MeasureTime::run(overheadOutOnly, title.c_str(), [&lfn]() { + lfn.step(); + return lfn.outputs[FunVCOComposite::SAW_OUTPUT].value; + }, 1); +} + +static void testFunSq() +{ + FunVCOComposite lfn; + + lfn.outputs[FunVCOComposite::SIN_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::TRI_OUTPUT].active = false; + lfn.outputs[FunVCOComposite::SQR_OUTPUT].active = true; + lfn.outputs[FunVCOComposite::SAW_OUTPUT].active = false; + + lfn.setSampleRate(44100.f); + + MeasureTime::run(overheadOutOnly, "Fun sq", [&lfn]() { + lfn.step(); + return lfn.outputs[FunVCOComposite::SAW_OUTPUT].value; + }, 1); +} + +static void testCHB(bool econ) +{ + CHB chb; + +// chb.init(); + chb.setEconomy(econ); + + std::string name = "chb "; + name += econ ? "econ" : "full"; + MeasureTime::run(overheadOutOnly, name.c_str(), [&chb]() { + chb.step(); + return chb.outputs[CHB::MIX_OUTPUT].value; + }, 1); +} + +static void testCHBdef() +{ + CHB chb; + std::string name = "chbdef "; + MeasureTime::run(overheadOutOnly, name.c_str(), [&chb]() { + chb.step(); + return chb.outputs[CHB::MIX_OUTPUT].value; + }, 1); +} + +static void testEV3() +{ + EV3 ev3; + + // chb.init(); + + MeasureTime::run(overheadOutOnly, "ev3", [&ev3]() { + ev3.step(); + return ev3.outputs[EV3::MIX_OUTPUT].value; + }, 1); +} + +static void testGMR() +{ + GMR gmr; + + gmr.setSampleRate(44100); + gmr.init(); + + MeasureTime::run(overheadOutOnly, "gmr", [&gmr]() { + gmr.step(); + return gmr.outputs[GMR::TRIGGER_OUTPUT].value; + }, 1); +} + +static void testDG() +{ + Daveguide gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + + MeasureTime::run(overheadOutOnly, "dg", [&gmr]() { + gmr.step(); + return gmr.outputs[GMR::TRIGGER_OUTPUT].value; + }, 1); +} + +// 95 +// down to 67 for just the oversampler. +static void testShaper1a() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_OVERSAMPLE].value = 0; + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::FullWave; + + MeasureTime::run(overheadOutOnly, "shaper fw 16X", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +static void testShaper1b() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::FullWave; + gmr.params[Shaper::PARAM_OVERSAMPLE].value = 1; + + MeasureTime::run(overheadOutOnly, "shaper fw 4X", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +static void testSuper() +{ + Super gmr; + + + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::FullWave; + gmr.params[Shaper::PARAM_OVERSAMPLE].value = 2; + + MeasureTime::run(overheadOutOnly, "super", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +static void testShaper1c() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::FullWave; + gmr.params[Shaper::PARAM_OVERSAMPLE].value = 2; + + MeasureTime::run(overheadOutOnly, "shaper fw 1X", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +// 284 +static void testShaper2() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::Crush; + + MeasureTime::run(overheadOutOnly, "shaper crush", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +// 143 +static void testShaper3() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::AsymSpline; + + MeasureTime::run(overheadOutOnly, "shaper asy", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +static void testShaper4() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::Fold; + + MeasureTime::run(overheadOutOnly, "folder", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} + +static void testShaper5() +{ + Shaper gmr; + + // gmr.setSampleRate(44100); + // gmr.init(); + gmr.params[Shaper::PARAM_SHAPE].value = (float) Shaper::Shapes::Fold2; + + MeasureTime::run(overheadOutOnly, "folder II", [&gmr]() { + gmr.inputs[Shaper::INPUT_AUDIO].value = TestBuffers::get(); + gmr.step(); + return gmr.outputs[Shaper::OUTPUT_AUDIO].value; + }, 1); +} #if 0 static void testAttenuverters() { @@ -246,18 +714,136 @@ static void testAttenuverters() } #endif +#if 0 +static void testNoise(bool useDefault) +{ + + std::default_random_engine defaultGenerator{99}; + std::random_device rd{}; + std::mt19937 gen{rd()}; + std::normal_distribution distribution{0, 1.0}; + + std::string title = useDefault ? "default random" : "fancy random"; + + MeasureTime::run(overheadOutOnly, title.c_str(), [useDefault, &distribution, &defaultGenerator, &gen]() { + if (useDefault) return distribution(defaultGenerator); + else return distribution(gen); + }, 1); +} + + +static uint64_t xoroshiro128plus_state[2] = {}; + +static uint64_t rotl(const uint64_t x, int k) +{ + return (x << k) | (x >> (64 - k)); +} + +static uint64_t xoroshiro128plus_next(void) +{ + const uint64_t s0 = xoroshiro128plus_state[0]; + uint64_t s1 = xoroshiro128plus_state[1]; + const uint64_t result = s0 + s1; + + s1 ^= s0; + xoroshiro128plus_state[0] = rotl(s0, 55) ^ s1 ^ (s1 << 14); // a, b + xoroshiro128plus_state[1] = rotl(s1, 36); // c + + return result; +} + +float randomUniformX() +{ + // 24 bits of granularity is the best that can be done with floats while ensuring that the return value lies in [0.0, 1.0). + return (xoroshiro128plus_next() >> (64 - 24)) / powf(2, 24); +} + +float randomNormalX() +{ + // Box-Muller transform + float radius = sqrtf(-2.f * logf(1.f - randomUniformX())); + float theta = 2.f * M_PI * randomUniformX(); + return radius * sinf(theta); + + // // Central Limit Theorem + // const int n = 8; + // float sum = 0.0; + // for (int i = 0; i < n; i++) { + // sum += randomUniform(); + // } + // return (sum - n / 2.f) / sqrtf(n / 12.f); +} + +static void testNormal() +{ + MeasureTime::run(overheadOutOnly, "normal", []() { + return randomNormalX(); + }, 1); +} +#endif + void perfTest() { + printf("starting perf test\n"); + fflush(stdout); + setup(); #if 0 testAttenuverters(); testExpRange(); #endif + +#if 0 + testNoise(false); + testNoise(true); + testNormal(); +#endif + + testSuper(); + testShaper1a(); + testShaper1b(); + testShaper1c(); + testShaper2(); + testShaper3(); + testShaper4(); + testShaper5(); + + testEV3(); + testCHBdef(); + testFunSaw(true); +#if 0 + testFunSaw(false); + testFunSin(true); + testFunSin(false); + testFunSq(); + testFun(); + testFunNone(); +#endif + + // testEvenOrig(); + testEvenSaw(); +#if 0 + testEven(); + testEvenEven(); + testEvenSin(); + testEvenSaw(); + testEvenTri(); + testEvenSq(); + testEvenSqSaw(); +#endif + +#if 0 + testVocalFilter(); testAnimator(); testShifter(); testColors(); testTremolo(); + + testLFN(); + testGMR(); +#endif + // test1(); #if 0 diff --git a/plugins/community/repos/squinkylabs-plug1/test/testAnalyzer.cpp b/plugins/community/repos/squinkylabs-plug1/test/testAnalyzer.cpp new file mode 100644 index 00000000..79b4ca7d --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testAnalyzer.cpp @@ -0,0 +1,101 @@ + +#include +#include + + +#include "Analyzer.h" +#include "asserts.h" +#include "AudioMath.h" + +#include "FFTData.h" +#include "SinOscillator.h" +#include "MeasureTime.h" + + +static void ana1() +{ + FFTDataCpx x(2); + x.set(0, cpx(float(AudioMath::gainFromDb(0)), 0)); + + auto data = Analyzer::getFeatures(x, 3, 44100, -100); + assert(data.size() == 1); + assertClose(data[0].gainDb, 0, .0001); + assertClose(data[0].freq, 0, .0001); +} + + +// test Analyzer::getFeatures with two bins of +// very different gains +static void ana2() +{ + FFTDataCpx x(4); + x.set(0, cpx(float(AudioMath::gainFromDb(0)), 0)); + x.set(1, cpx(float(AudioMath::gainFromDb(10)), 0)); + + auto data = Analyzer::getFeatures(x, 3, 44100, -100); + assert(data.size() == 2); + assertClose(data[0].gainDb, 0, .0001); + assertClose(data[0].freq, 0, .0001); + + assertClose(data[1].gainDb, 10, .0001); + + // bin 1 (last bin) is sr/2 ... sr + assertClose(data[1].freq, 44100 / 4, .0001); +} + +static void ana3() +{ + const int size = 1024; + std::vector buffer(size); + Analyzer::generateSweep(44100., buffer.data(), size, 20, 20000); + + auto minMax = AudioMath::getMinMax(buffer.data(), size); + assertClose(minMax.first, -1, .01); + assertClose(minMax.second, 1, .01); +} + +static void ana7() +{ + const int size = 64; + FFTDataCpx x(size); + std::function unity = [](float x) { + return x; + }; + Analyzer::getFreqResponse(x, unity); + + for (int i = 0; i < size / 2; ++i) { + assertClose(std::abs(x.get(i)), 1, .0001); + } +} + + +// test that we get a good spectrum from synchronous sin +static void testSyncSin() +{ + float desiredFreq = 500.0f; + int numSamples = 16 * 1024; + const float sampleRate = 44100.0f; + const double actualFreq = Analyzer::makeEvenPeriod(desiredFreq, sampleRate, numSamples); + + SinOscillatorParams sinParams; + SinOscillatorState sinState; + SinOscillator::setFrequency(sinParams, float(actualFreq / sampleRate)); + + FFTDataCpx spectrum(numSamples); + Analyzer::getSpectrum(spectrum, false, [&sinState, &sinParams]() { + return SinOscillator::run(sinState, sinParams); + }); + + Analyzer::assertSingleFreq(spectrum, float(actualFreq), sampleRate); +} + + + +void testAnalyzer() +{ + ana1(); + ana2(); + ana3(); + ana7(); + testSyncSin(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testAudioMath.cpp b/plugins/community/repos/squinkylabs-plug1/test/testAudioMath.cpp index 5b8d1827..75a132c8 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testAudioMath.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testAudioMath.cpp @@ -87,7 +87,7 @@ static void testScaler() static void testBipolarAudioScaler() { - AudioMath::ScaleFun f = AudioMath::makeBipolarAudioScaler(3, 4); + AudioMath::ScaleFun f = AudioMath::makeScalerWithBipolarAudioTrim(3, 4); // scale(cv, knob, trim // knob comes through only shifted @@ -107,12 +107,78 @@ static void testBipolarAudioScaler() assertEQ(f(-5, 0, -1), 4.); // trim quarter - should be audio knee - auto f2 = AudioMath::makeBipolarAudioScaler(-1, 1); + auto f2 = AudioMath::makeScalerWithBipolarAudioTrim(-1, 1); float x = f2(5, 0, .25); float y = (float) AudioMath::gainFromDb(LookupTableFactory::audioTaperKnee()); assertClose(x, y, .001); } +static void testAudioScaler() +{ + AudioMath::SimpleScaleFun f = AudioMath::makeSimpleScalerAudioTaper(3, 4); + + float kneeGain = (float) AudioMath::gainFromDb(LookupTableFactory::audioTaperKnee()); + + // knob comes through with taper + assertEQ(f(0, -5), 3.); + assertEQ(f(0, 5), 4.); + + // 1/4, is the knee + assertEQ(f(0, -2.5), 3.0f + kneeGain); + + // cv also come through, it trim up + assertEQ(f(-5, 0), 3.); + assertEQ(f(5, 0), 4.); + assertEQ(f(-2.5, 0), 3.0f + kneeGain); +} + + +static void testAudioScaler2() +{ + AudioMath::SimpleScaleFun f = AudioMath::makeSimpleScalerAudioTaper(0, 20); + + float kneeGain = (float) AudioMath::gainFromDb(LookupTableFactory::audioTaperKnee()); + + // knob comes through with taper + assertEQ(f(0, -5), 0); + assertEQ(f(0, 5), 20); + + // 1/4, is the knee + assertEQ(f(0, -2.5), 20 * kneeGain); + + // cv also come through, it trim up + assertEQ(f(-5, 0), 0); + assertEQ(f(5, 0), 20); + assertEQ(f(-2.5, 0), 20 * kneeGain); +} + + + +static void testFold() +{ + float last = 0; + const float deltaX = 0.05f; + for (float x = 0; x < 15; x += deltaX) { + float y = AudioMath::fold(x); + float absChange = std::abs(y - last); + last = y; + assertLE(absChange, deltaX + .0001f); + } +} + + +static void testFoldNegative() +{ + float last = 0; + const float deltaX = 0.05f; + for (float x = 0; x > -15; x -= deltaX) { + float y = AudioMath::fold(x); + float absChange = std::abs(y - last); + last = y; + assertLE(absChange, deltaX + .0001f); + } +} + void testAudioMath() { test0(); @@ -122,4 +188,8 @@ void testAudioMath() testAudioTaper(); testScaler(); testBipolarAudioScaler(); + testAudioScaler(); + testAudioScaler2(); + testFold(); + testFoldNegative(); } \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testButterLookup.cpp b/plugins/community/repos/squinkylabs-plug1/test/testButterLookup.cpp new file mode 100644 index 00000000..1e8973b6 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testButterLookup.cpp @@ -0,0 +1,101 @@ + + +#include "ButterworthLookup.h" +#include "BiquadFilter.h" +#include "BiquadState.h" +#include "Analyzer.h" +#include "FFT.h" + +#include "asserts.h" + +// test that the API does something +static void testButterLookup0() +{ + ButterworthLookup4PHP b; + BiquadParams params; + for (int i = 0; i < 10; ++i) { + params.setAtIndex(0, i); + } + b.get(params, .1f); + for (int i = 0; i < 10; ++i) { + assert(params.getAtIndex(i) != 0); + } +} + +const float sampleRate = 44100; +static void doHighTest(std::function filter, float Fc, float expectedSlope) +{ + const int numSamples = 16 * 1024; + FFTDataCpx response(numSamples); + Analyzer::getFreqResponse(response, filter); + + auto x = Analyzer::getMaxAndShoulders(response, -3); + printf("max and shoulders return %f, %f, %f\n", + FFT::bin2Freq(std::get<0>(x), sampleRate, numSamples), + FFT::bin2Freq(std::get<1>(x), sampleRate, numSamples), + FFT::bin2Freq(std::get<2>(x), sampleRate, numSamples) + + ); + + const double cutoff = FFT::bin2Freq(std::get<2>(x), sampleRate, numSamples); + + const float highestFreq = sampleRate / 2; + const int highestBin = numSamples / 2; + printf("highest freq = %f get0=%d get1=%d\n", highestFreq, std::get<0>(x), std::get<1>(x)); + /* + test1 + + max and shoulders return 99.591064, 21463.220215, -2.691650 + highest freq = 22050.000000 get0=37 get1=7974 + assertClose failed actual value =999.83 expected=1 + Assertion failed: false, file d:\vcvrack\x6\plugins\squinkyvcv\test\testbutterlookup.cpp, line 54 + + * 0 = low freq bin # + * 1 = peak bin # + * 2 = high bin# +*/ + + + fflush(stdout); + // Is the peak at zero? i.e. no ripple. + if (std::get<1>(x) == highestFreq) { + assertEQ(std::get<0>(x), -1); // no LF shoulder + } else { + // Some higher order filters have a tinny bit of ripple. + // make sure that the peak is about the same as the extreme (in this case nyquist + float peakMag = std::abs(response.get(std::get<1>(x))); + float maxMag = std::abs(response.get(highestBin)); + assertClose(peakMag / maxMag, 1, .01); + } + + assertClose(cutoff, Fc, 3); // 3db down at Fc + + double slope = Analyzer::getSlope(response, (float) Fc * 2, sampleRate); + assertClose(slope, expectedSlope, 1); // to get accurate we need to go to higher freq, etc... this is fine +} + +static void doHighTest(float fC) +{ + ButterworthLookup4PHP b; + BiquadParams params; + BiquadState state; + b.get(params, fC / sampleRate); + + auto filter = [&state, ¶ms](float x) { + return BiquadFilter::run(x, state, params); + }; + doHighTest(filter, fC, 24); + +} + + +static void testButterLookup1() +{ + doHighTest(100); +} + +void testButterLookup() +{ + testButterLookup0(); + testButterLookup1(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testColoredNoise.cpp b/plugins/community/repos/squinkylabs-plug1/test/testColoredNoise.cpp index 50ffede8..81b65ecc 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testColoredNoise.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testColoredNoise.cpp @@ -37,7 +37,7 @@ static void test1() for (bool done = false; !done; ) { cn.step(); const float output = cn.outputs[Noise::AUDIO_OUTPUT].value; - if (output > .1) {; + if (output > .1) { started = true; } assert(output < 10); @@ -80,7 +80,7 @@ static void test2() while (cn._msgCount() < 6) { cn.step(); } - cn.params[Noise::SLOPE_PARAM].value = -1.2f; + cn.params[Noise::SLOPE_PARAM].value = -1.2f; while (cn._msgCount() < 7) { cn.step(); } diff --git a/plugins/community/repos/squinkylabs-plug1/test/testDelay.cpp b/plugins/community/repos/squinkylabs-plug1/test/testDelay.cpp new file mode 100644 index 00000000..40d2541a --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testDelay.cpp @@ -0,0 +1,169 @@ + + +#include "FractionalDelay.h" +#include "asserts.h" + + +// test that we can set up and get zero output +static void test0() +{ + FractionalDelay f(100); + f.setDelay(50); + float x = f.run(1); + assertEQ(x, 0); +} + +// test that the output is perhaps a delayed version of the input +static void test1() +{ + printf("test1\n\n"); + FractionalDelay f(100); + f.setDelay(10); + float x = 0; + for (int i = 0; i < 20; ++i) { + x = f.run(1); + } + assertEQ(x, 1); +} + +static void testTime(float delayTime, float expectedValue, float tolerance) +{ + int iTime = int(delayTime); + if ((delayTime - iTime) > .0000000001) { + iTime++; + } + + FractionalDelay f(100); + f.setDelay(delayTime); + float x = 0; + float lastX = 0; + for (int i = 0; i < 20; ++i) { + x = f.run(1); + // printf("in loop i=%d, x=%f\n", i, x); + if (x > .99f) { + assertEQ(i, iTime); // delay amount should be >= 10 < 11; + assertClose(lastX, expectedValue, tolerance); + return; + } + + lastX = x; + } + assert(false); // we should have exited already +} + +static void test2() +{ + testTime(10.0f, 0, .0001f); +} + + +static void test3() +{ + testTime(10.5f, 0.5f, .0001f); +} + +static void test4() +{ + testTime(10.25f, 0.75f, .1f); +} + + +static void test5() +{ + // MAKE THIS WORK + // testTime(10.05f, 0, .1f); +} + + +static void test6() +{ + testTime(10.75f, .25, .05f); +} + +static void test10() +{ + RecirculatingFractionalDelay d(1000); + d.setDelay(100); + assertEQ(d.run(0), 0); +} + + + +static void test11() +{ + RecirculatingFractionalDelay d(1000); + d.setDelay(100); + for (int i = 0; ; ++i) { + assertLT(i, 110); // too far with no sound + float x = d.run(1); + if (x > .5) { + return; //we found sound! + } + + } +} + +static void testRecirc(float delayTime, float feedback, float expectedDuration, bool expectDurationLonger) +{ + RecirculatingFractionalDelay d(1000); + d.setDelay(delayTime); + d.setFeedback(feedback); + + const int maxDur = 10000; + assert(expectedDuration < maxDur); + + // feed a blast into it + for (int i = 0; i < 10; ++i) { + d.run(1); + } + + int lastSound = 0; + for (int i = 0; ; ++i) { + if (i > maxDur) { + // we have hit end of test + // If we expect infinit, that's ok + if (!expectDurationLonger) { + assertLT(lastSound, expectedDuration); + } else { + assertGT(lastSound, expectedDuration); + } + break; + } + float x = d.run(0); + if (x > .1) { + lastSound = i; + } + if (lastSound > expectedDuration && !expectDurationLonger) { + assert(false); + } + + } +} + +static void test12() +{ + testRecirc(20, 0, 22, false); +} + + +static void test13() +{ + testRecirc(20, .9f, 100, true); +} + +void testDelay() +{ + test0(); + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); + + test10(); + test11(); + test12(); + + test13(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testFFT.cpp b/plugins/community/repos/squinkylabs-plug1/test/testFFT.cpp index 636b63b6..6e0d180c 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testFFT.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testFFT.cpp @@ -68,7 +68,7 @@ static void test3() for (int i = 0; i < 16; ++i) { cpx v = complex.get(i); float mag = std::abs(v); - + float expect = (i == 1) ? 1.f : 0.f; assertClose(mag, expect, .0001); } @@ -91,16 +91,16 @@ static void testRoundTrip() b = FFT::inverse(&realOut, complex); for (int i = 0; i < 16; ++i) { - + float expect = 1.f; // scaled DC (TODO: fix scaling) - assertEQ(realOut.get(i) , expect); + assertEQ(realOut.get(i), expect); } } static void testNoiseFormula() { - const int bins = 64 * 1024 ; + const int bins = 64 * 1024; std::unique_ptr data(new FFTDataCpx(bins)); assertEQ(data->size(), bins); @@ -114,7 +114,7 @@ static void testNoiseFormula() float phase = std::arg(x); const float expectedMag = (i == 0) ? 0.f : (i < (bins / 2)) ? 1.f : 0.f; - + assertClose(mag, expectedMag, .0001); phases.insert(phase); } @@ -138,7 +138,7 @@ static void testWhiteNoiseRT() std::unique_ptr noiseSpectrum2(new FFTDataCpx(bins)); for (int i = 0; i < bins; ++i) { - cpx x(0,0); + cpx x(0, 0); noiseSpectrum2->set(i, x); } @@ -147,14 +147,14 @@ static void testWhiteNoiseRT() FFT::inverse(noiseRealSignal.get(), *noiseSpectrum); FFT::forward(noiseSpectrum2.get(), *noiseRealSignal); - + float totalPhase = 0; float minPhase = 0; float maxPhase = 0; - for (int i = 0; i < bins/2; ++i) { + for (int i = 0; i < bins / 2; ++i) { float expected = (i == 0) ? 0.f : 1.f; cpx data = noiseSpectrum2->get(i); - + assertClose(std::abs(data), expected, .0001); const float phase = std::arg(data); totalPhase += phase; @@ -176,12 +176,11 @@ static void testNoiseRTSub(int bins) FFT::makeNoiseSpectrum(dataCpx.get(), ColoredNoiseSpec()); FFT::inverse(dataReal.get(), *dataCpx); - FFT::normalize(dataReal.get()); + FFT::normalize(dataReal.get(), 2); const float peak = getPeak(*dataReal); - assertClose( peak, 1.0f , .001); - + assertClose(peak, 2.0f, .001); } static void testNoiseRT() @@ -196,7 +195,7 @@ static void testNoiseRT() static void testPinkNoise() { - const int bins = 1024*4; + const int bins = 1024 * 4; std::unique_ptr data(new FFTDataCpx(bins)); assertEQ(data->size(), bins); @@ -211,8 +210,8 @@ static void testPinkNoise() // pick a starting bin above our 40 hz low freq corner const int baseBin = 16; //float freqBase = 44100 * baseBin / (float) bins; - const float freqBase = FFT::bin2Freq(baseBin, 44100, bins); - assertGT (freqBase, 80); + const double freqBase = FFT::bin2Freq(baseBin, 44100, bins); + assertGT(freqBase, 80); // mid-band, quadruple freq should reduce amp by 6db float mag16 = std::abs(data->get(baseBin)); @@ -236,11 +235,11 @@ static void testPinkNoise() static void testBlueNoise(float corner = 0) { - const int bins = 1024 * 4; + const int bins = 1024 * 4; std::unique_ptr data(new FFTDataCpx(bins)); assertEQ(data->size(), bins); - ColoredNoiseSpec spec; + ColoredNoiseSpec spec; spec.slope = 3; spec.sampleRate = 44100; diff --git a/plugins/community/repos/squinkylabs-plug1/test/testFilter.cpp b/plugins/community/repos/squinkylabs-plug1/test/testFilter.cpp new file mode 100644 index 00000000..f5137244 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testFilter.cpp @@ -0,0 +1,100 @@ + +#include + +#include "FFT.h" +#include "GraphicEq.h" +#include "StateVariableFilter.h" +#include "SinOscillator.h" +#include "Analyzer.h" +#include "asserts.h" + +static void testPeak(std::function filter, float sampleRate, float expectedMax, float percentTolerance) +{ + + const int numSamples = 16 * 1024; + FFTDataCpx x(numSamples); + Analyzer::getFreqResponse(x, filter); + + int maxBin = Analyzer::getMax(x); + double maxFreq = (FFT::bin2Freq(maxBin, 44100, numSamples) + + FFT::bin2Freq(maxBin + 1, 44100, numSamples)) / 2; + + const float delta = expectedMax * percentTolerance / 100.f; // One percent accuracy + + // printf("expected: %f actual %f\n", expectedMax, maxFreq); + + assertClose(maxFreq, expectedMax, delta); +} + +template +static void testBandpass(float Fc, float tolerancePercent) +{ + StateVariableFilterState state; + StateVariableFilterParams params; + + const float sampleRate = 44100; + + params.setMode(StateVariableFilterParams::Mode::BandPass); + params.setFreq(Fc / sampleRate); + params.setQ(3); + + std::function filter = [&state, ¶ms](float x) { + auto y = StateVariableFilter::run(x, state, params); + return float(y); + }; + testPeak(filter, sampleRate, Fc, tolerancePercent); +} + +template +static void test1() +{ + testBandpass(10, 50); // coarse FFT resolution + testBandpass(100, 2); + testBandpass(1000, 3); + testBandpass(3000, 12); + testBandpass(6000, 35); // This filter just gets inaccurate at high freq - don't know why +} + +static void zero(GraphicEq2<5>& geq) +{ + for (int i = 0; i < 5; ++i) { + geq.setGain(i, 0); + } +} + +static void test2() +{ + const float sampleRate = 44100; + const int stages = 5; + GraphicEq2 geq; + + zero(geq); + geq.setGain(0, 1); + std::function filter = [&geq](float x) { + return geq.run(x); + }; + testPeak(filter, sampleRate, 100, 2); + + zero(geq); + geq.setGain(1, 1); + testPeak(filter, sampleRate, 200, 2); + + zero(geq); + geq.setGain(2, 1); + testPeak(filter, sampleRate, 400, 2); + + zero(geq); + geq.setGain(3, 1); + testPeak(filter, sampleRate, 800, 4); + + zero(geq); + geq.setGain(4, 1); + testPeak(filter, sampleRate, 1600, 10); +} + + +void testFilter() +{ + test1(); + test2(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testFilterDesign.cpp b/plugins/community/repos/squinkylabs-plug1/test/testFilterDesign.cpp new file mode 100644 index 00000000..3e407d5b --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testFilterDesign.cpp @@ -0,0 +1,250 @@ + +#include "Analyzer.h" +#include "asserts.h" +#include "BiquadFilter.h" +#include "BiquadParams.h" +#include "BiquadState.h" +#include "ButterworthFilterDesigner.h" +#include "ObjectCache.h" +//#include "FFT.h" + +#include + + +//std::function filter +const float sampleRate = 44100; + +class LowpassStats +{ +public: + double passBandStop = 0; // -3db point in passband + double stopBandStart = 0; // within 3db of stopBandAtten + double stopBandAttenuation = 0; +}; + + +static LowpassStats characterizeFilter(bool isLowpass, std::function filter, float stopBandGain = -200) +{ + LowpassStats ret; + bool inPassBand = true; + bool inStopBand = false; + + const int numSamples = 16 * 1024; + FFTDataCpx response(numSamples); + Analyzer::getFreqResponse(response, filter); + + const int passbandBin = isLowpass ? 0 : (numSamples/2) - 1; + const float gain0 = std::abs(response.get(passbandBin)); + + const double _3DbDown = AudioMath::db(gain0) - 3; + //printf("bin=%d gain=%f\n", passbandBin, gain0); + + assert(gain0 > .1); // sanity check + + ret.stopBandAttenuation = -1000; + float minDb = 100; + + const int binInc = isLowpass ? 1 : -1; + + for (int i = passbandBin; ; i += binInc) { + if (i < 0 || i >numSamples / 2) { + return ret; + } + const float db = (float) AudioMath::db(std::abs(response.get(i))); + const double freq = FFT::bin2Freq(i, sampleRate, numSamples); + + if (inPassBand && db < _3DbDown) { + ret.passBandStop = freq; + inPassBand = false; + } + // if we bounce back up from min, we are in stop band. + // only works for Ch I and elliptic + if (!inPassBand && !inStopBand && (db > (minDb + 3))) { + inStopBand = true; + ret.stopBandStart = freq; + } + // If we are below something passed in, we are in stop. + if (!inPassBand && !inStopBand && (db < stopBandGain)) { + inStopBand = true; + ret.stopBandStart = freq; + ret.stopBandAttenuation = db; + } + minDb = std::min(minDb, db); + if (inStopBand) { + ret.stopBandAttenuation = std::max(ret.stopBandAttenuation, db); + } + } + + return ret; + +} + +static LowpassStats characterizeHighpassFilter(std::function filter, float stopBandGain = -200) +{ + return characterizeFilter(false, filter, stopBandGain); +} + +static LowpassStats characterizeLowpassFilter(std::function filter, float stopBandGain = -200) +{ + return characterizeFilter(true, filter, stopBandGain); +} + +static void printStats(const char * label, const LowpassStats& stats) +{ + printf("%s band=%.2f,%.2f atten=%.2f\n", label, stats.passBandStop, stats.stopBandStart, stats.stopBandAttenuation); +} + +static void testButter4Hi() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designFourPoleHighpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + + const LowpassStats stats = characterizeHighpassFilter(filter, -60); + assertClose(stats.stopBandStart, 100 / 317, 20); + assertClose(stats.passBandStop, 100, 5); +#ifdef _LOG + printStats("butter6/100", stats); +#endif +} + + + +static void testButter6() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designSixPoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + + const LowpassStats stats = characterizeLowpassFilter(filter, -60); + assertClose(stats.stopBandStart, 317, 20); + assertClose(stats.passBandStop, 100, 5); +#ifdef _LOG + printStats("butter6/100", stats); +#endif +} + +static void testButter6Obj() +{ + const float fc = sampleRate / 64; + // BiquadParams params; + auto params = ObjectCache::get6PLPParams(1.f / 64.f); + BiquadState state; + + // ButterworthFilterDesigner::designSixPoleLowpass( + // params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, *params); + return x; + }; + + + const LowpassStats stats = characterizeLowpassFilter(filter, -60); + assertClose(stats.stopBandStart, fc * 3.17, 20); + assertClose(stats.passBandStop, fc, 5); +#ifdef _LOG + printStats("butter6/obj64", stats); +#endif +} + +static void testButter8() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designEightPoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + + const LowpassStats stats = characterizeLowpassFilter(filter, -60); + assertClose(stats.stopBandStart, Fc * 2.5, 20); + assertClose(stats.passBandStop, Fc, 5); +#ifdef _LOG + printStats("butter8/100", stats); +#endif +} + +static void designSixPoleCheby(BiquadParams& outParams, float frequency, float ripple) +{ + assert(frequency > 0 && frequency < .5); + using Filter = Dsp::ChebyILowPass<6, 1>; + Filter f; + f.SetupAs(frequency, ripple); + assert(f.GetStageCount() == 3); + BiquadFilter::fillFromStages(outParams, f.Stages(), f.GetStageCount()); +} + +static void testCheby6_1() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + designSixPoleCheby(params, Fc / sampleRate, 6); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + + const LowpassStats stats = characterizeLowpassFilter(filter, -60); + assertClose(stats.stopBandStart, Fc * 1.6, 20); + assertClose(stats.passBandStop, Fc, 5); +#ifdef _LOG + printStats("cheby6/100/6", stats); +#endif +} + +static void testCheby6_3() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + designSixPoleCheby(params, Fc / sampleRate, 3); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + + const LowpassStats stats = characterizeLowpassFilter(filter, -60); + assertClose(stats.stopBandStart, Fc * 1.9, 20); + assertClose(stats.passBandStop, Fc, 5); +#ifdef _LOG + printStats("cheby6/100/3", stats); +#endif +} + +void testFilterDesign() +{ + + testButter6(); + testButter4Hi(); + testButter6Obj(); + testButter8(); + testCheby6_1(); + testCheby6_3(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testGMR.cpp b/plugins/community/repos/squinkylabs-plug1/test/testGMR.cpp new file mode 100644 index 00000000..0c7ba924 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testGMR.cpp @@ -0,0 +1,45 @@ + +#include "asserts.h" +#include "GMR.h" +#include "TestComposite.h" + +#include + + +using G = GMR; + + +// test that we get triggers out +static void test0() +{ + G gmr; + std::set data; + + gmr.setSampleRate(44100); + gmr.init(); + + for (int i = 0; i < 10; ++i) { + + gmr.inputs[G::CLOCK_INPUT].value = 0; + for (int i = 0; i < 100; ++i) { + gmr.step(); + float out = gmr.outputs[G::TRIGGER_OUTPUT].value; + data.insert(out); + } + gmr.inputs[G::CLOCK_INPUT].value = 10; + for (int i = 0; i < 100; ++i) { + gmr.step(); + float out = gmr.outputs[G::TRIGGER_OUTPUT].value; + data.insert(out); + } + } + + assert(data.find(cGateOutHi) != data.end()); + assert(data.find(cGateOutLow) != data.end()); + assertEQ(data.size(), 2); +} + +void testGMR() +{ + test0(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testGateTrigger.cpp b/plugins/community/repos/squinkylabs-plug1/test/testGateTrigger.cpp index ef4e7604..bfefa476 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testGateTrigger.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testGateTrigger.cpp @@ -1,7 +1,10 @@ -#include +#include "asserts.h" #include "GateTrigger.h" #include "SchmidtTrigger.h" +#include "TriggerOutput.h" + +#include static void sc0() { @@ -10,7 +13,6 @@ static void sc0() assert(!b); } - static void sc1() { SchmidtTrigger sc(-10, 10); @@ -56,11 +58,10 @@ static void sc3() assert(b); } - // check that threshold accessors are sane void g_1() { - GateTrigger g; + GateTrigger g(true); assert(g.thlo() > 0); assert(g.thhi() > g.thlo()); @@ -68,7 +69,6 @@ void g_1() assert(g.thhi() > 1.f); } - void testAfterReset(GateTrigger& g) { g.go(10.f); // right after "reset", start with gate @@ -86,7 +86,7 @@ void testAfterReset(GateTrigger& g) void grst1() { - GateTrigger g; + GateTrigger g(true); testAfterReset(g); g.go(10.f); @@ -94,6 +94,40 @@ void grst1() testAfterReset(g); } +void to0() +{ + TriggerOutput t; + + // const int ghigh = DACVoltage::xcodeForGateHi(); + t.go(false); + assert(t.get() == 0); + + t.go(true); + assert(t.get() == cGateOutHi); + + int duration = 0; + for (int i = 0; i < 100000; ++i) { + t.go(true); + if (t.get() == 0) + break; + ++duration; + } + + const int micros = (duration * 1000 * 1000) / 44100; // TODO: rationalize + //printf("duration = %d micros = %d\n", duration, micros); + assert(micros > 4900); + assert(micros < 5100); +} + +// test that we work immediately on startup - no reset delay +void to1() +{ + TriggerOutput t; + t.go(true); + assertEQ(t.get(), cGateOutHi); +} + + void testGateTrigger() @@ -104,4 +138,6 @@ void testGateTrigger() sc3(); g_1(); grst1(); + to0(); + to1(); } diff --git a/plugins/community/repos/squinkylabs-plug1/test/testLookupTable.cpp b/plugins/community/repos/squinkylabs-plug1/test/testLookupTable.cpp index cb26abb6..535d49bd 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testLookupTable.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testLookupTable.cpp @@ -6,6 +6,7 @@ #include "AudioMath.h" #include "LookupTable.h" #include "LookupTableFactory.h" +#include "ObjectCache.h" using namespace std; @@ -164,8 +165,8 @@ static void testExpSimpleLookup() LookupTableParams lookup; LookupTableFactory::makeExp2(lookup); - const double xMin = LookupTableFactory::expXMin(); - const double xMax = LookupTableFactory::expXMax(); + const double xMin = LookupTableFactory::exp2XMin(); + const double xMax = LookupTableFactory::exp2XMax(); assert(5 > xMin); assert(11 < xMax); assertClose(LookupTable::lookup(lookup, 5), std::pow(2, 5), .01); @@ -193,19 +194,110 @@ static void testExpRange() template static void testExpTolerance(T centsTolerance) { - const T xMin = (T) LookupTableFactory::expXMin(); - const T xMax = (T) LookupTableFactory::expXMax(); + const T xMin = (T) LookupTableFactory::exp2XMin(); + const T xMax = (T) LookupTableFactory::exp2XMax(); LookupTableParams table; LookupTableFactory::makeExp2(table); - for (T x = xMin; x <= xMax; x += T(.0001)) { + for (T x = xMin; x <= xMax; x += T(.001)) { T y = LookupTable::lookup(table, x); // and back double accurate = std::pow(2.0, x); - double errorCents = std::abs(1200.0 * std::log2(y / accurate)); + double errorCents = AudioMath::acents(y, accurate); assertClose(errorCents, 0, centsTolerance); } } + +template +static void testExpTolerance2(T centsTolerance, T hzTolerance) +{ + const T xMin = (T) LookupTableFactory::exp2XMin(); + const T xMax = (T) LookupTableFactory::exp2XMax(); + + LookupTableParams table; + LookupTableFactory::makeExp2(table); + for (T x = xMin; x <= xMax; x += T(.001)) { + T y = LookupTable::lookup(table, x); // and back + double accurate = std::pow(2.0, x); + double errorCents = AudioMath::acents(y, accurate); + assertClose(errorCents, 0, centsTolerance); + const double errorHz = std::abs(y - accurate); + assertClose(errorHz, 0, hzTolerance); + } +} + +template +static void testExp2HiTolerance(T centsTolerance, T hzTolerance) +{ + + const T xMin = (T) LookupTableFactory::exp2ExHighXMin(); + const T xMax = (T) LookupTableFactory::exp2ExHighXMax(); + + LookupTableParams table; + LookupTableFactory::makeExp2ExHigh(table); + + for (T x = xMin; x <= xMax; x += T(.001)) { + T y = LookupTable::lookup(table, x); // and back + double accurate = std::pow(2.0, x); + double errorCents = AudioMath::acents(y, accurate); + assertClose(errorCents, 0, centsTolerance); + const double errorHz = std::abs(y - accurate); + + // relax limits at high freq + T curHzTol = hzTolerance; + if (y > 10000) curHzTol *= 10; + if (y > 5000) curHzTol *= 4; + else if (y > 3000) curHzTol *= 2; + if (y > 2000) curHzTol *= 1.1f; + + assertClose(errorHz, 0, curHzTol); + } +} + +template +static void testExp2LowTolerance(T centsTolerance, T hzTolerance) +{ + const T xMin = (T) LookupTableFactory::exp2ExLowXMin(); + const T xMax = (T) LookupTableFactory::exp2ExLowXMax(); + + LookupTableParams table; + LookupTableFactory::makeExp2ExLow(table); + + for (T x = xMin; x <= xMax; x += T(.001)) { + T y = LookupTable::lookup(table, x); // and back + double accurate = std::pow(2.0, x); + double errorCents = AudioMath::acents(y, accurate); + assertClose(errorCents, 0, centsTolerance); + const double errorHz = std::abs(y - accurate); + assertClose(errorHz, 0, hzTolerance); + } +} + +template +static void testExp2CombinedTolerance(T centsTolerance, T hzTolerance) +{ + const T xMin = (T) LookupTableFactory::exp2ExLowXMin(); + const T xMax = (T) LookupTableFactory::exp2ExHighXMax(); + + // LookupTableParams table; + auto exp = ObjectCache::getExp2Ex(); + for (T x = xMin; x <= xMax; x += T(.001)) { + T y = exp(x); + double accurate = std::pow(2.0, x); + double errorCents = AudioMath::acents(y, accurate); + assertClose(errorCents, 0, centsTolerance); + const double errorHz = std::abs(y - accurate); + + T curHzTol = hzTolerance; + if (y > 10000) curHzTol *= 10; + if (y > 5000) curHzTol *= 4; + else if (y > 3000) curHzTol *= 2; + if (y > 2000) curHzTol *= 1.1f; + + assertClose(errorHz, 0, curHzTol); + } +} + template static void testBipolarSimpleLookup() { @@ -218,6 +310,16 @@ static void testBipolarSimpleLookup() } +template +static void testAudioTaperSimpleLookup() +{ + LookupTableParams lookup; + LookupTableFactory::makeAudioTaper(lookup); + + assertClose(LookupTable::lookup(lookup, 0), 0, .01); + assertClose(LookupTable::lookup(lookup, 1), 1, .01); +} + template static void testBipolarTolerance() { @@ -245,6 +347,24 @@ static void testBipolarTolerance() } } + +template +static void testAudioTaperTolerance() +{ + LookupTableParams lookup; + LookupTableFactory::makeAudioTaper(lookup); + const double toleratedError = 1 - AudioMath::gainFromDb(-.1);// let's go for one db. + assert(toleratedError > 0); + + auto refFuncPos = AudioMath::makeFunc_AudioTaper(LookupTableFactory::audioTaperKnee()); + + for (double x = 0; x < 1; x += .001) { + const T test = LookupTable::lookup(lookup, (T) x); + T ref = (T) refFuncPos(x); + assertClose(test, ref, toleratedError); + } +} + template static void test() { @@ -256,15 +376,22 @@ static void test() testDiscrete1(); testDiscrete2(); testExpSimpleLookup(); - testExpTolerance(100); // 1 semitone - testExpTolerance(10); - testExpTolerance(1); + + testExpTolerance(1); // 1 cent + + testExp2HiTolerance(.125, T(.05)); + testExp2LowTolerance(.125, T(.05)); + testExp2CombinedTolerance(.125, T(.5)); + testBipolarSimpleLookup(); testBipolarTolerance(); + testAudioTaperSimpleLookup(); + testAudioTaperTolerance(); } void testLookupTable() { - test(); + test(); + test(); } \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testLowpassFilter.cpp b/plugins/community/repos/squinkylabs-plug1/test/testLowpassFilter.cpp new file mode 100644 index 00000000..d55607f8 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testLowpassFilter.cpp @@ -0,0 +1,253 @@ + +#include "LowpassFilter.h" +#include "Decimator.h" +#include "Analyzer.h" +#include "asserts.h" +#include "LFN.h" +#include "TestComposite.h" + +template +static void test0() +{ + LowpassFilterState state; + LowpassFilterParams params; + LowpassFilter::setCutoff(params, T(.1)); + LowpassFilter::run(0, state, params); +} + +const float sampleRate = 44100; +template +static void doLowpassTest(std::function filter, T Fc, T expectedSlope) +{ + const int numSamples = 16 * 1024; + FFTDataCpx response(numSamples); + Analyzer::getFreqResponse(response, filter); + + auto x = Analyzer::getMaxAndShoulders(response, -3); + + const double cutoff = FFT::bin2Freq(std::get<2>(x), sampleRate, numSamples); + + // Is the peak at zero? i.e. no ripple. + if (std::get<1>(x) == 0) { + assertEQ(std::get<0>(x), -1); // no LF shoulder + } else { + // Some higher order filters have a tinny bit of ripple + float peakMag = std::abs(response.get(std::get<1>(x))); + float zeroMag = std::abs(response.get(0)); + assertClose(peakMag / zeroMag, 1, .0001); + } + + assertClose(cutoff, Fc, 3); // 3db down at Fc + + double slope = Analyzer::getSlope(response, (float) Fc * 2, sampleRate); + assertClose(slope, expectedSlope, 1); // to get accurate we need to go to higher freq, etc... this is fine +} + + +template +static void test1() +{ + const float Fc = 100; + + LowpassFilterState state; + LowpassFilterParams params; + LowpassFilter::setCutoff(params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + auto y = LowpassFilter::run(x, state, params); + return float(y); + }; + doLowpassTest(filter, Fc, -6); +} + +template +static void test2() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designTwoPoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + doLowpassTest(filter, Fc, -12); +} + +template +static void test3() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designThreePoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + doLowpassTest(filter, Fc, -18); +} + +template +static void test4() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designFourPoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + doLowpassTest(filter, Fc, -24); +} +template +static void test5() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designFivePoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + doLowpassTest(filter, Fc, -30); +} + +template +static void test6() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + ButterworthFilterDesigner::designSixPoleLowpass( + params, Fc / sampleRate); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + doLowpassTest(filter, Fc, -36); +} + +/******************************************************************************************************/ + +#if 0 // not ready for prime time +template +static void doEllipticTest(std::function filter, T Fc, T expectedSlope) +{ + const int numSamples = 16 * 1024; + //const int numSamples = 1024; + FFTDataCpx response(numSamples); + Analyzer::getFreqResponse(response, filter); + + auto x = Analyzer::getMaxAndShoulders(response, -3); + + const float cutoff = FFT::bin2Freq(std::get<2>(x), sampleRate, numSamples); + + + // Some higher order filters have a tinny bit of ripple + float peakMag = std::abs(response.get(std::get<1>(x))); + float zeroMag = std::abs(response.get(0)); + printf("mag at zero hz = %f, peak mag = %f, -3db at %f\n ", + zeroMag, peakMag, cutoff); + + Analyzer::getAndPrintFeatures(response, 1, sampleRate); + for (int i = 0; i < numSamples; ++i) { + + } + //assertClose(peakMag / zeroMag, 1, .0001); + + + // assertClose(cutoff, Fc, 3); // 3db down at Fc + + + double slope = Analyzer::getSlope(response, (float) Fc * 2, sampleRate); + // assertClose(slope, expectedSlope, 1); // to get accurate we need to go to higher freq, etc... this is fine + +} + +template +static void testElip1() +{ + const float Fc = 100; + BiquadParams params; + BiquadState state; + + T rippleDb = 3; + T attenDb = 100000; + T ripple = (T) AudioMath::gainFromDb(1); + ButterworthFilterDesigner::designEightPoleElliptic(params, Fc / sampleRate, rippleDb, attenDb); + + std::function filter = [&state, ¶ms](float x) { + x = (float) BiquadFilter::run(x, state, params); + return x; + }; + doEllipticTest(filter, Fc, -36); + +} +#endif + +template +void _testLowpassFilter() +{ + test0(); + test1(); + test2(); + test3(); + test4(); + test5(); + test6(); +} + +/************ also test decimator here + */ + +static void decimate0() +{ + Decimator d; + d.setDecimationRate(2); + d.acceptData(5); + bool b = true; + auto x = d.clock(b); + assert(!b); + assertEQ(x, 5); +} + + +static void decimate1() +{ + Decimator d; + d.setDecimationRate(2); + d.acceptData(5); + bool b = true; + auto x = d.clock(b); + assert(!b); + assertEQ(x, 5); + + x = d.clock(b); + assert(b); + assertEQ(x, 5); +} + +void testLowpassFilter() +{ + _testLowpassFilter(); + _testLowpassFilter(); + decimate0(); + decimate1(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testMinBLEPVCO.cpp b/plugins/community/repos/squinkylabs-plug1/test/testMinBLEPVCO.cpp new file mode 100644 index 00000000..2f2ebb53 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testMinBLEPVCO.cpp @@ -0,0 +1,380 @@ +#include + +#if !defined(M_PI) +#define M_PI 3.14159265358979323846264338327950288 +#endif + +#include "asserts.h" +#include "EV3.h" + + + +#include "MinBLEPVCO.h" +#include "TestComposite.h" + +static float sampleTime = 1.0f / 44100.0f; + + +class TestMB +{ +public: + //static void setAllWaveforms(MinBLEPVCO* vco); + // static void test1(); + static void testSync2(); + static void testSync3(); + static void setPitch(EV3& ev3); +}; + +#if 0 +// puts non-zero in all the waveforms + void TestMB::setAllWaveforms(MinBLEPVCO* vco) +{ + // float * wave = vco->_getWaveforms(); + for (int i = 0; i < (int)MinBLEPVCO::Waveform::END; ++i) { + vco->waveformOutputs[i] = 1; + } +} +#endif + +#if 0 +void TestMB::test1() +{ + MinBLEPVCO vco; + setAllWaveforms(&vco); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Saw), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Sin), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Square), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Tri), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Even), 0); + + + vco.zeroOutputsExcept(MinBLEPVCO::Waveform::Saw); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Saw), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Sin), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Square), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Tri), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Even), 0); + + // special case for even and sin + setAllWaveforms(&vco); + vco.zeroOutputsExcept(MinBLEPVCO::Waveform::Even); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Saw), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Sin), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Square), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Tri), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Even), 0); + + setAllWaveforms(&vco); + vco.zeroOutputsExcept(MinBLEPVCO::Waveform::Square); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Saw), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Sin), 0); + assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Square), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Tri), 0); + assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Even), 0); +} + + +static void test0() +{ + MinBLEPVCO vco; + + // Don't enable any waveforms + // vco.setSampleTime(sampleTime); + vco.setNormalizedFreq(1000 * sampleTime); + vco.step(); + + // should get nothing out. + assert(vco.getWaveform(MinBLEPVCO::Waveform::Sin) == 0); + assert(vco.getWaveform(MinBLEPVCO::Waveform::Square) == 0); + assert(vco.getWaveform(MinBLEPVCO::Waveform::Saw) == 0); + assert(vco.getWaveform(MinBLEPVCO::Waveform::Tri) == 0); + assert(vco.getWaveform(MinBLEPVCO::Waveform::Even) == 0); +} +#endif + + +static void testSaw1() +{ + MinBLEPVCO vco; + + vco.setNormalizedFreq(1000 * sampleTime, sampleTime); + vco.setWaveform(MinBLEPVCO::Waveform::Saw); + vco.step(); + + // should get saw out. + // assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Sin), 0); + // assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Square), 0); + // assertNE(vco.getWaveform(MinBLEPVCO::Waveform::Saw), 0); + // assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Tri), 0); + // assertEQ(vco.getWaveform(MinBLEPVCO::Waveform::Even), 0); + assertNE(vco.getOutput(), 0); + +} + +static void testSync1() +{ + MinBLEPVCO vco; + + vco.setNormalizedFreq(1000 * sampleTime, sampleTime); + vco.setWaveform(MinBLEPVCO::Waveform::Saw); + float lastOut = -1000; + vco.step(); + + // first make sure it's going up. + for (int i = 0; i < 10; ++i) { + vco.step(); + const float x = vco.getOutput(); + assertGT(x, lastOut); + lastOut = x; + } + + vco.onMasterSync(10); // set a reset to VCO + vco.step(); + const float x = vco.getOutput(); + assertLT(x, lastOut); +} + +void TestMB::setPitch(EV3& ev3) +{ + ev3.params[EV3::OCTAVE1_PARAM].value = 2; + ev3.params[EV3::OCTAVE2_PARAM].value = 3; + ev3.params[EV3::OCTAVE3_PARAM].value = 3; + + // raise 2,3 by an oct and a semitone + ev3.params[EV3::SEMI1_PARAM].value = 0; + ev3.params[EV3::SEMI2_PARAM].value = 1; + ev3.params[EV3::SEMI3_PARAM].value = 1; + + ev3.vcos[0].setWaveform(MinBLEPVCO::Waveform::Saw); + ev3.vcos[1].setWaveform(MinBLEPVCO::Waveform::Saw); + ev3.vcos[2].setWaveform(MinBLEPVCO::Waveform::Saw); + + ev3.params[EV3::SYNC2_PARAM].value = 1; + + ev3.vcos[0].name = "VCO1"; + ev3.vcos[1].name = "VCO2"; + ev3.vcos[2].name = "VCO3"; + +} + +void TestMB::testSync2() +{ + printf("***** testSync2*****\n"); + EV3 ev3; + setPitch(ev3); + + ev3.step(); + const float f0 = ev3._freq[0]; + const float f1 = ev3._freq[1]; + + assertClose(f0, 2093.02, .005); + assertClose(f1, 4434.95, .005); + + float last0 = -10; + float last1 = -10; + for (int i = 0; i < 100; ++i) { + ev3.step(); + + //printf("phase==%.2f phase1==%.2f ", ev3.vcos[0].phase, ev3.vcos[1].phase); + float x = ev3._out[0]; + // assert(x > last0); + //printf("%d delta0=%.2f",i, x - last0); + last0 = x; + + x = ev3._out[1]; + // assert(x > last1); + + printf(" delta1=%.2f", x - last1); + printf(" 0=%.2f 1=%.2f\n", last0, last1); + fflush(stdout); + last1 = x; + } + + // TODO: test the sync on/off + +} + + + +void TestMB::testSync3() +{ + EV3 ev3; + setPitch(ev3); + + ev3.step(); + const float f0 = ev3._freq[0]; + const float f1 = ev3._freq[1]; + + assertClose(f0, 2093.02, .01); + assertClose(f1, 4434.95, .01); + + float last0 = -10; + float last1 = -10; + for (int i = 0; i < 100; ++i) { + // printf("-------- sample %d -----------\n", i); + ev3.step(); + } + + // TODO: test the sync on/off + +} + + +static void testBlepx(float crossing, float jump) +{ + printf("BLEP crossing = %.2f, jump =%.2f\n", crossing, jump); + rack::MinBLEP<16> syncMinBLEP; + + syncMinBLEP.minblep = rack::minblep_16_32; + syncMinBLEP.oversample = 32; + + // syncMinBLEP.jump(-.5, -2); + syncMinBLEP.jump(crossing, jump); + for (int i = 0; i < 32; ++i) { + //float saw = -1.0 + 2.0*phase; + float x = syncMinBLEP.shift(); + printf("blep[%d] = %.2f\n", i, x); + } + +} + +static void testEnums() +{ + assertEQ((int) EV3::Waves::SIN, (int) MinBLEPVCO::Waveform::Sin); + assertEQ((int) EV3::Waves::TRI, (int) MinBLEPVCO::Waveform::Tri); + assertEQ((int) EV3::Waves::SAW, (int) MinBLEPVCO::Waveform::Saw); + assertEQ((int) EV3::Waves::SQUARE, (int) MinBLEPVCO::Waveform::Square); + assertEQ((int) EV3::Waves::EVEN, (int) MinBLEPVCO::Waveform::Even); +} + +static void testOutput(MinBLEPVCO::Waveform wf, bool expectFlat) +{ + MinBLEPVCO osc; + + osc.setWaveform(wf); + osc.setNormalizedFreq(.1f, 1.0f / 44100); // high freq + + bool hasChanged = false; + float last = -100; + for (int i = 0; i < 100; ++i) { + osc.step(); + float x = osc.getOutput(); + if (!expectFlat) assertNE(x, last); + if (last != x) hasChanged = true; + last = x; + } + assert(hasChanged); +} + +static void testOutputs() +{ + testOutput(MinBLEPVCO::Waveform::Saw, false); + testOutput(MinBLEPVCO::Waveform::Square, true); + testOutput(MinBLEPVCO::Waveform::Sin, false); + testOutput(MinBLEPVCO::Waveform::Tri, false); + testOutput(MinBLEPVCO::Waveform::Even, false); + +} + +static void testBlep() +{ + testBlepx(-.5, -2); + testBlepx(-.5, 1); + testBlepx(-.9f, .2f); +} + +static void testZero() +{ + MinBLEPVCO osc; + + osc.setWaveform(MinBLEPVCO::Waveform::Saw); + osc.setNormalizedFreq(.1f, 1.0f / 44100); // high freq + osc.step(); + osc.setWaveform(MinBLEPVCO::Waveform::END); + osc.step(); + float x = osc.getOutput(); + assertEQ(x, 0); +} + +static void testSyncOut(MinBLEPVCO::Waveform wf) +{ + MinBLEPVCO osc; + + int callbackCount = 0; + osc.setWaveform(wf); + osc.setNormalizedFreq(.1f, 1.0f / 44100); // high freq + osc.setSyncCallback([&callbackCount](float p) { + assert(p <= 0 && p >= -1); + callbackCount++; + }); + + for (int i = 0; i < 15; ++i) { + osc.step(); + + } + assertEQ(callbackCount, 1); + // assertGE(callbackCount, 1); // TODO: why does square do 3?? + +} + +static void testSyncOut() +{ + testSyncOut(MinBLEPVCO::Waveform::Saw); + testSyncOut(MinBLEPVCO::Waveform::Square); + testSyncOut(MinBLEPVCO::Waveform::Sin); + testSyncOut(MinBLEPVCO::Waveform::Tri); + testSyncOut(MinBLEPVCO::Waveform::Even); +} + + +static void testSyncIn(MinBLEPVCO::Waveform wf) +{ + MinBLEPVCO osc; + + osc.setWaveform(wf); + osc.setNormalizedFreq(.1f, 1.0f / 44100); // high freq + + for (int i = 0; i < 4; ++i) { + osc.step(); + } + osc.step(); + float x = osc.getOutput(); + osc.onMasterSync(0); + osc.step(); // this one catches the callback + osc.step(); // this one generates new sample (TODO: is this extra required?) + float y = osc.getOutput(); + assert(!AudioMath::closeTo(x, y, .1)); + + // TODO: pick freq that will make this more robust + +} + +static void testSyncIn() +{ + testSyncIn(MinBLEPVCO::Waveform::Saw); + testSyncIn(MinBLEPVCO::Waveform::Sin); + testSyncIn(MinBLEPVCO::Waveform::Tri); + testSyncIn(MinBLEPVCO::Waveform::Square); + testSyncIn(MinBLEPVCO::Waveform::Even); +} + +void testMinBLEPVCO() +{ + // A lot of these tests are from old API +// TestMB::test1(); + // printf("fix the minb tests\n"); + // test0(); + + testSaw1(); + //testSync1(); + + // this one doesn't work, either. + //TestMB::testSync2(); + TestMB::testSync3(); + // testBlep(); + testEnums(); + testOutputs(); + testZero(); + testSyncOut(); + testSyncIn(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testObjectCache.cpp b/plugins/community/repos/squinkylabs-plug1/test/testObjectCache.cpp index c3d2a133..25378e79 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testObjectCache.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testObjectCache.cpp @@ -21,7 +21,7 @@ static void testBipolar() { // simple test that bipolar audio scalers use cached lookups, and they work - AudioMath::ScaleFun f = AudioMath::makeBipolarAudioScaler(3, 4); + AudioMath::ScaleFun f = AudioMath::makeScalerWithBipolarAudioTrim(3, 4); assertEQ(f(0, -5, 0), 3.); assertEQ(_numLookupParams, 1); } @@ -32,6 +32,38 @@ static void testBipolar() assertEQ(_numLookupParams, 1); } +template +static void testAudioTaper() +{ + assertEQ(_numLookupParams, 0); + + auto test = ObjectCache::getAudioTaper(); + assertEQ(_numLookupParams, 1); + auto test2 = ObjectCache::getAudioTaper(); + assertEQ(_numLookupParams, 1); + test.reset(); + assertEQ(_numLookupParams, 1); + + test2.reset(); + assertEQ(_numLookupParams, 0); + + { + + // simple test that bipolar audio scalers use cached lookups, and they work + AudioMath::SimpleScaleFun f = AudioMath::makeSimpleScalerAudioTaper(3, 4); + assertEQ(f(0, -5), 3.); + assertEQ(_numLookupParams, 1); + assertEQ(f(5, 5), 4.); + } + assertEQ(_numLookupParams, 0); + + // make again + test = ObjectCache::getAudioTaper(); + assertEQ(_numLookupParams, 1); +} + + + template static void testSin() { @@ -49,7 +81,7 @@ static void testSin() { // // simple test that bipolar audio scalers use cached lookups, and they work - AudioMath::ScaleFun f = AudioMath::makeBipolarAudioScaler(3, 4); + AudioMath::ScaleFun f = AudioMath::makeScalerWithBipolarAudioTrim(3, 4); assertEQ(f(0, -5, 0), 3.); assertEQ(_numLookupParams, 1); } @@ -166,16 +198,39 @@ static void testTanh5() } } + +template +static void testExp2Ex() +{ + auto f = ObjectCache::getExp2Ex(); + assertEQ(_numLookupParams, 2); +} + +template +static void testLPF() +{ + // make sure we can get the two supported cutoffs + + auto f16 = ObjectCache::get6PLPParams(.25f / 16); + assert(f16); + auto f4 = ObjectCache::get6PLPParams(.25f / 4); + assert(f4); +} + + template static void test() { testBipolar(); + testAudioTaper(); testSin(); testExp2(); testExp2b(); testDb2Gain(); testDb2Gain2(); testTanh5(); + testExp2Ex(); + testLPF(); } void testObjectCache() diff --git a/plugins/community/repos/squinkylabs-plug1/test/testPoly.cpp b/plugins/community/repos/squinkylabs-plug1/test/testPoly.cpp new file mode 100644 index 00000000..9be3ddee --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testPoly.cpp @@ -0,0 +1,67 @@ + +#include "asserts.h" +#include "poly.h" +#include "Analyzer.h" +#include "SinOscillator.h" + +static void test0() +{ + Poly poly; + float x = poly.run(0); + assertEQ(x, 0); + + x = poly.run(1); + assertEQ(x, 0); + + poly.setGain(0, 1); + x = poly.run(0); + assertEQ(x, 0); +} + +static void test1() +{ + Poly poly; + poly.setGain(0, 1); + float x = poly.run(1); + assertNE(x, 0); +} + +static void testPureTerm(int term) +{ + float desiredFreq = 500.0f; + int numSamples = 16 * 1024; + const float sampleRate = 44100.0f; + double actualFreq = Analyzer::makeEvenPeriod(desiredFreq, sampleRate, numSamples); + + SinOscillatorParams sinParams; + SinOscillatorState sinState; + SinOscillator::setFrequency(sinParams, float(actualFreq / sampleRate)); + + Poly poly; + poly.setGain(term, 1); + + FFTDataCpx spectrum(numSamples); + Analyzer::getSpectrum(spectrum, false, [&sinState, &sinParams, &poly]() { + float sin = SinOscillator::run(sinState, sinParams); + const float x = poly.run(sin); + return x; + }); + + const int order = term + 1; + Analyzer::assertSingleFreq(spectrum, float(actualFreq * order), sampleRate); +} + +static void testTerms() +{ + for (int i = 0; i < 10; ++i) { + testPureTerm(i); + } +} + +void testPoly() +{ + test0(); + test1(); + testTerms(); + +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testRateConversion.cpp b/plugins/community/repos/squinkylabs-plug1/test/testRateConversion.cpp new file mode 100644 index 00000000..999835e1 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testRateConversion.cpp @@ -0,0 +1,63 @@ + +#include "IIRUpsampler.h" +#include "IIRDecimator.h" + +#include "asserts.h" + +static void setup(IIRUpsampler& up, IIRDecimator& dec) +{ + // float cutoff = .25 / 16; + up.setup(16); + dec.setup(16); +} + +// test that the functions can be called +static void test0() +{ + float buffer[16]; + + IIRUpsampler up; + IIRDecimator dec; + setup(up, dec); + + up.process(buffer, 0); + dec.process(buffer); +} + +// test 0 -> 0 +static void test1() +{ + float buffer[16]; + + IIRUpsampler up; + IIRDecimator dec; + setup(up, dec); + + up.process(buffer, 0); + const float x = dec.process(buffer); + assertEQ(x, 0); +} + +// test 10 -> 10 +static void test2() +{ + float buffer[16]; + + IIRUpsampler up; + IIRDecimator dec; + setup(up, dec); + + float x; + for (int i = 0; i < 100; ++i) { + up.process(buffer, 10); + x = dec.process(buffer); + } + assertClose(x, 10, .001); +} + +void testRateConversion() +{ + test0(); + test1(); + test2(); +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testRingBuffer.cpp b/plugins/community/repos/squinkylabs-plug1/test/testRingBuffer.cpp index faa031c4..894c0ad4 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testRingBuffer.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testRingBuffer.cpp @@ -6,17 +6,17 @@ static void testConstruct() { - RingBuffer rb; + SqRingBuffer rb; assert(rb.empty()); assert(!rb.full()); - RingBuffer rb2; + SqRingBuffer rb2; } static void testSimpleAccess() { - RingBuffer rb; + SqRingBuffer rb; rb.push(55); assert(!rb.empty()); assert(!rb.full()); @@ -30,7 +30,7 @@ static void testSimpleAccess() static void testMultiAccess() { - RingBuffer rb; + SqRingBuffer rb; rb.push(1234); rb.push(5678); assert(!rb.empty()); @@ -51,7 +51,7 @@ static void testMultiAccess() static void testWrap() { - RingBuffer rb; + SqRingBuffer rb; rb.push(1234); rb.push(5678); rb.pop(); @@ -69,7 +69,7 @@ static void testWrap() static void testFull() { - RingBuffer rb; + SqRingBuffer rb; rb.push(1234); rb.push(5678); rb.pop(); @@ -93,7 +93,7 @@ static void testFull() static void testOne() { const char * p = "foo"; - RingBuffer rb; + SqRingBuffer rb; rb.push(p); assert(!rb.empty()); assert(rb.full()); diff --git a/plugins/community/repos/squinkylabs-plug1/test/testSaw.cpp b/plugins/community/repos/squinkylabs-plug1/test/testSaw.cpp index 3715db5d..3b1bff07 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testSaw.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testSaw.cpp @@ -1,6 +1,7 @@ #include #include +#include "asserts.h" #include "MultiModOsc.h" #include "AudioMath.h" #include "SawOscillator.h" @@ -258,6 +259,80 @@ static void testSaw7() assert(AudioMath::closeTo(amplitude, 0.57735, .0001)); } +template +static void testSawFreq_old(bool neg) +{ + // assert(!neg); + const T freq = neg ? T(-.1) : T(.1); + SawOscillatorParams params; + SawOscillator::setFrequency(params, freq); + SawOscillatorState state; + + T lastValue = neg ? T(-100) : T(100); + for (int i = 0; i < 100; ++i) { + T saw = SawOscillator::runSaw(state, params); + + if (!neg) { + if (0 == (i % 10)) { + assertLT(saw, lastValue); + } else { + assertGT(saw, lastValue); + } + } else { +#if 0 + if (0 == (i % 10)) { + assertGT(saw, lastValue); + } else { + assertLT(saw, lastValue); + } +#endif + printf("i = %d out=%.2f\n", i, saw); + fflush(stdout); + } + lastValue = saw; + } + +} + +template +static void testSawFreq(bool neg) +{ + + int period = 10000; + if (sizeof(T) > 4) { + + period *= 1000; + } + T freq = T(1.0 / period); + if (neg) { + freq *= -1; + } + SawOscillatorParams params; + SawOscillator::setFrequency(params, freq); + SawOscillatorState state; + + T last = SawOscillator::runSaw(state, params); + bool done = false; + int count = 0; + for (; !done; ++count) { + if (count > period + 100) { + done = true; + assert(false); + } + T saw = SawOscillator::runSaw(state, params); + assertNE(saw, last); + bool moreThanLast = saw > last; + last = saw; + // if saw is turning going back + if (moreThanLast == neg) { + const int measuredPeriod = count + 1; + assertClose(measuredPeriod, period, 1.1); + done = true; + } + } +} + + template static void testSawT() { @@ -272,6 +347,8 @@ static void testSawT() testSaw6(); testTri7(); testSaw7(); + testSawFreq(false); + // testSawFreq(true); } void testSaw() diff --git a/plugins/community/repos/squinkylabs-plug1/test/testSin.cpp b/plugins/community/repos/squinkylabs-plug1/test/testSin.cpp new file mode 100644 index 00000000..ea39d698 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testSin.cpp @@ -0,0 +1,225 @@ +/** + * THD+Noise tests for various sin generators + */ +#include "Analyzer.h" +#include "SinOscillator.h" + +#include + +#if 0 +const static int numSamples = 16 * 256 * 1024; +//const static int numSamples = 256; +const double sampleRate = 44100.0; +const double sampleTime = 1.0 / sampleRate; + +const double testFreq = 700; + + + +static void testOsc(const std::string& title, double freq, std::function osc) +{ + FFTDataCpx spectrum(numSamples); + Analyzer::getSpectrum(spectrum, false, osc); + + Analyzer::getAndPrintFeatures(spectrum, 3, sampleRate, -180); + + double signal = 0; + double noise = 0; + int matches = 0; + for (int i = 0; i < numSamples / 2; ++i) { + const double f = FFT::bin2Freq(i, sampleRate, numSamples); + const double mag = spectrum.getAbs(i); + + // if (f > 600 && f < 800) printf("%.2f: %f\n", f, mag); + // if (mag > .00000001) printf("%.2f: %e\n", f, mag); + if (freq == f) { + ++matches; + signal += mag; + } else { + noise += mag; + } + } + assert(matches == 1); + assert(noise > 0); + printf("%s SNR = %f (db)\n", title.c_str(), AudioMath::db(signal / noise)); +} + +template +static void testPhaseAcc() +{ + const double f = Analyzer::makeEvenPeriod(testFreq, sampleRate, numSamples); + SinOscillatorParams params; + SinOscillatorState state; + + std::string title = (sizeof(T) > 4) ? "double w lookup" : "float w lookup"; + SinOscillator::setFrequency(params, float(f * sampleTime)); + testOsc(title, f, [&state, ¶ms]() { + return (float) SinOscillator::run(state, params); + }); +} + + +static void testPhaseAcc2() +{ + const double f = Analyzer::makeEvenPeriod(testFreq, sampleRate, numSamples); + + std::string title = "phase acc std::sin"; + + double acc = 0; + testOsc(title, f, [f, &acc]() { + // return SinOscillator::run(state, params); + + const double inc = f * sampleTime; + acc += inc; + if (acc > 1) { + acc -= 1; + } + return float(std::sin(acc * AudioMath::Pi * 2)); + }); +} + +template +class Osc2 +{ +public: + void setFreq(float t) + { + assert(t > 0 && t < .51); + + // orig paper + // tapWeight = t * (1.0 / AudioMath::Pi); + // tapWeight = t * 2; + + + const T omega = 2.0 * AudioMath::Pi * t; + tapWeight = 2 * sin(omega / 2.0); + + // from kvre + //e= 2*sin(omega/2.0); // omega = 2*pi*freq/sr; + } + float run() + { + const T x = zX - tapWeight * zY; + + // orig paper + // const T y = (tapWeight * zX) + (1 - tapWeight * tapWeight) * zY; + + // smith (seems whack?) but seems to work as well as the above + const T y = (tapWeight * x) + zY; + + zX = x; + zY = y; + return float(zX); + } + + const double k = sqrt(2); + + T zX = 1.200049 / k; + T zY = .747444 / k; + T tapWeight = .1; +}; + + +template +class Osc3 +{ +public: + void setFreq(float t) + { + assert(t > 0 && t < .51); + // tapWeight = t * (1.0 / AudioMath::Pi); + tapWeight = 2 * sin(t); + } + float run() + { + const T x = zX + tapWeight * zY; + const T y = -(tapWeight * x) + zY; + + zX = x; + zY = y; + return float(zX); + } + + // const double k = sqrt(2); + + T zX = 1; + T zY = 1; + T tapWeight = .1; +}; + + +static void testOsc2() +{ + const double f = Analyzer::makeEvenPeriod(testFreq, sampleRate, numSamples); + // const double f = sampleRate / 2; + + printf("trying osc 2 at %f\n", f); + std::string title = "osc2"; + Osc2 osc; + osc.setFreq(float(f * sampleTime)); + for (int i = 0; i < 1000000; ++i) { + osc.run(); + } + + testOsc(title, f, [&osc]() { + return osc.run(); + }); +} + + +static void testOsc3() +{ + const double f = Analyzer::makeEvenPeriod(testFreq, sampleRate, numSamples); + // const double f = sampleRate / 2; + + std::string title = "osc3"; + Osc3 osc; + osc.setFreq(float(f * sampleTime)); + for (int i = 0; i < 1000000; ++i) { + osc.run(); + } + + testOsc(title, f, [&osc]() { + return osc.run(); + }); +} + +static void testOsc2Amp_sub(double freq) +{ + const int bufSize = 16 * 1024 * 16; + Osc2 osc; + osc.setFreq(float(freq * sampleTime)); + + for (int i = 0; i < 1000000; ++i) { + osc.run(); + } + + + std::vector data; + data.resize(bufSize); + for (int i = 0; i < bufSize; ++i) { + data[i] = osc.run(); + } + auto minMax = AudioMath::getMinMax(data.data(), bufSize); + printf("f= %.2f min/max = %f, %f. z = %f, %f\n", freq, minMax.first, minMax.second, osc.zX, osc.zY); + printf("sqr2 = %f\n", sqrt(2.0)); +} + +static void testOsc2Amp() +{ + testOsc2Amp_sub(1111); + testOsc2Amp_sub(40); + testOsc2Amp_sub(400); + testOsc2Amp_sub(4123); +} + +void testSin() +{ + // testPhaseAcc(); + // testPhaseAcc(); + testPhaseAcc2(); + // testOsc2(); + // testOsc3(); + // testOsc2Amp(); +} +#endif \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testSinOscillator.cpp b/plugins/community/repos/squinkylabs-plug1/test/testSinOscillator.cpp index a34343ca..a4633928 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testSinOscillator.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testSinOscillator.cpp @@ -119,7 +119,7 @@ static void testDistortion() } double errDb = AudioMath::db(err); // printf("THD = %f\n", errDb); - assertLT(errDb, -80); + assertLT(errDb, -90); } template diff --git a/plugins/community/repos/squinkylabs-plug1/test/testSpline.cpp b/plugins/community/repos/squinkylabs-plug1/test/testSpline.cpp new file mode 100644 index 00000000..cd480c8b --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testSpline.cpp @@ -0,0 +1,315 @@ + +#include +#include +#include "asserts.h" +#include "LookupTable.h" +#include "AsymWaveShaper.h" +#include "ExtremeTester.h" +#include "Shaper.h" +#include "TestComposite.h" +#include "TestSignal.h" + + +using Spline = std::vector< std::pair >; + + + +static void gen() +{ + for (int i = 0; i < AsymWaveShaper::iSymmetryTables; ++i) { + float symmetry = float(i) / float(AsymWaveShaper::iSymmetryTables - 1); + AsymWaveShaper::genTable(i, symmetry); + } +} + + +static void testLook0() +{ + NonUniformLookup l; + l.add(0, 0); + l.add(1, 1); + l.add(2, 2); + l.add(3, 3); + + double x = l.lookup(2.5); + assertClose(x, 2.5, .0001); +} + +static void testLook1() +{ + NonUniformLookup l; + l.add(0, 0); + l.add(1, 1); + l.add(2, 4); + l.add(3, 3); + + double x = l.lookup(1.5); + assertClose(x, 2.5, .0001); +} + +static void testLook2() +{ + NonUniformLookup l; + l.add(0, 0); + l.add(1, 1); + l.add(2, 2); + l.add(3, 3); + + double x = l.lookup(.5); + assertClose(x, .5, .0001); +} + +static void testLook3() +{ + NonUniformLookup l; + l.add(0, 0); + l.add(1, 1); + l.add(2, 2); + l.add(3, 3); + + double x = l.lookup(2.5); + assertClose(x, 2.5, .0001); +} + +static void testLook4() +{ + NonUniformLookup l; + l.add(0, 0); + l.add(1, 1); + l.add(2, 2); + l.add(3, 3); + + double x = l.lookup(0); + assertClose(x, 0, .0001); +} + + +static void testGen0() +{ + AsymWaveShaper g; + const int index = 3;// symmetry + float x = g.lookup(0, index); + x = g.lookup(1, index); + x = g.lookup(-1, index); +} + +static void testDerivativeSub(int index, float delta) +{ + AsymWaveShaper ws; + + const float ya = ws.lookup(-delta, index); + const float y0 = ws.lookup(0, index); + const float yb = ws.lookup(delta, index); + const float slopeLeft = -ya / delta; + const float slopeRight = yb / delta; + + // printf("[%d] y0 = %f, slope left = %f, right =%f\n", index, y0, slopeLeft, slopeRight); + + // since I changed AsymWaveShaper to be points-1 this is worse + assertClose(y0, 0, .00001); + assertClose(slopeRight, 2, .01); + if (index != 0) { + assertClose(slopeLeft, 2, .3 + ); + } + +} +static void testDerivative() +{ + // 6 with .1 + for (int i = AsymWaveShaper::iSymmetryTables - 1; i >= 0; --i) { + testDerivativeSub(i, .0001f); + } +} + + + +static void testShaper0() +{ + Shaper gmr; + + int shapeMax = (int) Shaper::Shapes::Invalid; + for (int i = 0; i < shapeMax; ++i) { + gmr.params[Shaper::PARAM_SHAPE].value = (float) i; + std::string s = gmr.getString(Shaper::Shapes(i)); + assertGT(s.length(), 0); + assertLT(s.length(), 20); + gmr.params[Shaper::PARAM_OFFSET].value = -5; + for (int i = 0; i < 50; ++i) gmr.step(); + const float x = gmr.outputs[Shaper::OUTPUT_AUDIO].value; + gmr.params[Shaper::PARAM_OFFSET].value = 5; + for (int i = 0; i < 50; ++i) gmr.step(); + const float y = gmr.outputs[Shaper::OUTPUT_AUDIO].value; + + assertLT(x, 10); + assertLT(y, 10); + assertGT(x, -10); + assertGT(y, -10); + } +} + +static void testShaper1Sub(int shape, float gain, float targetRMS) +{ + Shaper gmr; + gmr.params[Shaper::PARAM_SHAPE].value = (float) shape; + gmr.params[Shaper::PARAM_GAIN].value = gain; // max gain + const int buffSize = 1 * 1024; + float buffer[buffSize]; + + TestSignal::generateSin(buffer, buffSize, 1.f / 40); + double rms = TestSignal::getRMS(buffer, buffSize); + //printf("signal=%f\n", rms); + for (int i = 0; i < buffSize; ++i) { + const float x = buffer[i]; + gmr.inputs[Shaper::INPUT_AUDIO].value = buffer[i]; + gmr.step(); + buffer[i] = gmr.outputs[Shaper::OUTPUT_AUDIO].value; + } + rms = TestSignal::getRMS(buffer, buffSize); + // const float targetRMS = 5 * .707f; + + const char* p = gmr.getString(Shaper::Shapes(shape)); + // printf("rms[%s] = %f target = %f ratio=%f\n", p, rms, targetRMS, targetRMS / rms); + + if (targetRMS > .01) { + assertClose(rms, targetRMS, .5); + } +} + +static void testShaper1() +{ + int shapeMax = (int) Shaper::Shapes::Invalid; + for (int i = 0; i < shapeMax; ++i) { + const float targetOutput = (i == (int) Shaper::Shapes::Crush) ? 0 : 5 * .707f; + + testShaper1Sub(i, 5, targetOutput); + testShaper1Sub(i, 0, 0); + } +} + +static void testSplineExtremes() +{ + printf("running testSplineExtremes\n"); fflush(stdout); + + Shaper sp; + + using fp = std::pair; + std::vector< std::pair > paramLimits; + + paramLimits.resize(sp.NUM_PARAMS); + + paramLimits[sp.PARAM_SHAPE] = fp(0.f, float(Shaper::Shapes::Invalid) - 1); + paramLimits[sp.PARAM_GAIN] = fp(-5.0f, 5.0f); + paramLimits[sp.PARAM_GAIN_TRIM] = fp(-1.f, 1.f); + paramLimits[sp.PARAM_OFFSET] = fp(-5.f, 5.f); + paramLimits[sp.PARAM_OFFSET_TRIM] = fp(-1.f, 1.f); + + ExtremeTester< Shaper>::test(sp, paramLimits, true, "shaper"); +} + +static void testShaper2d(Shaper::Shapes shape, float gain, float offset, float input) +{ + Shaper sh; + sh.params[Shaper::PARAM_SHAPE].value = (float) shape; + sh.params[Shaper::PARAM_GAIN].value = gain; + sh.params[Shaper::PARAM_OFFSET].value = offset; + for (int i = 0; i < 100; ++i) { + sh.inputs[Shaper::INPUT_AUDIO].value = input; + sh.step(); + const float out = sh.outputs[Shaper::OUTPUT_AUDIO].value; + + // brief ringing goes > 10 + assert(out < 20 && out > -20); + } + +} +static void testShaper2c(Shaper::Shapes shape, float gain, float offset) +{ + testShaper2d(shape, gain, offset, 0); + testShaper2d(shape, gain, offset, 5); + testShaper2d(shape, gain, offset, -5); +} + +static void testShaper2b(Shaper::Shapes shape, float gain) +{ + testShaper2c(shape, gain, 0.f); + testShaper2c(shape, gain, 5.f); + testShaper2c(shape, gain, -5.f); +} + +static void testShaper2a(Shaper::Shapes shape) +{ + testShaper2b(shape, 0); + testShaper2b(shape, -5); + testShaper2b(shape, 5); +} + +const int shapeMax = (int) Shaper::Shapes::Invalid; + +static void testShaper2() +{ + + for (int i = 0; i < shapeMax; ++i) { + testShaper2a(Shaper::Shapes(i)); + } +} + +// test for DC shift +static void testShaper3Sub(Shaper::Shapes shape) +{ + Shaper sh; + + sh.params[Shaper::PARAM_OVERSAMPLE].value = 2; // turn off oversampling + sh.params[Shaper::PARAM_SHAPE].value = (float) shape; + sh.params[Shaper::PARAM_GAIN].value = -3; // gain up a bit + sh.params[Shaper::PARAM_OFFSET].value = 0; // no offset + + sh.inputs[Shaper::INPUT_AUDIO].value = 0; + for (int i = 0; i < 100; ++i) { + + sh.step(); + } + const float out = sh.outputs[Shaper::OUTPUT_AUDIO].value; + if (shape != Shaper::Shapes::Crush) { + assertEQ(out, 0); + } else { + // crash had a dc offset issue + assertLT(out, 1); + assertGT(out, -1); + } +} + +static void testShaper3() +{ + // testShaper3Sub(Shaper::Shapes::Crush); + for (int i = 0; i < shapeMax; ++i) { + testShaper3Sub(Shaper::Shapes(i)); + } +} + + +void testSpline(bool doEmit) +{ + if (doEmit) { + gen(); + return; + } + testLook0(); + testLook1(); + testLook2(); + testLook3(); + testLook4(); + testGen0(); + testDerivative(); + testShaper0(); + + //printf("!! skipping testShaper1\n"); + testShaper1(); + testShaper2(); + testShaper3(); + + + //testSplineExtremes(); + printf("skipping shaper extremems becuase of bug in crush"); +} + diff --git a/plugins/community/repos/squinkylabs-plug1/test/testStochasticGrammar.cpp b/plugins/community/repos/squinkylabs-plug1/test/testStochasticGrammar.cpp new file mode 100644 index 00000000..68483759 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testStochasticGrammar.cpp @@ -0,0 +1,498 @@ + +#include "GenerativeTriggerGenerator.h" +#include "StochasticGrammar.h" +#include "TriggerSequencer.h" + +#include +#include +#include +#include + +static const int numRules = fullRuleTableSize; + +typedef GKEY(*INITFN)(); +static ProductionRule rules[numRules]; + + + +// Test basic integrity of key data +static void test0() +{ + GKEY key; + GKEY outKeys[ProductionRuleKeys::bufferSize]; + for (key = sg_first; key <= sg_last; ++key) { + ProductionRuleKeys::breakDown(key, outKeys); + for (GKEY* p = outKeys; *p != sg_invalid; ++p) { + assert(*p >= sg_first); + assert(*p <= sg_last); + } + + std::string s = ProductionRuleKeys::toString(key); + assert(!s.empty()); + assert(s.length() < 256); + + int dur = ProductionRuleKeys::getDuration(key); + assert(dur > 0); + assert(dur <= PPQ * 8); + + } +} + +// test all the gkeys +void testAllKeys() +{ + const int siz = ProductionRuleKeys::bufferSize; + GKEY buffer[siz]; + + for (GKEY gk = sg_first; gk <= sg_last; ++gk) { + // printf("testing key %d\n", gk); + // printf("to string: %s\n", ProductionRuleKeys::toString(gk)); + const int dur = ProductionRuleKeys::getDuration(gk); + ProductionRuleKeys::breakDown(gk, buffer); + int sum = 0; + for (GKEY * p = buffer; *p != sg_invalid; ++p) { + // printf("adding to sum %d\n", ProductionRuleKeys::getDuration(*p)); + sum += ProductionRuleKeys::getDuration(*p); + + } + // printf("dur = %d sum = %d (should be the same)\n", dur, sum); + assert(dur == sum); + } +} + + + +/************************************************************************************** + * Make some simple grammars and test them + **************************************************************************************/ + +#ifdef _DEBUG +void gdt0() +{ + { + static ProductionRule rules[numRules]; + bool b = ProductionRule::isGrammarValid(rules, numRules, sg_invalid); + assert(!b); + } + { + // throw in a positive case + static ProductionRule rules[numRules]; + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_invalid; + + bool b = ProductionRule::isGrammarValid(rules, numRules, sg_w); + assert(b); + } + { + // terminal code wrong + static ProductionRule rules[numRules]; + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_q; + + bool b = ProductionRule::isGrammarValid(rules, numRules, sg_w); + assert(!b); + } + { + // bad order of probability + static ProductionRule rules[numRules]; + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_q; + + bool b = ProductionRule::isGrammarValid(rules, numRules, sg_w); + assert(!b); + } + { + // rule branches to nowhere + static ProductionRule rules[numRules]; + + // break w2 into w,w prob 100 + ProductionRule& r = rules[sg_w2]; + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_ww; + bool b = ProductionRule::isGrammarValid(rules, numRules, sg_w); + assert(!b); + } +} +#endif + + +class TestEvaluator : public ProductionRule::EvaluationState +{ +public: + TestEvaluator(AudioMath::RandomUniformFunc xr) : ProductionRule::EvaluationState(xr) + { + } + + void writeSymbol(GKEY key) override + { + keys.push_back(key); + } + + int getNumSymbols() + { + //printf("final keys: "); + // for (size_t i = 0; i< keys.size(); ++i) printf("%s, ", ProductionRuleKeys::toString(keys[i])); + // printf("\n"); + return (int) keys.size(); + } +private: + std::vector keys; +}; + + +/** + * simplest possible grammar. + */ +static GKEY init0() +{ + // printf("called init0\n"); + // This rule always generate sg-w2 (two whole notes tied together) + ProductionRule& r = rules[sg_w2]; + + r.entries[0].probability = 1; + r.entries[0].code = sg_invalid; // terminate expansion + + + return sg_w2; +} + +/** + * Simple grammar with a rule but no random. + */ +static GKEY init1() +{ + + { + // start with w2 duration + ProductionRule& r = rules[sg_w2]; + + // break into w,w prob 100 + r.entries[0].probability = 1.0f; + r.entries[0].code = sg_ww; + } + + { + // now need rule for w hole + //printf("in init1 making 100 for %d\n", sg_w); + ProductionRule& r = rules[sg_w]; + r.entries[0].probability = 1.0f; + r.entries[1].code = sg_invalid; + } + //printf("leave init 1. rule 1 p0 = %f\n", rules[sg_w2].entries[0].probability); + return sg_w2; +} + + +/** + * Simple grammar with randomness initializer + */ +static GKEY init2() +{ + { + // start with w2 duration + ProductionRule& r = rules[sg_w2]; + + // break into w,w prob 50 + + r.entries[0].probability = .5f; + r.entries[0].code = sg_ww; + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; // always terminate + } + + { + // now need rule for w hole + ProductionRule& r = rules[sg_w]; + r.entries[1].probability = 1.0f; + r.entries[1].code = sg_invalid; // always terminate + } + + return sg_w2; +} + +#ifdef _DEBUG +static void testGrammarSub(INITFN f) +{ + GKEY init = f(); + + + bool b = ProductionRule::isGrammarValid(rules, numRules, init); + assert(b); + + TestEvaluator es(AudioMath::random()); + es.rules = rules; + es.numRules = numRules; + ProductionRule::evaluate(es, init); + + assert(es.getNumSymbols() > 0); +} +#endif + + +/********************************************************************************************************* + * TriggerSequencer + **********************************************************************************************************/ + + // test event at zero fires at zero +static void ts0() +{ + TriggerSequencer::Event seq[] = + { + {TriggerSequencer::TRIGGER, 0}, + {TriggerSequencer::END, 100} + }; + TriggerSequencer ts(seq); + + ts.clock(); + assert(ts.getTrigger()); + + ts.clock(); + assert(!ts.getTrigger()); + +} + +// test trigger at 1 happens at 1 +static void ts1() +{ + TriggerSequencer::Event seq[] = + { + {TriggerSequencer::TRIGGER, 1}, + {TriggerSequencer::END, 0} + }; + TriggerSequencer ts(seq); + + ts.clock(); + assert(!ts.getTrigger()); + + ts.clock(); + assert(ts.getTrigger()); + + ts.clock(); + assert(!ts.getTrigger()); + + ts.clock(); + assert(!ts.getTrigger()); +} + + +// 4 clock loop: delay 4, trigger, end +static void ts2() +{ + TriggerSequencer::Event seq[] = + { + {TriggerSequencer::TRIGGER, 4}, + {TriggerSequencer::END, 0} + }; + TriggerSequencer ts(seq); + + bool firstTime = true; + // first time through, 4 clocks of nothing. then clock, 0,0,0 + for (int i = 0; i < 4; ++i) { + ts.clock(); + if (firstTime) { + assert(!ts.getTrigger()); assert(!ts.getEnd()); + firstTime = false; + } else { + //printf("second time around, t=%d e=%d\n", ts.getTrigger(), ts.getEnd()); + + // second time around we finally see the trigger + + assert(ts.getTrigger()); + + // second time around, need to clock the end of the last time + assert(ts.getEnd()); + ts.reset(seq); // start it up again + assert(!ts.getTrigger()); // resetting should not set us up for a trigger + } + ts.clock(); assert(!ts.getTrigger()); assert(!ts.getEnd()); + ts.clock(); assert(!ts.getTrigger()); assert(!ts.getEnd()); + + ts.clock(); assert(!ts.getTrigger()); + // assert(ts.getEnd()); + + // ts.reset(seq); + } +} + +// test trigger seq qith +// 4 clock loop: trigger, delay 4 end +static void ts3() +{ + TriggerSequencer::Event seq[] = + { + {TriggerSequencer::TRIGGER, 0}, + {TriggerSequencer::END, 4} + }; + TriggerSequencer ts(seq); + + + bool firstLoop = true; + for (int i = 0; i < 4; ++i) { + //printf("--- loop ----\n"); + + // 1 + + ts.clock(); + if (firstLoop) { + assert(ts.getTrigger()); + // we just primed loop at top, so it's got a ways + assert(!ts.getEnd()); + firstLoop = false; + } else { + // second time around, need to clock the end of the last time + assert(ts.getEnd()); + ts.reset(seq); // start it up again + assert(ts.getTrigger()); // resetting should have set us up for a trigger + } + // 2 + ts.clock(); assert(!ts.getTrigger()); assert(!ts.getEnd()); + // 3 + ts.clock(); assert(!ts.getTrigger()); assert(!ts.getEnd()); + // 4 + ts.clock(); + assert(!ts.getTrigger()); + assert(!ts.getEnd()); + } +} + +// test trigger seq with straight ahead 4/4 as generated by a grammar +static void ts4() +{ + TriggerSequencer::Event seq[] = + { + {TriggerSequencer::TRIGGER, 0}, + {TriggerSequencer::TRIGGER, 4}, + {TriggerSequencer::TRIGGER, 4}, + {TriggerSequencer::TRIGGER, 4}, + {TriggerSequencer::END, 4} + }; + TriggerSequencer ts(seq); + + + //bool firstLoop = true; + for (int i = 0; i < 100; ++i) { + bool firstTime = (i == 0); + // repeating pattern of trigg, no, no, no + for (int j = 0; j < 4; ++j) { + for (int k = 0; k < 4; ++k) { + // printf("test loop, i=%d, j=%d, k=%d\n", i, j, k); + ts.clock(); + + bool expectEnd = (k == 0) && (j == 0) && !firstTime; + assert(ts.getEnd() == expectEnd); + if (ts.getEnd()) { + ts.reset(seq); + } + assert(ts.getTrigger() == (k == 0)); + } + } + } +} + +/******************************************************************************* + ** StochasticGrammarDictionary + */ + +#ifdef _DEBUG +void gdt1() +{ + assert(StochasticGrammarDictionary::getNumGrammars() > 0); + for (int i = 0; i < StochasticGrammarDictionary::getNumGrammars(); ++i) { + StochasticGrammarDictionary::Grammar g = StochasticGrammarDictionary::getGrammar(i); + bool b = ProductionRule::isGrammarValid(g.rules, g.numRules, g.firstRule); + assert(b); + } +} +#endif + +/******************************************************************************************** +* GenerativeTriggerGenerator +**********************************************************************************************/ + +// test that we get some clocks and some not +static void gtg0() +{ + GKEY key = init1(); + GenerativeTriggerGenerator gtg(AudioMath::random(), rules, numRules, key); + bool yes = false; + bool no = false; + for (int i = 0; i < 100000; ++i) { + if (gtg.clock()) + yes = true; + else + no = true; + + if (yes && no) { + //printf("clocked at %d\n", i); + return; + } + } + assert(false); + +} + + +// test that we get everything in even quarter notes +static void gtg1() +{ + GKEY key = init1(); + std::set counts; + + GenerativeTriggerGenerator gtg(AudioMath::random(), rules, numRules, key); + + int ct = 0; + for (int i = 0; i < 10000; ++i) { + bool b = gtg.clock(); + if (b) { + //printf("clocked at %d\n", ct); + counts.insert(ct); + ct = 0; + } + ct++; + } + //counts.insert(50); + assert(!counts.empty()); + for (std::set::iterator it = counts.begin(); it != counts.end(); ++it) { + int c = *it; + + if ((c % PPQ) != 0) { + //printf("PPQ=%d, c modePPQ =%d\n", PPQ, (c % PPQ)); + //printf("2ppq = %d, 4ppq=%d\n", 2 * PPQ, 4 * PPQ); + assert(false); + } + } +} + + + + + + +void testStochasticGrammar() +{ + test0(); + testAllKeys(); + +#ifdef _DEBUG + gdt0(); + testGrammarSub(init0); + testGrammarSub(init1); + testGrammarSub(init2); +#endif + ts0(); + ts1(); + ts2(); + ts3(); + ts4(); + +#ifdef _DEBUG + gdt1(); +#endif + + gtg0(); + gtg1(); + +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testTestSignal.cpp b/plugins/community/repos/squinkylabs-plug1/test/testTestSignal.cpp index 2da8fa46..c14e33e0 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testTestSignal.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testTestSignal.cpp @@ -1,6 +1,7 @@ #include #include +#include "asserts.h" #include "AudioMath.h" #include "TestSignal.h" @@ -14,6 +15,7 @@ static void test1() T buffer[size]; TestSignal::generateSin(buffer, size, T(.01)); +#if 0 T min = 1, max = -1; for (int i = 0; i < size; ++i) { const T x = buffer[i]; @@ -30,6 +32,11 @@ static void test1() const T delta = T(.0000001); assert(AudioMath::closeTo(min, T(-1), delta)); assert(AudioMath::closeTo(max, T(1), delta)); +#endif + const T delta = T(.0000001); + auto x = AudioMath::getMinMax(buffer, size); + assertClose(x.first, -1, delta); + assertClose(x.second, 1, delta); } /** diff --git a/plugins/community/repos/squinkylabs-plug1/test/testThread.cpp b/plugins/community/repos/squinkylabs-plug1/test/testThread.cpp index 2f4737db..a28d9e48 100644 --- a/plugins/community/repos/squinkylabs-plug1/test/testThread.cpp +++ b/plugins/community/repos/squinkylabs-plug1/test/testThread.cpp @@ -122,7 +122,7 @@ static std::atomic slow; static std::atomic fast; //thread func -static void t4(bool iAmIt,int boost) +static void t4(bool iAmIt, int boost) { // printf("t4 called with %d\n", iAmIt); @@ -142,9 +142,9 @@ static void t4(bool iAmIt,int boost) default: assert(false); } - + fflush(stdout); - + } while (!stopNow) { for (int i = 0; i < 100000; ++i) { @@ -217,18 +217,18 @@ static void test5() void testThread(bool extended) { - assertEQ(ThreadSharedState::_dbgCount, 0); - assertEQ(ThreadMessage::_dbgCount, 0); - test0(); - test1(); - test2(); - test3(); - if (extended) { - test4(); - } + assertEQ(ThreadSharedState::_dbgCount, 0); + assertEQ(ThreadMessage::_dbgCount, 0); + test0(); + test1(); + test2(); + test3(); + if (extended) { + test4(); + } #ifdef ARCH_WIN - test5(); + test5(); #endif - assertEQ(ThreadSharedState::_dbgCount, 0); - assertEQ(ThreadMessage::_dbgCount, 0); + assertEQ(ThreadSharedState::_dbgCount, 0); + assertEQ(ThreadMessage::_dbgCount, 0); } \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testVCO.cpp b/plugins/community/repos/squinkylabs-plug1/test/testVCO.cpp new file mode 100644 index 00000000..9ff0ec81 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testVCO.cpp @@ -0,0 +1,237 @@ + +#include + +#include "Analyzer.h" +#include "asserts.h" +#include "CHB.h" +#include "EvenVCO.h" +#include "FunVCO.h" +#include "SawOscillator.h" +#include "TestComposite.h" + + +using EVCO = EvenVCO ; +//using FUN = VoltageControlledOscillator<16, 16>; +using CH = CHB; + +float desiredPitch(float octave, float tune, float cv1, float cv2, float mod) +{ + float pitch = 1.0f + roundf(octave) + tune / 12.0f; + pitch += cv1 + cv2; + pitch += mod / 4.0f; + + float freq = 261.626f * powf(2.0f, pitch); + // printf("theirs: pitch = %f exp = %f\n", pitch, freq); + return freq; +} + +float desiredPitchEv(const EVCO& vco) +{ +#if 1 + return desiredPitch( + vco.params[(int) EVCO::OCTAVE_PARAM].value, + vco.params[(int) EVCO::TUNE_PARAM].value, + vco.inputs[(int) EVCO::PITCH1_INPUT].value, + vco.inputs[(int) EVCO::PITCH2_INPUT].value, + vco.inputs[(int) EVCO::FM_INPUT].value + ); +#else + // This is just the original code as reference + float pitch = 1.0f + roundf(vco.params[(int) EVCO::OCTAVE_PARAM].value) + vco.params[(int) EVCO::TUNE_PARAM].value / 12.0f; + pitch += vco.inputs[(int) EVCO::PITCH1_INPUT].value + vco.inputs[(int) EVCO::PITCH2_INPUT].value; + pitch += vco.inputs[(int) EVCO::FM_INPUT].value / 4.0f; + + float freq = 261.626f * powf(2.0f, pitch); + // printf("theirs: pitch = %f exp = %f\n", pitch, freq); + return freq; +#endif +} + +float desiredPitchCh(const CH& vco) +{ + return desiredPitch( + vco.params[(int) CH::PARAM_OCTAVE].value, + vco.params[(int) CH::PARAM_TUNE].value, + vco.inputs[(int) CH::CV_INPUT].value, + 0, + vco.inputs[(int) CH::PITCH_MOD_INPUT].value + ); + +#if 0 + float pitch = 1.0f + roundf(vco.params[(int) CH::PARAM_OCTAVE].value) + vco.params[(int) CH::PARAM_TUNE].value / 12.0f; + pitch += vco.inputs[(int) CH::CV_INPUT].value; + pitch += vco.inputs[(int) CH::PITCH_MOD_INPUT].value / 4.0f; + + // TODO: atenuverter on FM + + float freq = 261.626f * powf(2.0f, pitch); + // printf("theirs: pitch = %f exp = %f\n", pitch, freq); + printf("in desiredPitchCh oct=%f, tune=%f cv=%f, mode=%f\n", + vco.params[(int) CH::PARAM_OCTAVE].value, + vco.params[(int) CH::PARAM_TUNE].value, + vco.inputs[(int) CH::CV_INPUT].value, + vco.inputs[(int) CH::PITCH_MOD_INPUT].value); + printf(" freq = %f\n", freq); + + + return freq; +#endif +} + +static void testxEv(float octave, float tune = 0, float pitch1 = 0, float pitch2 = 0, float fm = 0) +{ + EVCO vco; + + vco.params[(int) EVCO::OCTAVE_PARAM].value = octave; + vco.params[(int) EVCO::TUNE_PARAM].value = tune; + vco.inputs[(int) EVCO::PITCH1_INPUT].value = pitch1; + vco.inputs[(int) EVCO::PITCH2_INPUT].value = pitch2; + vco.inputs[(int) EVCO::FM_INPUT].value = fm; + + vco.outputs[(int) EVCO::SAW_OUTPUT].active = true; + vco.outputs[(int) EVCO::EVEN_OUTPUT].active = false; + vco.outputs[(int) EVCO::TRI_OUTPUT].active = false; + vco.outputs[(int) EVCO::SQUARE_OUTPUT].active = false; + vco.outputs[(int) EVCO::SINE_OUTPUT].active = false; + + vco.step(); + const float desired = desiredPitchEv(vco); + + // printf("test, oct=%f, freq=%.2f desired=%.2f\n", octave, vco._freq, desired); + if (desired > 20000) { + // lookup table doesn't go past 20k. that's fine + assertGE(vco._freq, 20000 - 1); + } else { + assertClose(vco._freq, desired, 1.5); // todo: make better tolerance + } +} + +static void testxCh(float octave, float tune = 0, float pitch1 = 0, float pitch2 = 0, float fm = 0) +{ + CH vco; + + assert(pitch2 == 0); // ch doesn't have one + + vco.params[(int) CH::PARAM_OCTAVE].value = octave; + vco.params[(int) CH::PARAM_TUNE].value = tune; + vco.inputs[(int) CH::CV_INPUT].value = pitch1; + // vco.inputs[(int) CH::PITCH2_INPUT].value = pitch2; + vco.inputs[(int) CH::PITCH_MOD_INPUT].value = fm; + + + vco.step(); + const float desired = desiredPitchCh(vco); + + // printf("test, oct=%f, freq=%.2f desired=%.2f\n", octave, vco._freq, desired); + if (desired > 20000) { + // lookup table doesn't go past 20k. that's fine + assertGE(vco._freq, 20000 - 1); + } else { + assertClose(vco._freq, desired, 1.5); // todo: make better tolerance + } +} + + +static void testInitEv() +{ + EVCO vco; + + vco.step(); + const float desired = desiredPitchEv(vco); + assertClose(vco._freq, desired, 1); // todo: tighten up +} + +static void testInitCh() +{ + CH vco; + + vco.step(); + const float desired = desiredPitchCh(vco); + assertClose(vco._freq, desired, 1); // todo: tighten up +} + +static void testOctavesEv() +{ + EVCO vco; + for (int octave = -5; octave <= 4; ++octave) { + testxEv(float(octave)); + } +} + +static void testOctavesCh() +{ + CH vco; + for (int octave = -5; octave <= 4; ++octave) { + testxCh(float(octave)); + } +} +// test that we go up to 20k +static void testMaxFreqEv() +{ + testxEv(4, 7, 0, 0); + testxEv(4, 7, 1, 0); + testxEv(4, 7, 0, 1); + +} + +static void testMaxFreqCh() +{ + testxCh(4, 7, 0, 0); + testxCh(4, 7, 1, 0); +} + +static void testMinFreqEv() +{ + testxEv(-5, -7, 0, 0); + testxEv(-5, -7, -2, 0); +} + +static void testMinFreqCh() +{ + testxCh(-5, -7, 0, 0); + testxCh(-5, -7, -2, 0); +} + +static void testTuneEv() +{ + testxEv(0, -7, 0, 0); + testxEv(0, 7, 0, 0); +} + + +static void testTuneCh() +{ + testxCh(0, -7, 0, 0); + testxCh(0, 7, 0, 0); +} + + +static void testClamp() +{ + assertEQ(std::clamp(12, 0, 14), 12); + assertEQ(std::clamp(12, 0, 10), 10); + + assertEQ(std::clamp(12, 13, 15), 13); +} + +#if 1 +void testVCO() +{ + testInitEv(); + testInitCh(); + testOctavesEv(); + testOctavesCh(); + testMaxFreqEv(); + testMaxFreqCh(); + testMinFreqEv(); + testMinFreqCh(); + testClamp(); + testTuneEv(); + testTuneCh(); +} +#else +void testVCO() +{ + testOctavesCh(); +} +#endif \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/test/testVCOAlias.cpp b/plugins/community/repos/squinkylabs-plug1/test/testVCOAlias.cpp new file mode 100644 index 00000000..e1c63219 --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/test/testVCOAlias.cpp @@ -0,0 +1,510 @@ + +#include "Analyzer.h" +#include "asserts.h" +#include "EvenVCO.h" +#include "FunVCO.h" +#include "SawOscillator.h" +#include "SinOscillator.h" +#include "TestComposite.h" + + +// globals for these tests +static const float sampleRate = 44100; +static bool expandBins = false; +static bool adjustBins = true; +#if 0 +static const int numSamples = 64 * 1024; +static const double expandThresholdDb = -10; +#else +static const int numSamples = 64 * 1024; +static const double expandThresholdDb = .01; // normally negative +#endif + + + + +static void testPitchQuantize() +{ + const double sampleRate = 44100; + const int numSamples = 16; + const double inputFreq = 44100.0 / 4.0; + double freq = Analyzer::makeEvenPeriod(inputFreq, sampleRate, numSamples); + + // check that quantized pitch is in the bin we expect. + assertEQ(freq, FFT::bin2Freq(4, sampleRate, numSamples)); + + // make saw osc at correct freq + SinOscillatorParams params; + SinOscillatorState state; + SinOscillator::setFrequency(params, 1.0 / 4.0); + + // check that spectrum has only a single freq + std::function func = [&state, ¶ms]() { + return float(30 * SinOscillator::run(state, params)); + }; + FFTDataCpx spectrum(numSamples); + + + Analyzer::getSpectrum(spectrum, false, func); + for (int i = 0; i < numSamples / 2; ++i) { + const float abs = spectrum.getAbs(i); + if (i == 4) { + assertGE(abs, .5); + } else { + assertLT(abs, 0.000000001); + } + } +} + +class AliasStats +{ +public: + float totalAliasDb; + float totalAliasAWeighted; + float maxAliasFreq; +}; + +/* + +Next: examine the spectrum. make sure all freq in spectrum are signal or alias +*/ + +class FrequencySets +{ +public: + FrequencySets(double fundamental, double sampleRate, const FFTDataCpx& spectrum); + void expandFrequencies(); + bool checkOverlap() const; + + std::set harmonics; + std::set alias; + + void adjustFrequencies(); + void dump(const char *) const; +private: + static void expandFrequencies(std::set&, const FFTDataCpx& spectrum); + bool adjustFrequencies1(); + static bool adjustFreqHelper(int bin, int tryBin, std::set& set, const FFTDataCpx& spectrum); + const FFTDataCpx& spectrum; +}; + +inline void FrequencySets::adjustFrequencies() +{ + int tries = 0; + while (adjustFrequencies1()) { + ++tries; + } + //printf("adjust moved %d\n", tries); +} + +inline bool FrequencySets::adjustFreqHelper(int bin, int tryBin, std::set& set, const FFTDataCpx& spectrum) +{ + bool ret = false; + if (tryBin < 0 || tryBin >= spectrum.size()) { + return false; + } + const double db = AudioMath::db(spectrum.getAbs(bin)); + const double dbm1 = AudioMath::db(spectrum.getAbs(tryBin)); + if (dbm1 > (db + 3)) { // only adjust a bin if it's a 3db improvement + const double f = FFT::bin2Freq(bin, sampleRate, spectrum.size()); + const double fNew = FFT::bin2Freq(tryBin, sampleRate, spectrum.size()); + auto x = set.erase(f); + assert(x == 1); + set.insert(fNew); + ret = true; + } + + return ret; + +} + +inline bool FrequencySets::adjustFrequencies1() +{ + for (auto f : harmonics) { + const int bin = FFT::freqToBin(f, sampleRate, spectrum.size()); + if (adjustFreqHelper(bin, bin - 1, harmonics, spectrum)) + return true; + if (adjustFreqHelper(bin, bin + 1, harmonics, spectrum)) + return true; + } + for (auto f : alias) { + const int bin = FFT::freqToBin(f, sampleRate, spectrum.size()); + if (adjustFreqHelper(bin, bin - 1, alias, spectrum)) + return true; + if (adjustFreqHelper(bin, bin + 1, alias, spectrum)) + return true; + } + return false; +} + + +inline FrequencySets::FrequencySets(double fundamental, double sampleRate, const FFTDataCpx& spectrum) : + spectrum(spectrum) +{ + const double nyquist = sampleRate / 2; + bool done = false; + for (int i = 1; !done; ++i) { + double freq = fundamental * i; + if (freq < nyquist) { + //harmonics.push_back(freq); + harmonics.insert(freq); + } else { + double over = freq - nyquist; + if (over < nyquist) { + freq = nyquist - over; + //alias.push_back(freq); + alias.insert(freq); + } else { + done = true; + } + } + } +} + + +inline void expandHelper(double& maxDb, bool& done, int& i, int deltaI, const FFTDataCpx& spectrum, std::set& f) +{ + if (i >= spectrum.size() || i < 0) { + done = true; + } else { + const double db = AudioMath::db(spectrum.getAbs(i)); + + if (db < (maxDb + expandThresholdDb)) { + done = true; + } else { + //const double oldFreq = FFT::bin2Freq(i, sampleRate, spectrum.size()); + const double newFreq = FFT::bin2Freq(i, sampleRate, spectrum.size()); + if (newFreq < 900 && newFreq > 800) + printf("inserting new freq %f db=%f m=%f\n ", newFreq, db, maxDb); + maxDb = std::max(maxDb, db); + f.insert(newFreq); + } + } + i += deltaI; +} + +inline void FrequencySets::expandFrequencies(std::set& f, const FFTDataCpx& spectrum) +{ + assert(expandBins); + for (double freq : f) { + if (int(freq) == 1064) { + int x = 5; + } + const int bin = FFT::freqToBin(freq, sampleRate, spectrum.size()); + double maxDb = AudioMath::db(spectrum.getAbs(bin)); + + // search upward + bool done; + int i; + for (i = bin + 1, done = false; !done; ) { + expandHelper(maxDb, done, i, 1, spectrum, f); + } + + for (i = bin - 1, done = false; !done; ) { + expandHelper(maxDb, done, i, -1, spectrum, f); + } + } +} + +inline void FrequencySets::dump(const char *label) const +{ + printf("**** %s ****\n", label); + for (auto f : harmonics) { + int bin = FFT::freqToBin(f, sampleRate, spectrum.size()); + printf("harm at %.2f db:%.2f\n", f, AudioMath::db(spectrum.getAbs(bin))); + } + for (auto f : alias) { + int bin = FFT::freqToBin(f, sampleRate, spectrum.size()); + printf("alias at %.2f db:%.2f\n", f, AudioMath::db(spectrum.getAbs(bin))); + } +} + +inline void FrequencySets::expandFrequencies() +{ + //dump("before expand freq", spectrum); + expandFrequencies(harmonics, spectrum); + expandFrequencies(alias, spectrum); + + + //dump("after expand freq", spectrum); + assert(checkOverlap()); + +} + +inline bool FrequencySets::checkOverlap() const +{ + std::vector overlap; + + std::set_intersection(harmonics.begin(), harmonics.end(), + alias.begin(), alias.end(), + std::back_inserter(overlap)); + if (!overlap.empty()) { + for (auto x : overlap) { + printf("overlap at %f\n", x); + } + } + return overlap.empty(); +} + + +/* + + +Ra = 12194**2 * f**4 / +(f**2 + 20.6 ** 2) sqrt((f2 + 107.2**2)(f2 + 737.9**2)) * (f2 + 12194**2) +A(f) = db(Ra) + 2 +*/ +double WeightA(double mag, double f) +{ + double num = (12194 * 12194) * f*f*f*f; + double den = (f*f + 20.6*20.6) * sqrt((f*f + 107.2*107.2) * (f*f + 737.9 * 737.9)) * (f*f + 12194 * 12194); + double Ra = num / den; + // printf("Ra(%f) = %f\n", f, Ra); + return Ra * mag; +} + +void testAlias(std::function func, double fundamental, int numSamples) +{ + // printf("test alias fundamental=%f,%f,%f\n", fundamental, fundamental * 2, fundamental * 3); + FFTDataCpx spectrum(numSamples); + Analyzer::getSpectrum(spectrum, false, func); + FrequencySets frequencies(fundamental, sampleRate, spectrum); + assert(frequencies.checkOverlap()); + + // frequencies.dump("init freq"); + if (adjustBins) + frequencies.adjustFrequencies(); + // frequencies.dump("after adjust"); + assert(frequencies.checkOverlap()); + + if (expandBins) + frequencies.expandFrequencies(); + assert(frequencies.checkOverlap()); + + //frequencies.dump("final freq"); + + double totalSignal = 0; + double totalAlias = 0; + double totalSignalA = 0; + double totalAliasA = 0; + double totalAliasOver5 = 0; + double totalAliasBelow5 = 0; + + // let's look at every spectrum line + for (int i = 1; i < numSamples / 2; ++i) { + const double freq = FFT::bin2Freq(i, sampleRate, numSamples); + const double mag = spectrum.getAbs(i); + // const double db = AudioMath::db(mag); + const double magA = WeightA(mag, freq); + + const bool isH2 = frequencies.harmonics.find(freq) != frequencies.harmonics.end(); + const bool isA2 = frequencies.alias.find(freq) != frequencies.alias.end(); + + assert(!isA2 || !isH2); + + const bool above5k = (freq >= 5000); + // const bool above10k = (freq > 10000); + + if (isH2) { + totalSignal += mag; + totalSignalA += magA; + } + if (isA2) { + totalAlias += mag; + totalAliasA += magA; + if (above5k) { + totalAliasOver5 += mag; + } else { + totalAliasBelow5 += mag; + } + } + } + + printf("total sig = %f alias = %f ratiodb=%f A=%f\n", + totalSignal, + totalAlias, + AudioMath::db(totalAlias / totalSignal), + 2 + AudioMath::db(totalAliasA / totalSignalA) + ); +} + +void printHeader(const char * label, double desired, double actual) +{ + printf("\n%s freq = %f, round %f\n", label, desired, actual); + printf("frame size = %d, expandThreshDb=%f \n", numSamples, expandThresholdDb); + printf("expand bins=%d, adjustBins=%d\n", expandBins, adjustBins); +} + +template +void testRawSaw(double normalizedFreq) +{ + const int numSamples = 64 * 1024; + // adjust the freq to even + + double freq = Analyzer::makeEvenPeriod(sampleRate * normalizedFreq, sampleRate, numSamples); + printHeader("Raw Saw", sampleRate * normalizedFreq, freq); + + // make saw osc at correct freq + SawOscillatorParams params; + SawOscillatorState state; + SawOscillator::setFrequency(params, (float) normalizedFreq); + testAlias([&state, ¶ms]() { + return (T) 30 * SawOscillator::runSaw(state, params); + }, freq, numSamples); + +} + +static void testEven(double normalizedFreq) +{ + + // adjust the freq to even + double freq = Analyzer::makeEvenPeriod(sampleRate * normalizedFreq, sampleRate, numSamples); + printHeader("EvenVCO", sampleRate * normalizedFreq, freq); + + using EVCO = EvenVCO ; + EVCO vco; + vco._testFreq = float(sampleRate * normalizedFreq); + vco.outputs[EVCO::SAW_OUTPUT].active = true; + vco.outputs[EVCO::SINE_OUTPUT].active = false; + vco.outputs[EVCO::TRI_OUTPUT].active = false; + vco.outputs[EVCO::SQUARE_OUTPUT].active = false; + vco.outputs[EVCO::EVEN_OUTPUT].active = false; + + testAlias([&vco]() { + vco.step(); + return 3 * vco.outputs[EVCO::SAW_OUTPUT].value; + }, freq, numSamples); + + fflush(stdout); +} + + +static void testAliasFunOrig(double normalizedFreq) +{ + // adjust the freq to even + double freq = Analyzer::makeEvenPeriod(sampleRate * normalizedFreq, sampleRate, numSamples); + printHeader("FunOrig", sampleRate * normalizedFreq, freq); + + VoltageControlledOscillatorOrig<16, 16> vco; + vco.freq = float(sampleRate * normalizedFreq); + vco.sampleTime = 1.0f / sampleRate; + + testAlias([&vco]() { + const float deltaTime = 1.0f / sampleRate; + vco.process(deltaTime, 0); + return 15 * vco.saw(); + }, freq, numSamples); +} + + +static void testAliasFun(double normalizedFreq) +{ + // adjust the freq to even + double freq = Analyzer::makeEvenPeriod(sampleRate * normalizedFreq, sampleRate, numSamples); + printHeader("Fun Mine", sampleRate * normalizedFreq, freq); + + VoltageControlledOscillator<16, 16> vco; + vco.freq = float(sampleRate * normalizedFreq); + vco.sampleTime = 1.0f / sampleRate; + + vco.sawEnabled = true; + vco.sinEnabled = false; + vco.sqEnabled = false; + vco.triEnabled = false; + vco.init(); + + testAlias([&vco]() { + const float deltaTime = 1.0f / sampleRate; + vco.process(deltaTime, 0); + return 15 * vco.saw(); + }, freq, numSamples); +} + + +/* +First try: +desired freq = 844.180682, round 842.486572 +test alias fundamental=842.486572,1684.973145,2527.459717 +total sig = 3.239564 alias = 0.100040 ratiodb=-30.206276 + +desired freq = 1688.361365, round 1687.664795 +test alias fundamental=1687.664795,3375.329590,5062.994385 +total sig = 6.824180 alias = 0.158808 ratiodb=-32.663559 + +desired freq = 3376.722729, round 3375.329590 +test alias fundamental=3375.329590,6750.659180,10125.988770 +total sig = 3.512697 alias = 0.166856 ratiodb=-26.465975 +Test passed. Press any key to continue... + +--- + +EvenVCO freq = 844.180682, round 843.832397 +frame size = 65536, expandThreshDb=0.000000 +expand bins=0, adjustBins=1 +adjust moved 6939 +total sig = 0.015563 alias = 0.015805 ratiodb=0.133833 + +Raw Saw freq = 844.180682, round 843.832397 +frame size = 65536, expandThreshDb=0.000000 +expand bins=0, adjustBins=1 +adjust moved 392 +total sig = 0.166494 alias = 0.041957 ratiodb=-11.971910 + +Raw Saw freq = 1688.361365, round 1688.337708 +frame size = 65536, expandThreshDb=0.000000 +expand bins=0, adjustBins=1 +adjust moved 0 +total sig = 14.344683 alias = 1.279057 ratiodb=-20.996020 + +Raw Saw freq = 3376.722729, round 3376.675415 +frame size = 65536, expandThreshDb=0.000000 +expand bins=0, adjustBins=1 +adjust moved 0 +total sig = 10.917767 alias = 1.400212 ratiodb=-17.838803 +Test passed. Press any key to continue... + +---- + +EvenVCO freq = 844.180682, round 843.832397 +frame size = 65536, expandThreshDb=0.000000 +expand bins=1, adjustBins=1 +adjust moved 6939 +total sig = 0.015563 alias = 30.322415 ratiodb=65.793436 + +Raw Saw freq = 844.180682, round 843.832397 +frame size = 65536, expandThreshDb=0.000000 +expand bins=1, adjustBins=1 +adjust moved 392 +total sig = 0.166494 alias = 0.368204 ratiodb=6.893811 + +Raw Saw freq = 1688.361365, round 1688.337708 +frame size = 65536, expandThreshDb=0.000000 +expand bins=1, adjustBins=1 +adjust moved 0 +total sig = 14.344683 alias = 3.708226 ratiodb=-11.750495 + +Raw Saw freq = 3376.722729, round 3376.675415 +frame size = 65536, expandThreshDb=0.000000 +expand bins=1, adjustBins=1 +adjust moved 0 +total sig = 10.917767 alias = 3.809961 ratiodb=-9.144265 +Test passed. Press any key to continue... + + + + +*/ + +void testVCOAlias() +{ + testPitchQuantize(); + + + for (int i = 2; i <= 8; i *= 2) { + float f = 1.0f / (i * 6.53f); + // testEven(f); + // testRawSaw(f); + // testAliasFunOrig(f); + testAliasFun(f); + } +} \ No newline at end of file diff --git a/plugins/community/repos/squinkylabs-plug1/text.txt b/plugins/community/repos/squinkylabs-plug1/text.txt new file mode 100644 index 00000000..fb279cbb --- /dev/null +++ b/plugins/community/repos/squinkylabs-plug1/text.txt @@ -0,0 +1,1056 @@ +test1 + + +: step +: final out saw=-0.95 mb=0.00 smb = 0.00 tot=-0.95 +***** testSync3***** + +VCO1: step +VCO1: final out saw=-0.91 mb=0.00 smb = 0.00 tot=-0.91 + +VCO2: step +VCO2: final out saw=-0.80 mb=0.00 smb = 0.00 tot=-0.80 + +VCO3: step +VCO3: final out saw=-0.80 mb=0.00 smb = 0.00 tot=-0.80 +-------- sample 0 ----------- + +VCO1: step +VCO1: final out saw=-0.81 mb=0.00 smb = 0.00 tot=-0.81 + +VCO2: step +VCO2: final out saw=-0.60 mb=0.00 smb = 0.00 tot=-0.60 + +VCO3: step +VCO3: final out saw=-0.60 mb=0.00 smb = 0.00 tot=-0.60 +-------- sample 1 ----------- + +VCO1: step +VCO1: final out saw=-0.72 mb=0.00 smb = 0.00 tot=-0.72 + +VCO2: step +VCO2: final out saw=-0.40 mb=0.00 smb = 0.00 tot=-0.40 + +VCO3: step +VCO3: final out saw=-0.40 mb=0.00 smb = 0.00 tot=-0.40 +-------- sample 2 ----------- + +VCO1: step +VCO1: final out saw=-0.62 mb=0.00 smb = 0.00 tot=-0.62 + +VCO2: step +VCO2: final out saw=-0.20 mb=0.00 smb = 0.00 tot=-0.20 + +VCO3: step +VCO3: final out saw=-0.20 mb=0.00 smb = 0.00 tot=-0.20 +-------- sample 3 ----------- + +VCO1: step +VCO1: final out saw=-0.53 mb=0.00 smb = 0.00 tot=-0.53 + +VCO2: step +VCO2: final out saw=0.01 mb=0.00 smb = 0.00 tot=0.01 + +VCO3: step +VCO3: final out saw=0.01 mb=0.00 smb = 0.00 tot=0.01 +-------- sample 4 ----------- + +VCO1: step +VCO1: final out saw=-0.43 mb=0.00 smb = 0.00 tot=-0.43 + +VCO2: step +VCO2: final out saw=0.21 mb=0.00 smb = 0.00 tot=0.21 + +VCO3: step +VCO3: final out saw=0.21 mb=0.00 smb = 0.00 tot=0.21 +-------- sample 5 ----------- + +VCO1: step +VCO1: final out saw=-0.34 mb=0.00 smb = 0.00 tot=-0.34 + +VCO2: step +VCO2: final out saw=0.41 mb=0.00 smb = 0.00 tot=0.41 + +VCO3: step +VCO3: final out saw=0.41 mb=0.00 smb = 0.00 tot=0.41 +-------- sample 6 ----------- + +VCO1: step +VCO1: final out saw=-0.24 mb=0.00 smb = 0.00 tot=-0.24 + +VCO2: step +VCO2: final out saw=0.61 mb=0.00 smb = 0.00 tot=0.61 + +VCO3: step +VCO3: final out saw=0.61 mb=0.00 smb = 0.00 tot=0.61 +-------- sample 7 ----------- + +VCO1: step +VCO1: final out saw=-0.15 mb=0.00 smb = 0.00 tot=-0.15 + +VCO2: step +VCO2: final out saw=0.81 mb=0.00 smb = 0.00 tot=0.81 + +VCO3: step +VCO3: final out saw=0.81 mb=0.00 smb = 0.00 tot=0.81 +-------- sample 8 ----------- + +VCO1: step +VCO1: final out saw=-0.05 mb=0.00 smb = 0.00 tot=-0.05 + +VCO2: step +VCO2: phase wrap 1.01->0.01 cross=-0.06 jump=-2.00 +VCO2: final out saw=-0.99 mb=2.00 smb = 0.00 tot=1.01 + +VCO3: step +VCO3: phase wrap 1.01->0.01 cross=-0.06 jump=-2.00 +VCO3: final out saw=-0.99 mb=2.00 smb = 0.00 tot=1.01 +-------- sample 9 ----------- + +VCO1: step +VCO1: final out saw=0.04 mb=0.00 smb = 0.00 tot=0.04 + +VCO2: step +VCO2: final out saw=-0.79 mb=1.96 smb = 0.00 tot=1.18 + +VCO3: step +VCO3: final out saw=-0.79 mb=1.96 smb = 0.00 tot=1.18 +-------- sample 10 ----------- + +VCO1: step +VCO1: final out saw=0.14 mb=0.00 smb = 0.00 tot=0.14 + +VCO2: step +VCO2: final out saw=-0.59 mb=1.39 smb = 0.00 tot=0.80 + +VCO3: step +VCO3: final out saw=-0.59 mb=1.39 smb = 0.00 tot=0.80 +-------- sample 11 ----------- + +VCO1: step +VCO1: final out saw=0.23 mb=0.00 smb = 0.00 tot=0.23 + +VCO2: step +VCO2: final out saw=-0.39 mb=-0.09 smb = 0.00 tot=-0.48 + +VCO3: step +VCO3: final out saw=-0.39 mb=-0.09 smb = 0.00 tot=-0.48 +-------- sample 12 ----------- + +VCO1: step +VCO1: final out saw=0.33 mb=0.00 smb = 0.00 tot=0.33 + +VCO2: step +VCO2: final out saw=-0.18 mb=-0.20 smb = 0.00 tot=-0.39 + +VCO3: step +VCO3: final out saw=-0.18 mb=-0.20 smb = 0.00 tot=-0.39 +-------- sample 13 ----------- + +VCO1: step +VCO1: final out saw=0.42 mb=0.00 smb = 0.00 tot=0.42 + +VCO2: step +VCO2: final out saw=0.02 mb=0.21 smb = 0.00 tot=0.23 + +VCO3: step +VCO3: final out saw=0.02 mb=0.21 smb = 0.00 tot=0.23 +-------- sample 14 ----------- + +VCO1: step +VCO1: final out saw=0.52 mb=0.00 smb = 0.00 tot=0.52 + +VCO2: step +VCO2: final out saw=0.22 mb=-0.18 smb = 0.00 tot=0.04 + +VCO3: step +VCO3: final out saw=0.22 mb=-0.18 smb = 0.00 tot=0.04 +-------- sample 15 ----------- + +VCO1: step +VCO1: final out saw=0.61 mb=0.00 smb = 0.00 tot=0.61 + +VCO2: step +VCO2: final out saw=0.42 mb=0.13 smb = 0.00 tot=0.55 + +VCO3: step +VCO3: final out saw=0.42 mb=0.13 smb = 0.00 tot=0.55 +-------- sample 16 ----------- + +VCO1: step +VCO1: final out saw=0.71 mb=0.00 smb = 0.00 tot=0.71 + +VCO2: step +VCO2: final out saw=0.62 mb=-0.11 smb = 0.00 tot=0.51 + +VCO3: step +VCO3: final out saw=0.62 mb=-0.11 smb = 0.00 tot=0.51 +-------- sample 17 ----------- + +VCO1: step +VCO1: final out saw=0.80 mb=0.00 smb = 0.00 tot=0.80 + +VCO2: step +VCO2: final out saw=0.82 mb=0.07 smb = 0.00 tot=0.89 + +VCO3: step +VCO3: final out saw=0.82 mb=0.07 smb = 0.00 tot=0.89 +-------- sample 18 ----------- + +VCO1: step +VCO1: final out saw=0.90 mb=0.00 smb = 0.00 tot=0.90 + +VCO2: step +VCO2: phase wrap 1.01->0.01 cross=-0.11 jump=-2.00 +VCO2: final out saw=-0.98 mb=1.94 smb = 0.00 tot=0.96 + +VCO3: step +VCO3: phase wrap 1.01->0.01 cross=-0.11 jump=-2.00 +VCO3: final out saw=-0.98 mb=1.94 smb = 0.00 tot=0.96 +-------- sample 19 ----------- + +VCO1: step +VCO1: final out saw=0.99 mb=0.00 smb = 0.00 tot=0.99 + +VCO2: step +VCO2: final out saw=-0.78 mb=1.99 smb = 0.00 tot=1.22 + +VCO3: step +VCO3: final out saw=-0.78 mb=1.99 smb = 0.00 tot=1.22 +-------- sample 20 ----------- + +VCO1: step +VCO1: phase wrap 1.04->0.04 cross=-0.93 jump=-2.00 +VCO1: calling slave with -0.93 +VCO1: final out saw=-0.91 mb=1.98 smb = 0.00 tot=1.07 + +VCO2: step +VCO2: got sync ph=0.21 nph=0.59 excess=0.09 send cross -0.93 jump 0.76 + +VCO3: step +VCO3: final out saw=-0.58 mb=1.29 smb = 0.00 tot=0.71 +-------- sample 21 ----------- + +VCO1: step +VCO1: final out saw=-0.82 mb=1.53 smb = 0.00 tot=0.71 + +VCO2: step +VCO2: final out saw=0.39 mb=1.29 smb = -0.75 tot=0.92 + +VCO3: step +VCO3: final out saw=-0.37 mb=-0.14 smb = 0.00 tot=-0.51 +-------- sample 22 ----------- + +VCO1: step +VCO1: final out saw=-0.72 mb=0.08 smb = 0.00 tot=-0.65 + +VCO2: step +VCO2: final out saw=0.59 mb=-0.14 smb = -0.58 tot=-0.13 + +VCO3: step +VCO3: final out saw=-0.17 mb=-0.18 smb = 0.00 tot=-0.35 +-------- sample 23 ----------- + +VCO1: step +VCO1: final out saw=-0.63 mb=-0.30 smb = 0.00 tot=-0.92 + +VCO2: step +VCO2: final out saw=0.79 mb=-0.18 smb = -0.03 tot=0.59 + +VCO3: step +VCO3: final out saw=0.03 mb=0.19 smb = 0.00 tot=0.22 +-------- sample 24 ----------- + +VCO1: step +VCO1: final out saw=-0.53 mb=0.24 smb = 0.00 tot=-0.29 + +VCO2: step +VCO2: final out saw=0.99 mb=0.19 smb = 0.11 tot=1.30 + +VCO3: step +VCO3: final out saw=0.23 mb=-0.19 smb = 0.00 tot=0.04 +-------- sample 25 ----------- + +VCO1: step +VCO1: final out saw=-0.44 mb=-0.18 smb = 0.00 tot=-0.62 + +VCO2: step +VCO2: phase wrap 1.10->0.10 cross=-0.96 jump=-2.00 +VCO2: final out saw=-0.81 mb=1.79 smb = -0.09 tot=0.89 + +VCO3: step +VCO3: final out saw=0.43 mb=0.13 smb = 0.00 tot=0.56 +-------- sample 26 ----------- + +VCO1: step +VCO1: final out saw=-0.34 mb=0.12 smb = 0.00 tot=-0.22 + +VCO2: step +VCO2: final out saw=-0.61 mb=1.63 smb = 0.07 tot=1.10 + +VCO3: step +VCO3: final out saw=0.63 mb=-0.10 smb = 0.00 tot=0.54 +-------- sample 27 ----------- + +VCO1: step +VCO1: final out saw=-0.25 mb=-0.09 smb = 0.00 tot=-0.34 + +VCO2: step +VCO2: final out saw=-0.41 mb=-0.06 smb = -0.04 tot=-0.51 + +VCO3: step +VCO3: final out saw=0.83 mb=0.11 smb = 0.00 tot=0.94 +-------- sample 28 ----------- + +VCO1: step +VCO1: final out saw=-0.15 mb=0.05 smb = 0.00 tot=-0.10 + +VCO2: step +VCO2: final out saw=-0.20 mb=-0.17 smb = 0.03 tot=-0.34 + +VCO3: step +VCO3: phase wrap 1.02->0.02 cross=-0.17 jump=-2.00 +VCO3: final out saw=-0.97 mb=1.90 smb = 0.00 tot=0.94 +-------- sample 29 ----------- + +VCO1: step +VCO1: final out saw=-0.06 mb=-0.04 smb = 0.00 tot=-0.10 + +VCO2: step +VCO2: final out saw=-0.00 mb=0.14 smb = -0.02 tot=0.12 + +VCO3: step +VCO3: final out saw=-0.76 mb=2.00 smb = 0.00 tot=1.24 +-------- sample 30 ----------- + +VCO1: step +VCO1: final out saw=0.04 mb=0.02 smb = 0.00 tot=0.06 + +VCO2: step +VCO2: final out saw=0.20 mb=-0.13 smb = 0.02 tot=0.09 + +VCO3: step +VCO3: final out saw=-0.56 mb=1.20 smb = 0.00 tot=0.64 +-------- sample 31 ----------- + +VCO1: step +VCO1: final out saw=0.13 mb=-0.02 smb = 0.00 tot=0.11 + +VCO2: step +VCO2: final out saw=0.40 mb=0.07 smb = -0.01 tot=0.47 + +VCO3: step +VCO3: final out saw=-0.36 mb=-0.20 smb = 0.00 tot=-0.56 +-------- sample 32 ----------- + +VCO1: step +VCO1: final out saw=0.23 mb=0.01 smb = 0.00 tot=0.23 + +VCO2: step +VCO2: final out saw=0.60 mb=-0.07 smb = 0.01 tot=0.54 + +VCO3: step +VCO3: final out saw=-0.16 mb=-0.13 smb = 0.00 tot=-0.29 +-------- sample 33 ----------- + +VCO1: step +VCO1: final out saw=0.32 mb=-0.01 smb = 0.00 tot=0.31 + +VCO2: step +VCO2: final out saw=0.80 mb=0.03 smb = -0.00 tot=0.83 + +VCO3: step +VCO3: final out saw=0.04 mb=0.16 smb = 0.00 tot=0.20 +-------- sample 34 ----------- + +VCO1: step +VCO1: final out saw=0.42 mb=0.00 smb = 0.00 tot=0.42 + +VCO2: step +VCO2: phase wrap 1.00->0.00 cross=-0.01 jump=-2.00 +VCO2: final out saw=-1.00 mb=1.96 smb = 0.00 tot=0.96 + +VCO3: step +VCO3: final out saw=0.24 mb=-0.17 smb = 0.00 tot=0.07 +-------- sample 35 ----------- + +VCO1: step +VCO1: final out saw=0.51 mb=-0.01 smb = 0.00 tot=0.50 + +VCO2: step +VCO2: final out saw=-0.80 mb=1.98 smb = -0.00 tot=1.19 + +VCO3: step +VCO3: final out saw=0.44 mb=0.13 smb = 0.00 tot=0.57 +-------- sample 36 ----------- + +VCO1: step +VCO1: final out saw=0.61 mb=-0.00 smb = 0.00 tot=0.61 + +VCO2: step +VCO2: final out saw=-0.59 mb=1.41 smb = 0.00 tot=0.82 + +VCO3: step +VCO3: final out saw=0.64 mb=-0.09 smb = 0.00 tot=0.55 +-------- sample 37 ----------- + +VCO1: step +VCO1: final out saw=0.70 mb=0.01 smb = 0.00 tot=0.71 + +VCO2: step +VCO2: final out saw=-0.39 mb=-0.01 smb = 0.00 tot=-0.41 + +VCO3: step +VCO3: final out saw=0.84 mb=0.11 smb = 0.00 tot=0.95 +-------- sample 38 ----------- + +VCO1: step +VCO1: final out saw=0.80 mb=0.04 smb = 0.00 tot=0.83 + +VCO2: step +VCO2: final out saw=-0.19 mb=-0.22 smb = -0.00 tot=-0.42 + +VCO3: step +VCO3: phase wrap 1.02->0.02 cross=-0.22 jump=-2.00 +VCO3: final out saw=-0.95 mb=1.90 smb = 0.00 tot=0.94 +-------- sample 39 ----------- + +VCO1: step +VCO1: final out saw=0.89 mb=-0.02 smb = 0.00 tot=0.87 + +VCO2: step +VCO2: final out saw=0.01 mb=0.19 smb = -0.01 tot=0.19 + +VCO3: step +VCO3: final out saw=-0.75 mb=1.99 smb = 0.00 tot=1.24 +-------- sample 40 ----------- + +VCO1: step +VCO1: final out saw=0.99 mb=0.01 smb = 0.00 tot=0.99 + +VCO2: step +VCO2: final out saw=0.21 mb=-0.18 smb = 0.01 tot=0.04 + +VCO3: step +VCO3: final out saw=-0.55 mb=1.12 smb = 0.00 tot=0.57 +-------- sample 41 ----------- + +VCO1: step +VCO1: phase wrap 1.04->0.04 cross=-0.86 jump=-2.00 +VCO1: calling slave with -0.86 +VCO1: final out saw=-0.92 mb=1.98 smb = 0.00 tot=1.06 + +VCO2: step +VCO2: got sync ph=0.71 nph=0.59 excess=0.09 send cross -0.86 jump -0.24 + +VCO3: step +VCO3: final out saw=-0.35 mb=-0.24 smb = 0.00 tot=-0.60 +-------- sample 42 ----------- + +VCO1: step +VCO1: final out saw=-0.82 mb=1.59 smb = 0.00 tot=0.76 + +VCO2: step +VCO2: final out saw=0.37 mb=0.12 smb = 0.23 tot=0.73 + +VCO3: step +VCO3: final out saw=-0.15 mb=-0.09 smb = 0.00 tot=-0.24 +-------- sample 43 ----------- + +VCO1: step +VCO1: final out saw=-0.73 mb=0.18 smb = 0.00 tot=-0.54 + +VCO2: step +VCO2: final out saw=0.58 mb=-0.09 smb = 0.19 tot=0.68 + +VCO3: step +VCO3: final out saw=0.05 mb=0.14 smb = 0.00 tot=0.19 +-------- sample 44 ----------- + +VCO1: step +VCO1: final out saw=-0.63 mb=-0.35 smb = 0.00 tot=-0.98 + +VCO2: step +VCO2: final out saw=0.78 mb=0.10 smb = 0.02 tot=0.90 + +VCO3: step +VCO3: final out saw=0.25 mb=-0.16 smb = 0.00 tot=0.09 +-------- sample 45 ----------- + +VCO1: step +VCO1: final out saw=-0.54 mb=0.25 smb = 0.00 tot=-0.28 + +VCO2: step +VCO2: final out saw=0.98 mb=-0.08 smb = -0.04 tot=0.85 + +VCO3: step +VCO3: final out saw=0.45 mb=0.12 smb = 0.00 tot=0.58 +-------- sample 46 ----------- + +VCO1: step +VCO1: final out saw=-0.44 mb=-0.18 smb = 0.00 tot=-0.63 + +VCO2: step +VCO2: phase wrap 1.09->0.09 cross=-0.89 jump=-2.00 +VCO2: final out saw=-0.82 mb=2.02 smb = 0.03 tot=1.23 + +VCO3: step +VCO3: final out saw=0.65 mb=-0.09 smb = 0.00 tot=0.56 +-------- sample 47 ----------- + +VCO1: step +VCO1: final out saw=-0.35 mb=0.11 smb = 0.00 tot=-0.24 + +VCO2: step +VCO2: final out saw=-0.62 mb=1.53 smb = -0.02 tot=0.89 + +VCO3: step +VCO3: final out saw=0.86 mb=0.10 smb = 0.00 tot=0.96 +-------- sample 48 ----------- + +VCO1: step +VCO1: final out saw=-0.25 mb=-0.08 smb = 0.00 tot=-0.33 + +VCO2: step +VCO2: final out saw=-0.42 mb=0.14 smb = 0.02 tot=-0.26 + +VCO3: step +VCO3: phase wrap 1.03->0.03 cross=-0.28 jump=-2.00 +VCO3: final out saw=-0.94 mb=1.89 smb = 0.00 tot=0.95 +-------- sample 49 ----------- + +VCO1: step +VCO1: final out saw=-0.16 mb=0.04 smb = 0.00 tot=-0.12 + +VCO2: step +VCO2: final out saw=-0.22 mb=-0.34 smb = -0.01 tot=-0.57 + +VCO3: step +VCO3: final out saw=-0.74 mb=1.98 smb = 0.00 tot=1.24 +-------- sample 50 ----------- + +VCO1: step +VCO1: final out saw=-0.06 mb=-0.03 smb = 0.00 tot=-0.10 + +VCO2: step +VCO2: final out saw=-0.02 mb=0.24 smb = 0.01 tot=0.23 + +VCO3: step +VCO3: final out saw=-0.54 mb=1.03 smb = 0.00 tot=0.49 +-------- sample 51 ----------- + +VCO1: step +VCO1: final out saw=0.03 mb=0.01 smb = 0.00 tot=0.04 + +VCO2: step +VCO2: final out saw=0.18 mb=-0.19 smb = -0.00 tot=-0.01 + +VCO3: step +VCO3: final out saw=-0.34 mb=-0.29 smb = 0.00 tot=-0.63 +-------- sample 52 ----------- + +VCO1: step +VCO1: final out saw=0.13 mb=-0.01 smb = 0.00 tot=0.11 + +VCO2: step +VCO2: final out saw=0.39 mb=0.10 smb = 0.00 tot=0.49 + +VCO3: step +VCO3: final out saw=-0.14 mb=-0.05 smb = 0.00 tot=-0.19 +-------- sample 53 ----------- + +VCO1: step +VCO1: final out saw=0.22 mb=-0.00 smb = 0.00 tot=0.22 + +VCO2: step +VCO2: final out saw=0.59 mb=-0.06 smb = -0.00 tot=0.52 + +VCO3: step +VCO3: final out saw=0.06 mb=0.11 smb = 0.00 tot=0.17 +-------- sample 54 ----------- + +VCO1: step +VCO1: final out saw=0.32 mb=-0.01 smb = 0.00 tot=0.31 + +VCO2: step +VCO2: final out saw=0.79 mb=0.07 smb = -0.00 tot=0.86 + +VCO3: step +VCO3: final out saw=0.26 mb=-0.15 smb = 0.00 tot=0.12 +-------- sample 55 ----------- + +VCO1: step +VCO1: final out saw=0.41 mb=-0.00 smb = 0.00 tot=0.41 + +VCO2: step +VCO2: final out saw=0.99 mb=-0.06 smb = -0.00 tot=0.93 + +VCO3: step +VCO3: final out saw=0.46 mb=0.11 smb = 0.00 tot=0.58 +-------- sample 56 ----------- + +VCO1: step +VCO1: final out saw=0.51 mb=-0.01 smb = 0.00 tot=0.50 + +VCO2: step +VCO2: phase wrap 1.09->0.09 cross=-0.94 jump=-2.00 +VCO2: final out saw=-0.81 mb=2.00 smb = -0.00 tot=1.19 + +VCO3: step +VCO3: final out saw=0.67 mb=-0.09 smb = 0.00 tot=0.58 +-------- sample 57 ----------- + +VCO1: step +VCO1: final out saw=0.60 mb=-0.00 smb = 0.00 tot=0.60 + +VCO2: step +VCO2: final out saw=-0.61 mb=1.49 smb = -0.00 tot=0.88 + +VCO3: step +VCO3: final out saw=0.87 mb=0.10 smb = 0.00 tot=0.97 +-------- sample 58 ----------- + +VCO1: step +VCO1: final out saw=0.70 mb=0.01 smb = 0.00 tot=0.71 + +VCO2: step +VCO2: final out saw=-0.41 mb=0.05 smb = -0.00 tot=-0.35 + +VCO3: step +VCO3: phase wrap 1.03->0.03 cross=-0.34 jump=-2.00 +VCO3: final out saw=-0.93 mb=1.89 smb = 0.00 tot=0.96 +-------- sample 59 ----------- + +VCO1: step +VCO1: final out saw=0.79 mb=0.04 smb = 0.00 tot=0.83 + +VCO2: step +VCO2: final out saw=-0.21 mb=-0.29 smb = 0.00 tot=-0.50 + +VCO3: step +VCO3: final out saw=-0.73 mb=1.97 smb = 0.00 tot=1.24 +-------- sample 60 ----------- + +VCO1: step +VCO1: final out saw=0.89 mb=-0.02 smb = 0.00 tot=0.87 + +VCO2: step +VCO2: final out saw=-0.01 mb=0.23 smb = 0.00 tot=0.23 + +VCO3: step +VCO3: final out saw=-0.53 mb=0.95 smb = 0.00 tot=0.42 +-------- sample 61 ----------- + +VCO1: step +VCO1: final out saw=0.98 mb=0.00 smb = 0.00 tot=0.98 + +VCO2: step +VCO2: final out saw=0.20 mb=-0.19 smb = -0.00 tot=0.01 + +VCO3: step +VCO3: final out saw=-0.33 mb=-0.32 smb = 0.00 tot=-0.65 +-------- sample 62 ----------- + +VCO1: step +VCO1: phase wrap 1.04->0.04 cross=-0.79 jump=-2.00 +VCO1: calling slave with -0.79 +VCO1: final out saw=-0.93 mb=1.99 smb = 0.00 tot=1.07 + +VCO2: step +VCO2: got sync ph=0.70 nph=0.58 excess=0.08 send cross -0.79 jump -0.24 + +VCO3: step +VCO3: final out saw=-0.13 mb=-0.00 smb = 0.00 tot=-0.13 +-------- sample 63 ----------- + +VCO1: step +VCO1: final out saw=-0.83 mb=1.65 smb = 0.00 tot=0.82 + +VCO2: step +VCO2: final out saw=0.36 mb=0.11 smb = 0.24 tot=0.71 + +VCO3: step +VCO3: final out saw=0.07 mb=0.08 smb = 0.00 tot=0.16 +-------- sample 64 ----------- + +VCO1: step +VCO1: final out saw=-0.74 mb=0.29 smb = 0.00 tot=-0.44 + +VCO2: step +VCO2: final out saw=0.56 mb=-0.08 smb = 0.20 tot=0.68 + +VCO3: step +VCO3: final out saw=0.27 mb=-0.13 smb = 0.00 tot=0.15 +-------- sample 65 ----------- + +VCO1: step +VCO1: final out saw=-0.64 mb=-0.39 smb = 0.00 tot=-1.03 + +VCO2: step +VCO2: final out saw=0.76 mb=0.09 smb = 0.03 tot=0.88 + +VCO3: step +VCO3: final out saw=0.48 mb=0.10 smb = 0.00 tot=0.58 +-------- sample 66 ----------- + +VCO1: step +VCO1: final out saw=-0.55 mb=0.25 smb = 0.00 tot=-0.29 + +VCO2: step +VCO2: final out saw=0.96 mb=-0.07 smb = -0.04 tot=0.85 + +VCO3: step +VCO3: final out saw=0.68 mb=-0.08 smb = 0.00 tot=0.60 +-------- sample 67 ----------- + +VCO1: step +VCO1: final out saw=-0.45 mb=-0.17 smb = 0.00 tot=-0.62 + +VCO2: step +VCO2: phase wrap 1.08->0.08 cross=-0.82 jump=-2.00 +VCO2: final out saw=-0.84 mb=2.01 smb = 0.03 tot=1.20 + +VCO3: step +VCO3: final out saw=0.88 mb=0.09 smb = 0.00 tot=0.97 +-------- sample 68 ----------- + +VCO1: step +VCO1: final out saw=-0.36 mb=0.09 smb = 0.00 tot=-0.27 + +VCO2: step +VCO2: final out saw=-0.63 mb=1.61 smb = -0.02 tot=0.96 + +VCO3: step +VCO3: phase wrap 1.04->0.04 cross=-0.39 jump=-2.00 +VCO3: final out saw=-0.92 mb=1.89 smb = 0.00 tot=0.97 +-------- sample 69 ----------- + +VCO1: step +VCO1: final out saw=-0.26 mb=-0.06 smb = 0.00 tot=-0.32 + +VCO2: step +VCO2: final out saw=-0.43 mb=0.24 smb = 0.01 tot=-0.19 + +VCO3: step +VCO3: final out saw=-0.72 mb=1.95 smb = 0.00 tot=1.23 +-------- sample 70 ----------- + +VCO1: step +VCO1: final out saw=-0.17 mb=0.02 smb = 0.00 tot=-0.14 + +VCO2: step +VCO2: final out saw=-0.23 mb=-0.37 smb = -0.01 tot=-0.61 + +VCO3: step +VCO3: final out saw=-0.52 mb=0.86 smb = 0.00 tot=0.34 +-------- sample 71 ----------- + +VCO1: step +VCO1: final out saw=-0.07 mb=-0.02 smb = 0.00 tot=-0.09 + +VCO2: step +VCO2: final out saw=-0.03 mb=0.24 smb = 0.00 tot=0.21 + +VCO3: step +VCO3: final out saw=-0.32 mb=-0.35 smb = 0.00 tot=-0.67 +-------- sample 72 ----------- + +VCO1: step +VCO1: final out saw=0.02 mb=-0.00 smb = 0.00 tot=0.02 + +VCO2: step +VCO2: final out saw=0.17 mb=-0.17 smb = -0.00 tot=0.00 + +VCO3: step +VCO3: final out saw=-0.12 mb=0.04 smb = 0.00 tot=-0.08 +-------- sample 73 ----------- + +VCO1: step +VCO1: final out saw=0.12 mb=-0.00 smb = 0.00 tot=0.12 + +VCO2: step +VCO2: final out saw=0.37 mb=0.08 smb = -0.00 tot=0.45 + +VCO3: step +VCO3: final out saw=0.08 mb=0.05 smb = 0.00 tot=0.14 +-------- sample 74 ----------- + +VCO1: step +VCO1: final out saw=0.21 mb=-0.01 smb = 0.00 tot=0.21 + +VCO2: step +VCO2: final out saw=0.57 mb=-0.04 smb = -0.00 tot=0.53 + +VCO3: step +VCO3: final out saw=0.29 mb=-0.11 smb = 0.00 tot=0.18 +-------- sample 75 ----------- + +VCO1: step +VCO1: final out saw=0.31 mb=-0.00 smb = 0.00 tot=0.31 + +VCO2: step +VCO2: final out saw=0.77 mb=0.06 smb = -0.00 tot=0.83 + +VCO3: step +VCO3: final out saw=0.49 mb=0.09 smb = 0.00 tot=0.58 +-------- sample 76 ----------- + +VCO1: step +VCO1: final out saw=0.40 mb=-0.01 smb = 0.00 tot=0.40 + +VCO2: step +VCO2: final out saw=0.97 mb=-0.04 smb = -0.00 tot=0.93 + +VCO3: step +VCO3: final out saw=0.69 mb=-0.07 smb = 0.00 tot=0.62 +-------- sample 77 ----------- + +VCO1: step +VCO1: final out saw=0.50 mb=-0.00 smb = 0.00 tot=0.50 + +VCO2: step +VCO2: phase wrap 1.09->0.09 cross=-0.87 jump=-2.00 +VCO2: final out saw=-0.82 mb=1.99 smb = -0.00 tot=1.16 + +VCO3: step +VCO3: final out saw=0.89 mb=0.08 smb = 0.00 tot=0.97 +-------- sample 78 ----------- + +VCO1: step +VCO1: final out saw=0.59 mb=-0.01 smb = 0.00 tot=0.59 + +VCO2: step +VCO2: final out saw=-0.62 mb=1.58 smb = -0.00 tot=0.95 + +VCO3: step +VCO3: phase wrap 1.05->0.05 cross=-0.45 jump=-2.00 +VCO3: final out saw=-0.91 mb=1.90 smb = 0.00 tot=0.99 +-------- sample 79 ----------- + +VCO1: step +VCO1: final out saw=0.69 mb=0.01 smb = 0.00 tot=0.70 + +VCO2: step +VCO2: final out saw=-0.42 mb=0.14 smb = -0.00 tot=-0.28 + +VCO3: step +VCO3: final out saw=-0.71 mb=1.93 smb = 0.00 tot=1.22 +-------- sample 80 ----------- + +VCO1: step +VCO1: final out saw=0.78 mb=0.04 smb = 0.00 tot=0.82 + +VCO2: step +VCO2: final out saw=-0.22 mb=-0.33 smb = 0.00 tot=-0.55 + +VCO3: step +VCO3: final out saw=-0.51 mb=0.77 smb = 0.00 tot=0.26 +-------- sample 81 ----------- + +VCO1: step +VCO1: final out saw=0.88 mb=-0.02 smb = 0.00 tot=0.86 + +VCO2: step +VCO2: final out saw=-0.02 mb=0.23 smb = 0.00 tot=0.22 + +VCO3: step +VCO3: final out saw=-0.31 mb=-0.37 smb = 0.00 tot=-0.68 +-------- sample 82 ----------- + +VCO1: step +VCO1: final out saw=0.97 mb=-0.00 smb = 0.00 tot=0.97 + +VCO2: step +VCO2: final out saw=0.18 mb=-0.17 smb = -0.00 tot=0.01 + +VCO3: step +VCO3: final out saw=-0.10 mb=0.07 smb = 0.00 tot=-0.03 +-------- sample 83 ----------- + +VCO1: step +VCO1: phase wrap 1.03->0.03 cross=-0.72 jump=-2.00 +VCO1: calling slave with -0.72 +VCO1: final out saw=-0.93 mb=2.00 smb = 0.00 tot=1.07 + +VCO2: step +VCO2: got sync ph=0.69 nph=0.57 excess=0.07 send cross -0.72 jump -0.24 + +VCO3: step +VCO3: final out saw=0.10 mb=0.02 smb = 0.00 tot=0.11 +-------- sample 84 ----------- + +VCO1: step +VCO1: final out saw=-0.84 mb=1.70 smb = 0.00 tot=0.86 + +VCO2: step +VCO2: final out saw=0.35 mb=0.09 smb = 0.24 tot=0.67 + +VCO3: step +VCO3: final out saw=0.30 mb=-0.08 smb = 0.00 tot=0.21 +-------- sample 85 ----------- + +VCO1: step +VCO1: final out saw=-0.74 mb=0.41 smb = 0.00 tot=-0.33 + +VCO2: step +VCO2: final out saw=0.55 mb=-0.06 smb = 0.20 tot=0.69 + +VCO3: step +VCO3: final out saw=0.50 mb=0.07 smb = 0.00 tot=0.57 +-------- sample 86 ----------- + +VCO1: step +VCO1: final out saw=-0.65 mb=-0.42 smb = 0.00 tot=-1.06 + +VCO2: step +VCO2: final out saw=0.75 mb=0.07 smb = 0.05 tot=0.86 + +VCO3: step +VCO3: final out saw=0.70 mb=-0.05 smb = 0.00 tot=0.65 +-------- sample 87 ----------- + +VCO1: step +VCO1: final out saw=-0.55 mb=0.24 smb = 0.00 tot=-0.31 + +VCO2: step +VCO2: final out saw=0.95 mb=-0.05 smb = -0.05 tot=0.85 + +VCO3: step +VCO3: final out saw=0.90 mb=0.07 smb = 0.00 tot=0.97 +-------- sample 88 ----------- + +VCO1: step +VCO1: final out saw=-0.46 mb=-0.14 smb = 0.00 tot=-0.60 + +VCO2: step +VCO2: phase wrap 1.08->0.08 cross=-0.75 jump=-2.00 +VCO2: final out saw=-0.85 mb=1.99 smb = 0.03 tot=1.17 + +VCO3: step +VCO3: phase wrap 1.05->0.05 cross=-0.51 jump=-2.00 +VCO3: final out saw=-0.90 mb=1.90 smb = 0.00 tot=1.01 +-------- sample 89 ----------- + +VCO1: step +VCO1: final out saw=-0.36 mb=0.06 smb = 0.00 tot=-0.30 + +VCO2: step +VCO2: final out saw=-0.65 mb=1.68 smb = -0.01 tot=1.02 + +VCO3: step +VCO3: final out saw=-0.70 mb=1.90 smb = 0.00 tot=1.20 +-------- sample 90 ----------- + +VCO1: step +VCO1: final out saw=-0.27 mb=-0.04 smb = 0.00 tot=-0.30 + +VCO2: step +VCO2: final out saw=-0.45 mb=0.34 smb = 0.01 tot=-0.10 + +VCO3: step +VCO3: final out saw=-0.50 mb=0.68 smb = 0.00 tot=0.19 +-------- sample 91 ----------- + +VCO1: step +VCO1: final out saw=-0.17 mb=0.00 smb = 0.00 tot=-0.17 + +VCO2: step +VCO2: final out saw=-0.25 mb=-0.39 smb = -0.00 tot=-0.64 + +VCO3: step +VCO3: final out saw=-0.29 mb=-0.38 smb = 0.00 tot=-0.68 +-------- sample 92 ----------- + +VCO1: step +VCO1: final out saw=-0.08 mb=-0.00 smb = 0.00 tot=-0.08 + +VCO2: step +VCO2: final out saw=-0.05 mb=0.23 smb = -0.00 tot=0.18 + +VCO3: step +VCO3: final out saw=-0.09 mb=0.11 smb = 0.00 tot=0.01 +-------- sample 93 ----------- + +VCO1: step +VCO1: final out saw=0.02 mb=-0.01 smb = 0.00 tot=0.00 + +VCO2: step +VCO2: final out saw=0.16 mb=-0.14 smb = 0.00 tot=0.02 + +VCO3: step +VCO3: final out saw=0.11 mb=-0.01 smb = 0.00 tot=0.09 +-------- sample 94 ----------- + +VCO1: step +VCO1: final out saw=0.11 mb=0.01 smb = 0.00 tot=0.12 + +VCO2: step +VCO2: final out saw=0.36 mb=0.05 smb = -0.00 tot=0.41 + +VCO3: step +VCO3: final out saw=0.31 mb=-0.06 smb = 0.00 tot=0.25 +-------- sample 95 ----------- + +VCO1: step +VCO1: final out saw=0.21 mb=-0.02 smb = 0.00 tot=0.19 + +VCO2: step +VCO2: final out saw=0.56 mb=-0.02 smb = 0.00 tot=0.54 + +VCO3: step +VCO3: final out saw=0.51 mb=0.06 smb = 0.00 tot=0.57 +-------- sample 96 ----------- + +VCO1: step +VCO1: final out saw=0.30 mb=0.01 smb = 0.00 tot=0.31 + +VCO2: step +VCO2: final out saw=0.76 mb=0.04 smb = -0.00 tot=0.79 + +VCO3: step +VCO3: final out saw=0.71 mb=-0.04 smb = 0.00 tot=0.67 +-------- sample 97 ----------- + +VCO1: step +VCO1: final out saw=0.40 mb=-0.01 smb = 0.00 tot=0.38 + +VCO2: step +VCO2: final out saw=0.96 mb=-0.02 smb = 0.00 tot=0.94 + +VCO3: step +VCO3: final out saw=0.91 mb=0.06 smb = 0.00 tot=0.97 +-------- sample 98 ----------- + +VCO1: step +VCO1: final out saw=0.49 mb=0.00 smb = 0.00 tot=0.49 + +VCO2: step +VCO2: phase wrap 1.08->0.08 cross=-0.80 jump=-2.00 +VCO2: final out saw=-0.84 mb=1.97 smb = -0.00 tot=1.13 + +VCO3: step +VCO3: phase wrap 1.06->0.06 cross=-0.56 jump=-2.00 +VCO3: final out saw=-0.89 mb=1.91 smb = 0.00 tot=1.03 +-------- sample 99 ----------- + +VCO1: step +VCO1: final out saw=0.59 mb=-0.01 smb = 0.00 tot=0.58 + +VCO2: step +VCO2: final out saw=-0.64 mb=1.65 smb = 0.00 tot=1.01 + +VCO3: step +VCO3: final out saw=-0.69 mb=1.87 smb = 0.00 tot=1.18 +0 ret = 0.000000 +1 ret = 1.000000 +-1 ret = -0.200000 +running testSplineExtremes +extreme test starting for shaper. test output .... +extreme test done +extreme test starting for shifter. test output .... +extreme test done +extreme test starting for vocal filter. .... +extreme test done +extreme test starting for vocal animator. .... +extreme test done +Tests passed. diff --git a/vst2_bin/CHANGELOG_VST.txt b/vst2_bin/CHANGELOG_VST.txt index b4564503..a54bcaa8 100644 --- a/vst2_bin/CHANGELOG_VST.txt +++ b/vst2_bin/CHANGELOG_VST.txt @@ -9,9 +9,20 @@ - add module dBiz.SuHa - add module dBiz.TROSC - add module dBiz.Util2 -o add module AudibleInstruments.Marbles -o add module AudibleInstruments.Plaits -o add module AudibleInstruments.Stages +- add module AudibleInstruments.Marbles +- add module AudibleInstruments.Plaits +- add module AudibleInstruments.Stages +- add module SquinkyLabs.Blank (crash) +- add module SquinkyLabs.CHB +- add module SquinkyLabs.DG +- add module SquinkyLabs.EV3 +- add module SquinkyLabs.EV +- add module SquinkyLabs.FunV (crash) +- add module SquinkyLabs.GMR +- add module SquinkyLabs.Gray +- add module SquinkyLabs.LFN +- add module SquinkyLabs.Shaper (crash) +- add module SquinkyLabs.Super ** October 12th, 2018 diff --git a/vst2_bin/log.txt b/vst2_bin/log.txt index d084a47e..2392f86d 100644 --- a/vst2_bin/log.txt +++ b/vst2_bin/log.txt @@ -1,124 +1,145 @@ [0.000 info src/main.cpp:67] VeeSeeVST Rack 0.6.1 [0.000 info src/main.cpp:70] Global directory: f:\git\VeeSeeVSTRack\vst2_bin\/ -[0.001 info src/main.cpp:71] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/ -[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin 21kHz 0.6.1 -[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AmalgamatedHarmonics 0.6.1 -[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Alikins 0.6.1 -[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin alto777_LFSR 0.6.1 -[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AS 0.6.9 -[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AudibleInstruments 0.6.3 -[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Autodafe 0.6.1 -[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin BaconMusic 0.6.1 -[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Befaco 0.6.1 -[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Bidoo 0.6.1 -[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Bogaudio 0.6.7 -[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin CastleRocktronics 0.6.1 -[0.007 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin cf 0.6.1 -[0.007 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin com-soundchasing-stochasm 0.6.1 -[0.007 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin computerscare 0.6.1 -[0.008 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin DHE-Modules 0.6.1 -[0.008 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin DrumKit 0.6.1 -[0.009 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 -[0.009 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ESeries 0.6.1 -[0.009 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin FrankBussFormula 0.6.1 -[0.010 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 -[0.010 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Fundamental 0.6.1 -[0.010 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Geodesics 0.6.1 -[0.011 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Gratrix 0.6.1 -[0.011 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin HetrickCV 0.6.1 -[0.011 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin huaba 0.6.1 -[0.012 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ImpromptuModular 0.6.11 -[0.012 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin JE 0.6.1 -[0.013 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin JW-Modules 0.6.1 -[0.013 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 -[0.013 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin LindenbergResearch 0.6.2b -[0.014 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin LOGinstruments 0.6.1 -[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mental 0.6.1 -[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ML_modules 0.6.1 -[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin moDllz 0.6.1 -[0.015 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin modular80 0.6.1 -[0.016 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mscHack 0.6.1 -[0.016 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 -[0.016 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin NauModular 0.6.1 -[0.017 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Nohmad 0.6.1 -[0.017 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Ohmer 0.6.1 -[0.018 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin PG-Instruments 0.6.1 -[0.018 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin PvC 0.6.1 -[0.018 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Qwelk 0.6.1 -[0.019 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin RJModules 0.6.1 -[0.019 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SerialRacker 0.6.1 -[0.020 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SonusModular 0.6.1 -[0.020 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Southpole 0.6.1 -[0.020 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 -[0.021 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.1 -[0.021 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SubmarineFree 0.6.1 -[0.021 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SynthKit 0.6.1 -[0.022 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Template 0.6.1 -[0.022 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin TheXOR 0.6.1 -[0.022 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin trowaSoft 0.6.1 -[0.023 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin unless_modules 0.6.1 -[0.023 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Valley 0.6.1 -[0.024 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr -[0.025 info src/plugin.cpp:160] Loaded plugin bsp 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr -[0.026 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr -[0.027 info src/plugin.cpp:160] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr -[0.028 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr -[0.029 info src/plugin.cpp:160] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr -[0.031 info src/settings.cpp:451] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.043 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf -[0.046 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg -[0.047 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg -[0.048 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg -[0.048 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg -[0.049 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg -[0.050 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg -[0.051 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg -[0.051 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg -[0.052 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg -[0.053 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/idle_mode_icon_cc.svg -[0.054 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/settings_icon_cc.svg -[0.054 info src/settings.cpp:451] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json -[0.069 info src/app/RackWidget.cpp:216] Loading patch from string -[0.073 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg -[0.074 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg -[0.075 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg -[0.075 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf -[0.079 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg -[0.083 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg -[0.083 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg -[0.084 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg -[0.085 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg -[0.085 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg -[0.086 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg -[0.087 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg -[0.088 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg -[0.088 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg -[0.091 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg -[0.092 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg -[0.095 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg -[0.095 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg -[0.096 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg -[0.097 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg -[0.098 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg -[0.107 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Panels/D_Inf.svg -[0.108 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzScrew.svg -[0.109 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzKnobSmall.svg -[0.109 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_0.svg -[0.110 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_1.svg -[0.111 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzPort.svg -[0.114 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Autodafe/res/Multiple18.svg -[0.115 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ3410.svg -[6.755 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Plaits.svg -[6.755 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/TL1105_0.svg -[6.757 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/TL1105_1.svg -[6.758 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan3PSWhite.svg -[6.759 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan1PSWhite.svg -[6.760 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Trimpot.svg -[35.355 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Stages.svg -[35.356 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/LEDSlider.svg -[35.357 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/LEDSliderGreenHandle.svg -[64.962 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AudibleInstruments/res/Marbles.svg -[64.963 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKD6_0.svg -[64.964 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/CKD6_1.svg -[64.966 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2PSWhite.svg -[85.108 info src/app/RackWidget.cpp:178] Saving patch to string +[0.000 info src/main.cpp:71] Local directory: f:\git\VeeSeeVSTRack\vst2_bin\/ +[0.000 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin 21kHz 0.6.1 +[0.000 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AmalgamatedHarmonics 0.6.1 +[0.000 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Alikins 0.6.1 +[0.000 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin alto777_LFSR 0.6.1 +[0.001 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AS 0.6.9 +[0.001 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin AudibleInstruments 0.6.3 +[0.001 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Autodafe 0.6.1 +[0.001 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin BaconMusic 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Befaco 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Bidoo 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Bogaudio 0.6.7 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin CastleRocktronics 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin cf 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin com-soundchasing-stochasm 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin computerscare 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin DHE-Modules 0.6.1 +[0.002 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin DrumKit 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ErraticInstruments 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ESeries 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin FrankBussFormula 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin FrozenWasteland 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Fundamental 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Geodesics 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Gratrix 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin HetrickCV 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin huaba 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ImpromptuModular 0.6.11 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin JE 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin JW-Modules 0.6.1 +[0.003 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Koralfx-Modules 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin LindenbergResearch 0.6.2b +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin LOGinstruments 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mental 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin ML_modules 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin moDllz 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin modular80 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mscHack 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin mtsch-plugins 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin NauModular 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Nohmad 0.6.1 +[0.004 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Ohmer 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin PG-Instruments 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin PvC 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Qwelk 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin RJModules 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SerialRacker 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SonusModular 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Southpole 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Southpole-parasites 0.6.1 +[0.005 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin squinkylabs-plug1 0.6.9 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SubmarineFree 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin SynthKit 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Template 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin TheXOR 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin trowaSoft 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin unless_modules 0.6.1 +[0.006 info src/plugin_static.cpp:140] vcvrack: Loaded static plugin Valley 0.6.1 +[0.007 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr +[0.007 info src/plugin.cpp:160] Loaded plugin bsp 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/bsp/plugin.dll.instr +[0.007 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr +[0.008 info src/plugin.cpp:160] Loaded plugin dBiz 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/dBiz/plugin.dll.instr +[0.008 info src/plugin.cpp:90] trying to load shared plugin file f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr +[0.009 info src/plugin.cpp:160] Loaded plugin Template_shared 0.6.1 from f:\git\VeeSeeVSTRack\vst2_bin\/plugins/Template_shared/plugin.dll.instr +[0.009 info src/settings.cpp:451] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.018 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/DejaVuSans.ttf +[0.019 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_146097_cc.svg +[0.019 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_31859_cc.svg +[0.019 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343816_cc.svg +[0.020 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1343811_cc.svg +[0.020 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1084369_cc.svg +[0.020 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1745061_cc.svg +[0.020 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_1240789_cc.svg +[0.020 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_305536_cc.svg +[0.020 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/noun_468341_cc.svg +[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/idle_mode_icon_cc.svg +[0.021 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/icons/settings_icon_cc.svg +[0.021 info src/settings.cpp:451] Loading settings f:\git\VeeSeeVSTRack\vst2_bin\/settings.json +[0.024 info src/app/RackWidget.cpp:216] Loading patch from string +[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/AudioInterface.svg +[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/ScrewSilver.svg +[0.026 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ301M.svg +[0.026 info src/window.cpp:725] Loaded font f:\git\VeeSeeVSTRack\vst2_bin\/res/fonts/ShareTechMono-Regular.ttf +[0.027 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/Core/MIDIToCVInterface.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/XCO.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_68px.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_16px.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_0.svg +[0.030 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/button_9px_1.svg +[0.031 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/knob_38px.svg +[0.031 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_0.svg +[0.031 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/slider_switch_2_14px_1.svg +[0.031 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Bogaudio/res/port.svg +[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Fundamental/res/VCA.svg +[0.032 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundLargeBlackKnob.svg +[0.034 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/ADSR.svg +[0.034 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-hexscrew.svg +[0.034 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePot.svg +[0.034 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-SlidePotHandle.svg +[0.035 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/AS/res/as-PJ301M.svg +[0.038 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Panels/D_Inf.svg +[0.038 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzScrew.svg +[0.039 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzKnobSmall.svg +[0.039 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_0.svg +[0.039 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzButton_1.svg +[0.039 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/21kHz/res/Components/kHzPort.svg +[0.040 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/Autodafe/res/Multiple18.svg +[0.041 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/PJ3410.svg +[2.986 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/booty_panel.svg +[2.986 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan3PSBlue.svg +[4.414 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/chb_panel.svg +[4.414 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Trimpot.svg +[4.414 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/Blue30.svg +[4.415 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/BluePush_1.svg +[4.415 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/BluePush_0.svg +[6.315 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/ev3_panel.svg +[6.315 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-08.svg +[6.315 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-07.svg +[6.316 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-06.svg +[6.316 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-05.svg +[6.316 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-02.svg +[6.316 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-01.svg +[6.316 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-04.svg +[6.317 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-03.svg +[6.317 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-12.svg +[6.317 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-11.svg +[6.317 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-10.svg +[6.317 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/waveforms-6-09.svg +[10.517 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/gray.svg +[13.194 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/lfn_panel.svg +[13.194 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan1PSBlue.svg +[15.288 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/blank_panel.svg +[16.920 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/vocal_animator_panel.svg +[16.920 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/NKK_0.svg +[16.920 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/NKK_1.svg +[16.920 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/NKK_2.svg +[18.568 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/formants_panel.svg +[18.568 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/RoundBlackKnob.svg +[20.741 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/colors_panel.svg +[20.741 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\/res/ComponentLibrary/Rogan2PSWhite.svg +[27.641 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/trem_panel.svg +[29.941 info src/window.cpp:780] Loaded SVG f:\git\VeeSeeVSTRack\vst2_bin\plugins/squinkylabs-plug1/res/thread_booster_panel.svg +[33.512 info src/app/RackWidget.cpp:178] Saving patch to string diff --git a/vst2_bin/plugins/squinkylabs-plug1/LICENSE-dist.txt b/vst2_bin/plugins/squinkylabs-plug1/LICENSE-dist.txt index 636c5ee5..8aec0774 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/LICENSE-dist.txt +++ b/vst2_bin/plugins/squinkylabs-plug1/LICENSE-dist.txt @@ -7,7 +7,17 @@ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + * Copyright 2016 Andrew Belt + +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.Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the author nor the names of any 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 OWNER 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. @@ -65,3 +75,40 @@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND Component Library graphics by Grayscale (http://grayscale.info/) Licensed under CC BY-NC 4.0 (https://creativecommons.org/licenses/by-nc/4.0/) + +# Befaco modules for VCV Rack + +Copyright 2016 Andrew Belt + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +Copyright 2016 Andrew Belt + +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. +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. + +# VCV Fundamental modules +Copyright 2016 Andrew Belt + +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/squinkylabs-plug1/README.md b/vst2_bin/plugins/squinkylabs-plug1/README.md index 13a7bbcd..823e4797 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/README.md +++ b/vst2_bin/plugins/squinkylabs-plug1/README.md @@ -4,10 +4,12 @@ This project is a growing collection of modules for the VCV Rack vritual modular You can find us on Facebook [here](https://www.facebook.com/SquinkyLabs). -## Manuals +## Manuals and Release Notes Here is the user's manual for our modules: [instruction manual](./docs/booty-shifter.md). It contains descriptions of all of them. +The [release notes](./docs/release-notes.md) describe recent changes. + ## Contributing Please use our GitHub issues page to report problems, request features, etc. If you don’t already have a GitHub account you will need to create one, as you must be logged in to post to GitHub. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/README.md b/vst2_bin/plugins/squinkylabs-plug1/docs/README.md index 71d640ab..5dc58619 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/docs/README.md +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/README.md @@ -2,6 +2,8 @@ All of our plugins are free and open source. The [instruction manual](booty-shifter.md) describes all of the released modules. +The [release notes](release-notes.md) describe recent changes. + All of our released modules may be found in the [VCV Rack plugin manager] (https://vcvrack.com/plugins.html). This is by far the easiest way for most users to install our modules and keep them up to date. It is also quite easy to clone this repo and build them yourself. In order to do this, however, you must first download and build [VCV Rack itself](https://github.com/VCVRack/Rack). @@ -22,10 +24,6 @@ As with all third-party modules for VCV, you must: * `CD SquinkyVCV` * `make` -## Experimental modules - -At any given time, there may partially finished "experimental" modules in this repo. You can find up to date information on them [here](experimental.md). - ## Unit testing framework We have reasonably thorough tests for our code. Some of this might be of interest - it's [here](unit-test.md). \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/alias-setup.png b/vst2_bin/plugins/squinkylabs-plug1/docs/alias-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..00aa607adcb975cfca2fe85e66dcee29bb74c9c8 GIT binary patch literal 90536 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 ulJ;L;@~ + +![thread booster image](./thread-booster.png) + +Thread booster raises the priority of VCV Rack's audio rendering thread. In many cases this decreases the annoying pops, ticks, and dropouts that many users are experiencing. + +Many users have reported that Thread Booster helps significantly. Others have reported that it does not help at all. No one has reported a detrimental effect. + +For a deeper dive into the Thread Booster, you should read [this document](./thread-booster.md). + +Thread Booster has a UI that lets you boost the priority of the audio thread. There are three arbitrary settings: normal, boosted, and real time. When the switch is in the bottom position, the plugin does nothing; the audio thread keeps its default priority. In the boost (middle) position, it sets the thread priority to the highest priority non-real-time setting. In the real-time position it attempts to set it to the highest possible priority, or near it. + +If setting the priority fails, the red error light lights up, and the priority stays where it was last. + +To use Thread Booster, just insert an instance into VCV Rack, then adjust the boost switch. In general we recommend the "real time" setting, if it is available on your computer. + +Once Thread booster is in your session, it will boost all the audio processing - it doesn't matter if other modules are added before or after - they all get boosted. + +Linux users - you must read [the detailed document](./thread-booster.md) to use this module. + +Note to users who downloaded the original version of Thread Booster: we've improved it a bit since then, especially on Linux and Windows. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter-old.md b/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter-old.md new file mode 100644 index 00000000..f21b268f --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter-old.md @@ -0,0 +1,249 @@ +# Table of contents + +[Chebyshev Waveshaper VCO](../docs/chebyshev.md) Click on link to go to Chbeyshev manual. + +[Functional VCO-1](#fun) Is an improved version of the Fundamental-VCO1. + +[LFN](#lfn) Is a random voltage generator made by running low frequency noise through a graphic equalizer. + +[Chopper](#chopper) Is a tremolo powered by a clock-synchable LFO. The LFO is highly programmable to give a range of waveforms. + +[Thread Booster](#booster) reduces pops and clicks in VCV Rack by reprogramming VCV's audio engine. + +[Colors](#colors) is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. + +[Growler](#growler) is a "vocal animator." It imparts random vocal timbres on anything played through it. The pseudo-random LFOs all have discrete outputs. + +[Booty Shifter](#shifter) is an emulation of the legendary Moog/Bode frequency shifter. + +[Formants](#formants) is a programmable bank of filters that can synthesize various vowel sounds and morph between them. + +[Attenuverters](#atten) + +[CV ranges](#cv) + +The [release notes](release-notes.md) describe recent changes to our modules. + +# Functional VCO-1 + +![Functional image](../docs/functional.png) + +Functional VCO-1 works just like its namesake. The control layout is familiar, the sound is the same, but it uses about 1/4 as much CPU as the original. + +We believe VCV's Fundamental VCO is an unsung hero. It's one of the few VCOs that never has audible aliasing artifacts. You can sync it, and modulate all its inputs, but the sound never falls apart. + +We "forked" the code to Fundamental VCO-1 and modified it a little bit to make it much more CPU efficient. Now you may use a lot more of them without pops, clicks, and dropouts. + +If you would like the details of how we did this, you can [find them here](../docs/vco-optimization.md). + + +# LFN Low Frequency Noise Generator + +![LFN image](../docs/lfn.png) + +LFN stands for Low Frequency Noise. Technically it is a white noise generator run through a graphic equalizer at extremely low frequencies. People may find it easier to think of it as a random voltage source with unique control over the output. + +The top knob, which is unlabeled, sets the "base frequency" of LFN. + +The five other knobs, and the CV inputs beside them, control the gain of the graphic equalizers sections. Beside each EQ gain knob is a label indicating what frequency range that knob controls. + +For example, it the base frequency is 1.0, the EQ sections will be at 1Hz, 2Hz, 4Hz, 8Hz, and 16Hz. If the base frequency is 0.2, The EQ sections will be at 0.2Hz, 0.4Hz, 0.8Hz, 1.6Hz, and 3.2Hz. + +But instead of thinking about frequencies like 1Hz, which are a little difficult to imagine, think of the knobs as mixing very slow random voltages, with less slow ones. For example if LFN is driving a pitch quantizer into a VCO, turn all the knobs down to zero except the first, lowest, one. This will make a series of pitches slowly rising and falling. Then bring in a little of the faster channels. The pitch will still be slowly rising and falling, but will also quickly move up and down by smaller steps. + +A good way to learn what makes LFN tick is to set it slow and watch it on the scope. At the same time run it straight into a VCO. Experiment with different mixes of the slow knobs and the fast ones. + +As you would expect from Squinky Labs, the CPU usage of LFN is very low. In fact it is one of our leanest modules yet. So feel free to use as many instances as you like. + +# Chopper tremolo / programmable LFO +![chopper image](./chopper.png) + +In its simplest use, Chopper produces a very wide range of **tremolo** effects. The built-in LFO can produce a wide range of waveforms that cover many of the waveforms produced by the tremolo circuits built into **vintage guitar amplifiers**. + +The LFO is sent to an output so that it may modulate other modules. + +There is also a **clock synchronizer** and multiplier. + +To use Chopper as a tremolo, send a signal to the *in* jack, and listen to the *out* jack. Leave the *clock* control at the default *int* setting. Most of the knob settings will now affect the tremolo effect. + +## Chopper LFO + +![chopper LFO image](../docs/lfo-waveforms.png) + +To understand all the LFO settings, it helps to watch the outputs on a scope. + +The LFO starts as **skewed** sawtooth. In the middle position it is a symmetric triangle wave, at one end a positive sawtooth and at the other a negative sawtooth. The signal is sent to the **saw** output. + +The skewed saw then goes to a **waveshaper**. As the shape control is increased the LFO is gradually rounded and then flattened. The shaped LFO is send to the *lfo* output, and used internally to modulate the audio input. + +LFO Controls: + +* **Shape** Flattens the LFO waveform. +* **Skew** Dials in the amount of asymmetry in the LFO. +* **Depth** Shifts and scales the LFO. + +When used as a tremolo effect, you will hear **more tremolo** when these controls are turned up. + +## Chopper clock + +The LFO in Chopper may be synchronized with the ckin signal. There is a built-in **clock multiplier**. To use the synchronization, patch a clock to the ckin, and select x1 from the **clock** knob. To run at a multiple of the input clock, select x2, x3, or x4. + +When Chopper is being synched, the **Phase** control sets the phase difference between the external clock and the synchronized LFO. This may be used to "dial in" the tremolo so that it sounds exactly on the beat (or off the beat). + +There is also an internal LFO that is controlled by the **Rate** control. Set the clock control to *int* to use the internal clock. + +# Thread Booster + +![thread booster image](./thread-booster.png) + +Thread booster raises the priority of VCV Rack's audio rendering thread. In many cases this decreases the annoying pops, ticks, and dropouts that many users are experiencing. + +Many users have reported that Thread Booster helps significantly. Others have reported that it does not help at all. No one has reported a detrimental effect. + +For a deeper dive into the Thread Booster, you should read [this document](./thread-booster.md). + +Thread Booster has a UI that lets you boost the priority of the audio thread. There are three arbitrary settings: normal, boosted, and real time. When the switch is in the bottom position, the plugin does nothing; the audio thread keeps its default priority. In the boost (middle) position, it sets the thread priority to the highest priority non-real-time setting. In the real-time position it attempts to set it to the highest possible priority, or near it. + +If setting the priority fails, the red error light lights up, and the priority stays where it was last. + +To use Thread Booster, just insert an instance into VCV Rack, then adjust the boost switch. In general we recommend the "real time" setting, if it is available on your computer. + +Once Thread booster is in your session, it will boost all the audio processing - it doesn't matter if other modules are added before or after - they all get boosted. + +Linux users - you must read [the detailed document](./thread-booster.md) to use this module. + +Note to users who downloaded the original version of Thread Booster: we've improved it a bit since then, especially on Linux and Windows. + +# Colors variable slope noise generator + +![noise image](../docs/colors.png) + +Colors is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. It can also produce all the colors in between, as it has a **continuously variable slope**. + +Colors has a single control, "slope." This is the slope of the noise spectrum, from -8 dB/octave to +8 dB/octave. + +The slope of the noise is quite accurate in the mid-band, but at the extremes we flatten the slope to keep from boosting super-low frequencies too much, and to avoid putting out enormous amounts of highs. So the slope is flat below 40hz, and above 6kHz. + +## Things to be aware of + +When the **slope** changes, Color needs to do a lot of calculations. While this is normally not a problem, it’s possible that quickly changing the slope of many instances of Colors could cause pops and dropouts. + +The slope control does not respond instantly. If you turn the knob, you will hear the change, but if you were to modulate the CV very quickly you might notice the slowness. + +# Growler + +![vocal formant filter image](./growler.jpg) + +**Growler** is a re-creation of the Vocal Animator circuit invented by Bernie Hutchins, and published in Electronotes magazine in the late 70's. It continuously morphs between different vaguely voice like tones. + +**To get a good sound:** run any harmonically rich signal into the input, and something good will come out. Low frequency pulse waves and distorted sounds make great input. + +The controls do pretty much what you would expect: + +* **LFO** controls the speed of the modulation LFOs. +* **Fc** controls the average frequency of the multiple filters. +* **Q** controls the sharpness of the filters. +* **Depth** controls how much of the modulation LFOs are applied to the filters. + +## How Growler works +![growler scope](./growler.png) + +There are four **bandpass filters**, roughly tuned to some typical vocal formant frequencies: 522, 1340, 2570, and 3700 Hz. The filters are run in parallel, with their outputs summed together. + +The first three filter frequencies are modulated by an LFO comprised of **4 triangle wave LFOs** running at different frequencies. They are summed together in various combinations to drive each of the filters. + +Each **CV input stage** is the same: a knob that supplies a fixed offset and a CV input that is processed by an attenuverter. The processed CV is added to the knob voltage. See below for more on [Attenuverters](#atten) and [CV ranges](#cv). + +The **LFO** Rate control shifts the speed of all 4 LFOs while maintaining the ratio of their frequencies. + +The **Fc** control moves the frequencies of the first three filters, but not by equal amounts. The lowest filter moves at 1V/Oct, but the middle two move less. The top filter is fixed at 3700 Hz. + +The **Q** control does just what it says - controls the Q (resonance) of the filters. + +The **Modulation Depth** controls how much of the summed LFOs get to each filter. Again, the lower filters move farther, and the top filter is fixed. + +The smaller knobs next to the main knobs are **attenuverters**, which scale control voltages. For more on attenuverters, [see below](#atten) + +There are three LFO outputs next to the blinking LFOs. These may be used to modulate other modules, or as semi-random voltage sources. + +**Bass boost** switch. When it’s in the up position (on) there should be more bass. This is done by switching some or all of the filters from bandpass to lowpass. + +LFO **Matrix** switch. This is the unlabeled switch in the LFO section. When it’s down (default position) the LFOs are closely correlated. In the middle we try to make them a little bit more independent. When it’s in the up position the LFOs will often go in different directions. + +# Booty Shifter frequency shifter + +**Booty Shifter** is a frequency shifter inspired by the Moog/Bode frequency shifter module. + +![booty shifter image](./booty-shifter.png) + +The name "Booty Shifter" is a nod to the classic analog module, as well as to a black cat named Booty. + +Booty Shifter will take an audio input and shift the frequencies up or down. This is not like a pitch shift where harmonics will remain in tune; it is an absolute frequency shift in Hz, so in general **harmonics will go way out of tune.** It is similar to a ring-modulator, but less extreme and more versatile. + +## Getting good sounds from Booty Shifter + +Feed in music and shift the frequency a good amount. + +Feed in **speech or radio** and shift it. + +Feed the CV from a **sequencer** to sequence the mayhem. + +Shift **drums** up or down a little bit to re-tune them without the usual pitch-shifting artifacts. + +Small shifts in conjunction with delays can make a chorus-like effect to thicken music. + +## Inputs and outputs + +* **IN** is the audio input. +* **CV** is the pitch shift control voltage. -5V will give minimum shift, +5 will give maximum. +* **DN** is the down-shifted output. +* **UP** is the up-shifted output. + +## Controls + +**RANGE** sets the total shift range in Hz. For example, the 50 Hz setting means that the minimum shift is 50 Hz down, and the maximum is 50 Hz up. + +Range value **Exp is different**. Here minimum shift is 2 Hz, maximum is 2 kHz, with an exponential response. As of version 0.6.2 the response is an accurate 1 Volt per Octave. + +Shift **AMT** is added to the control voltage, with a range of -5..5. + +## Oddities and limitations + +If you shift the frequency up too far, it will alias. There is no anti-aliasing, so if the highest input frequency + shift amount > sample_rate / 2, you will get aliasing. Of course the Bode analog original did not alias. + +If you shift the input down a lot, frequencies will go **below zero and wrap around**. Taken far enough this will completely **reverse the spectrum** of the input. This was a prized feature of the Bode original. + +As you shift the input down, you may start to generate a lot of subsonic energy. A **High Pass filter** may clean this up. + +The down shift **frequency fold-over**, while true to the original, does cause problems when trying to pitch drum tracks down a lot. High pass filtering the input before it is down-shifted can control this. + +# Formants vocal filter + +![formants image](./formants.png) + +Like the **Vocal Animator**, this is a filter bank tuned to the formant frequencies of typical **singing voices**. Unlike Growler, however, the filters do not animate on their own. In addition, the filters are preset to frequencies, bandwidths, and gains that are taken from **measurements of human singers**. + +One of the easiest ways to **get a good sound** from Formants is to use it like a regular VCF. For example, control Fc with an ADSR. Then put a second modulation source into the vowel CV - something as simple as a slow LFO will add interest. + +Use it as a **filter bank**. Just set the knobs for a good sound and leave it fixed to add vocal tones to a pad. Again, modulating the vowel CV can easily give great results. + +Try to synthesize something like **singing** by sequencing the vowel CV of several formants. Leave the Fc in place, or move it slightly as the input pitches move. + +Controls: + +* **Fc** control moves all the filters up and down by the standard one "volt" per octave. +* **Vowel** control smoothly interpolates between 'a', 'e', 'i', 'o', and 'u'. +* **Model** control selects different vocal models: bass, tenor, countertenor, alto, and soprano. +* **Brightness** control gradually boosts the level of the higher formants. When it is all the way down, the filter gains are set by the singing models in the module, which typically fall off with increasing frequency. As this control is increased the gain of the high formant filters is brought up to match the F1 formant filter. + +The **LEDs across the top** indicate which formant is currently being "sung". + +## About Attenuverters + +The small knobs next to the bigger knobs are **attenuverters**. They scale and/or invert the control voltage inputs next to them. When they are turned all the way up the full CV comes through. As they are turned down less CV comes through. Straight up none passes. As they are turned down further the CV comes back, but inverted. + +Sometimes we use attenuverters with a *linear taper*, and sometimes we use an *audio taper*. If you find that on a particular module you do not like the response of the attenuverters, please log a github issue. + +## Control voltage ranges + +Our modules usually expect a control voltage range of **-5 to +5**. The associated offset knobs will also add -5 to +5. After attenuverters are applied to CV the knob value is added. After all that, the result is usually clipped to the -5 to +5 range. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter.md b/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter.md index 44c078a4..94cc1951 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter.md +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/booty-shifter.md @@ -1,207 +1,40 @@ -# Table of contents +# The Squinky Labs modules for VCV Rack -[Chopper](#chopper) Is a tremolo powered by a clock-synchable LFO. The LFO is highly programmable to give a range of waveforms. +Below are short descriptions of our modules with links to more detailed manuals. -[Thread Booster](#booster) reduces pops and clicks in VCV Rack by reprogramming VCV's audio engine. +The [release notes](release-notes.md) describe recent changes to our modules. -[Colors](#colors) is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. +# Things that make sound -[Growler](#growler) is a "vocal animator." It imparts random vocal timbres on anything played through it. The pseudo-random LFOs all have discrete outputs. +![Intro 1 image](./intro-1-110.png) -[Booty Shifter](#shifter) is an emulation of the legendary Moog/Bode frequency shifter. +[EV3](./ev3.md) is three VCOs in a single module. Each of the three VCOs is a clone of Befaco's EvenVCO, with oscillator sync added. Like EvenVCO, it sounds good, uses little CPU, and has very little aliasing distortion. -[Formants](#formants) is a programmable bank of filters that can synthesize various vowel sounds and morph between them. +[Colors](./colors.md) is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. And all the colors in between. -[Attenuverters](#atten) +[Chebyshev Waveshaper VCO](../docs/chebyshev.md) can make sounds like no other VCO. It contains a VCO, ten polynomial wave-shapers, and one clipper/folder. Among other things, it is a harmonic oscillator. -[CV ranges](#cv) +[Functional VCO-1](./functional-vco-1.md) Is an improved version of the Fundamental VCO-1. Like Fundamental VCO-1, it will never alias, no matter what you throw at it. It is one of the few VCOs that can do sync, FM, and PWM without aliasing. Functional VCO-1 improves on Fundamental by lowering the CPU usage dramatically. -# Chopper tremolo / programmable LFO +# Things that process sound -In its simplest use, Chopper produces a very wide range of **tremolo** effects. The built-in LFO can produce a wide range of waveforms that cover many of the waveforms produced by the tremolo circuits built into **vintage guitar amplifiers**. +![Intro 2 image](./intro-2-110.png) -The LFO is sent to an output so that it may modulate other modules. +[Shaper](./shaper.md). Yet another wave shaper. But unlike most, this one has almost no aliasing distortion. And a few new shapes that sound nice. -There is also a **clock synchronizer** and multiplier. +[Chopper](./chopper.md) Is a tremolo powered by a clock-synchable LFO. The LFO is highly programmable to give a range of waveforms. A built-in clock multiplier enables easy rhythmic effects. -To use Chopper as a tremolo, send a signal to the *in* jack, and listen to the *out* jack. Leave the *clock* control at the default *int* setting. Most of the knob settings will now affect the tremolo effect. +[Growler](./growler.md) is a "vocal animator." It imparts random vocal timbres on anything played through it. The pseudo-random LFOs all have discrete outputs. -## Chopper LFO +[Booty Shifter](./shifter.md). An emulation of the legendary Moog/Bode frequency shifter. It is great for "warping" sounds run through it. -![chopper image](../docs/lfo-waveforms.png) +[Formants](./formants.md) is a programmable bank of filters that can synthesize various vowel sounds and morph between them easily. -To understand all the LFO settings, it helps to watch the outputs on a scope. +# Other things +![Intro 3 image](./intro-3-110.png) -The LFO starts as **skewed** sawtooth. In the middle position it is a symmetric triangle wave, at one end a positive sawtooth and at the other a negative sawtooth. The signal is sent to the **saw** output. +[Gray Code](./gray-code.md). Think of it as a semi-random clock divider. Or not. Gray codes have the cool property that only one bit changes at a time. Having only one “thing” change at a time can be interesting for music, so we are hoping you will find some good things to do with it. -The skewed saw then goes to a **waveshaper**. As the shape control is increased the LFO is gradually rounded and then flattened. The shaped LFO is send to the *lfo* output, and used internally to modulate the audio input. +[LFN](./lfn.md) is a random voltage generator made by running low frequency noise through a graphic equalizer. The equalizer gives a lot of easy control over the shape of the randomness. -LFO Controls: - -* **Shape** Flattens the LFO waveform. -* **Skew** Dials in the amount of asymmetry in the LFO. -* **Depth** Shifts and scales the LFO. - -When used as a tremolo effect, you will hear **more tremolo** when these controls are turned up. - -## Chopper clock - -The LFO in Chopper may be synchronized with the ckin signal. There is a built-in **clock multiplier**. To use the synchronization, patch a clock to the ckin, and select x1 from the **clock** knob. To run at a multiple of the input clock, select x2, x3, or x4. - -When Chopper is being synched, the **Phase** control sets the phase difference between the external clock and the synchronized LFO. This may be used to "dial in" the tremolo so that it sounds exactly on the beat (or off the beat). - -There is also an internal LFO that is controlled by the **Rate** control. Set the clock control to *int* to use the internal clock. - -# Thread Booster - -Thread booster raises the priority of VCV Rack's audio rendering thread. In many cases this decreases the annoying pops, ticks, and dropouts that many users are experiencing. - -Many users have reported that Thread Booster helps significantly. Others have reported that it does not help at all. No one has reported a detrimental effect. - -For a deeper dive into the Thread Booster, you should read [this document](./thread-booster.md). - -Thread Booster has a UI that lets you boost the priority of the audio thread. There are three arbitrary settings: normal, boosted, and real time. When the switch is in the bottom position, the plugin does nothing; the audio thread keeps its default priority. In the boost (middle) position, it sets the thread priority to the highest priority non-real-time setting. In the real-time position it attempts to set it to the highest possible priority, or near it. - -If setting the priority fails, the red error light lights up, and the priority stays where it was last. - -To use Thread Booster, just insert an instance into VCV Rack, then adjust the boost switch. In general we recommend the "real time" setting, if it is available on your computer. - -Once Thread booster is in your session, it will boost all the audio processing - it doesn't matter if other modules are added before or after - they all get boosted. - -Linux users - you must read [the detailed document](./thread-booster.md) to use this module. - -Note to users who downloaded the original version of Thread Booster: we've improved it a bit since then, especially on Linux and Windows. - -# Colors variable slope noise generator - -![noise image](../docs/colors.png) - -Colors is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. It can also produce all the colors in between, as it has a **continuously variable slope**. - -Colors has a single control, "slope." This is the slope of the noise spectrum, from -8 dB/octave to +8 dB/octave. - -The slope of the noise is quite accurate in the mid-band, but at the extremes we flatten the slope to keep from boosting super-low frequencies too much, and to avoid putting out enormous amounts of highs. So the slope is flat below 40hz, and above 6kHz. - -## Things to be aware of - -When the **slope** changes, Color needs to do a lot of calculations. While this is normally not a problem, it’s possible that quickly changing the slope of many instances of Colors could cause pops and dropouts. - -The slope control does not respond instantly. If you turn the knob, you will hear the change, but if you were to modulate the CV very quickly you might notice the slowness. - -# Growler - -![vocal formant filter image](./growler.jpg) - -**Growler** is a re-creation of the Vocal Animator circuit invented by Bernie Hutchins, and published in Electronotes magazine in the late 70's. It continuously morphs between different vaguely voice like tones. - -**To get a good sound:** run any harmonically rich signal into the input, and something good will come out. Low frequency pulse waves and distorted sounds make great input. - -The controls do pretty much what you would expect: - -* **LFO** controls the speed of the modulation LFOs. -* **Fc** controls the average frequency of the multiple filters. -* **Q** controls the sharpness of the filters. -* **Depth** controls how much of the modulation LFOs are applied to the filters. - -## How Growler works -![growler scope](./growler.png) - -There are four **bandpass filters**, roughly tuned to some typical vocal formant frequencies: 522, 1340, 2570, and 3700 Hz. The filters are run in parallel, with their outputs summed together. - -The first three filter frequencies are modulated by an LFO comprised of **4 triangle wave LFOs** running at different frequencies. They are summed together in various combinations to drive each of the filters. - -Each **CV input stage** is the same: a knob that supplies a fixed offset and a CV input that is processed by an attenuverter. The processed CV is added to the knob voltage. See below for more on [Attenuverters](#atten) and [CV ranges](#cv). - -The **LFO** Rate control shifts the speed of all 4 LFOs while maintaining the ratio of their frequencies. - -The **Fc** control moves the frequencies of the first three filters, but not by equal amounts. The lowest filter moves at 1V/Oct, but the middle two move less. The top filter is fixed at 3700 Hz. - -The **Q** control does just what it says - controls the Q (resonance) of the filters. - -The **Modulation Depth** controls how much of the summed LFOs get to each filter. Again, the lower filters move farther, and the top filter is fixed. - -The smaller knobs next to the main knobs are **attenuverters**, which scale control voltages. For more on attenuverters, [see below](#atten) - -There are three LFO outputs next to the blinking LFOs. These may be used to modulate other modules, or as semi-random voltage sources. - -**Bass boost** switch. When it’s in the up position (on) there should be more bass. This is done by switching some or all of the filters from bandpass to lowpass. - -LFO **Matrix** switch. This is the unlabeled switch in the LFO section. When it’s down (default position) the LFOs are closely correlated. In the middle we try to make them a little bit more independent. When it’s in the up position the LFOs will often go in different directions. - -# Booty Shifter frequency shifter - -**Booty Shifter** is a frequency shifter inspired by the Moog/Bode frequency shifter module. - -![booty shifter image](./booty-shifter.png) - -The name "Booty Shifter" is a nod to the classic analog module, as well as to a black cat named Booty. - -Booty Shifter will take an audio input and shift the frequencies up or down. This is not like a pitch shift where harmonics will remain in tune; it is an absolute frequency shift in Hz, so in general **harmonics will go way out of tune.** It is similar to a ring-modulator, but less extreme and more versatile. - -## Getting good sounds from Booty Shifter - -Feed in music and shift the frequency a good amount. - -Feed in **speech or radio** and shift it. - -Feed the CV from a **sequencer** to sequence the mayhem. - -Shift **drums** up or down a little bit to re-tune them without the usual pitch-shifting artifacts. - -Small shifts in conjunction with delays can make a chorus-like effect to thicken music. - -## Inputs and outputs - -* **IN** is the audio input. -* **CV** is the pitch shift control voltage. -5V will give minimum shift, +5 will give maximum. -* **DN** is the down-shifted output. -* **UP** is the up-shifted output. - -## Controls - -**RANGE** sets the total shift range in Hz. For example, the 50 Hz setting means that the minimum shift is 50 Hz down, and the maximum is 50 Hz up. - -Range value **Exp is different**. Here minimum shift is 2 Hz, maximum is 2 kHz, with an exponential response. As of version 0.6.2 the response is an accurate 1 Volt per Octave. - -Shift **AMT** is added to the control voltage, with a range of -5..5. - -## Oddities and limitations - -If you shift the frequency up too far, it will alias. There is no anti-aliasing, so if the highest input frequency + shift amount > sample_rate / 2, you will get aliasing. Of course the Bode analog original did not alias. - -If you shift the input down a lot, frequencies will go **below zero and wrap around**. Taken far enough this will completely **reverse the spectrum** of the input. This was a prized feature of the Bode original. - -As you shift the input down, you may start to generate a lot of subsonic energy. A **High Pass filter** may clean this up. - -The down shift **frequency fold-over**, while true to the original, does cause problems when trying to pitch drum tracks down a lot. High pass filtering the input before it is down-shifted can control this. - -# Formants vocal filter - -![formants image](./formants.png) - -Like the **Vocal Animator**, this is a filter bank tuned to the formant frequencies of typical **singing voices**. Unlike Growler, however, the filters do not animate on their own. In addition, the filters are preset to frequencies, bandwidths, and gains that are taken from **measurements of human singers**. - -One of the easiest ways to **get a good sound** from Formants is to use it like a regular VCF. For example, control Fc with an ADSR. Then put a second modulation source into the vowel CV - something as simple as a slow LFO will add interest. - -Use it as a **filter bank**. Just set the knobs for a good sound and leave it fixed to add vocal tones to a pad. Again, modulating the vowel CV can easily give great results. - -Try to synthesize something like **singing** by sequencing the vowel CV of several formants. Leave the Fc in place, or move it slightly as the input pitches move. - -Controls: - -* **Fc** control moves all the filters up and down by the standard one "volt" per octave. -* **Vowel** control smoothly interpolates between 'a', 'e', 'i', 'o', and 'u'. -* **Model** control selects different vocal models: bass, tenor, countertenor, alto, and soprano. -* **Brightness** control gradually boosts the level of the higher formants. When it is all the way down, the filter gains are set by the singing models in the module, which typically fall off with increasing frequency. As this control is increased the gain of the high formant filters is brought up to match the F1 formant filter. - -The **LEDs across the top** indicate which formant is currently being "sung". - -## About Attenuverters - -The small knobs next to the bigger knobs are **attenuverters**. They scale and/or invert the control voltage inputs next to them. When they are turned all the way up the full CV comes through. As they are turned down less CV comes through. Straight up none passes. As they are turned down further the CV comes back, but inverted. - -Sometimes we use attenuverters with a *linear taper*, and sometimes we use an *audio taper*. If you find that on a particular module you do not like the response of the attenuverters, please log a github issue. - -## Control voltage ranges - -Our modules usually expect a control voltage range of **-5 to +5**. The associated offset knobs will also add -5 to +5. After attenuverters are applied to CV the knob value is added. After all that, the result is usually clipped to the -5 to +5 range. +[Thread Booster](./booster.md) reduces pops and clicks in VCV Rack by reprogramming VCV's audio engine. \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/both.png b/vst2_bin/plugins/squinkylabs-plug1/docs/both.png new file mode 100644 index 0000000000000000000000000000000000000000..a0cf4e05fa6da47cc8c84f3a5b9523950e9ced5e GIT binary patch literal 27023 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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.md b/vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.md new file mode 100644 index 00000000..31334517 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.md @@ -0,0 +1,145 @@ +# Chebyshev +Our waveshaper VCO. + +![Functional image](../docs/chebyshev.png) + +## Description of the module + +Chebyshev polynomials have been used to generate complex tones since the early days of computer music. This special math discovered by Mr. Chebyshev enables digital generation of waveforms with any overtone structure using very little computer power. In addition, it is easy and computationally inexpensive to vary the spectrum over time. + +Eventually, this form of synthesis fell out of favor, as FM could provide a wider variety of timbres with acceptable CPU usage. Now, however, the distinctive sound of this form of synthesis provides another unique source of sounds for VCV Rack users. + +The magic of the Chebyshev polynomials is that if a sine wave with amplitude one is put into a Chebyshev polynomial, the output will still be a sine wave, but multiplied in pitch by an integer. + +In our implementation we include the first ten Chebyshev polynomials to generate the first ten harmonics of the harmonic series. These are then mixed together based on knob settings and control voltages to give an output tone with complete control over ten harmonics. + +Many of the controls in this module allow different ways of mixing together these ten harmonics. In addition external signals may be shaped by the waveshaper, with folding or clipping applied. + +Like all our modules, Chebyshev's CPU usage is quite low. + +## Some tips + +It can be a great help learning this module if you patch the output to a Scope module and a frequency analyzer. As you adjust the controls it will be clearer what is going on. + +Also, note that we will repeat that when set up normally, each Chebyshev waveshaper is producing a different harmonic of the VCO output. Because of this, we will refer to these as "harmonic levels" and "waveshaper levels" interchangeably. + +And - each waveshaper is a perfect harmonic only when driven by a pure sine at exactly 1Vp-p. + +## Signal Flow + +First there is a sine wave VCO. It has the controls you would expect, as well as a through-zero linear FM input, which allows a minimal DX7-style FM. + +The VCO output then goes to a wave folder/clipper with gain controls. This allows for some distortion effects, and keeps the signal in a range that will keep the next stage happy. + +The output of the folder/clipper then goes to ten parallel Chebyshev waveshapers. The outputs of these are then mixed together through a specialized mixer. + +When everything is set in a typical manner, each of the Chebyshev waveshapers will be outputting a pure sine wave at an integer multiple of the fundamental frequency. Thus, each one will be a discrete harmonic. + +## Description of the controls + +### VCO + +The controls in the upper right are all for the sine wave VCO. +Octave transposes the pitch in even octaves. + +* **Tune** raises or lowers the pitch by up to a perfect fifth. +* **Mod** controls the modulation (exponential FM) depth of the signal patched to the Mod jack. +* **LFM** controls the linear FM depth of the signal patched to the LFM jack. +* **V/Oct** input is where the main control voltage is patched. + +Mod and LFM perform different functions. Mod, like the CV input, is an exponential control. If an LFO is patched into the Mod input and the Mod depth is adjusted for a vibrato of one semitone, that vibrato will be one semitone regardless of the base pitch. But if an audio rate signal is patched into the Mod input you will tend to get “clangorous” sounds with inharmonic overtones. + +LFM, on the other hand, allows through-zero linear FM. While this is not very good for vibrato it does create complex timbres where the harmonics are in tune, and that "in tuneness" will remain as the mod depth is changed. Exponential FM at audio rates can also be tuned, but the tuning will disappear as the mod depth changes, making it impossible to to generate dynamic harmonic sounds. + +### Folder/Clipper + +Chebyshev polynomials are poorly behaved if they see more than one (volt) at their input. So we use a folder/clipper to make sure this doesn’t happen. + +The controls and CV of the Folder/Clipper: + +* **Fold/Clip** switch. In clip mode, it is a simple hard clipper. In fold mode it’s a waveform folder. +* **Clip LED**. The LED will be green when there is signal, and red when the folder/clipper engages. +* *Gain*. Controls how hard the folder/clipper is driven. Gain knob and CV are combined. +* **Gain trim**. The small knob below the **gain** knob is an attenuator for the **gain** CV. New in 0.6.9. +* **EG**. Also combines with the gains. +* **Ext In.** When a signal is patched here it replaces the internal VCO, allowing any signal to be run through the waveshaper. + +Note that while you can get some cool effects with clipping and folding, they will tend to cause audible aliasing at higher frequencies. Use with care. + +In classic waveshaping synthesis an ADSR or similar would be connected to the EG input. By dynamically changing the level of the sine wave hitting the waveshapers a dynamic timbre will be generated. + +The output of the folder/clipper drives the Chebyshev waveshapers. The last group of controls all work together to determine how the waveshapers are mixed together. + +### Waveshaper controls + +There are a lot of controls that work together to determine how the waveshapers are mixed. When configured normally, that means these controls determine the ratios of all the harmonics of the VCO. + +The **small knobs** running up the left side individually control each waveshaper/harmonic, with fundamental on top, and harmonic 10 on the bottom. + +The input jacks next to them allow the levels of each harmonic to be voltage controlled. + +The **Preset** button toggles all ten harmonics between some good starting points, and also resets the Gain to be exactly 1. + +The **Even** control increases/decreases the level of all the even harmonics together. + +The **Odd** control increases/decreases the level of all the odd harmonics together. + +The **Slope** control will apply a gradual roll-off of the upper harmonics. When it is all the way down the roll-off is 18 decibels per octave. When it is all the way up it’s flat. + +Note that the level of the fundamental is not affected by either the Even or Odd control. + +The Odd, Even, and Slope controls may be thought of as subtractive. When they are all the way up, they have no effect, and you get the mix you would expect from the individual harmonic levels. When you turn these controls down they will reduce the levels of the corresponding harmonics. + +The **Preset** button toggles between two or three settings. It will always have a setting where the fundamental is full and all other harmonics off, and a setting where all harmonics are up full. In addition, if you started with your own setting of the harmonics, the preset button will eventually take you back there, but with the master gain set back to one. + +## Several patching ideas + +### Arbitrary waveform VCO + +Turn the Odd, Even, and Slope controls all the way up. Then the level of each harmonic is controller its own volume control. Mix the harmonics to get a pleasing sound, then use as a static timbre, or run it into a VCO. + +Or start with the individual harmonics all the way up, manipulate Even/Odd/Slope to start sculpting the harmonics. + +Don’t forget the Preset button - it’s your friend here. + +### Dynamic Waveshaping + +Use the built-in VCO. Adjust the harmonic mix to something nice and bright. Then connect an ADSR to the EG input. The ADSR will more or less control the brightness. Make sure the the clip LED is just on the edge of clipping when the EG input is at max. + +At very low levels the output will be primarily fundamental. At max level it will be determined by the waveshaper mix controls. The timbre will go from dull to bright as the EG input increases, but the evolution of the timbre will not be completely even, and definitely will be different than what you would get modulating a VCF with an ADSR. + +The evolution of timbres often sounds "brassy," like a brass instrument. Brass synthesis was indeed a common use of waveshaping synthesis before the era of affordable sampling and physical modelling. + +### Voltage controlled filter slope + +Most conventional VCFs allow a filter of a specific shape to be modulated up and down in frequency. A variable slope VCF lets the shape of the filter be modulated. Modulating the filter slope can be more "natural" sounding. + +In the case of Chebyshev we don’t have a filter, but by controlling the harmonic levels directly we can mimic one. Set up a nice bright sound, patch an ADSR into the Slope input, and try out a simulated variable slope filter. + +### Voltage control of spectrum + +The possibilities for timbral variation seem limitless if you take the time to patch controls signals into the harmonic level CV inputs. Use all the usual suspects here - clocks, LFOs, shift registers, sequencers. + +### FM oscillator + +The inclusion of the LFM input allows a simple form of FM synthesis - one operator FM. + +Use an external sine VCO, and patch it into the LFM input on Chebyshev. Turn up the LFM knob. Use the Preset button to turn up the fundamental and turn off the other waveshaper outputs. + +In FM speak, the external VCO is the modulator and the VCO in Chebyshev is the carrier. The result should be consonant if the frequency of the carrier is a small integer multiple of the modulator frequency. For example, set the modulator an octave lower than the carrier. + +Once again, as the modulation is increased more harmonics will be present, so use an external ADSR and VCA to modulate the level of the modulator sine before it’s patched into Chebyshev. + +Of course FM will work alongside the waveshapers, so feel free to go crazy with all the knobs. But don’t be disappointed if the results are harsh and strange. + +### Process external signals + +Run something other than a sine wave into Ext In, then process your signal with the folder and/or the Chebyshev waveshapers. Again, the output of the waveshapers can be pretty unpredictable as the input signal becomes more complex. + +## A note about Aliasing + +In the standard configuration there will be little, if any, aliasing. Since the highest harmonic is 10X the fundamental, the Chebyshev module can’t even start to alias until the fundamental gets to 2kHz. + +That said, there is no anti-aliasing in this module. The wavefolder can easily alias. Normally the LFM will not alias very much, but with high modulation depth and high pitches it will alias quite a lot. + +We have an informational article that talks more about aliasing [here](./aliasing.md). \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.png b/vst2_bin/plugins/squinkylabs-plug1/docs/chebyshev.png new file mode 100644 index 0000000000000000000000000000000000000000..1417d0fdac92907126a3e26b484de5d9014486fd GIT binary patch literal 43343 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 CUL5KG literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/chopper.md b/vst2_bin/plugins/squinkylabs-plug1/docs/chopper.md new file mode 100644 index 00000000..f6293da6 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/chopper.md @@ -0,0 +1,36 @@ +# Chopper tremolo / programmable LFO +![chopper image](./chopper.png) + +In its simplest use, Chopper produces a very wide range of **tremolo** effects. The built-in LFO can produce a wide range of waveforms that cover many of the waveforms produced by the tremolo circuits built into **vintage guitar amplifiers**. + +The LFO is sent to an output so that it may modulate other modules. + +There is also a **clock synchronizer** and multiplier. + +To use Chopper as a tremolo, send a signal to the *in* jack, and listen to the *out* jack. Leave the *clock* control at the default *int* setting. Most of the knob settings will now affect the tremolo effect. + +## Chopper LFO + +![chopper LFO image](../docs/lfo-waveforms.png) + +To understand all the LFO settings, it helps to watch the outputs on a scope. + +The LFO starts as **skewed** sawtooth. In the middle position it is a symmetric triangle wave, at one end a positive sawtooth and at the other a negative sawtooth. The signal is sent to the **saw** output. + +The skewed saw then goes to a **waveshaper**. As the shape control is increased the LFO is gradually rounded and then flattened. The shaped LFO is send to the *lfo* output, and used internally to modulate the audio input. + +LFO Controls: + +* **Shape** Flattens the LFO waveform. +* **Skew** Dials in the amount of asymmetry in the LFO. +* **Depth** Shifts and scales the LFO. + +When used as a tremolo effect, you will hear **more tremolo** when these controls are turned up. + +## Chopper clock + +The LFO in Chopper may be synchronized with the ckin signal. There is a built-in **clock multiplier**. To use the synchronization, patch a clock to the ckin, and select x1 from the **clock** knob. To run at a multiple of the input clock, select x2, x3, or x4. + +When Chopper is being synched, the **Phase** control sets the phase difference between the external clock and the synchronized LFO. This may be used to "dial in" the tremolo so that it sounds exactly on the beat (or off the beat). + +There is also an internal LFO that is controlled by the **Rate** control. Set the clock control to *int* to use the internal clock. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/chopper.png b/vst2_bin/plugins/squinkylabs-plug1/docs/chopper.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb5188780d8265177e508ee90fafe4c99ae1040 GIT binary patch literal 20420 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 T#aQ#`k6 + +![noise image](../docs/colors.png) + +Colors is a colored noise generator. It can generate all the common **"colors"** of noise, including white, pink, red, blue, and violet. It can also produce all the colors in between, as it has a **continuously variable slope**. + +Colors has a single control, "slope." This is the slope of the noise spectrum, from -8 dB/octave to +8 dB/octave. + +The slope of the noise is quite accurate in the mid-band, but at the extremes we flatten the slope to keep from boosting super-low frequencies too much, and to avoid putting out enormous amounts of highs. So the slope is flat below 40hz, and above 6kHz. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/crush.png b/vst2_bin/plugins/squinkylabs-plug1/docs/crush.png new file mode 100644 index 0000000000000000000000000000000000000000..8c0e976dfe8e7ddff3ac1f7336ea3d20dfa7dca0 GIT binary patch literal 8600 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¨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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/folder.png b/vst2_bin/plugins/squinkylabs-plug1/docs/folder.png new file mode 100644 index 0000000000000000000000000000000000000000..80d2b809a80762016857da1fbb4529dbbbe95273 GIT binary patch literal 16500 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 Lcv&I)F693L+&WCD literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/formants.md b/vst2_bin/plugins/squinkylabs-plug1/docs/formants.md new file mode 100644 index 00000000..484718a2 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/formants.md @@ -0,0 +1,20 @@ +# Formants vocal filter + +![formants image](./formants.png) + +Like the **Vocal Animator**, this is a filter bank tuned to the formant frequencies of typical **singing voices**. Unlike Growler, however, the filters do not animate on their own. In addition, the filters are preset to frequencies, bandwidths, and gains that are taken from **measurements of human singers**. + +One of the easiest ways to **get a good sound** from Formants is to use it like a regular VCF. For example, control Fc with an ADSR. Then put a second modulation source into the vowel CV - something as simple as a slow LFO will add interest. + +Use it as a **filter bank**. Just set the knobs for a good sound and leave it fixed to add vocal tones to a pad. Again, modulating the vowel CV can easily give great results. + +Try to synthesize something like **singing** by sequencing the vowel CV of several formants. Leave the Fc in place, or move it slightly as the input pitches move. + +Controls: + +* **Fc** control moves all the filters up and down by the standard one "volt" per octave. +* **Vowel** control smoothly interpolates between 'a', 'e', 'i', 'o', and 'u'. +* **Model** control selects different vocal models: bass, tenor, countertenor, alto, and soprano. +* **Brightness** control gradually boosts the level of the higher formants. When it is all the way down, the filter gains are set by the singing models in the module, which typically fall off with increasing frequency. As this control is increased the gain of the high formant filters is brought up to match the F1 formant filter. + +The **LEDs across the top** indicate which formant is currently being "sung". diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/full-wave.png b/vst2_bin/plugins/squinkylabs-plug1/docs/full-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..35f4986a1bcde5fbb0c400436a9d489bcdbcffc2 GIT binary patch literal 10118 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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/functional-vco-1.md b/vst2_bin/plugins/squinkylabs-plug1/docs/functional-vco-1.md new file mode 100644 index 00000000..62a402b9 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/functional-vco-1.md @@ -0,0 +1,13 @@ +# Functional VCO-1 + +![Functional image](../docs/functional.png) + +Functional VCO-1 works just like its namesake. The control layout is familiar, the sound is the same, but it uses about 1/4 as much CPU as the original. + +We believe VCV's Fundamental VCO is an unsung hero. It's one of the few VCOs that never has audible aliasing artifacts. You can sync it, and modulate all its inputs, but the sound never falls apart. + +We "forked" the code to Fundamental VCO-1 and modified it a little bit to make it much more CPU efficient. Now you may use a lot more of them without pops, clicks, and dropouts. + +If you would like the details of how we did this optimization, you can [find them here](../docs/vco-optimization.md). + +We have an informational article that talks more about aliasing. It shows you how to compare different modules using a spectrum analyzer. [Aliasing Story](./aliasing.md). diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/functional.png b/vst2_bin/plugins/squinkylabs-plug1/docs/functional.png new file mode 100644 index 0000000000000000000000000000000000000000..2c927ee38d19fc18b56909e43f6b1f1910e8ed04 GIT binary patch literal 19574 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 GXZ{1(nYdyA literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.md b/vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.md new file mode 100644 index 00000000..49949695 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.md @@ -0,0 +1,18 @@ +# Gray Code: eclectic clock divider + +![gray code image](./gray-code.png) + +## About Gray Code +A cool feature of gray codes is that only one bit changes at a time. Having only one “thing” change at a time can be interesting for music, so we are hoping you will find some good things to do with it. + +WikiPedia has a very good article on gray codes: https://en.wikipedia.org/wiki/Gray_code + +Our Gray Code module has only one control. It selects between standard gray code and balanced gray codes. With a standard gray code, the lower bits change much more often than the high bits. You can see it counting up. With the balanced gray codes, all the bits change more or less the same amount, but of course no two ever change at the same time. + +Each bit of the 8-bit gray code comes out to an output jack. The LED beside the output shows when it goes high and low. + +There is an additional output that adds up all the bits with a binary weighting, kind of like a DAC. + +The external clock input must be driven with a clock - there is no internal clock. + +Now let your imagination run wild! \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.png b/vst2_bin/plugins/squinkylabs-plug1/docs/gray-code.png new file mode 100644 index 0000000000000000000000000000000000000000..25d440cf73b95267bf4b8f2f87054ca5d862b1ea GIT binary patch literal 22309 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 JRe1#$_J6B`?uGyW literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/growler.md b/vst2_bin/plugins/squinkylabs-plug1/docs/growler.md new file mode 100644 index 00000000..ef9e3397 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/growler.md @@ -0,0 +1,39 @@ +# Growler + +![vocal formant filter image](./growler.jpg) + +**Growler** is a re-creation of the Vocal Animator circuit invented by Bernie Hutchins, and published in Electronotes magazine in the late 70's. It continuously morphs between different vaguely voice like tones. + +**To get a good sound:** run any harmonically rich signal into the input, and something good will come out. Low frequency pulse waves and distorted sounds make great input. + +The controls do pretty much what you would expect: + +* **LFO** controls the speed of the modulation LFOs. +* **Fc** controls the average frequency of the multiple filters. +* **Q** controls the sharpness of the filters. +* **Depth** controls how much of the modulation LFOs are applied to the filters. + +## How Growler works +![growler scope](./growler.png) + +There are four **bandpass filters**, roughly tuned to some typical vocal formant frequencies: 522, 1340, 2570, and 3700 Hz. The filters are run in parallel, with their outputs summed together. + +The first three filter frequencies are modulated by an LFO comprised of **4 triangle wave LFOs** running at different frequencies. They are summed together in various combinations to drive each of the filters. + +Each **CV input stage** is the same: a knob that supplies a fixed offset and a CV input that is processed by an attenuverter. The processed CV is added to the knob voltage. See below for more on [Attenuverters](#atten) and [CV ranges](#cv). + +The **LFO** Rate control shifts the speed of all 4 LFOs while maintaining the ratio of their frequencies. + +The **Fc** control moves the frequencies of the first three filters, but not by equal amounts. The lowest filter moves at 1V/Oct, but the middle two move less. The top filter is fixed at 3700 Hz. + +The **Q** control does just what it says - controls the Q (resonance) of the filters. + +The **Modulation Depth** controls how much of the summed LFOs get to each filter. Again, the lower filters move farther, and the top filter is fixed. + +The smaller knobs next to the main knobs are **attenuverters**, which scale control voltages. For more on attenuverters, [see below](#atten) + +There are three LFO outputs next to the blinking LFOs. These may be used to modulate other modules, or as semi-random voltage sources. + +**Bass boost** switch. When it’s in the up position (on) there should be more bass. This is done by switching some or all of the filters from bandpass to lowpass. + +LFO **Matrix** switch. This is the unlabeled switch in the LFO section. When it’s down (default position) the LFOs are closely correlated. In the middle we try to make them a little bit more independent. When it’s in the up position the LFOs will often go in different directions. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/half-wave.png b/vst2_bin/plugins/squinkylabs-plug1/docs/half-wave.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5990763ab5f6f69ecee3a6ce7dc90fba789938 GIT binary patch literal 8935 zcmd6NcUV))n?E)b6uDICRUn~gz$A(VpUtFtig~+~3oS zjHaMaQt|h4basd1c%0w}BubfYqp^jL2MJT=vyj!7)c1nIU6ERW7`SPmftholyE7QZ zr*ex&$sa-{;0eb$^7wmtps)~sWxhY@LdgBIVF^B-KOs1GWj@t2hCG(~Mm$h72F@cZ zE+^&;l9A<+2aAK`q-DThQ64Etkb;Dyf&@rf3?v7Uk%UM|@%;7SBXh&RTp%XucmCo< z{-w<4iox@Bq z;gDz)&lyEWC$tYvnU5^#zf|z_`iCqE`29xl2^pXIHOP;CpClKcR56;U6-;Of+TVx(6^vp3}9)JZB z1w;E`f&Xp}T-^}|SLQo&oES(_ObTQMl7~o3L!=eNB;_HJlK+D0qhUywfd2%Q0zqWt zAhMGG0ZNV5;N$tnk`O4`1C1dwCQB#%@5i;F zP$LZ51?fS)fi=-oE3kx`JA zmy(y46O#lR@b`S!|L1%|43fMG z9X=zO*kl=+;`LI4iq`)e5a-?qTN z$ojd$$wdDTaq%x07VU!bbHu<^5oBxqzl5FyS$>JLW&1BxB>q<||Gf9_miXUra^5)W z{*$oCKmJL1a1=SuVaN&XCiiL=1qG+Kwz{gB|J0AHLo9oDQul6(7NbD)SAB|$REa!P zv-`o^UxMf4fwS@gCVT?X4QoBgPKWqs3Kietu$~^>-d}qRGUKvfb`=a3KPHL^pXZ+G zk8=?>a<#8ehJCo_)pzaSRfCahZprcPs$ok=a9>|kQPMamE`||s;BIMarEF|wAFzEt zRbPRLp6d@b$0+O25}wir#Z=c4)PkN0bA-25QXk`U;>4RP1yhQwktyMLqT>$?xKiDs6NG zq}hsIyz+JOolSg7itm$jn=rltgj75O&<=OFFf%_w4_J4w4_#}EquKGb^g}q56`Xuh z3r;HT3a{B6zA7ypqf7H6E4bj>g>TPip#1I6Z+J}6M=m6r%lPg7Oo&g=A6&#I+i05Z zP-j|839?kxt=+h|7o%auzNCLks*3J{Cq6OzV;4=#yDYinn!eE(-2?m2L$D}jb90*n zHE{uRdXgl)b{ZJs%mxuZ5`mO&>gC}Ns`V7WJ*pXadalyi_-$M;;A#X-gY@D;9x?w_ z`j2MzZ=+SNx(inJpN3==JS_5Vm((@9D+nDzjXh12%z1IIdNvny^9j=D`y>y&Y^TKS z%b_6Sw0a*HTmWyylyfDCt!gLNK9Vhe;=G?${GOVI|9uwrw4GiNi`sX^Hy2CkL+DtTP(67^yRStg4TAZdze!_V>*IQ-MX9lOjf_bzRtsK! zVVkF)P@_QYPh{06$+~2kV0N}{SRcIzfF9)&*d`4!04<4$Zf+soq_2XvE(;YC+*XJ0 zy?uX!IeF@s@?OHX*q1#t{a`8CA1|;v0BOuRD_2;f6u7oE_R3g1=;Cl%5vh0pr3p=p z>x){pve-wV)@_}QfAXD#5AgFD#E7!psQ5m&;mFoDS z$fdGjt=6l>Pi2K+*>?8GAIs3F&9|W2@;Ka*1|QpC-3gY`U^=0ejxze8+9M7qe5{;fXH;F7>e9v(n^u z+C3i?*7~;514!k3V<~kdV^ZG%BTxO6==yT--ufQ z3XSOOSWGt0wG&}a&o!4p*q~cpzJ6q*c{Smob9D9vkt@)s{jMQ-0bx$jD|{zqSBbv;;z|2WZhUpYzwFmB;EaeFhB2A?yPe z@X+BQwmR4d)LT-TH{Eg`@6c3vVSG^hjgy;+wJ9R1?cLUX5I*vdrc3kS<&cM-lT-v_ z9fPEh9*g8Twp?QCrdFZ)Z%17|FZx`ZE@RtH9qS+TUa33sd?E{@Ajz>|`3D131=j-; zsWO>U@1i*SQzP!sd|Fu$ly10q@aWdOm8#jv)!oW8g!8?a#-BN$`FHu(( z5XXpYImxPF4_hLR7LysWnuEiW#^2MvRt_cy*fT~uN4LyOo5Vub$5HhGV|Kz>`*E?_ zCb)p$M`n=A^UnfAzr$F=JD)LfmW`On$!N9!|~BF2VwTVe&Hp zDL_&f73)%O5{g)-D%rZ%SA_sQ20dO4u`EJ1WzfW{o>853D5=367;KUx!Wo47gD1tv4L znm*~S@`dtySa0`p%r$tXiy)eNSWj=QhC5xh%0~%kA<+`KQo7U1g{c!6X$t9nW?f~M?28CH?+#`?PYXFWBk1%o`kA(4sN>^2TYZv zZE%VZF62A2b}Vh{$D7kb-6;EKzIa+0U6%-Fx4l!owbVu&8fuvT20aXOiFgAU?b}Zj zT_{c8LKFC(_$o-Ow~d~xlG1n4JXV&yWgU3zY)^p%z5T%j7y6U>OcB?GhQ%K_oD785 zGT&fGrMkCKqkXUa5~xTe-=2MLaLm1xl(U`NN4>M%`^GTv_gi6ZQlG8HPme3!&>% zKo!o6`!85k4L7ccOSvyj(f-QbHhl`Bk_d78lsH|a1SqAC^6?81XC=`!v)h(%G>a>} znJgu~;%mC`yI3iIKi^8aQQWnw>6L$Z?uQm2t$Wrt<{rd4wMuteveTdiP8SNEUVCt1 zrR~W07ob+X;h?nzh)~QThmyK`mjf`Nan}?D7O%2ZAbpu`GCUEZ0;o6)cY4me4sEYl zQ{(%}eRBPVlit1s!K&1C!j8C3Q{yW5(E-@41^4?rww$Iu^NFj`O;!n7@3PC}{Y`6Z z(#Mu%w&MF6y!!-K^mrdvN!p%9Xpyb#v1o0&2OBnNJMz75yj)bX7C6JMGxV232dCXv z<^fa_DFt5zuRJ);mw9g7g>=~v3eg5HW|2Lw<9}FX`jpKAsPa6uzhAXwZ?Xjcq}CgI zW&LsC3l8Tuzf(isnAMYq`Ws8qLKpXRMs`Uy56E3g(h69+yDu|}oah^h|7|?5cky9NdZ#hhlq70aJeZ(~=f1}6 zH_H&(%71G{iQ?DDAfWqaWNAvwaid(V6{!D!l~hs_MHFBBH5d7wU;Os#CEE{|a}FZ6 zHwWOuLdcw0%0=vw>gVxO^#K1*(Z|nk`hMw_@%x+upmon&5Z&q!8^&jp>?YI==hlti zz*l8uRk5O)Z$J8RT|xO{p(x?=!1X4#+Uu+7OG;T1O{<3ZZri}Skrw@i;GMOE?5%Aj z(q-t1>H2ydmx9>9w(%e2+~XZ2kxr8SIsf~JhIB67KTHI3g6CEc%QxS%El?_h-{}F{ zI3^D&2^JAGx5$sVJ6K;NRDQgK?gk5P7&@1P36Lc-hceU^l$Uk=81G)gnJ3`)3Q=Do=K zt(NQKzK3;1zp4_+ge!L>z)LdR<#xbwd%~}<2q6gZgpG_pcG4tC~p$V8u*^DTR3;f&cQm zzLH?(CXM>jQ?${8qsWwNP^Mrz)rIZT#skdm$W@(^Ol32GF z{AH3E_OiEp%Qq&%qdr7bb;{i40#&wG()@4^gZ)8sK9H6mD(}A7$R*nRs;J3(!^rswnSAI$=i&8;P2T`C6`KW9hBZjn8w%V$?Qt1$b;6{$vt=XP`Hd{ktSo*tbO zG*_0!Mlu;lR_A--tE5{WxE0o_!JY#AWFG+iqN+ys`1;FY@{%#3>c+;V z>m53LRl!~xEj@K%=8OfCY{+OkUf!3sRln?H*g^TU_^NZT5Jo)spkgLe*Ij?tlk-{A zLw?yexqh%dq!iR1wD9I&J|$bM*$-A7h#M|Tn>(ueI#mC%d6eJkZu3sL%6c`&uf-#_+ilK_^N zGv#9+C+FOc>bp91S((z&Vn3=lNM(NFQB&31PG-Q5SvA4X1Oc~`2zi-ygV}A@JEvT_ zusOlng->!4C-n0h`H^hR11*$dUCzsa$144+s>`!R?pi+*XG+?HA7Xq>8@grN0V-pC zVge=u*|C0dH9hS3%PH@?-G{CY20Yt7o!e-{PCtHb>fgYqSqtyU+`eu1Dzf`4RY@kY zi~TStWBb8(OWs=j$YNXD(*a3}qKz~gP9^x+a<%=Q<0(7TDES_HCo z4(C(mWl(>)_RSBE-GsU7V|Cj!)AICs_q~juCQY#7MaN%PG&GF3WHE8>LlIOP#$2BV zJ$IkfPzUmrcO}}Im_GUJ3A$A;;S*`y#y~K1XJ{_5+AHK5?~^9vpM0sdiv19TR~(7$ z10oWT3eQu2C=)(Q$I6IED9&lp!?9Vzn)LN~qk z4kuFV$3<^f1hrIU0%>Jn)S+);K81=L>KcDny>)X)eD+Bz-FWaUp!r=rjnA164W#23-oI2J^ox~xl>&v( zUgzZv>jNEA1(O|?~^2(fl@d=7}PhaVCiNyik&S zT_Eqlw@>x@T1Zwk)x%E?Dn}Lu+N_n8szfT1K+<^FysaknQjD7t+hy7@kC^tW0V=vs?P;tpeWhizw-lge=5z1FP?R)QFm!R5I2SVi! zZ_h}@UFU#%^EZ3|si<19<(zGN3jpq+?trz9B${0uMYuWj8uh}bSj ze=0_L+OEiFPS7wNKqY<)*h-}N?%5oi7A|07GO(T?N=Yf6+jVim5N-h8PsGT_ zr$pu|@#q9?zEcm8S49I}yudKt*8wB=bB^jsulXyBIO3!Cxh4@Qm@1c$56G?z#i4c6 zfj#~Jl*PURNr;x)aC!0A^1enR|%-1Q0UmREkMdE21zI@^*_RQd%Ry9=>PB)@I-$h zpfR5Vh@fq#RWdh-z;kDMgzQ<^i~RzS){>SgK85fg2n_b8&TTO{(c;z|q_rOe)a>ss zrUbg5`?o5UJfRWzDtV*Q8#((RvY^IN`;%U@9}I{D&dvQte2?DuTR`T_(DlZ>rj0%*liTWh1fN*aeB7-Vrk6Jsv?U1WCkeO(a# z@(Z7}JxeR&kgmke`s_xPJ=NuS00MnsY%W+-gd9UR{TG-$$i!Lc9sLjLzYD$By#|!@*hqDw5U-^UVlWW6wEn^$`V$*jn5PuDEq8N(WhRl9 zL_Qt$y}7&cJQ;(I;eEK>^Ff5@k%!c=Cd|-5*$Cv51h4n(xCIGXUmN%0HlbO$Ffy0O z$-kmXm|-<3%*#|BE%})dnn*=@VjAB49+>q6gEpkKE#|nsC6W`gz@&vT2~ki!2zLT3 zG0Uun+&l7Uxd&U;!<278{e6)$2M+}ZN`T$A3m<_?GCO@wfE#N$y>IsKbUt^V-iAax zE}`{g@k4mGKf+gSF{e|ByZhBlz?Gea^!i`F4_(qeon4(iJ|6x3p?Pk6KX2LMIOP;& zgPS1I%#EErwyP%=jHDai=&uFoia~RJ44!n7`mhu00bh0%+h*(97`Drm9=c4O4#E#h zetZ5_*F{*|QLRXT4u^~IZ-ju4=jT@5A4Y9JSJ^|GelEY?l}M^>S*mJCFc=)G^-(yg z^*YJl7e-AS&e=5-9?ec);_qGm1bI`2!39oaaZq>5cZ>(FG`Hw{tH?APu<;CDtLWJi zr~atSERZ$9M~FH*Rtx0_351l^;ar_`p5@a~3KgFf6J|$dM6`!lpoJp= z&Nhkxq6-y?4hDDzk~-M_QHvNNt&7 z5>q80QhssaMIX8uQ9c$YqI!)hgr- zg4Q(NTBBpdk@taOKDqqKda3h8suxXuOx60pdrQs3HyXfyYW8PU_V}oJ0c%SuPi2`# z{A9Ve)58kbUzPdQjml@N=h{UhZ0oZ7kQJ^OvY8yPWC_w0-t@_zCw!Z6)at7=JoX2Z z7mMyWu@~uT5&DJ&iyn8cye?3(RMBJaU=h$+L!Ae z9UYA6xVXDgq%3MT>4t`5sjgJ z-P^Zgv+_go5H5sXxUo7mUQb_fC6k^I+o9af?`0vl#GFbOHg&m6h%U>@8nv?K3roE( zSVaUb70Yf>ref>F$%WU{VCoW%nG2p2&CV?S!osTUeQ(MtTwNSNxBV7Qa@~{0#%T2Q zDo_**HGh}D1M^B@XC-hC3#~~ZOW?h@J1bmlVMtgUbs8eY!aC?EF%)L2MEN};UYu*t zQZ3DK%<)kx>sU!-S0bW61Bwl` zFO%MaM5D`T30ufeT`6l*bHu}s2;*SuF4D|uhN6X)SyE!8Z@&tDqNw9~6sY*aLEb~V zNA2ESGXAcAR?vrapMt+5*H>6GQ#)*l^K!3nQhwL3os)7Wh`DL96?U|Y5XvYBY2YW1 zc!`PJMYbu=C_5xj8*c&kDO~4Aj?(5PDgklY$g2W z9ri0XDbG9CA$oOE+r7&JHYjeZ3Uv!DTE?%4DdJ~+Qbxmnd$hdYdHQxEr1a3cLD77L$Q$&koSV#QY_VXCW3|5N3<`P;_+(2YfT z7VaAp6M0r~ydNRdKJ9dm9nO&|YdlXol+?~&FAQssEAzVB-D;#cM*$Ivg?vBv)yrCP zXK`XU7U^o%Yw-3ytSggcInU7F{12wzYRw)l2{I@3hj(1yM&c;`L{_GsiB(U974|2L z!=^9SQQP%Cn}h_ut@V&)+q}tK;fUH-Vd)5C0A3<&=A_&E1U2 zyzK29Tm`&@DgHrM02serW~Cte#}qePVG8lL1<7=jKx7h*F6Lz1EIiDn>|ESry!t930HR3}#nv2RCCcW(QZwe^Zb&cQtjfc5<_JbRc`9 zXl&x>?j}qDaQaUX?4ABY*1`2(Y629->SgT2%Fe>}CelA9nwkD*o|C(a-9HvLGi5cm zGq*Q)aB~Ibvj1nUla-^JqpOwU|AzE`e*Rw;0931_^q)2UTVCw#|FeXvo0JD2#=jKu z-_CZ`@OCn1RWo;Wbayc|m+}DEq1DTwZ1P?nu4-Yd33;RFVRZURc&Be!O%nK~^52Fc4I-0t_ zdBMN$Hv{gsFlOg5<>5DBHs+A;pXMCFyjJZfZgKX_p7*A15s#f z_kT_2EjHiWM?luv6)>##zoJLo-1%Q4J8QCkc#MFt>02ZSQ<%QFfVmmPzb;$t}n(f@;A{BxSCqlKHNv5UF5C7`YUiR-cc@A!8$_V_<@|395taEqg2OX&+!*vhf3%f7H=NkS9)yXK1f!y}PkT^{Q1y630rM`_-8 zDz<#;3tpVKz@r_nU(vKAJ_n!m9lLKL2p!rU&pHDyLP?(IVnTvRydt$Ax zhGd9GlKc8-i9SjC7TvCHzTj}E561IucwJ5K>i6XZ*=m3CzexIcy{7t;dt45$I~7|gVudhBf>sAyW9Xdc zv0@!b?19%q{?c{YvRc>mXVkLL-{VNuX+9+xCP%&xf+r4j4{sr&RonqwVSJ8xLC#gH zbq~;g(-{MJQOw?}*5-1kVvc!$F!&jwdAr$0pu1D`Qv_}Bwh|w6Fu@#*CtT(tHn?3@ zWf!jiB+Z>j#b$^29Zxy53ln?~4=KQB07pZxh-Y4l+kbto@(CnkWc&6_sbY!uXe^0}Z62|L8ibr` zV_`in=InPr_UYxsQq=dTvSO&PqA;L?JI;BEb4rMlsy(iXSk4HH!RCf)G_Y)xpla_$ zxEtX^a4Qn*RARl7@;_fJmJC*lo<`6h5yB=$iTm#qJgMKb9^+(x(#9fq#hMawH0?`2 zSC((QYoQoSx%JBN|C}1xVvrb6%KrPT9F|FB3MQE z1}kUI`OgTgN+p;D&dKHe`$p`$|m{&PYf zpdoN=PTJD&(U~dfj;QkJoD7;h`9J+|#WCQD(7xk$hCV}=i1SQp<3Ygd<7Vsb z`Imurh=u&(rR^IZt_>Wc6C<5xix})Q(5~k~YJ46JD@f^x;tQ5_@pk>MayPqn5(Mj- z7xiLUI;>RZCpTYT{u1Jyg`}V>V^0-pK23V|l=MCS-8?78KGrpj=ia!V^z=z*dU&+6 zKVC)MGC|2vwuCASLi;SmkN_}j6W}9(tpWIAmsT^0>fF}Qf8^L|y-h8A+65BWRzEUp z+?T>FnM9JMM3@NP?Isu-flzK^n|!DWU1#FMDY>|b%j!?hHiu=IEG+l5`EF{Wv*%rZ zM`#P54rD};bUwO_P%m)f=3Y)X2Dp+<@I74&B=YZNm1~L%Rk9z~wi?c@D*VnS0eqy2 z+OK7lp_<5hH(AR3Z};B~WXI>bVbQY(J_NgPY%RJMw?$pccD0&YR7Wp~LZ#EI+v4Ho zZQ>mvSmbNOrmy`#xR#$(@Cu1H!`YZ|mulVcgK@4`BYE#z;cV1zJFOn-M6a@^zQf=V zYPj{Ou?ppAf&GwVNNG>YYow=|aj?)<*QHxo+rlHcwwvH>BoRdk6!o-FjKwr}Yuosu zXB@1jXHDvb2fU8$(r?#Xr&e+@buF^zF)r#_{FH;IG4|4!jEm+|o^My{4^Q)d*LR+E zXlxG=I{FRaTe{U=DLMMgO$wf`-Ov5)`77Md|8P*EAo^3O+(t0)wD+fyEn6I_g+vD! zntRKD>rUTw2*_n`IY|Ws49J_S4(W0Nen)cM|An3}-}6jE491M_`+cJh~mev>z3x4A5)@+Yx)x)NP2rumS;ID#L>s0D8HbEAV|KTQ*b z;WqF}^99a3j_X!(Hm?f)mR{=V^L_0*>pZVp8Sk&eD`spig`GTpXhUXcBU|u(x!?C> zHWi|~>R9ToyFOmjcRYPK4}5)`y@7tmM|RY8J*$v=>+JQLSwWzme+YU8r}zJ^6WD^Hn)V0gZn*$>e?z_fywY zrEjKzN4C+jhQ=0C%d!dbG?+wI9bRPn8hO50`+bKLGO37^pAdJnwFW`Xf`!^3?!a{n zvtPaT&0OKjyh@_bA6X|o>~SqJei?##yLLDZD2>K7moev0_Nw|AvgPWqSc5?)4Z|eW zUO1mtH0)VT8&6v|4YMf|_$U@I_pAWlr;X+I%?sWYD6@$T!exe;y~Y{HUF-v$2Pzy5 zK-)iWHlddNQNNg*>;Hyivsk0+FHi44YE%t3TX3j4VkARWgyWkf63)4-b@MYTW)+{v z@#_SS6xM?Ei8y^S5|-u6la}+cJa^aKAnRmrgS*_RqDr3IRr+H0!PO9?GG8d9jsLBs zY^%D`kdF6Etf9swLJ`tF5g0j$4xL}BchLX#C+(4(MAD_$1E&>3pLwzrPBfIw%cyn_ z#y;@qQU6Iio7Ha{d6>kPDN#1?LsI8yi@x5?LeT``?v0JBh7Kba3EI`(#3S%{;?Oyy zrFdW4vchl{&gcErH?NkkX}8o$dI(}H-M)3*V}v?$oPAe?sWo4HNeugKa~9$ayN_1! zqj+ID45@GX6_eSuOAVeLCJpRr@kI84B;B|iCf$4uX(}4~-102BdsV~C!@wp?1p$tx z5ytF6ZZWC%p0J%&!=S|}n*6I{R7Kt^3&~eS8ms5^UYD^h6fE`JHec?C;~L`G>wEuBe;!c`ZuhC537w4Y^wB-& zL}z+j?S0nwFeMqy5G^?KnPsrq7u>i^0P?A*zk;$6hlj;TxN9tP%NA7*XHg4nt~y6eLW05+-EOgme`-CeI8LB32T~aCf%} zf^K>bAcOOl&bwc+>J8VD-z7hWZ4^(moH4_hjm|Gow7SF&D^=>3bAl+XN~KV6JNi?U zF#`u)`61+esE_M=MJjTyX>S=(ZTmiKM`fk+(A_Zvnv6Y#sWAL1z*OcVKZ=emE`=K; z#)jf5W8EL;oMPITBrQG``wSOjGED6GaS5s~;}hmuba`FR!%^kWIP&kzvA(RGCym#j zciVMjv%g|e^OBL&%Ly3RG8S=s_dg0Hs6F3F5#<(wN zatp^yyf4}_kH!P#V4w*c6xFe^pI!_sA72%|`dto9R&s2Ur@ros{A~x#lFrf+D|P1Z;nEMvbn9++IJS5XaJc5Xg9yyC(?R2$w@ z(cK@a1nO<`_FTpv>Ob_si%cK?F0(9CjTLq6nUN;6R(yzP2vwC}VD((|-p}7hryl!q zJq-pmwPTT$WUR@%faL7A)3x;Ig^!sXy%p-;^~c7b=N!^l!mt*ZON%jI4aNuQl^2!E zG-N~1cd?FvtbI4fMCmP*KbB;3P82IAISu|*mV+|Nj+x@$C;CD!1^QEDL{0PqfkFGL zeAhp4eT=2vue!D=H+lNc^?NPgpa!;15I_u&iB7F zD|~HLa|mJxzacF|bZb<#$d;;nt#=Ly&RM1~{7of2ZvFfqEmqrn;IoeR4Q!ie6G>w1 z#&pE|L0DVVQyP-H_=3eKjcey-_77)-7F@N4Udnq5auv`x)b3Ji_o=;HznErPoOLQf;Ep!YuYJr|O>p(if+OW&OL%OqE5ul5<#vPBQ~^+FG|!L%omU&=;`n@f`zh>w$bgA6&w6X)q5m**6_R3M~5dp z;SP)88b?Apn6SLO!yi3jc^>Vs|jO=Tpc{aIRh?dxUw?Hmry?= zG+@b82r`VF*V!j%a3#3;vLlHf9Rjc3l_=I!b>w=oA1n17LYgVt*ZJ~nJe6FF;L_4C zh+xCy6Cw@o;Rx;C3pqi(Kq|$o;_AoX9Uu)eUehWC`s7Pt+sL(AeGGWoA=OUF&LJq3 zVt5Djkr&Uhev9_@v3t)s5xG>y+3#=Xrc&<;gMH%&4bAlK!x61nIzIU_6Dgs=m)J%j z?0D%C`#LOA?GR_`v zyUvBr1b3&;5ZnmO$A3-2@icOhj$X>S<=A-|vDCz7`=sWZ`zhF%{d>DSs(8a>h}|{n zQPq$}3EXjrqf@}Ah;tcj)|QrJAmr&(gsM7r4oq94l1XFHCj4)9{Iep3g#j2|RnyVt zQj>VCRQ48Fj8&{Dq&m(%+T~zGU5}sUwH$}&JYG_8b!ipwQHkWnh&VBH_qT(meYyl} z0Wq;7${1ZQX+h`L-KKqIoFjm%KFM`j@PI7}->mFCM@wN{!kizC0s)BnO|vI>(#9YjQ`X;qeL zx>pW!8j$#vYqy zP>cnQI};V?Hf*22#^&OUDey7fJQv5ZFu0RH#R#a2z#yy1vse5aEUKADuWW&tuW1~_ zm!rP_z?hLYA{I{+Lim*;t<-YQvm39al5X2XNPmghTT3kIow{=O&bpL+00WJNSv#p> zx>#2JVs*{kvxcJe^zkuI%&cr^VN8qgQN^gDe*+g;`py*lt}5Sj01ZnV!~!#1Fxn?; zSi~A>>w%iJ#)7XOTL^>Iuj&rr=BKsul*Cv}i>>YYxa>fZn71wc@kV%zYhmuj*F`uO z7u(`e15voJjA11Wlzth4iAIL@vf$qBfIf=iDXdD|q?JMxmdeuntkL+{<$A$ygAbeW z<=V#rR$0*qxuaF2MSHr@WeCB`z2pm7zqswCE$*?18rl%}X-RW(GP_UA>Ab^&e?Z~+ zLt;HnB`j1MOAQsqGFGw&EO+HXLcW~m!xBMpiAE@ry8zdAUA&=jnYIM4g2~hv-jg_ z(0mJ)lPX~c&+_asEdqykc9(mH0?>5b_9NF*PI-wqe(7 zC1Han$1OskUWqN%$DCn2(RTvhkJf?;(igv{EV$c5I8y2MUoLZ!Z*9jU^ifk=EL~6V zc&(I_x_{w;rH<^ykD5jB(}QgGP?uO6bfHH5m1o^lXo-E!jE{;^wW2Dl{t-$<$eJx; zml1f)|t?B zA#~?xD+5a^tY`^J`&|lC$3s~tXJWhfPdhBrkjqNx?~N`uwuqfm?^I7rll#Qh+ZmN; zq+((t*fsk{g384IAbBFY{)zhh9xZ&~gE~I^_m4JR3+Un|_!$mV-bbaGn&@Y=imL5e zY!;T;BsUd!(gkYQFSqJ0v?{0wMOyNt_(@IcjKIRv7l32c=G=9HLpuoG|D8+GGt;UP zlD1o#CX}}!=lY2_`Cz?$uwjUS2iZKcj3;M=0n|N#e)_O zWyKemebME`NDO_927~&&D;}Q~SSUTt&48@k=S{+{@k%}hh z;vfVK<_80wP( zP4vO5&EIfO2wJ%g=q=e$Qbklm0nK@53{Gpxk^}zyxiZd*J{fL;oHG11^{-&TP~i^} zbG0NY$ZP><#UG-W3phJMX!2*z(9OFmT5*wvb_HOg5g!_>A4YCYh*Du#`=9fJ)x$qT zF;-SdjzlWyJdGCCh2^Ocg-L4C*y^=03(thA<)oT$sjDYc%|Hj6A(lCxOd7kJ@GDP zd!cS7o@R5ZH>5bid^LWl`V74nq&TfGvISSX&|F%Bm8ev&nW9!m?Z_9s)$xuJOZ$U% zr5KEBhUsd0+A8m#iy`znk9S1+4Uld*GeNs(Z9ru}a-=D(e32%A@gqWPLO{NfQnqrM zS>^h1>U(}VU16MIl%gT4ZZBNQzaqf|k#W)YEHqb-g@2|jvXVdOD%}q$zrwxQByhNd zL|GhBkqR{TOe8uyc`}*rvJ&qLRt zEmEQAlVp>V--YRqnSqbFp(Rim+11Ul&0NElA-ID z>fhzFUT7PlkJ6h`f`{>EIdyMr9zIyeJm<^;PBLQ|k5jsmDJdEKwUT+Qx=&q2c!9B3 zw;$)as{orx!^|ouIL6}7pjdrPV@e{_rrhUVGND^PtZy@L@0=_5OsMH+AVANJ}(fhP*oBpnou&uqiT5i{o` zu#R&+FyyG}t1LkU5yUuO8#JYE9Ml~$1fzp;>l{7i>*<++;h3K=pv400%6NJBCM*&N zrlDW74PxRMVR|u9pKTv3s|HNAz$?n>CM-ogZPW7ebJZy;8WamECyMFo&3;srlcIb@ zyL59`jEdBd+;yWs;Cyf^(Jya+kruNj=v`A?Dz5{E%vb9uNMLgj2Ms25sA$1)rb1o2 ze-siJcuJ_)fWSI(PZSW;d>dvvn*6K85D)mLS0VrqXhBgH@#uIb*bvH*DFB%t=a>>( zrS?k{IBoIEZH8(vtTrHFVEBw@!&c8X)v-u&KrX@v4H@?YDiGzHj6@WaMH%$qL)9A6 zqTA)2#C5kTCETgryS1yyeD|T6ulsra+k?1<{-+Cxey_=@TZ@P6LKb$cfCxi9530ko z>QEwGZ||3Y)7=us1?kmBm8(OFDLw6$Zw{{iUGsl9nPctQHK7&t`6cs#==IjKH@$y* zSmovJ1^%q}`j3JN|0xz83#?kUG6vy|IgP9l%)CXvKFN*qs9awpEi7mb)_T<4^bVDR zqB0}mHE#y9JPZbc+gasLFS2URRJQBn!qUg*@vl=FZb9m&%&i+PD~A>9zMI|Z#f2r( zaa7ZifPxk!^-3B6SWgxhXVCuuq{f=Rrdvb+iyK(xc}MU$4feb~@b<#3l!~U%f0q0# z{5WSh)qC+o=-APaUxOmW-vi^C?C~LBHOfv%KpGRV1qQ+UIw~1v^v$ow+1UZ> zgyfJ6{s~?Ia8PLX8JF?|(Yxu;Ohb>u%CE}8jvL-rtofpUpW44p<@kS-!d>%T%CC&W z>(@5$UqI#ENMdFAd~Vij;J%=#P>K804xlLoZnJXtns0GEt^6j0vO`IyG{%9#KZNM{ zmk@B^5jwr5V}@GK27P8r z27v}4AK&AtOsTzoZk@#@82>scatsu-V~;UbKRN%###Zax3PI*j)x%mfiDi!QS+@Qo zBE6nP@Meh0OA_hYEMp8jCeT-qvrXqo%$QZ+q`-a+GD}w

CIE0W5WqA_=vd7NwB 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\AB*;{01UuOPYo3;f7=*zW8 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%0D|a@33A5q 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®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 z%0AHezeDinJ2&O!rz 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ⅇ+GO|k>}n8y^kj**0*UNn<0Y554 zk>b;g@Wt5x1UR>y_SxqXrci9Y3KTqAL)Txwe$2m$vrWrLNl3r*M%7v)#H_fY{Fy`) zSviW}^gHdB(m3D}?kUwU(M_4tF|hcexeyiFK_uri=6YpJ^?E5iT(D_hp0}vA2JmG1 zta2zM-(aW{$~VInonS$0XftMGCs9>&VxGdz*k~WWr?lck;(R`5(cCiw-m&mn6*Nl) zNN%MLqoPCZ6V#|%DY0QU(}*honi^=Tl@hkdb3#V#eW?yg<6!GcmZ#ExPeS(1uot0i zT%Sk`g%5v-am-Y&V(-cJ`ioateg6{bc-anV31mOKTZJQzf&5w)?2I!Jb zMYTN&{@6#s05BO{!sa90sk@wk*|3N2jR4}$RkBil@8DlzUQRGNpUa^ znom8Gn%h+pEYWh8u6|4cDPWKlBfm{2XLy=uiWvMoZkTHJ zY?r~Z^Z&tH5=>GC|9BVM>R<1ZU5L7raB2$l4F9g_sPy4_vOSYj)vFBRlb;l|+ej_& z7eb~EEhR=l?1Q&wN4hc7tp*MO(WGsk4owz`3Hky28@>61(!+>b`k3cyzf_Rg}N%A z<_A;2Sg=g^`gc{w;$2vXkmxbND(7U$1-41Z-QQ>6(CC5+fB_3PTiYeg+T6;6YG9fB@UwS65^moC zrg`U=Amg96z93G_1goih1xc-p^$df z)O3aTGl>e(0$_&P?$^7K-rh;i&YPE|SxW&I>a9slrkKDVSD^79iQn<1zCf10%(Yh!HqTWGQsqoN*S7 zdPSWnjT$u1Wyq}^^nXEfNH|+gkz_v-srk)VVV^aD>UCoF!w4gx(p=o3OUtNqv@){n zp$H2WlqN&kF?nn_suY0^7A%i$9Q6vJ(jyKgi#`CtwMuYO=|A{r71lcQfxN1hX&bW8 zL&p-3ZF@2dBDNxmRhDFO`GGIVL}7T2>--vL;~I^xVG&Ta`muNswB#imvyACHSV6Cu zY#bk8ihFX2+z*qX+%gC6>Vqx;pi^{9ZCc9WQv5PGZ1pwIWY^fZbW#>f6WqM8Z??4B zE^5|%?>s60j$r}vgNEyjzS`yDonO^FYd@20;EZH~T_mrPuSSG8t0odzb2OTNE3VkJ zul7DORIgw`^^||((A2t;*m zHljFB6QmRV0*JCja93quZ4pS=)hzceB&^kPb<>E9*FC}a4MnQGcL?Y?P&2t-P zvGi+J>&r7iZ5Ql+TBc>O?zBh>rrP}>%w@j?lr*sJm(Rh2y`tsms)~qK3NQEQV?_}l zPCbug46{eQhykBSzcXtLI)9t?fP?gERF=9Q2ih>|;8S^r(Va^$+GNeSwfvSmjQOdu zUm93o@>F0;`Go24Q`^te3ySgAANqaKdI4WMCNlhGql>z>1%vR5qR-D{=WQ(SCEIh5 zyuE&Uht-Do^*=o2@q)s#H57l& z_=A|6RLWWDKQ4x|n##ZOHo(~iNLB^PcI>YUbOd|?qrw!OD<|nsKW|bCo_^yOG>zbB z{TD>WjFbT@jiADc-`$F0D-EjzlQgXIIb>)cCc!{^g?T$(fbsB9KAwX1yun4yK%2D} z$k{XpKB)(QR>mmA8wF_gpRIBDP}Cz%`gIHO?pb4;cBmYZWLpdiQ+AQ1GV>Q!QS#k zE}-h{C>&*Hl|r!d^APhPHR z%ZIRDNH=;4l#rMoHjKYygUwG#^+KRO*oGGkb$D}|^8Z~!)G5Q?Q}co7`eQEPL1Zt4 zG?a|RUG{64gYoIB-J!~2J9E+5^86v1@KdNkSjc%6s~BAxL_+rWc&FV92iSy##N z;}qs1L=aDpY1&FH&8G5HZD{(&Z5cyOMI{sDDfONHG6h6Q ztiP}gHozFji$bGj&XgT}T@&7C!yini5tryvS1>gnrXzCbw%0U}j0 z-nMAvD>~_S1dYb;p01Xb-7PWALn24KI-+I4gCt@2<{Gu@LM&BngsJ6E%ECwZG@RTyLP4j9JA^gA>X4Vg0mQ z=}*Ja2L6W2CFop;@?Pd7W-@eZ2WxntRZ)kjzzH)trFj&Fy zBV{m9d~`&?8&q=o%r1rU5kZM!0NeM|87VKQjan+67uX5m*q&1+jW);!Jnbfa_&O=m zcA7GD0zL58O4ERiFVu@@%7=fi*b*Kq4vOf-`)ue}*-M1FzRLw1Y7Y+(HU^NHYxDRV zN1U#+9OeY;v0d}}3E=97@^+%Pmgsn5ZxNGG3k4=z>+^ZRirmgfN7@KaN=td5q4)gu ze&S5*QTJP&Up;vzHGUUE?9K&<{|pLbDdC`Af#>IqFGRe#?=>39;6yPm$lF}$f)J4Y z3saSe*FeuQXOHcljhN%36IrbZ)RN9p;l_Vkc1Sy9Qw*)4{m#*mk(#i@c?2j*OIO!C z&U*fyb2P5k&Ux7HLimBXBgtT(O>UI(7d^(dWj0=qu9HD6fj^9Dp1g#c>RMlYmF)$B z10`hLV_vmzW@mF#JXH||Lx6CJgqxIvI6RD#G?w~!ER5g8=yqAu{c2qWRekIT zQkwcMo5hS}Hsr)18UJ734|RR7Y;?hXui@*f+j(`aSD9nC$0WA9+M0l7p@dlDGc4yL zsx+lVwTHGxA3)Rnep!wYVia4hVIOnf5l;LZ4=3#mMlxWq!&WecNCX0KsCVj5?8VAa zcb6DhgUUDbFQ&fsjzb9*aIFq%dI&zFGh+xCd*bJrO)r|u0$U3w%ZMNMu-7SWlQ8l$!redTNVS7Md8Ugm+8E4h{72X6Hq{}Y#iFLSf= z3IM-jP#H}Mq9(wFl)mCbxC{H&(3si;An(``;3^l!GG58#oPD5)&6K zM1-v9SAZAx4Kh5nnNvCas0xuXk?r8ofgY6_)sMYNf%lP4Pjwq8j@BlQN8b}fK`t0p zMCIgQl3M#=O!=8arx9s++(0=?b~p{1F@eL%o>>>y2FfElgyU)K+*{adiJiJu%9j?Q z(;K95{Exg%9t7Zw1`GbAxzLdvI(mus&lSF}y3=|kM5+RkHL*NW^0VcY*II@nsO`&> zrbbvy=>e3A7|9AqGhqJ*Iu`2DwN`cl>5ph%()y4)9wcjnT(3eDMPB>%wA;!)6%-oZV#LiJMlNhcXx7K3>u4uG*Pv zFBBo{7&<>)T2Hokfm>cuTe&tu$-lN+P1$&58hb@^aC`Qx=GB^3G!rVa5z}&Q><-&o z0xig{%=-idovtgClt3G)-20mnHjFqo-V!Rl!zP`!@Qk(9_$b9}KlYTfS`7teLk^p& zFm>^RT=!K&4kKl>-I-+kP;!G7lzK=TN@(bKI^& zJ1dD2tqSyeJL7*x^+1gomd^msuu|U}ZM}ug5t2mgyA?|4`GfVl6mx3zO85zYF3P7)FF^9V?o1c2F>ShRSTOirn-%I z+GRP>w*iMTzUnwn5s5?fKXY#_*Re2PIDrO0toLUcIu!32rX0s=mNvOqbTPY?Zaa43 z*UR*NmX8RU@8LILoF+(exE<{HvCE~wB)!q*OA4WG(P9@DQislv#5~R1INbf+eEYfp z(>uW{rvI@H9z?}RP*DKoAoDEi;;$FcI9sm5TXhqBFAXlMw@OBQ;e#s`icsRxOhoF9 z3Xk2FuK%s|nTR85q+^rJSs;S{ye5l4;Ye6&0?Mn8;kL1g@c>791>#zFSG|q(0+(4# z6rDgcVnW4UA5Ak5CZ)M-&E3#>61ef|!dZ^D|A6FsK14`)!h#Nu)1pb_^F zR3E7Y2xl(n9Y$$cID@_JnWjw!A?w_*#d74l0u`hJ@vQmVN+Zu{D&shde2lItA90X$;fm2jO<<&qlL7t6m+GlL{dRfYtLBpIp5pUHujv{(d zF0f5HOTOnRLPqpIhV}I6q?XG|j?~?T9j}T)yoO8+ZUUt8UMhnxQY`Z${#RQOesh+O z3aJrGo*&Fz(U=^k;U$r=*Sgu-fm_Rov}%ppgWm6zCKW44VnC}Qj3>=MLVD+Qq@D?&#{lRG_ z_{?X5D>v+hWO~KGdaJMtJnD4h>-m}%&x2PsWA@?7T9^q=zU*T9n>=l#;av{+KJvf( zx#rYO*?(Jv-Aj~#Z&X{>Y>J|w?U1={V5gBZ2@%(ueXHFGn6VW%CtKPA{0lZyE?rQX z0`do@S!Sibi7WqZ2;t-3&kL4iT9$6f`5QuSqDuDfZuoJ-kF0G<iy>$*LVksYCKEdQFhRlDu(|p1T?{1^Xsv(ak4s|$_-H<`yn?X_T_^` z@Oq_`c~Pnix!adW&6EPb%4oX;>H0TtyZAR6m9UtIA4ytr5yCYs9n1Qn)+laHIkP8p zD-g>I2$DE)b@8E?NlKcBv`sK4b+y||EC-qQDXU!@pgr4u7zXp{@Qh#eW&Y zsqw{U_^nPNzIL;b==1noY`ECW(~=#_p(=nzm}~Aj0RyjqVLUTN*}(Z3MRNoTw~qJs zdrNTVzn8}}7Z{|J#n}7;g^wP24K(awRxZKw+wt3nm1*$1n^wLx)2L&C z#b?cUI)a4k=Rt%W0Z4pP2YNs8K98|BAOBisG|s{)^ZF%#ycXjEdT-QYbUuNdX1m1r zZD>j3A%MnB434olzT{h$S>CdUQ!o*)fvsmTd&YP@}$;hX|WLBVwYH#suo~WwXo^d?!KAtF;>G@nzAXR&SDf`&`n6TnqoRz` z7+AV!sh%`pJ_g2J>pxNrSef

RS*WPnkS8XYDZ3IcbIA8J;#H0F^eDQ7mEWdo;fJ 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 Gg8mN&Qrfuy literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/intro-2-110.png b/vst2_bin/plugins/squinkylabs-plug1/docs/intro-2-110.png new file mode 100644 index 0000000000000000000000000000000000000000..a583ec64a2f9a9167b65baa408fcdc4186879498 GIT binary patch literal 118003 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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/intro-3-110.png b/vst2_bin/plugins/squinkylabs-plug1/docs/intro-3-110.png new file mode 100644 index 0000000000000000000000000000000000000000..b98b1e7b89aa7e303d9fa61add27588eb58b062f GIT binary patch literal 49523 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

T+@6E%6~ri*4Ea3 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 IvTgK#0iXcYF#rGn literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/lfn.md b/vst2_bin/plugins/squinkylabs-plug1/docs/lfn.md new file mode 100644 index 00000000..0d55c615 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/lfn.md @@ -0,0 +1,17 @@ +# LFN Low Frequency Noise Generator + +![LFN image](../docs/lfn.png) + +LFN stands for Low Frequency Noise. Technically it is a white noise generator run through a graphic equalizer at extremely low frequencies. People may find it easier to think of it as a random voltage source with unique control over the output. + +The top knob, which is unlabeled, sets the "base frequency" of LFN. + +The five other knobs, and the CV inputs beside them, control the gain of the graphic equalizers sections. Beside each EQ gain knob is a label indicating what frequency range that knob controls. + +For example, it the base frequency is 1.0, the EQ sections will be at 1Hz, 2Hz, 4Hz, 8Hz, and 16Hz. If the base frequency is 0.2, The EQ sections will be at 0.2Hz, 0.4Hz, 0.8Hz, 1.6Hz, and 3.2Hz. + +But instead of thinking about frequencies like 1Hz, which are a little difficult to imagine, think of the knobs as mixing very slow random voltages, with less slow ones. For example if LFN is driving a pitch quantizer into a VCO, turn all the knobs down to zero except the first, lowest, one. This will make a series of pitches slowly rising and falling. Then bring in a little of the faster channels. The pitch will still be slowly rising and falling, but will also quickly move up and down by smaller steps. + +A good way to learn what makes LFN tick is to set it slow and watch it on the scope. At the same time run it straight into a VCO. Experiment with different mixes of the slow knobs and the fast ones. + +As you would expect from Squinky Labs, the CPU usage of LFN is very low. In fact it is one of our leanest modules yet. So feel free to use as many instances as you like. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/lfn.png b/vst2_bin/plugins/squinkylabs-plug1/docs/lfn.png new file mode 100644 index 0000000000000000000000000000000000000000..63598c42428f9509c79960fcda213077855e2f85 GIT binary patch literal 51085 zcmZU5Wl$VJ7j1ASNN@|D;O_1oAiyFEgy8OO2_D=bxCICci@UqKI|O(40B`br->Z66 z?*|1tP&3orx9>gooYVYJRguL&B}RSo<_(6toRs>TH!x(tmp?KraOH_B+!y!; z_qb@rS@foF(_G$%l4b}bU8dgqj&t{m2Dr93t(|+X1gcBx2~Bo#a{9BiW&HK)S7T%Q z^|s8!L=AOyiTURb!any{{k@ZFNHg#^;$`~+v%z^dI5=%3EPuBqCnpz#nVFe6IdT0z ztE>O{^XKyNQpEp7iFfL7yo}d=t)Qrgo{sL%k|~>lvT`qX@MmG)$3#0CT?$dZ#0mMy zl9H0Hi}y3s5!e|&Jk*VhC|8SLf{kJ5NeN`>XT^NwdQ~Nx;uyN3tsFG9v_e`3es^f1 ze3d#3gze;CRe^}sJ76ayBn$>`8Awe8hdlL05V#0Bs)sU?lCLR6d)*w)Mi8*V+9`Fn zZ)%58x->t&lYozw4(s|il%U^g_=h2yE`pi`h#-q?tlwBU1G$bXQ6#*Gh=}nz$YrZr z{V@k~y3aaE+1WAHvgJBja|hE!zCJ$tN?Q1&_~wFQeG`T3YkAS|meucgu3q-Q)+p7 z^>%S-6Aug8U}l%U`@ma%3^ss+3a*40R4*(T_eY;BR0fXq^yN894S1bzz^sY~X>1*y zEZ6g)TYaPZx!>~x_q-sT*FIk79!nnk0P}`AF(!XQdpn0u;P6{otPV2CH^!Od)AuS? z4#CwhP7;!mYA`yKg3`*dsBK<1;ioyX*`I#>`c?3At=^uZ)u~q6PHIzPnoLTL8;XUB zvPl0atDwJ>`Cj0A`l+g@!~-8{v~-NFUNMPPvDHS%%m!*FDmM&>GV<^9v)cEoz3~Jc zWNz{3i=APDra&!!5n=zA3=i&BGfK)(OtPgmU%^Zilup_Z`*#Ec|9wUUcMB1>m}~&D zGKUa~GDqeorJ(7(-Q6j&L)i}$vbp_=Ns^h4&x=~+qnpqz4Um!z6duB zmC9~XNth7Zay=f7X9?%0hbIhy#TOSBOX+j1VX&d9%rjz96h*UG(E-Mk!(EP!F6tOc z`C7o#%GH0CK6FIb+1tzKxW60p6eCk*XA9BMJj=AWsfKrQ7<~Un1B->i$)g|)SUMN# zNnoD@MYOaCNuiVCC3S29+jk>T`*M2_w@K|8tv`Tws{x1xF)xndz@<-be~;n?K>`GF zL@aI{XggAg2_zxe5LUys*lhFsyu8@8?vx3!cF(I2sFw7hgS3X48qC`e#_pdJ64Yc8 zIxed*IMHESfA)*vtO6c$v|KU|yF8`%U1anv;bsiQ-W+#_zIBmd{yjcx_-S)<)1r7k zQcHJMTo-Efj+B%X8(ZAGW~u~p%1M)&8Ki5e09-HFQD9U)7#~jZI#ZpM_Gg3+4Gm$E z@;UtJ`Ehya)Ksi%zt*zY?*Ce-oIaMpFG=9IeRLF|351i^-6@%V&;G?$|2(07yIPI^5EbHa0d+ z;u*Hv0SS`DbOx&5yuWWzg-TzfoX+EdkWVJ)7OScH`tp3BF5~6pH8=tXCSU>QMDUfw z4Br(^jc=C#oAa8>*~G?1NkyQc>$u7FXrK?ADdJ0PeGs{OeYc59UuU~q=Y4y8aeK?d z&TctZN~Gg=xh=m-CD+o@Qeg#*F!lEOx`$yxS_^n427wEZ=1gt};;2p5fzf_Vw#4Cu z(NKCz%7-;vZ@U~~iG+kyh1!KvHEgIY8UWF$HXHOsh9mgoWm;0}axmq6cRJ}h3l;~G zL19D*x9{V1M~9d|KL4|F0|Ns?m(IyrYx8k6e-trySIPOggTU*}(QpduV9@X1AGLsd z5;Gzpw^xuNEAbraAYGVCr=0fX7TC~1j2lv*zrxql4Tnp$N54N8?W4;M;1;9=PaZE; z$2CmjMQTHHG6mhIennQ$ynp{~%tFOK+k^W{#~Y`w*rj!Ls|xsQjm}7lu?KNFSp&B& zg}MVcm24s++MD}{26Lefa}qb zkv$A7AgpEeEMaf_YM>a=R1<5QuZJ++3y*P9!W=GE?>*g}ZTuwf(;^%F|Qg*Heubsj&1v|62Mg}+HvIqfJ280s-Cg zLylSmB4J>;RtWlj>MV`lnXd5p`S~X-*YEbXpi+nUljCCtk-O8?r_FApT`tAg4^y+G z2mAY9H09)wGtJ4j>6a5^>$Mef#RCz^ggjzx3P<6Nq}kcox22{ZmcBZ>kdTn9!9_EH zu69SMaVLN>G#Hf3SR2fRPCqd{op4>=7fBSTGi9cnB}6n0lrJ?kwXiQh-0jbmEmxTi zR~$~{N@~vnKXICmwRqoQvZJOO4JLm4To62TU9OD{)haj8*C}i7rcS&W!%Ih;@Fe24 zTOqXOwOJ6`gGe_xxw-XmL1{nBME(8ycfgEzW<3b9zrVjbnm&CsAO`{w_<^|M!Y*Oxv*D_ z=hZHyWC*y;=ci4D#Uxc}(kL!6Xm325zWUhLAkXX1;ar)X%PuQ(fscrYh}>8TlTH9< z%!Cw(O+x*fW|+Q#fx+)uBuh!s?k*tApgPsNLrIJ-AF08tHMuS!`9Ox+z!G}i>DMTA zhwhGLD$1pb`isP)a$x8;yG7Y-09irj)*MT#LB#_006o8^hN~`!gx7B3R~l~gJ@2Lh zy=nCW^mvCyD@bJE3F*Tcp>6{v{<*$#k_T={)op7*8 zm6hzvpX2eK;L|*2`|sfY`%6|(5<_(4gY&O{>F)R1nciQCDW_jag#|k$GP=;3sl*!a ztlV&tR$6>Ag!n(t{{NDs{IF)!e{N>kSQ3}aSjI)m4C4O(Zt{VRjg61*zIQl9cUqUM z?DD~x8Kkjc^{0l&7d@)BuvS3V--!b;bboSX5v% z3i$I(11VYu>ac^(TxJ`B+0O;dp8mjly7X89W0vg3Ld`^$Imm^nY*R6RKt&UTp;^CsQ$J1j zB(yi?nc~o zY-B0zuv@f|^E%$T%Bw|xEZHC(0nAQHd=|qW2R}IXMs#Wt>)EY|cMr!h1+lTQfuyrg zYn>7kGY(*J02nlsue|=GO<}wzUDCfNS_v-DgAIv_OYVS7ymW5Sk7o^M_9kuEj&s+f z<%ZJvyAFK%^RY1u9ypJlh(@W(JNMll~}uFxq-beAVG z8f5M<-}H!vp&Fx%vCZWT!ewv3f8Vd~MO`JMy92{8*LW54DD2urUZHQ--5>Yq+DKAu zk03<6p{FXdG44-8Y+ztz6$Q%V{l(TGvXj#+P{8FA=z!#K@UQ!*7tP*w3g(Q!Mk&?LX=xxQyhYwCDa3rPRZpcl1p_1aj;4qd>cue%T&NSySwpf znVL9mADNg6r2qb;NnwoVc~2$*`^J5wwya(T9TS=o?H1$-7(#;{2lP z29~bNJxhk!^lhfaq-V2p6v&*9i`4EpxlC?wA}xpO?|e89U6RHRM!U>PtiRMzG+@V1 z&Esuw$I(3w7Cl5lgHJ^btXmIBMqW1 zx#BTXR)&U0L=Z4(i;1f#LbS@%1>JrX6@>-|lYv0U=>sZ^3=9^Iv+=`tj}3fV4y--C z1yn7yLevC=gD94JvBu~m!pWJz%P3Mp$7lrN2`KbpXsGoeuL=5d1t zc-N4l?yGadYFDl6w*ia|Oywq77l)+`poNY#(}HefP{FlDt_kG3En9?t_6o({Lqjdv*MJL|-14m*cm)YW>tA)ZOMBF&$2+3Z%&Wy}kkkE!2Gxq)an-bGu zY?FzhJW$7S3bWRnhloOhLo0-eP+iCm69Ro?7Y16e3jpfHdEP+H%5UW7YI7I>`zeY z)*wsE$h_Px+q-=FQ2?MY+oc-Ic_X)G7H9ndDGH(K=^H*mm-6Hn zYPx(VQ4sjcBt8%<3!!y2%)?5)VCVox4zGM&CS$H$ESrz{(7x%kwwp6D& z>~j??Lw5*M{~AQ z1@Zu1TB$JV1|X7}O}X=CFxCVOM)zGcGd=Eobx>z1_;oJ!_WREGX?UvdU|>u3{Pb2>=F}%>|cX2Gszwzks0mn?Y#)a z%k=7_eZJtrp#IGe^>5nGk1dxyO?g-G#6scr}YY#mu z;l|6m)L2Z0H{#eg5KbBLn2jV0LTcM%e(Z!lpTAQBy2uG>A}$N8Opsb%UmwuB?)ier z)Pl*CDm(BV5Luksfu}y+-@lj3BkidKg6vB!6G(f1X9wZjgQDm=*BG8I2Mwo9TYviO z(t5v?qjX#BV9Dnq6=cl)&yx>JR&(O@QBXzi>7OUc<~66HHI`3)F4DHS-hnCv;dxg$ zD322Erz^Rk8t;=K0Dyi&WAZIk=D5r0I!BfGi=fXvTe8^Ee0je_QiE=b4}urdjrqP} zq!~GJv8ZHyrz@;~u9>nI^3UM3+D8%ire@=!u?^;#oLrwBFr{;T*1!s(7=_F&rc}O} zZBz3x*LjP1<&mgIVLMIp@&q#m$<-=xa6?m*leZ}!mT&=VCAijZl~@=8hlKei9Y6q2 z$CrzZ&ax5sqaY~Q@p?ZF*n=)db2lSDrwLdMEQ+S>9xiu)+!EIs`f+%+)bom&G~;Nz za5VGm4|{UGYIU8(4g-X;+XIc;T2ZTfhk3GL_KuQNwrNzSC9z&L&}>IY0|j(6zGAs1 z|JbWY5NM z9O*SBH2b+F2lNNR(@wu;5*=zEY#35dNzUk7LrU!z3TR!GeiW?Nyg5buTDqP{;$kiX zR9hjTg%9v3J`r(Fvu}JE`iK?MxNN6tEOD`BE3j*2qDXkG*WSsbe9`Pi#0b+olLNSx z|J{6N+ci`cVZ>%RCF@jH&xQT;z%8s^p&++eT0cDw=z<;^1maf4N3g#``l3j%^Eyxn z=)Xo0&lB2fa_e(jST?GU*ML8AQ$iWmeWuf0#(esD$?=FQ@%5vK!V0Wbn`)bz1vBI1 zn%vJ+tl#I~91%f@6+EQA=iQPm-<&Q_&#Ww%_NYd5n)yE79IpH_-lD_!73o-4;KKg@ z+!|P91XlZ*Qf2ce%|2`L^A5Jf>$G|)+9SaOhTJfV`}56z8=VtJUR@oh3|@Are`h0S zM}h3$gaT5YMRQn?%|fiZoD>{~E{7}Ap& zf6?{e-C2s6o9{)F{UYQ#`#LlITyd~lFC;fpaa+hKx2c-Kq7M*d`;k&rKt0z*p+YRN zZ-=|NQBG56gr%&zo!eu{@_gFlCMb%JuPF|btYnuR8k+KZ?I)-@KdK*(o7~)@i?*Ds zA|hZ$k_~~_U%%IdN~Qhx!A_iqyEucuPG~5HyUX+lM*2ZKXMOFcOX>`Y^=@$7>YG$x zi(i%;E5>7|gP{jI;U=sa(##Ja^_m*+4<2Ta zf^rz6@m8ANrg2{+C94J2!5I3McwWd&rcV@pe@hMkyk*R3aDW=8i_(RMTZ#;_%a;}Y z@R2U=aOHrX9-vJvN)UhhdSdpoDegDrJ0Ap%)kaKLD$Yg>Aw=wbXC!P0hXL*T12fwD z-@O-tNv5!x;Yk?tq$_*oXzm$XY$Oc6oBl%+e|xg*{1z$Fl6K*Xbfa#)_1T#J-zySi zd4;ArBhBW3ZQ?u$XkDg2?!)_hI>bk1x=2gE6D5*l=#-#fpk~z)w-839e(w)w4{EN5$fpbR_Hz?vtb}2SC*k;1p_KAR%+~@JH(L;&p#?YY75FRT1@0?`DxWXNU-zbiF zI5-lk8I5nFHDbru4iEeiL&Fv3e0#`svGRc+c0Swc@9T>faA%2_L&x?9gTqsgxa^{nEpuhqeG3W1*s*1GXOKN_ zZ%Fl4NxrqtURIf$&qt24KG@eos*|pClA9Yk2=|G6KO@Tv8*F=RuwGyZ2n&Zl|C8`$ z0q}Hnb=9b{UT<%By6TWOR>$bEjjSyT33lO?!64>xaCF=>P3PNRuD6#bYXEoF*f9@;jh)`M&2DNenl(!)t||1D(!fQa%9|10v1m(1AM*b4SX z?b=DQwdv=99Bxx^Mx@s2*@0U_6clYWjM~`PSWr+4g_q0UG5}4Vr(q`E0 z%)VWbLL=sf$e*p%9~e3t=IeEHK(^35;If>~{heiyz%@-ySM-YK|gVjWZ1Ir`RSNJCI1$`Fo<#g<@xFS1_H8fU5oI;R_BvSpDVMr zONr0`$N{Vik3kykR?jOs%xi$M_1dtKZ!E#ov7RrpTrJ#b!mwUrb7x&^gPiN;Zuz&l za_i21W9P%}F4gL8BN z@*a?#Wd-_uX+UD5>Abw`>_6Fz0*;Y`fQ?2gD;`vUWY+7{+d>cEwXIX(W^w_yZzh47 ztfv&Kdll|_MI-xlVschrek_n>X572U-nxi1*`IIGFD~%0-536Nc#l(BbM~XyRu`I> z<^;_F6wE)@RTeOKG(pGa9t~#}m9Vbb!5Cui8seXi!|LmKKT@pndkrjomBfEC$p1ds zQBCm4|L@-{nxOjpw@`yAtNuQfB22mb&&BrX)uBtLD+PgUczBzE7+$bei67x=;el_UW_gmfk;2JZ!R@we>xWp2#et}>ZD+Cw$Jg*NpQl znnK3=k9%i$pRPDQ->oVeA`UAp#>Zik`U*Pz*vrdmZMw>tiYCdg>$LY!oc7I4tge+}kU~5dQ5{o(>_l+8)l@2d@|$5QIH1gPc^ESy@?=+5!;r zCgk%4K}UeLbp2)s9*R{ih7f_T2)e>o7Id>(FS0M%>=r1~&8zk?T3#=#pE;o?qb&^i zfT=O%$X^ToZTc^wtia;POo@omRMgZksbyu%ci-K$_G5DMYb~egY-HRwimR&P@tGw) z6!^dTsWWUxQDgX}aod0SI%6@JVOHVEnT9c8t5FS8EsT~_@ZDr6@nbO#v+i(`#lPs$ z*hTevxHMH$!|s)k0W?@(rU7Q*=ISaUDyo-BpE4h?o&XmnC3-&!3Hi*G>cB@5*H}$+ ztCmj&=#1izC8uq6$V8<(g#AGuTWfZ=UvrPD1rS1`ianQe)N}2V)|34WQNj28SF*+c zk^j)U#zUdH5(*CwSLV7I3<7S)3oC#ksfRH)J)N}lCY9VqtafqP#jq{sYROccguN#H zyOF;coSCt(zP_+N99$q!Xv_4Q@xM$<5Lq_jSPB(UaE&jYP6_Yr$M6)XpU+S2(Ycp- z-SX~)?*n!KtBGL!cWa*r=!3)!4cD0`=9u+#mSsk*SFiJ*GR8@3gKZbL>lVGa7vGTJ zo-EZeQc+3Vc47jkHR|ZP>9)HwzJKqmknye2oJ%jvh^|fhm|afRb6F#m#4+Ho0T^pm zfVSNqK!#Mn@O);K`H21C3R${z%AdmJF{5Sv{)_gw+(UifMS_;;zqd3yQh}vurOaQX zEo8*}`eXB2^B4z6SDMT)Bt2Bfx#(Rz{V^0r!L+>$BcJ4y7t($68=gRPv+z*{2TDz-(eAgDyQZ&Wyt!wU6Z0p2NM%<9|?X;fc|%qV_z7HEY}7gObJ- z61LuALpgBfRtMibc8GvG4l6*aHKul|b0tU7!ipTdj>uG;!`>j+M%94bj5Mvv5euZxWWPTR9EUb|ldK%|63VXT8$;ZPfk&v@f+u zLpTPut+I)ExqtYY;g{3Tbj)G#g1_bz_wV@>THA!zGhc`C&ezAg<}9KK7;KszKg^|h zW_G$5ax$K>2yv#i%axIz7~L{kz7crJ`iwzKZ}Kdr4YbMhTAVPYl=_+?x7cK%o`unr~dM3Y44jxXxO zso48c4SqZh-b8ox8+e2PGc(?^0)Yy*S_qdbuk@i#Bui}WFeW`zCyRcDgZeYlYt_Me zd$;gC1U(97xnhA;0t}P-mO_Mvj;_u3N$Yf6_55XEV4%3T7%&@H#6n|ZV+~rp)D%o+ za>N4xN`%)~ieOf&{1k&e%C5@3SW4j@6oKexTF+hU6q3ZtC*p)3@SiBFde(NtW z>k|8fD>0o?@`)+vw>dDMn7kA^r3b#0D8~s+Cl@Jn8O4x6`2Aw#C{=;d_4ls13;sFhXlXq z@O`F%VauRu)fstdvvl3AGnO;;U(Pkr5`MyKl&B})Gn%j`S)^s)Z+)JnN}v7>C!-=U z73}ooaf{%*F0K|B+}9->2kCF2gKk;MsYq3iX_&jr^k$8WSUTu*$M!-s{F#0F!3BLE z|0a#Tuu($6`ueQkhHr97Sy@m(*jbPUd;?g<>z5s7JUl#r2a%@QD&lSyM^082i4TV6 zFTf44-d(w2NoWDYuv$GpS?ARSB4Sw06sr|sV#r`7IUzVZ+W7ogz|?KZ>6jfUlXc+1 zC@PoeiW0N;79nZXc52%o(hhD|Pq}KTYrK=TG2=5OYL;5?lZGlKpLU5tkJ#e%^Wvuy zQblhK*U4bBJ7UQGDwM@cx+r!WrZX;UK6NHRpOM#`=72w!sog|u+36{O@d3S|liR2g za2WpbhpKAGXN#YS-60zq%eXPq=)5DN%l>sww8oHaikoA5+P$v_7(`K;$IL`q!OIzTtz9@r`IT_O zX2xA#uS~(P!T$ut07f1eem=hUc!|ryfVn3#GjkQ#Rfm@!HvT?beWZwVuqf~u5ItzI z`0k%#G&fCumo1u4)IfZ+RNxIdctg_J*?BF8D%HTD@B6L@F@$qCOJQ!}PdtV2#Ck>h z%Nv-e8tq5pz00~p>vk;Avu!95>xDSQApc|FLm}FVrWK#?^7&C?WJ1<5g5IL0Q(0T1 zQ)7HJ-xjVtt4 zlY7kg6p1O^s@1AZasG6^Fma1$Mt!XL&1llm$=y}J6)^WQe3P!Ey?U6{3x~t4f$NhMr1b-;n1pvE&qJ>i(qCwzgb2{QSM& zTgr%ZK1Zr}F#*Fe%-!mn6cgw6;*RRJ&vsl#V*R033#uHd^_1})H^a@g;MvdRhLV@3 z!Y+q1AH6h)e)r(bD}fZ&`Tp$w;h|5MTu5hH?q;F9g*ccxQ=zPN>ka6VWv*Gw31mQF z@(a(Coy!awIWpQ{!ODvj>Gc`bA=6rNjq#ou?d_Rp$>~h%pUmjTGK9@9;sIw$I*0iw z>^L5T$0mqbzf}tb1o$-32w48@Vco~$V;h`8AW;L1K}>N{Lc(;5r*jW`hgiX(2Oid$ zpctUrZ9O~9R_GkHC6r%&P&dgu*{|<&ed5UwmiAizI^5LOozYa~E<9nBkCYs@1ddxP z+0^*Nq1c3#Kh(aQG5Dqa`$5c4PPgECDkwS~6JZOlNzReRnv-VPDVXv>{23uDtt@{U z)VwRQ<^-K(1nsU7tj50(3i{&P^UtHxu}ae-MP`7jO@=r+cq~ro+#U*aoOx`PD@|t8 zE~d=`AW28OHcM@|g&B-g+!olZfarX9iSr{Xi~MX@I7-iz2dvf+D7ye?PCe1SUfdZx zSua7{?#YcR&G-dk`;RwA*9*13ctF09N}1H_Y4!r2%m$fRhsk))>$8)nb@(QfABQjF z>DM#0?!VM!2S=@`zE!HYyEySdoA-USb1mKlS>BYMf`59PN^9;EiuD|xUc03@Eryb8 z>$W zBOoXst(;E9@Nd75ajriRRlNTh8bv4>12L};!Cg7{q`f8Vg;`hX*)=gZ_=CKy4k#6k zR~Sgk#YU3jg$?&>)YIMe?=XZDzKVF}TCePNI?pErkI7QWO1B#5{9T_`7tvGF7hw2< zFc*#dq1$ko8wqLrDt_!yw8tVzMWae%*J?JuQ+~_g2;_M zqCVF8N*HvWTx@llKE5SNwk;H2pHbUHAu(4f?CW4R=t{Kf>QS;$TbJ4dpRS{%6KOfD z17Wjmzlq zrdJ^xdq!XqH5|hw+^{-|&O|=4S_r9VZWi^wTWPYsA@Wx$y@~4T(m!jr4`=O%Pd47{ z+s_O9K1u&Fe;0eU?rY$)u5;mEXVSKmae)J2@qKOE8hq7hyW=aIUsp1y^X!L$)>(aC zqZi3yUi__n^B3Vh*5((Dv*=Yv*Q*wkHM@C_`^&v;I+YQ!$D5DN7Vg)}D=8Cl$>LWa zwdc2X6@?$?Dbh0NmiPPnx_)!{1f5?8*)O)e?mMpWfb~4LsjM0fXIz!+M;|t>{tD{X znh9UF8k>(9wD|=tJTQXhyzCd7tlu`nClLsWcnixL8fJS5ToDb}tyi$UO^9On7`d(x5?+ac)68!*E3}d5>0xDYane{|yB| zW0h_lVLza_bQp^sq#v>F2+XJPkPy$%sGmKSBlv;laNr9QoQyJ$LDlfCNtN?8(zX1; zNw9L1(8Ska(`9F!?LL8MYiEw&dYEyp_=3f(@jh`+G@WT1ayc)Tu{e96y7u+tAm|Nv zN41PLgbaUY#-L+9ur`ZASv&jih#yE$4lWz?xB*x;!28|?*e|Ee4~A7-)c_jm!l@Xr z6rY}+0z_juJH2OdvB|9-s!YQTEx7Tm{a3T8)xN$EeCD{3Ea7ymfcz#01nQV@`Eqer z*@(a2EZB@Fn{au|rz)imp2cv-eHReS8mF_FCP@Sks|z7970bx!CE(6MRS~Obx(K6_pIN_>S90Ti1qC@w27rqNxd-LG->E|Uf*02_*PL9mt>y--xw{Mrx_T}|*s)2>Q z{_eXSpETSz{Dpn#e}~-=envn~LnkFAEyUz0ml8e)0KDRK&UMKRKha#%m`))T4Q>b- zD>wy83sxqXFZeVb0);|X%Im5`ZL3SDK|tRM^KJ3*^GYxrxKHo&oYSBobEM?%DT(sx z{hyr1^aivjv$E>z#zE)zsS4n@?0ED-rX6Mi9t^|;pnq`eQ$>PEs;z{AkDS8V%(QsS zIZ5r36JU{=#>F05il!2sejRNy>{vyoNOn-09JJJyVsKH|SRK8$R%mE)zEd%AF|qs^ zf0sfo>PbpMke-&Tu-9w3+T=RZPaEGEh;(-_9XcjQ1K1ia`P60+&pgf!U6UQSy`83C ze2JSH8URo61e_d=oT;U7iKZ;jm@l=X=}~-2gjIc>;A%YNZ1=BUAseuhRHB8J#;o8| zpa4N1k4VBbPVyT4c>(PS(p!L0GE5oE7wL1pT6QVu`9MHaJ6#59!G=k6l5R3ll!vmr z^4pgIG9SZ7{*ScW!RW*=t*_@V^1TTye}$MnDJhH$j(T42V@u%cpqZMQ_pU@^zlu!* z)#rDNBF+Ba_jm<>a!e3f3oHXqwx~>LyO6(`bHJR~YKUa0fcx=69Jv@(oUhjT_=u)I zBmFX(`yxR{Y{rI{9$93M;Wbf%UicpBD8C!8o_joCA+^k4B+Lu%O&&fy+usUv<%g$A z;z|)Aj-Z3fKj)dr4D^0PS1xwkQZ@?s8@*mxXmC;EzB$&HRkiIs{wZ5Jg2Mb zZ02`YR8*WSf&~q{feVCnKHHg!YV)H-JBZ}4U2FN-z!&5(3ou>+)Nw9V219#Nrcd<| zDeD=QWyqjD#HftSlZG>q)+JNG90UaYa&OoIZ@5d# z^W~kWJazp`^6=894F(2*@D_8;iyEpAH2WulUgiPbPtmggX*#HjEEunX7B3mZ zRHZ5gIPz^4t7tzW#lhz|wP&om4$zU)m*~!~t%e9rd2riG5YQt@>efhc7;cm-gKC?Ry-245J-QCdjb(Rh(!6#o^^@wv> zKwo=`+fHshwtri7o8K5vjubj^H+#0ynqVlFo!{*9z~L%Sl$$P9_mPoR(lA1)zo$>g z?{BISBaV~w>GTmGMy&8k5p&P8ufIfvhI<_CIOgf6BS!NiGL8o~1)>W~=KU0SO=^gb zhH*K%Vc0D^Uz&O)!g*02Qo8YGtT?PEq08O+UNHIS5iof9tlia|@?q*Q9ReiOHHtPp zo0}cxJz}RNl-HQ+*PWMAbN^cH1Cr1lKQ7Qt%+MlKD50Mtql}h`4moCG+RByG|v6P3M zqkE|bxnaEVb}QJxR0_UUgk4P>)+7Ercd(B>H4^#%~i8$unqQ}}RsSR>IiNM2sv zNU0JB8P+>7J82=0^KTvnRMOJYaryz0frG5N!P3Dxi#jH`RIUE6A}lP?_?-j2y}?Kh z*(d~_BVmyW+Y*BIDb)Z`V?SfB0EKzrckk%5qTNF#}ym z;#aNbt}5g6&%>F1Cd7z&+ihb^Q+{ti&h_$!opoROIK*_r4k}-d1fM7ooW?8KYpXkZ zq^JC+omt~$(m(%3?lpn?1q4J>y7QgEny^xf-<1H9P$UyN3JN9pZ#lr&N2S--+aHGo zQrGR;4GO;o$p4-iz}`Knp1S$zWY&8{hn%NtZqbi+vC@(H$7V+eBYxfb?(A#* zZ)Mjfb*M^~kdA?Y3S;MF`4}GitzXV;u0?+i>b6FW>t1AdWYC1goUWUe<`WEf6U)RQ z3x=BR{q0iLIFG>}>P%BV)hdxJ3-2t%<<2L2BYyU7BFLb`zgK4X@ZpO;X7XCimw>lk z3O&?#9|5W97>AHlP68}$q|6W71c)lCs#wgyfD!8#a5^jVw-#tm8Nc~ubW3(lDOJ|> zNu^1_JwfjJCe7yN@NErN?ez^YkJSh97)&-%e-(e}jYHNxyv{+NE83;>^0D8CcA_DW z7cCV4QIf$jsy>KcwG8ss7JLdt=a3G!Xp3v(dc&DfM=JkbFfxYlX%Z~V|eF^vxX0Zl5qxRW^ewN}XAc_VmUkH++L5@tn#ZN+YEY8i*@*7sI( zZT@GDdrI{_8v#9O7a@Bqi*<08-|eU|KrDv}cKWHr+*V5(PFsB#q-v*Fy#DOaFJ>fT zeCsbl7f=u(n~-e#9mnWz)_3&^ZAN<_vyP99YzNF#8utU<41jvi9&?_}F%k@{ z)F++KUl0CUQS>yaq7?yH-|VIen-}X?nLv+s9oZV1T54eL-W9E_cr>&GqFOt~VDA_kWC@%|#;|J!Rq zIDM+$%^_alVt_J+|NG$VqU7QuA@q}(f#vJ81Tyn8!0iH*b?AugbfNOW!8HsTa_h(2 zN->)6a>zTox>XXl$cCZGtcEJsMl%2v0h}@f{AntgR(|d{$(>cC$&6PghUqn@OO3{G zpj|lR{jd6sY^;1!;`;1fyb+TFJD@(c7`Dz

kZayuSE~`nS`6DxgGD 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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/odd.png b/vst2_bin/plugins/squinkylabs-plug1/docs/odd.png new file mode 100644 index 0000000000000000000000000000000000000000..a84919fe36c0bea4f24b1d2e77857688bf409c9c GIT binary patch literal 27398 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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/release-notes.md b/vst2_bin/plugins/squinkylabs-plug1/docs/release-notes.md new file mode 100644 index 00000000..a46b13a9 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/release-notes.md @@ -0,0 +1,19 @@ +# Release notes for Squinky Labs modules + +## 0.6.9 + +Introduced three new modules: EV3, Gray Code, and Shaper. + +Added a trim control for external gain CV in Chebyshev. Previously saved patches may require that the gain trim be increased. + +Minor graphic tweaks to module panels. + +## 0.6.8 + +Introduced Chebyshev waveshaper VCO. + +Introduced release notes. + +Lowered the distortion in sin oscillator that is used in all modules. + +Re-ordered and re-worded module names in the browser. \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/shaper-panel.png b/vst2_bin/plugins/squinkylabs-plug1/docs/shaper-panel.png new file mode 100644 index 0000000000000000000000000000000000000000..ab5cc72f246b00a71485b061ea8155c77990cf93 GIT binary patch literal 22801 zcmbTd1z1&G+bv9|bV@hU&8CqC6$GWEyJ6F8=>|bMlm<~mNeQWqbW2G}Y)R?vK9jeu z@0|ZT=Reo+dVGYv=bCG+8RH)JxW{~>siA_0LxqEcgoLN2s`vu@`w0mN`2!XT_z7Dw zDdheiSJhV@NJ#jd_kWSoxbUfwkkGg7we>yq)t^aNLY;Zdt)Ldxyf9~1&>9IzN*3m7 zZs}<4$zWk^Ywse>wAa+a#9(hF&7>!y&advOU~Olw>g#U((pN*<($~>a+=@w7hCvD@ z0XlHD_B3aJIXk&{NWi3-{?V@l`1$^0J|>2LH1TwlW|F(VA%niUCW8Xh-I_s!SCq$6 zKv;wUBF-xyDkLl}&dngmFCfOpFUBVz#3LXoAg`XpO23Zua6Kf)ZLa(KwMm$k6(~aP>=_-;PH6v;%N@!aq(dOcMpoz9+vL* zuAcT#7l!*D%`Ko_p3+RC)@EAXGTu69sQsD~Z&f7A7UzW$$X0ESjw{Xh5kZ=c24`9HVt z@Ko{!uko(|`EOf$Xuo!~=6hl70rhgXv{v#4kI8)hHm(v1?$+j>P8SLpBQn5M|$=yR!|=gj{kCvwW7JFwKUWH#PJC5^9TxQ3y4Vwfr%62;fF}@^Z&D{ zI@HSE=Jo&5R9IV3Kte=BLQwR7Y6@13mAR++|8HX}O9>mOyR$iXXM1OJTWda77h5KV z|BR%B0@MlW4sHydPUydWuBM=%=?=BAcLHB{yik#6P*YM66%ZE{HliXB9xDN1K^_Ysa|<3Db1OlJg|N9b=+6vbO}M(Jr?3eZ8yg!ZCnq=e1HQAx4or0Z zGVD22g0}ms(4hy&{up&_N11JsLPA1PQZ&$%)YR1doPBWt0ivpSA037%DkoP0DKvI* zMCj~-xL5@gZrTz^OG86LPoJkPw;sH^yGy}m^6XLrW_+xPF2#f8k9ziqy-jDIoQBP` z&BK-MdWs7%N~ZWnEgEvkCh^5$ptkb&0(Fv88Y~R!=p^c_CxL#nYubl+2`{uSq^aPs zJ`YMyDL0tM%NmZkj_y}hEj5( zI*Pf%Y&5+#L)Z8I=)?cI4!TZbVK(x;iK?AC<*|H7rGa9*f$MWxOKilWqKLwBR>Y@I zpRgW8Q?a9wh3kn2-AXlwLb{c@tV?)5ef-!eN@CB5Rvubs#@3876crwhgno13*qSA= zwz&-nmt<#G0Ue^nhd`H3sk1TfPB!zH(X1>n7!lvTeS@*n_JnORGzZ<$fx%GR$5^Yy zZS$gnnkxvx<80AK@v)-h-zDWs&?SfXk(#yZU+Qd`J=22|9Tu7&i|Br1)^1fG7j z=1?4Ghhb?{$?=^(a9RG~9mZqoNiWL|#kfH|L#_xlQA50l)s$mQTS5yAEm?53L$|iF zT7U5w4fZmDc7~eYQ2>hp`{9AiF%k@8NZs70NkD;5_QOBq$w)QDt40}08<(5-{-=%sxXuj1G~9RG7B> zXd`s~P*n5=4|@;1TBS)=;_5e{?x6hit1g%wV|Ab_IJF-n`55|N>NYlIKqv@ zD$P4EVg&qh%J6pETSHKZNb}#OrIGDszJEX0?Dwu@2Yhz6J5SAT)|w$?OA0S3`ttJg z3xu4}c*FXFWYj~h_>GN?1us#nxomE0If1i>8aF=XdIWQP;*>ooE<^hD{QR7c zEal_*^|0(+VpF2MJ4GN(0NU5IN#&2}UDVxK>2UuGK}ncOODH*?$%CoA?cdeTGc}AS zm472s#obq;m-6(oaBy*79Z3aTdYiT%i=*fT-=614bUD!WHWLTwg#{yTWs^9}e&;zZtEk{J{53I=c7sDZ5Gd`ogvJo= zhyI}VYYRZnpJvhLZZ&UCwx$YK4wifV{0Jy1$NliYH!UY;ezMF^i;^vy3w8d7%^(#z zRDI*`V3y|)bvP1*lTIDoi)5v5<7>(L?2ll2>WQ4iD(#mSM{D#_Fv21&f}NR}nJ2Mz zg1H7F7Z(?=^z|RNZ3YqHx{YGu(-be1vHPBGXY|Xt2P_T7_dSA93tgO_Q?7o%Mu*le zBJCsUpn0J_#*7O&@81_M80%p%W*po+LWh1!eAd>4ucgkTrn#@H+Gfaz4vip%lfBs2 z-PffoSSU*jt&_(=;BdgWKK|EVtfFDEey800{QJF0%wXx^Qt%pmclweO?X@aj(ts z^MmD}U+GjL4rm*C@sO`Ouok~Fmz|l~lg)`MH70`^J1r-tQWPEM&e@KRLV!N9eUHbA z)So_ou7^~@15;5^sm`)gDt>+RHwSF`iIR69B1A+e0W5l^uD)?Ab$|)bt=LTW2u3gC zuTR4nEa7{+{;JxB=T((eTPXVX@82!E-)8Wex3Bc29Q+;{!hhm7lr3H#9XRq;hb!r; zZmE7jt8NOc4v2l~PLKME2r)Rdf$KPON)MwA0sg~2EjemEZ{Sk20-lY)rSk^4X z+cjK*gqWCg-vJ3K8o~N>WSCHw0nbUb@vDPYo=gA;yG76QGz4c##&-vnF5181`t6(>mwFwCcSy{7@c+?s>5=!phCg>#GSFnUX#kc4^g+I@g;#dic z!lxzYHJYw4mF)`?I6pf2J6PC<-Qc;NCmS@GlXZG}8pnw>U!sygciw8VF(y<{*JdAZ zdoAwgwufkjv1VrI1i{$Z*s8GOu)H>YS#SLMw2+GBH25>hEBpN2r{$9$j&yj46Z$ak zfQR*kKOLT$@2!5z`Me9Aw^i;aa^R7skv>1##}2PsnBMCBlbA?2UhTD|o08l|C5OZ9w?;389KDJ= z(o0g^(;Boz*kRZJUx@lL@KoBSrp^G2ox5Hh+xOCw1*k3pgf+v`rh}jEFDj5Cs%;bU z^8NtG6luuH%-r1EjGz34M)%-no~2YcV1y^YOeL#S%) z3hhW;;O&KNO|Hii8qWPg~zxs2lL+s?m3 zIb1(uaYgOp&gPqZv=n;cX+z{-u=@RHmhFycQAp>1g6`1ikzRl}Mg&3p2%y#rmR^u+ z`J9mGl(nv=iA|_jyiU$z@Rk~)kC`L)NThVyUb!Tre%#Ey}xITb%C z)qR_s{o{ZqdLxt<_)K41tjVk`6a$Z{l7i9PAj%f$L8u^Xe*r4d*J%YFLov1rZqr1X zzeEgQNK?JkkzaU#NR(Ddqxqsl+!XVNtc{vaxq=1&T}xwr{$p~uhr7GjkHQLZ2??C2 zp9W{u^w(#1qqN)5#OIQn;r`>rS{;#i%e+jAnq_<)OU|<- zK_b5N_`3Y>t++3Bd8@E$!dVssTF=4#NC!<`zHe)XoR4RErK0QvrJND%(#gVC-o(Tt zSy2&SlWS+bd`$;6+U;Y?@Zcm%!p^-(DFoP-OJb64ONxslIGzc135_> zb6Bj$;fmV$o6CZZjc*i7J_Y*)>HtS$D(UtfcWa)+K6xR~T z!>M$Eb=eS)70UUQ7cs7KWuE4HW^+-Dj!=BIK}l-m1CV?h#ps}k|Cx~O5X%fM>q*Sn za!*2p00fdbSsaluXSQ6?5nbEfrY&e9hb>p=ElNE~)NZG!xbTI=@-W;iQmd@-8~;I* zh>)!J>GrGmfd!5Xt#g4_g6=tV`@1{jJ5-JtM{d(?OSDa^|Fa_kJ`t^ zcnGcC$EcMgW|D`)@PxqD?!4dAWoeNwBACeP;CSXxegm zz8HzNJHiw$aQ~&Vxp|v=N-0&jaN=*T8pQs0qXjM+(Y5Rz!#Wp^5r+gw#=$4yz-ySx zG~9Za16)6AM2`>E)6;V?XYpgoke}#ovK~n1hOnz=cJh$8xClIf!VG^NE__dItgm;K zX5i+27NYA1Z_u$glVi^;` z2W-qIr8r*R-hcJy0@tCwNKJqCHjJ8Rp)kbftOw4yKlt77jvU@dl8| zLX`xZI$tabE)?R1Ng?OgA;k%^<~5!hFL-xe4(Cdbjg7Iss@3;77#beNBq6$R%_h@$ zcB5U<7Oei-ePRCVJD#a=!0RJKt*=gZU^>`(T;ob`(`H|EHXI*6g}$?$*>`_Pr|tJ! zWf4!|bg!38+aoF~=Zx5p(PCiFy_J&WXBLbN3~*$8U%x&O(7!s3rQo~0Sj%hJ;_-Wy zOt{S}q=DNOxvI?4ZEV!+D}tyl5vxd@#T#Bk4iiZM`z(+u=u3plc3hq zy6-YGAEn#-d3bn0jxsR#rY*atyL*ZCx4Hz5eHi2s1VT{?_t~RcOMy5|6PB*A^|HPy zmw-(Lc~aJzbPd&z^8oy2`S}-BJ;g-M*YL{rCrrT(3sN8y@j49&31T@pu1%SBV_Qou zBJ5yY?t)wIDqH#Gi@lWlq2KfQboE8ykA-|r%A zb=sxYD}tINjGTU3#xy!Lrm#OJ&vYJnL&DzM#PQ1eQ(Km@HG?^~#%YXvp*P?J?Xcl8 zDc;lE@FBnqA_xARn_s{J$om^XnOh%oeSLlJUMgTBkGb#=`E}4gMS4YHm<00CSLGTdHKL1G%84Kf zzt74-J+~h#YN)UOnJrF2pHIoAksZC@@avz)(x_np`jtb$MZxS$>nQxN_1%@JbS06AgrvP`k&-$Y1=UU#bSJj*&sM`snmW{ z45l8lHiMVF%}mdcCydaYbuX-QZ4hMfIK{olqMZh@5f9{hx6Z@A9IvSbp6?@DurO}& zHv=AE(2_uSn4Cw6y8Mb;YHm6{l;qi8L|A_`|Rw}$Gpsl{dxVr#6=1d3ML@$#5HNT)i{64g;ivp zyE;oDAJ3r4@D3MRuSbIr(O7?`rl#ga)YNm zIi%huzBcD2wx9X41?=3#L0V^{60Gl$VKnBA-)zuENf5RE5pM_&qX_7qh~)!u3@H(a zr_`o&l;}`_-ZfpkhYHZ(NQtStEvA|C;sabAs_j;15ARPX+anu3DD)YO!@Eo*+pGQUZrK}UkA zDFq|~g@PO*Scp{R1UgzmLbH9?+R94hx6%*^u}Vdn6{8RU2(eB&Q)tl47c#uOL%|0& z5zLH?ZLR?ZE(A<|Pu~aRNU#6u?|0~(fyJDS$i_rHc=!usZM>g_p3>3LbqD)Ad-hf? zNcjJi8>|#`rGd+>qMA& zJPF9N(f15iI=y!1G8F8#r@w(MLh(0=tnQEIcA;|IeVPseZ-XJ&KRAfm(E8oAotv8${~@vtopy*d@;0zkW%;{q{QO@Nx^orrl>F_WlN;&gvDD^49_3<1 zT9}878IblKU_g1zlZh4vSC6wroiq7`&h&1i{A(w^TO2$aNxb@Ntb(1Q*9N8MH$(Ds z0}@kYh>w<55-;psdisyR8-vyMli@ts7T*(20RaIH4s7fC3c-+o^L=x23`(a(@$|S^ z&z%!PPp={C->g5yG0x(=ZVQxHjCMGf5pypd<53_d#{~e&JOi}5uR0}j^Ya1z{$^Cu zpV-XJ%_Y6J^#L#xC`9GT1oQ`#?fS_8!5XOgva+The}asZ$mQD?!w?(_mD+XDNe4%* zlLVobpK^#MALwpP9mwJ4k@f@6c4=el*h(&tIpt>~a4GQVq+s1|A3jazmdidG;A;W% zwc3}$uDz>QZnUwm;Ci^ymzbEColSG<2%f;}&)D!V0WI!uOlkw{fC;y?^9_l3*=%vz zMerbBjZ|XKE*j7|^-Y(7Fi)^{;^?F=_ge1a6B44L=t)V@#E|bo zP%&d-W1l{G(%#XrIOQ}`!yzIf!o|fUESwq`fw(%}AbEzQD9Xr)yxE+eA3VV|a%yjH zzb+wc-U;&B1R8NcmpL)dcW>Xm1yzwWL;Sx#Gdl3out*fn49E)x%z0>)%U6jNJlOd$ zF)${*;f$pd>e=pKV*z!*<gosyh>xw zuSCroff)V0IThuV$ZfFRxs8;hBFmNa!{-guaPGN!y2|RL^Os%aPQTg)ukm|b9i)kz z5(RVifoi!?1Ij*{i*ETbxNQT7ol!_JxB~s_xD@VNZ2(Jzv!z$=>rYIYm>zpg8b=16#`Y+OGQv58s`gUp`*DXlZOM%cp)U#ssrho zduj3N@^UCw`s&xGr>@K+8D`uJBcNKNV%x4{XlR&}6z4qq{acg(h$t1wD)Sy+S$Z~4 z{_MXko1B~TzdYX9CR3XX-yqoIG}ZHg%Oz?(3hLecX4wPESE?`!5`1+Tr)mCmg7bY$ z0=n=Ze$Vw0GA>;!TU)(15K0K09^MqI%+Zm&>3z$ zfFe;aEFK(TI@%8wGa!HX2N8Pc6FC_fZ*ps32TP#h5Ee$=Lb4g2fFW(lig;OcEk-{u zGeboi5fL(QSw4{0SDEHCxPG(!DhJ{+$Il6$xNzJr{?ek$is%$Ujd8Urm^DY|GyUY`T@~wpPx_|rzb*x??Dp8=rcWY{t5LHm|%HC2Rb)r9H_@^$6Smk2?@z1nV{zEfrhGT@oqY* zw-gx>si!2VyNL;%&QxMM5N<(UpUkzbhsA5bE)|M-Al7P0QvG;WT3Q;J$2H<>lzq>Z z+>cSF58lPdVs3yNQT$++ps{WQ6^K;zPi9U5@!GJg_;SyfKcVQj)AjVS)!&x~ZA404 z#E`Sc2j4}L2#cf9hL*T1@Cl3Wrl+Rb{piSwi@iMEiNy+4`gHZ7>BZuFqv%d&22 z)>1bZrYZODukgqWJD`{m?QVFGmMYm5)rlC?u%Fut(Pyk%98;a zx+#1I1mT4e1P7rr26lRgkC_=mou3^DJpb&HNaRGQ|cV2;+wG)G~#!YI4|AyRZVGLUi?An*N2MjV<;MX#nk6dVP1UQ_4$R5+PGh5fN8Y}NGS1&+w4upX53R6=!i!X-X_y?LO`QF&Gcl}SN zYo_OPaKFIe*;MZGpmapYwo*(!_+EgSfg!l;Wf2MEaZH_dn4*XVz^r8k%!Z~W+@rea zmth!q3ss<`c#*{7?8)CHyTo@D3Nd-T0gtay#wvspJyy61T5aQAu4uRAl zJ$-P3@BDyXN#XsdtQr2X6dNP>vab|;`BNwsBDs07*bxPCETg``K~VA>>g|OY$hmGT zF3CZeD=~hG2sUzq_C#CCVUTw*SS_QP2qSO!;;428H)0`r9`aK1c}JN5+`Raa>3Xhg z7@JG-RAszNA}y4Xr=KePt8y^JM;C6ML&Xa^A^r}AfJ$Q8=!JgREa_)G`10~H9+lHB zpT%5EGYw^GMm4CqYQ0jLc!{TNT zb7xky|F!@+hMZ^etXPr1RnHYz7m-{vb4am^Ma3iZh}G3q?g17xi9*QIspONU+8(ik zzlxo~Mffe+rAGWkZ9xGGH=hoPMZ>6z9%BZ8IrH}ZUUOCd_91k#MFhW`1E$BwwC`zQ zVc~ET_+e#brKYB4e0&__rp(h*`YEs}8{hqfkitUC65TRY6pLaP_wvHBvYm+%Ju-M) z6rj3r*F|~nEP}2q^_+~Pq=E(K{p0Hkk417mMg+^=WV7EHDI6~=T&4MIN7iE(;TOEf z2zuGTpTomJhbwRXW?5(w%aafiYBIOH29h#ooik|m=oHAc+omQa2vD%_yC)M0m>}4B zcpL#BeEs^hPR3{SP0x$NRiJ2H-nD^B{pRK#+2}sZpd|=IQ~(*!$BW3m6S6 z>uPr#HF)~=E=~gLd#2rBJ`TFOxi2;W zim;C9Nh0JL7aMy7Qs<*1OO+P`0|P|c$vRBu_e3?CHWvpQ8!Y?y(#4AYRMpG{ZP%%-8CC6TCLXyfj_6N@k3W|Vy0RTET?}%LN0MbC;=Jnj%9AH=V4GjTb z#6){RsSqf-EX%F{KehB%jv=&f28E1y;GZPqI`{W6vO)d=;wVTSDpUoS>Vrx8kiz5c}m^d!ajn=qMrU^IC9P{@0Gnz56* z-PzLerM7l>JM_;FX%MbJxpYPK^l)>6%ed;%e6wF&e7}#C)qRnOfL21Wymbi!1Ec)| zpW*kP?d_q*sIZOwWsnh|V*UX03Y#25MMb?2mbwU&sCuY#(K7H#cng-P<}99a^cXJG%4sz`AaOEOxWO06%7NXb(X3-0_jCQ_~}NGiG-71Ur!mKhOd9f@G!m2);$)O9ZcYf_N-iAyZo5qM`)aYl)ugi zWA~zkdcQ^g@%D+AN@3N^QC6QCI+Z+r7Cc) zBHFv~xnA<|$&-^9*FV4l!r00E6YJpuKb7thEBc-TL9>?NQr;I?xR9V=dpn(zR8Ea& zP)$c3(a@D8BwG!ifB;g3o)3Ij#hqY!#KgsuQjRt!99wfg+RNOCNq1vgYrY`BZY6_T zw@I?HS_4q>X6^xNZEdYW|C_wEm?0}7RZ}6(3KHff zFj6)k5_Z-WhN-0Sa%F#4bgSn4n{l!F@OJc@Hv&sz5SDJg)&4Zjq^*&H4lvcAm~Uhp zWO4amh=mi0oweWsLZs5@$>N3M2U(Y z>XQ%fO5*XimnR+gr{gGSOE?J5bs)Zgkh}D_s-^}l{AJNI0TGdjkw8>fYR^kpdI{di zmaQg9E>+homTqBxD1>ln;h}&qU0oH@h-Q7 zZue@rzecRWlHS;kcb`yKy?7$C^nwE@rXP0an>=jwa8LI23ZP?y?YG&re%M@d#{^Su z6xQJcA4JFdOypv#s=_2;z3*-0y}GXQf^N-|C;`tDt|Y7;dU^UK{MC6>a(j;!dtE5y zPJa*nZmWB97kVu%v{x=m)LDPZcdN)8Eia9r1YPu^1B_J}j)+HQnA4MAsEBUJ$_G}2sHmtD z8ta2T?zKN7C{Bk_wh?WV)bj;i7h>%;v19BAYisL-F?z=XcFB9^3O6Mva_o*4V)}Ji zP2-fcu>}=}lo6g3lAXr*SO4YU;1F?Vu&~m$Qq@=Wx`Xri={eHIi^Aw7Jfm~kJl)*B zST$^kRL;C8W=0evpH%A7lvP%jc$R!v>7+~iT$k}1_=SuP8_|gF5*%JAS}8trdJBg= z&lXEMYz9`bx!#7peI1F=8}-hpiY4XI(R4cE_3>V0gAlopK90UStpHzu#!ADnne64` z7*KD2zn|{~vOiCDT>M~x719kkTBg`7(!RBc-m&i<%c^tv8eUyfdThNoU^|?*y0-Q% zHMN*K<(Qx2k(jD791M4VOin|?1;NR!2bWqac+t4Yx4QaDp+1Rku7DOc#g2$RulNJc zP0Q($2VNbO{B@rmf~wdiAC%p5#OX=H_OeG8CJr1(JUnloxXi(mGSWD35n$bCuRWVA zB69duP!SF*6g3bsSp0yLfuUg1?Ax`(bM_`lQR3D0FS<|2dgm6u#edu7H0vCH#adk~ zjEIP8Q!ktn5)^W|M5Lla>-o9IaBo(pa{aPr%ACfZ$e#$2M5T${RW1g-~^0@Adn$9!}e~QqxuLw^+>X@MOrsjS9<^} z!N$~Nz&1-Kb?s>8D9(&UR(ICAc`thZOBp!5q7;(5Y-@ZxP9wec?T>7Kbqx&}5RQS0 zQU*xP_V(@d(et37AYHu2Bfv|m{sYAicCK?eT?lJnpwGw_ujzK4N`cuQQ2NNYJdKK*$4YV{|{ z>`7Qy*cU1ll?&azri!%aimeHZJ&;OPd*sg@76xt!vLI8RxZ-}CZqR~<`NP;*SbF2m zmXCYtZlEtm-^Rs8xUlE7$iE;1)vBa+bUqxoKm0ztrzy5JBfUAW(IY$E`xA7$KAOh% z`19^NH0XGTZmjMIc@yyq88|4rav*@pmJSaLH`J>zRnk^Jh&)O&O-vxj_G6I;yOe#H z$tjHec}Zv_MW1O29s(3jZM+8VMT0ZD$v$PO<@vtIGV-#@coc-34E#4Eh4|1#{PSo6 ze7qtoGIBDLAHEs>h$`#YNEk5Xyx`LCLd7bO@=a(oPMBE;I9O5|3Nxc92<5iP86$EU zZ@m$%X*X$;T*rj=MHvC9k|<28g$hkBif5|R-6J*UMyHf=mOQc`SbwE<8N+~f2Ic1F&dDSLKdSpo(fk6dL2%sXdS6YUx;?bAfyQ6alFPa?#{KQc zM{{tayQV)FFM25zs{almah^1aH@a@1yb0-hfHR_`-A!Kawxw)iQ)C58@z(`H1UCk- zYR~|M98>40yb#l=e~QpPRq=H>#&{p=kbIL}&Wc+K6klOdh`&W6T7as)rj&F&@cNi2 z4;0Q-Y%<)G=3$&Dl`;WW$D0$e_-*Y5V@(7p^eBNGYdwThVavb-JI4?VJUPH|<(d-m zyM8C^_EHbceoiSPk23CNaId=ZagNdD)0)`HRgLoYB_0)<-PZia5*jFt)UNMTuYo8A z%&am%Y~-3MFYdVN9;9Ygjt3<};tSuMZV?Ghg`y6nA%RKv8!9!|j-07U!2VdDrUP14 zJT3UE{xx;U>-oR1v#XoFR$A*;%DZKcx(1p0_@;IhO#%mnoNc8VRd=gCX?2b>LPI&Z zkk9YfjYm-4;h7)TAhTUd;J+7${ z)`;quclGjGJ!LEoZZRi0Kmk!eb1h=iyXH}y;O8-UcY<$9%1S8II1|oyvm4KU^{rLY z*%IlLbWqcoo`<;#YGEu6y-rss2NcEc3KsjBV}ux*96?%2fQ4m7@gXI|4^Q)o7xuSSNDaOJ6!%^B*G%@^FFu3f=dC}uk1kl zheQ4SA7FrE4~#!?e!YO{0W~$J)f948g4(AXe|Jd2_j$PwK$u~bY0Ho> z%XO4$>D$7HnR@1!*B#_10Xj1<*ud6#V~v0kVxFZEM};02ci)%xDY1Mpp4YF-(MgH` zEf<$^gf36}pGaKgwlKz)9Unt9s8l;=Feu?Jmqdo45wG|lIZm$>QbSzEcU!U24eDIt ze5V~w;9eE=_3yh3b(v8T(1IB~i_*ndxE1|>i_f_uJ(G!wi0bOQ*-{h4FsffMl27&2~7d0@DQBXJ|Dc2&`pdKAaR2hYP{F7isM`%}4VGCfg%WSahP ze{~eBlzIIO2^H_NUeUsW88`&E?u=)y+y@kaWex+>&;@|SQIV1Tz8{L&6nNd)@3{E* z&Ki~!4CG29qMy?2C5|MjB+wV|2Ukp{%k>>rv?+CN6_tDdwr}9@oA$zo>zU|g+J$TnBDJPwkp)GP{r1cc zJ9>+IIS(Su{EeBkZYU>^hWN}s^B!k(e^=fIOLxR|S$4%RcGS8yX?(?yVblDv!C)hMpv@dz840OMk4e$2Lj~`hY z#+=5-3A5&`%+_$_dp3_~cBiNH(f1@2fj~zJT^7UCYBPLWRb9=2AfT7g-Y-YKcUJ-t z0tg1k-C(zZRZUMwm>Hw$>Oq(o7Tv^$+oc{n*Oe7=75SA^4rwPigeD#V9s0s^m8^-lX; zy_S(Z<@sB1^dbDWyN3s`Sxbs=?X!c^qD-O6i|d4- z%-P_7QPn$=h`caZ6#Io3Isz7^71c_T{~X;Z3jZ*0Y6HI_D7#94V*+{%jEv?$UICH~ zaO(sQENyQ3E_dU(aasu2oK;r-faQA4Y(@e?!v$e7|jW)~`R6&1;Fz#; zzON6M;FXq|@<3fklpmRbmJRv7;9eK_U@nAhu!P)6@eKE+{#A0M9&- zqlcNX%2$Yjl(DS2YxB>u^F2f&EsGJ8Nj3!1zbb-p& zzF{D^bbS+ye1~ea2PWYqAVakdz(p924J26pZP){iFO#safMhr-JRk;QWF4>+u+WN( zWN&L5Rb*bU7&H7{z_Kfb%&Ff7j)1n@*todh!=dwyI;(GAm33!5jsCfa$ES=2rq%DM z%nH-ncUE0j<6m9^(@mH;TaST!>YLgkX5?s!5%z^DIevyqAlT{v32_2e@v2&ROWh9Z zH=bRzIxAv-mdLQNsfpw{9^HC6I7OtMr7Z7icM=?oX z@*l?!1OGT{Rs)f_LMJ#|V*Y)8ZZ7y{sVf%vi^6;uGHFomd8%);o0Ajw0ucF$UbP#R z9Psk+)K*pfLfHl{^Q0CPR9AcsckDwyU7ud%hA&51~xnQw!8Xsxy zRoB&lcOAtElmaN*&0^cM7p3+1~wGMW0+XR3*?ai$MECC zIKwtW9=ByvcdM(%IZh-?B$_ygL*jSepBBxBJCXPft$bbJVf&Mu$I8+dL z5q7%1Zil`%6J7W06(yaFe{qyfEU>L8{kE~P8es#a2q0P0K)rh-O6gzhgIA(HPK*^; zD2u9ITp)i0nneX$*n@iTl~v85lrOHuxv!2&H0>b*pCzZy=hlfHfsMCkHsrLA})0tO9=&97e;V z&QRV~vcyxC53P{rR6CadtGgnZ|0J0QTBzbGu5_kg+q^xE3P(PDP z$;imS;@J=RnDRtbwUv56*i@~0bA6{q4f}u%+f;2=QMC(y);j>6N5y|9QR7amV9 zySukX@TLcVmdbG$sG2fymb`{L#vFU6maf2FK3BK)p8!!CV7Y@#r>@?l5Ax=cCFU&x;gtm89n-d}*7B!ajR2Uv8aE)|VFcP6TKSW|jWo<413Vv=P`rd zT;E*pU7EJI(S9ZSnmfpYa}*MpD_wz*V2Qrx(CMRJzI?GmXd;-xoF-R%S-ih{lRJhodj4hw^$rD%fwea}6)=VO3$fp9 z6Fy5n>4+`*_|dhR`8+1JJ_6;KiSD>*`Ex-v2{|1`^OKgpD=YcbAp7!I^G<#DPB!3@ zR2s=4&m>$7g?g}Bs1*;b;tP35wp;}o8U~iikQ@4x+dKTKB@U@rD&aP22byH{w%hX! zODk;_I&kuN$-PMa^<%SO36@-w&V;I}@4x5~qu)lgMzxN8KInarjd@_POpcRJY0XNf z!kUTX3fbqq!I>iX@PKq8Eh;PQ7MbYd4CT#(R=dMOGujb8dq{iO8ecAj4}~j*wVfW& zuH;sS(D0$tPG7qh*G!weML5}>Scy>LDClX)MGgIFf6Xhw7*Q4Q`ome=3>DqdIivbCFbSvZL?Og9dpSz3Krq=$UF11 z5LB>lx3xFOq=pbYXC(vTw<=(2-HZ8JeHhd2T@~$I{0~R=#|3~_HG4};j~=Gb%p(2l zLz(>h=_ZgPZ-W!rud)4G^-g(lmWd7@rsZ=cMKVAb%^6e62x%t?#K57=g|@IhcmW`* zAOyUkpctY}!@wduOXidmNM)J$v`?u&g=Po1bUCO(+Tj9KM^zPT7F#p-RCb(syN4Tr z)x2IJAE!_i)QJv`UuKEM{R|Uv7+-&98hG!8Y>pKh8JI2Ep0D%Y?s-lF5fMqFg+5BJ z`viT{*J;Zclt3p>_JHbq)$ zHHp#MtEkms&(^9PwCMM%sMMyhT1`hnwN(xM-Oleh=Q+<`kep9)fA07Dx~|uSG{z01 zG5=Oq!sB=Ypl3KOy*MI=ZqrEHeTv?hUI$Q`eL^Bxf&gjl-6~?N8 z9(VKz1XuI3=}L_*djh9bsAaj9%c?(3$jmh~y@I*UW9cZSivxctXKv?GHm# z6WHA!l-jwwK&vi|$|)Iu*p}BvR7|&|*viwNFl(ErhUF?ff{M@D0pCq6kaeXM&4M>WzWlca&xfY$|(T zZM#rq{SD3en80a8Pz;1kHdL|RoCh>6scmX zo@^~;1h)UGG>AGQ)uXHW%AURci?brBJ=ems2%3IX3E>;1%W}DfooD&N(1tWqzZ5Gv zy*W)U*xlK9H#$1J`eP1CC(&rGnG@te=QyhGh-@OGsr&|-0=tZ#KTS(@o26trxQ4t* zpLM3?i1!ZhW$Z8+My255D7acl&z_rgXhRC|e2bSbbL5Od-GIY-V*z!V-oFSZ1Z;;! zcxZmr43nxrZAK*D`LzbemPa0(R?I(MH3W^Xu9lh8UN4!tE&{d#fn9bs*wgsgZJDA^ zi`qbO<4N$~sl1z<|D%@WRDBRsT1G`He@R2I;>*elyFRf4QafD5$mBH<(mE``8by?u zc4oIZRvVL3YBT5G(GkaZh53&IbB+yb+n3;WEYvmtUB61}4?%Bku$5`Y7WP=GY-vXR zWOXT*E!D|Nt1>L5bnZ~S3luAdx*(5-iwK*B4kTNV>wbQJ-tYd!za}TO3=R(Bgkb~a zW4Abz(~HXTEc+n^H%b52S^tekJTmzTtp)1`B6wY1&P-F1q#sQB(zQuz3cp`vhud1LGwl5nxzH|}Mh>Y5xiANK>L_x$8{v(lge2-C%%M)RfeNTg z71z5?Xoa0}T;q$_U!|d}_qk?rrhs1jOcnZR_$AD^CB0UzCi(`L{Sd)39$JmxvA0i7 z%{j|rqnf~V{AHpzT5hCZ|4@!Pfs&;8+@c4Ul0+tGt?f2 z_@=9U*~euF)n>;DhxvRk=mqoSye4o?d!;74zrRYCqT59)C|Sqx=f{Glh{C!kT(cY* zLAXSs%Ym47&Kf3j-Np;0+U6o+LIhpj`^ncSSJ`onmzw|Y3~XxcE~Gl z97QRF*h@%c-O$4DLUYI|D^41xQcv#tn{Z~1jgxQS#((V)>|o#drtGkc8hY7`)}?3~ zgJk+dshd9e-LTd%hYu)|&_sg45wU5<*m=XEyog{Kuz4uiVnHC~O=Pv$5kGwz9(XyK zLR)WFlW;)UIr3cdBo$g@pSk~9YJpqv(#J z-uaPEem`PdD21l?70P-HcU*3;|Afk-yy0AHZMX-@JZQ^4CCrPEgbRj_@qC85l>MJR z#k4Gad{E0w<&vPIWQ-WeaI*0^<2f$2q*bLhC2)r&e;xe`(4cORg%$7t8%YvqSPZD9sNTo2XsrShCD#DNvVEA2;XSg-5nfT`_!gGFktn`#B zMG#t5fy1V(bBJ7h?m~m&*FAY^mR3{=zcj`adSHy?x^Y8=%&2anY&4?5ji)f3^lzbP zN;mEgQY_!PLI*oRA4Et+VKMTsZLZUT_y6t|yCtWb%xsSs3vhtgLK1W6gFGOXwZdB%Bq**9@>T{A9z!oJgEtHW#TOhJ*Ev~@ zQLvk;8W}az}~eF{ahQ1QB^P z!dr0Pg#LMtix@un?WZA7t^l*}@Alira63CY=ly~P$K#GaEsw{t5NM6apa1IqIbLkP zKKn)Ed2jS*X`N>cgGY?}_D<-4K2E(dw zPwF#E>la1(R26zb{ew|*APT2gJKDH$VPeL>sM@!WoAA!%vA~7DcbRpB}q>;8Vgw7Zsq#MN6(*XO=P{h zX)Oa4p`7AV4S%Lm^9!63FGfnc*n#Gb^>l6SxrijGq%R*nejLGLmXkUux;mRI&5`#6 zM^}2NaW1=aF$3DzdI{v5923C)WYF{S$>w~oCUZHvcHHp2ot*oBL1eMZ!W7tyd?8&Z zO7rZ=CVEnda%`qGmSkX(91|C(<(>r+djR8;qVUVDowzP-*Nj2k52uZLcUV=l@@H_d z-PU|EqP}awkMw@UDyW%xM!O`0wn-kqb38meD}xDFJd%K3K_EZz;4Z1bXQrnk_se+t z5>OEl$_#%1jEJ1;1mze^OiWR-xMESZ41o(Ky@x=;i2U?c($d^>Ag=gWo`G!M9<-=D zTvTISL2@qW>WXoGu#`~&M4842w9CWsR@_-h3kwS~HxT=Cpfnq`rusOE_bRvxw>7+$ z%5l&E=`?Y)`-=#yOm=zsG0+&DS(5RfcZcv!p0+ za(@9I-2Uemfhca88APb%dSUyK`uzlVn=+3*psfGD4K;Bq-tW!Bs@QhmTR?w;D9@;g z?JmeUYR4TY?jF~2Vfm|AZ6vnT&j$v62F?dEK!0wf!+$0@?j+W2o)bJ>nM6S%QQ!|b zBd!}yRR_uMJsseYjisFE>-6-Mu`~NcKqCUf!nq1;eQh%_L*Ck%CQZUAH#fKY$d`s+ zG-oP-y34dhC(4DIfY?YdF^0dKc)rClnyS^|GXYQ4l*n3Q-xuq7&KWN1Vf92=68n(i@|~g#yhNu^d>E?9qHc4-hK|`!}Ffcn498{4pB72 z^SyWeT)Y(xqO&U8@N&dBUgC~dCut;3uiC9M$V?r2@Y*;goZy>N{N5}EbvNMgm+{H1KdvE&t zdA&2cdwY+X=*q7o92FMWKGnwxUTvc5&Ba7_gU%Ow12&^uw_ZGcEFPsl-ta66h)$ru0Xzw~(KtUV7MgR298Trh+ru58axAWHfmttx zJmY^R{70>q2PJgF&1-}I(EuTQ8cp_L02$I#x7yDo^*n0PdpJB9^4C15gU45j<6vp4S z6C}wU^Vd_`ZZ%^t?3ij$67}@=gtvW57=7Mg@bbljuhLErgyh!3Zios@ca;RuB{m-y zZhq)hD$Euw0g?W{woJ8Wcbn%{=sNO2G`EmyxwT{XKP^igtf3fQK&OK6R7q%q%_VMH zUHm&LHO?$qjhSNNbJ|s(i;F8&mWyCwY8n`SIn{s!1+9K~>#$ROY|PA%Jk<$CK=E#2 zK_wb+fAR+G0NZ=ZLil}SCU>`~1QYd1-%$^T2Eu?Z{4FzihXv6B=i~e6qQ5^mEz_{F z_9)w&_Wh8yv@xcQsQBA_p*gf~1~N16KR>eE-P?Pm51r!)e7>aP87-$21I&;Th3!9u zed%gYq=V*{M|4=T zOgEw2)9liv#3in&%MIDtfJDb%4$F#wgF3_T98bu{q%Phwy@lwJAUMLN%ihoj^U{nxPevu5Evh((h@JZVCKv3t$KT(%ZEw-glJ>(2rAa zSZqL5BuPEVn<&(MF1c$?toSF|u(o92^maV*&Sn~TnTWg|jwK(XR#_C2dj zIVi--7_bd#D%^-A#+G|l^&UuV?2sC$V3gp^+x|M=p1i*9n&m-4# + +**Booty Shifter** is a frequency shifter inspired by the Moog/Bode frequency shifter module. + +![booty shifter image](./booty-shifter.png) + +The name "Booty Shifter" is a nod to the classic analog module, as well as to a black cat named Booty. + +Booty Shifter will take an audio input and shift the frequencies up or down. This is not like a pitch shift where harmonics will remain in tune; it is an absolute frequency shift in Hz, so in general **harmonics will go way out of tune.** It is similar to a ring-modulator, but less extreme and more versatile. + +## Getting good sounds from Booty Shifter + +Feed in music and shift the frequency a good amount. + +Feed in **speech or radio** and shift it. + +Feed the CV from a **sequencer** to sequence the mayhem. + +Shift **drums** up or down a little bit to re-tune them without the usual pitch-shifting artifacts. + +Small shifts in conjunction with delays can make a chorus-like effect to thicken music. + +## Inputs and outputs + +* **IN** is the audio input. +* **CV** is the pitch shift control voltage. -5V will give minimum shift, +5 will give maximum. +* **DN** is the down-shifted output. +* **UP** is the up-shifted output. + +## Controls + +**RANGE** sets the total shift range in Hz. For example, the 50 Hz setting means that the minimum shift is 50 Hz down, and the maximum is 50 Hz up. + +Range value **Exp is different**. Here minimum shift is 2 Hz, maximum is 2 kHz, with an exponential response. As of version 0.6.2 the response is an accurate 1 Volt per Octave. + +Shift **AMT** is added to the control voltage, with a range of -5..5. + +## Oddities and limitations + +If you shift the frequency up too far, it will alias. There is no anti-aliasing, so if the highest input frequency + shift amount > sample_rate / 2, you will get aliasing. Of course the Bode analog original did not alias. + +If you shift the input down a lot, frequencies will go **below zero and wrap around**. Taken far enough this will completely **reverse the spectrum** of the input. This was a prized feature of the Bode original. + +As you shift the input down, you may start to generate a lot of subsonic energy. A **High Pass filter** may clean this up. + +The down shift **frequency fold-over**, while true to the original, does cause problems when trying to pitch drum tracks down a lot. High pass filtering the input before it is down-shifted can control this. diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/smooth.png b/vst2_bin/plugins/squinkylabs-plug1/docs/smooth.png new file mode 100644 index 0000000000000000000000000000000000000000..77c0b1781771ffeb29de9e7b6bbfb053735f70e6 GIT binary patch literal 9409 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 literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/thread-booster.png b/vst2_bin/plugins/squinkylabs-plug1/docs/thread-booster.png new file mode 100644 index 0000000000000000000000000000000000000000..64a5db75b2599fa8bf1e7282908573c022b488a3 GIT binary patch literal 10152 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 Dy^vhZ literal 0 HcmV?d00001 diff --git a/vst2_bin/plugins/squinkylabs-plug1/docs/vco-optimization.md b/vst2_bin/plugins/squinkylabs-plug1/docs/vco-optimization.md new file mode 100644 index 00000000..3eccca33 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/docs/vco-optimization.md @@ -0,0 +1,72 @@ +# Notes about the creation of Functional VCO-1 + +## About the Original + +Fundamental VCO-1 is a very high quality, excellent sounding VCO. It does exactly what it claims to do with very little digital artifacts. VCO-1 is a very popular module, but it does use a lot of CPU. For this reason it seemed like a good candidate for a CPU diet. VCV users continue to complain about popping and clicking with large patches, so we hope improvements to this popular module will help. + +Fundamental VCO-1 uses 16X oversampling to generate standard waveforms, in both "analog" and "digital" versions. The oversampling keeps the aliasing low, allows hard and soft sync with low aliasing, and suppresses aliasing from audio rate modulation. + +As such, Fundamental VCO-1 is a very good substitute for an analog VCO. The only down-side is that the 16X oversampling increases the CPU usage dramatically. + +In revamping this VCO, we wanted to try as much as possible to preserve the sound exactly like the original. We did not add any new features, or try to make anything "better". And when we put the code on a diet we did not want to lower the sound quality of this workhorse module. + +## Initial Measurements + +It is difficult to accurately measure the CPU usage of a VCV module. Since version 0.6 there have been CPU meters which are useful for getting an overall picture of CPU usage; but the CPU meters do not enable stable, accurate, and repeatable measurements. + +So we more or less run the plugins in an isolated test framework. This lets us get precise measurements. The down side is that the isolated system is different from running in VCV, and the numbers won’t correlate exactly. + +We use an arbitrary scale for our measurements, where "100" means that the plugin under test seems to be using 1% of the available CPU on one core of our quite old Intel Core i5 Windows-7 computer. + +Here are the initial measurements we took before any optimizations were done, along with some Squinky Labs modules for reference: + +* Fundamental VCO-1, all outputs patched, digital: 798 +* Fundamental VCO-1, saw only, digital: 489 +* Fundamental VCO-1, saw only, analog: 270 +* SL Formants: 84.1 +* SL Growler: 50.9 +* SL Chopper: 14.9 +* SL Booty Shifter: 11.2 +* SL Colors: 11.6 + +Fundamental VCO-1 uses a *lot* of CPU. Since it is so heavy in its CPU usage, we thought it would be easy to make it much faster. But it was not as easy as we had hoped. + +## General approach to optimization + +Every theory must be validated by experiment. So we look at the code, formulate a theory, throw together a simplified implementation of the theory, and compare before and after measurements. + +If the CPU usage goes down a lot, the experiment is a success, and we try to make a full implementation that preserves the drop in CPU usage without compromising the quality. + +Then repeat this process over and over until done. + +## What we did to Fundamental VCO-1 + +VCO-1 already had some optimization. Although the waveform generation runs for all waveforms all the time, the decimation filters are only run for outputs that are connected. The decimation filters are the same ones used by the VCV Rack audio engine, so we assume they are linear phase FIR filters, as is customary for high quality sample rate conversion. + +But, since this is an oversampling VCO, the waveform generation is running at 16X sample rate. Any extra work in this "inner loop" is going to be magnified by 16. + +That said, our experiments showed few surprises. + +* Since cosf() is called all the time in the 16X waveform generation loop, it was a no-brainer to replace it with the same sin lookup table we use in most of our modules. Likewise, we made sure that the cosf lookup is only called if the SIN output is connected. +* The powf() call is also slow and it was worthwhile getting rid of the powf call, although the gain was not enormous since powf is only called once per sample. +* We refactored the inner loop to make sure that the waveform generation is only done for waveforms whose output is patched. +* The decimation filters use a lot of CPU, so we replaced the stock ones with simple 6-pole butterworth lowpass filters. +* It would of course save CPU to reduce the oversampling rate, but we did not want to decrease the quality. + +Again, most of the software required was already in the code-base for our other modules. The one thing that was difficult here was devising test software to measure the aliasing. We wanted to be sure that our faster decimation filters were not increasing the level of aliasing. While this new alias test is not perfect, it did give us confidence that we were not increasing the aliasing with our substituted filters. + +## Results + +Before and after: + +* Fundamental VCO-1, all outputs patched, digital: 798 -> 187.8 (X4.2) +* Fundamental VCO-1, saw only, digital: 489 -> 83.7 (X5.8) +* Fundamental VCO-1, saw only, analog: 270 -> 83 (X2.3) + +## Addendum for EV3 VCO + +When we looked at EvenVCO, we found many of the same issues as we found in Fundamental VCO-1. The same extremely slow trig and exponential functions that we replaced with lookup tables. Work was being done for waveforms that weren't patched. + +But some other things were different. Since EvenVCO is a MinBLEP VCO, it does not need anti-alias filters (as such). The existing MinBLEP code is quite efficient. But in the VCO we did achieve significant speedup by getting rid of the one routine that generates all the waves, and instead have dedicated routines for each waveform. This eliminated a lot of conditional branching. + +While EvenVCO is already quite efficient, it was still worthwhile to make it faster. We believe out triple version uses about the same CPU as a single instance of EvenVCO. \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/gfx/ThreadBoost.xd b/vst2_bin/plugins/squinkylabs-plug1/gfx/ThreadBoost.xd deleted file mode 100644 index 2f9fcbfde53dc07563f55f766d56aab22360103a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22521 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 N=K)|)Zv8=}`XAl-kfQ(q diff --git a/vst2_bin/plugins/squinkylabs-plug1/gfx/booty-panel-design.xd b/vst2_bin/plugins/squinkylabs-plug1/gfx/booty-panel-design.xd deleted file mode 100644 index 80da6266be2cd59c04b08efe37a9fe7a0b445ee4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46513 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

jyW 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 TW@Q6O^8(>t;G*t%8$mn(ffR)O diff --git a/vst2_bin/plugins/squinkylabs-plug1/gfx/chopper-panel-design.xd b/vst2_bin/plugins/squinkylabs-plug1/gfx/chopper-panel-design.xd deleted file mode 100644 index f27a2e25cee10d183ee2cd26ff6120da55ac5e50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17208 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 ND;qG=2&wC*{{`1STbTd= diff --git a/vst2_bin/plugins/squinkylabs-plug1/gfx/formants_panel.xd b/vst2_bin/plugins/squinkylabs-plug1/gfx/formants_panel.xd deleted file mode 100644 index 53c45a4f47de13968d3ebdecb846a31237e71c1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34101 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 diff --git a/vst2_bin/plugins/squinkylabs-plug1/gfx/noun_938401.svg b/vst2_bin/plugins/squinkylabs-plug1/gfx/noun_938401.svg deleted file mode 100644 index 8e711ed4..00000000 --- a/vst2_bin/plugins/squinkylabs-plug1/gfx/noun_938401.svg +++ /dev/null @@ -1,4 +0,0 @@ - \ No newline at end of file diff --git a/vst2_bin/plugins/squinkylabs-plug1/gfx/vocal-anim-panel.xd b/vst2_bin/plugins/squinkylabs-plug1/gfx/vocal-anim-panel.xd deleted file mode 100644 index ddd12e99d7fc7e2ad1f210dbe081c62576da96ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89458 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�W`$EF#N?CCF=k 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

o_ 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 diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/Blue30.svg b/vst2_bin/plugins/squinkylabs-plug1/res/Blue30.svg new file mode 100644 index 00000000..ce7b8ad3 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/Blue30.svg @@ -0,0 +1,9 @@ + + Blue302 + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/BluePush_0.svg b/vst2_bin/plugins/squinkylabs-plug1/res/BluePush_0.svg new file mode 100644 index 00000000..7a292df1 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/BluePush_0.svg @@ -0,0 +1,10 @@ + + BluePush_0 + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/BluePush_1.svg b/vst2_bin/plugins/squinkylabs-plug1/res/BluePush_1.svg new file mode 100644 index 00000000..30e3aa9c --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/BluePush_1.svg @@ -0,0 +1,10 @@ + + BluePush_1 + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/BlueTrimmer.svg b/vst2_bin/plugins/squinkylabs-plug1/res/BlueTrimmer.svg new file mode 100644 index 00000000..81aefcd2 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/BlueTrimmer.svg @@ -0,0 +1,7 @@ + + TrimBlueOrig2 + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_0.svg b/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_0.svg new file mode 100644 index 00000000..946b5d2c --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_0.svg @@ -0,0 +1,13 @@ + + Artboard 1 + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_1.svg b/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_1.svg new file mode 100644 index 00000000..b25bbfe9 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_1.svg @@ -0,0 +1,13 @@ + + Artboard 1 + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_2.svg b/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_2.svg new file mode 100644 index 00000000..3f314d45 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/NKKSmall_2.svg @@ -0,0 +1,13 @@ + + Artboard 1 + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/blank_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/blank_panel.svg index 4e30c038..9b9869fc 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/res/blank_panel.svg +++ b/vst2_bin/plugins/squinkylabs-plug1/res/blank_panel.svg @@ -1,16 +1,20 @@ - + - + panel-6b-flat - + - - + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/chb_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/chb_panel.svg new file mode 100644 index 00000000..13269abf --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/chb_panel.svg @@ -0,0 +1,32 @@ + + cb_panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/ev3_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/ev3_panel.svg new file mode 100644 index 00000000..5df1b04a --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/ev3_panel.svg @@ -0,0 +1,26 @@ + + ev3-3-ghost + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/formants_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/formants_panel.svg index de591576..6c24b440 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/res/formants_panel.svg +++ b/vst2_bin/plugins/squinkylabs-plug1/res/formants_panel.svg @@ -7,7 +7,10 @@ formants_panel - + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/fun_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/fun_panel.svg new file mode 100644 index 00000000..02625237 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/fun_panel.svg @@ -0,0 +1,52 @@ + + + + + + + fun-panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/gray.svg b/vst2_bin/plugins/squinkylabs-plug1/res/gray.svg new file mode 100644 index 00000000..4688975e --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/gray.svg @@ -0,0 +1,30 @@ + + gray-narrow-ghost + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/lfn_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/lfn_panel.svg new file mode 100644 index 00000000..8ac5fbdd --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/lfn_panel.svg @@ -0,0 +1,42 @@ + + + + + + + lfn_panel + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave-1.svg b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave-1.svg new file mode 100644 index 00000000..266745c4 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave-1.svg @@ -0,0 +1,4 @@ + + Artboard 1 + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave.svg b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave.svg new file mode 100644 index 00000000..9fc992ac --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave.svg @@ -0,0 +1,5 @@ + + ramp3 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on.svg b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on.svg new file mode 100644 index 00000000..127e3091 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on.svg @@ -0,0 +1,5 @@ + + ramp3 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on1.svg b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on1.svg new file mode 100644 index 00000000..027e6318 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/saw_wave_on1.svg @@ -0,0 +1,4 @@ + + Artboard 1 + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/shaper.svg b/vst2_bin/plugins/squinkylabs-plug1/res/shaper.svg new file mode 100644 index 00000000..9d372b59 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/shaper.svg @@ -0,0 +1,35 @@ + + shaper2-ghost-01 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/thread_booster_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/thread_booster_panel.svg index c73c52ef..07f92a01 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/res/thread_booster_panel.svg +++ b/vst2_bin/plugins/squinkylabs-plug1/res/thread_booster_panel.svg @@ -7,7 +7,11 @@ thread_booster_panel + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/trem_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/trem_panel.svg index eb70aaa7..abff6e93 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/res/trem_panel.svg +++ b/vst2_bin/plugins/squinkylabs-plug1/res/trem_panel.svg @@ -7,10 +7,9 @@ trem_panel - - - - + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/vocal_animator_panel.svg b/vst2_bin/plugins/squinkylabs-plug1/res/vocal_animator_panel.svg index a567e16f..1b2cafb4 100644 --- a/vst2_bin/plugins/squinkylabs-plug1/res/vocal_animator_panel.svg +++ b/vst2_bin/plugins/squinkylabs-plug1/res/vocal_animator_panel.svg @@ -7,9 +7,12 @@ vocal_animator_panel - - - + + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-01.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-01.svg new file mode 100644 index 00000000..c1c091c5 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-01.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-02.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-02.svg new file mode 100644 index 00000000..be844fe0 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-02.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-03.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-03.svg new file mode 100644 index 00000000..6f855985 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-03.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-04.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-04.svg new file mode 100644 index 00000000..f613f355 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-04.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-05.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-05.svg new file mode 100644 index 00000000..3abdedf7 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-05.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-06.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-06.svg new file mode 100644 index 00000000..0eb0f217 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-06.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-07.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-07.svg new file mode 100644 index 00000000..81284e26 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-07.svg @@ -0,0 +1,4 @@ + + waveforms-6 + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-08.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-08.svg new file mode 100644 index 00000000..21798e91 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-08.svg @@ -0,0 +1,4 @@ + + waveforms-6 + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-09.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-09.svg new file mode 100644 index 00000000..0f9cedf7 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-09.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-10.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-10.svg new file mode 100644 index 00000000..e606a0d2 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-10.svg @@ -0,0 +1,5 @@ + + waveforms-6 + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-11.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-11.svg new file mode 100644 index 00000000..b591d4e5 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-11.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + + diff --git a/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-12.svg b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-12.svg new file mode 100644 index 00000000..ee663399 --- /dev/null +++ b/vst2_bin/plugins/squinkylabs-plug1/res/waveforms-6-12.svg @@ -0,0 +1,7 @@ + + waveforms-6 + + + + +