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:
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 {