20#include "definitions_cxx.hpp"
21#include "gui/l10n/strings.h"
25enum class FilterMode {
28 TRANSISTOR_24DB_DRIVE,
34constexpr int32_t kNumFilterModes = util::to_underlying(FilterMode::OFF) + 1;
35constexpr FilterMode kLastLadder = FilterMode::TRANSISTOR_24DB_DRIVE;
36constexpr int32_t kNumLPFModes = util::to_underlying(FilterMode::SVF_NOTCH) + 1;
37constexpr FilterMode lastLpfMode = FilterMode::SVF_NOTCH;
38constexpr FilterMode firstHPFMode = FilterMode::SVF_BAND;
39constexpr int32_t kFirstHPFMode = util::to_underlying(FilterMode::SVF_BAND);
40constexpr int32_t kNumHPFModes = util::to_underlying(FilterMode::OFF) - kFirstHPFMode;
41enum class FilterRoute {
47constexpr int32_t kNumFilterRoutes = util::to_underlying(FilterRoute::PARALLEL) + 1;
49FilterRoute stringToFilterRoute(
char const*
string);
50char const* filterRouteToString(FilterRoute route);
52char const* lpfTypeToString(FilterMode lpfType);
53FilterMode stringToLPFType(
char const*
string);
55namespace deluge::dsp::filter {
57enum class FilterFamily { LP_LADDER, SVF, HP_LADDER, NONE };
58constexpr uint8_t kNumFamilies = 3;
59enum LpLadderType { LP12, LP24, DRIVE };
60constexpr uint8_t kNumLadders = 3;
61enum SVFType { BAND, NOTCH };
62constexpr uint8_t kNumSVF = 2;
64constexpr uint8_t kNumHPLadders = 1;
66using specificFilterType = uint8_t;
68constexpr uint8_t numForVariant[kNumFamilies] = {kNumLadders, kNumSVF, kNumHPLadders};
73 SpecificFilter() =
default;
78 family = FilterFamily::NONE;
79 type = LpLadderType::LP12;
81 case FilterMode::HPLADDER:
82 family = FilterFamily::HP_LADDER;
85 case FilterMode::SVF_BAND:
86 family = FilterFamily::SVF;
89 case FilterMode::SVF_NOTCH:
90 family = FilterFamily::SVF;
91 type = SVFType::NOTCH;
93 case FilterMode::TRANSISTOR_12DB:
94 family = FilterFamily::LP_LADDER;
95 type = LpLadderType::LP12;
97 case FilterMode::TRANSISTOR_24DB:
98 family = FilterFamily::LP_LADDER;
99 type = LpLadderType::LP24;
101 case FilterMode::TRANSISTOR_24DB_DRIVE:
102 family = FilterFamily::LP_LADDER;
103 type = LpLadderType::DRIVE;
108 FilterFamily getFamily() {
return family; }
110 specificFilterType getType() {
return type; }
112 [[nodiscard]] l10n::String getMorphName(
bool shortName =
false)
const {
115 case FilterFamily::LP_LADDER:
116 return l10n::String::STRING_FOR_DRIVE;
117 case FilterFamily::HP_LADDER:
118 return l10n::String::STRING_FOR_FM;
119 case FilterFamily::SVF:
120 return shortName ? l10n::String::STRING_FOR_MORPH_SHORT : l10n::String::STRING_FOR_MORPH;
122 return l10n::String::STRING_FOR_NONE;
126 SpecificFilter& incrementMode() {
127 type = (type + 1) % numForVariant[util::to_underlying(family)];
131 FilterMode toMode() {
132 int32_t baseNum = util::to_underlying(family);
134 for (int32_t i = 0; i < baseNum; i++) {
135 int32_t famNum = numForVariant[i];
138 return static_cast<FilterMode
>(base + type);
143 specificFilterType type;
SpecificFilter(FilterMode mode)
Construct a filtertype from a mode.
Definition filter_config.h:75