BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

commit 79db30ee244e5f3da14ed2722f6173cfec3a6486
parent 2258a2ae0949108091d9dd4cbc3e74b5b48acaff
Author: Matt Demanett <matt@demanett.net>
Date:   Sat,  5 Sep 2020 18:30:14 -0400

ANALYZER-XL: add ultra+ quality mode. #116

Diffstat:
MREADME-prerelease.md | 2+-
Msrc/AnalyzerXL.cpp | 9+++++++++
Msrc/analyzer_base.cpp | 6++++++
Msrc/analyzer_base.hpp | 3++-
4 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/README-prerelease.md b/README-prerelease.md @@ -885,7 +885,7 @@ _Polyphony:_ Monophonic, with two exceptions: #### <a name="analyzerxl"></a> ANALYZER-XL -An eight-channel, 42HP version of ANALYZER, with edge-to-edge-screen design. Options corresponding to ANALYZER's panel controls are available on the context (right-click) menu. +An eight-channel, 42HP version of ANALYZER, with edge-to-edge-screen design. Options corresponding to ANALYZER's panel controls are available on the context (right-click) menu. An extra "Quality" setting, "Ultra+" is available; this uses an FFT size of 16384 (or 32768 if Rack's sample rate is 96khz or higher). _Polyphony:_ Monophonic, but if an input is polyphonic, its channels are summed, and the spectra of the summed signal is displayed. diff --git a/src/AnalyzerXL.cpp b/src/AnalyzerXL.cpp @@ -10,6 +10,7 @@ #define QUALITY_GOOD_KEY "good" #define QUALITY_HIGH_KEY "high" #define QUALITY_ULTRA_KEY "ultra" +#define QUALITY_ULTRA_ULTRA_KEY "ultra_ultra" #define WINDOW_KEY "window" #define WINDOW_NONE_KEY "none" #define WINDOW_HAMMING_KEY "hamming" @@ -40,6 +41,10 @@ json_t* AnalyzerXL::toJson(json_t* root) { json_object_set_new(root, QUALITY_KEY, json_string(QUALITY_ULTRA_KEY)); break; } + case AnalyzerCore::QUALITY_ULTRA_ULTRA: { + json_object_set_new(root, QUALITY_KEY, json_string(QUALITY_ULTRA_ULTRA_KEY)); + break; + } default:; } switch (_window) { @@ -87,6 +92,9 @@ void AnalyzerXL::fromJson(json_t* root) { else if (strcmp(s, QUALITY_ULTRA_KEY) == 0) { _quality = AnalyzerCore::QUALITY_ULTRA; } + else if (strcmp(s, QUALITY_ULTRA_ULTRA_KEY) == 0) { + _quality = AnalyzerCore::QUALITY_ULTRA_ULTRA; + } } json_t* jw = json_object_get(root, WINDOW_KEY); @@ -198,6 +206,7 @@ struct AnalyzerXLWidget : BGModuleWidget { mi->addItem(OptionMenuItem("Good", [a]() { return a->_quality == AnalyzerCore::QUALITY_GOOD; }, [a]() { a->_quality = AnalyzerCore::QUALITY_GOOD; })); mi->addItem(OptionMenuItem("High", [a]() { return a->_quality == AnalyzerCore::QUALITY_HIGH; }, [a]() { a->_quality = AnalyzerCore::QUALITY_HIGH; })); mi->addItem(OptionMenuItem("Ultra", [a]() { return a->_quality == AnalyzerCore::QUALITY_ULTRA; }, [a]() { a->_quality = AnalyzerCore::QUALITY_ULTRA; })); + mi->addItem(OptionMenuItem("Ultra+", [a]() { return a->_quality == AnalyzerCore::QUALITY_ULTRA_ULTRA; }, [a]() { a->_quality = AnalyzerCore::QUALITY_ULTRA_ULTRA; })); OptionsMenuItem::addToMenu(mi, menu); } { diff --git a/src/analyzer_base.cpp b/src/analyzer_base.cpp @@ -128,6 +128,9 @@ SpectrumAnalyzer::Size AnalyzerCore::size() { if (APP->engine->getSampleRate() < 96000.0f) { switch (_quality) { + case QUALITY_ULTRA_ULTRA: { + return SpectrumAnalyzer::SIZE_16384; + } case QUALITY_ULTRA: { return SpectrumAnalyzer::SIZE_8192; } @@ -141,6 +144,9 @@ SpectrumAnalyzer::Size AnalyzerCore::size() { } else { switch (_quality) { + case QUALITY_ULTRA_ULTRA: { + return SpectrumAnalyzer::SIZE_32768; + } case QUALITY_ULTRA: { return SpectrumAnalyzer::SIZE_16384; } diff --git a/src/analyzer_base.hpp b/src/analyzer_base.hpp @@ -72,7 +72,8 @@ struct AnalyzerCore { QUALITY_HIGH, QUALITY_GOOD, QUALITY_FIXED_16K, - QUALITY_FIXED_32K + QUALITY_FIXED_32K, + QUALITY_ULTRA_ULTRA }; enum Window {