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);
35constexpr FilterMode kLastLadder = FilterMode::TRANSISTOR_24DB_DRIVE;
37constexpr int32_t kNumLPFModes = util::to_underlying(FilterMode::SVF_NOTCH) + 1;
38constexpr FilterMode lastLpfMode = FilterMode::SVF_NOTCH;
39constexpr FilterMode firstHPFMode = FilterMode::SVF_BAND;
40constexpr int32_t kFirstHPFMode = util::to_underlying(FilterMode::SVF_BAND);
41constexpr int32_t kNumHPFModes = util::to_underlying(FilterMode::OFF) - kFirstHPFMode;
42enum class FilterRoute {
48constexpr int32_t kNumFilterRoutes = util::to_underlying(FilterRoute::PARALLEL) + 1;
50FilterRoute stringToFilterRoute(
char const*
string);
51char const* filterRouteToString(FilterRoute route);
53char const* lpfTypeToString(FilterMode lpfType);
54FilterMode stringToLPFType(
char const*
string);
56namespace deluge::dsp::filter {
58enum class FilterFamily { LP_LADDER, SVF, HP_LADDER, NONE };
59constexpr uint8_t kNumFamilies = 3;
60enum LpLadderType { LP12, LP24, DRIVE };
61constexpr uint8_t kNumLadders = 3;
62enum SVFType { BAND, NOTCH };
63constexpr uint8_t kNumSVF = 2;
65constexpr uint8_t kNumHPLadders = 1;
67using specificFilterType = uint8_t;
69constexpr uint8_t numForVariant[kNumFamilies] = {kNumLadders, kNumSVF, kNumHPLadders};
74 SpecificFilter() =
default;
79 family = FilterFamily::NONE;
80 type = LpLadderType::LP12;
82 case FilterMode::HPLADDER:
83 family = FilterFamily::HP_LADDER;
86 case FilterMode::SVF_BAND:
87 family = FilterFamily::SVF;
90 case FilterMode::SVF_NOTCH:
91 family = FilterFamily::SVF;
92 type = SVFType::NOTCH;
94 case FilterMode::TRANSISTOR_12DB:
95 family = FilterFamily::LP_LADDER;
96 type = LpLadderType::LP12;
98 case FilterMode::TRANSISTOR_24DB:
99 family = FilterFamily::LP_LADDER;
100 type = LpLadderType::LP24;
102 case FilterMode::TRANSISTOR_24DB_DRIVE:
103 family = FilterFamily::LP_LADDER;
104 type = LpLadderType::DRIVE;
109 FilterFamily getFamily() {
return family; }
111 specificFilterType getType() {
return type; }
113 [[nodiscard]] l10n::String getMorphName()
const {
116 case FilterFamily::LP_LADDER:
117 return l10n::String::STRING_FOR_DRIVE;
118 case FilterFamily::HP_LADDER:
119 return l10n::String::STRING_FOR_FM;
120 case FilterFamily::SVF:
121 return l10n::String::STRING_FOR_MORPH;
123 return l10n::String::STRING_FOR_NONE;
127 SpecificFilter& incrementMode() {
128 type = (type + 1) % numForVariant[util::to_underlying(family)];
132 FilterMode toMode() {
133 int32_t baseNum = util::to_underlying(family);
135 for (int32_t i = 0; i < baseNum; i++) {
136 int32_t famNum = numForVariant[i];
139 return static_cast<FilterMode
>(base + type);
144 specificFilterType type;
SpecificFilter(FilterMode mode)
Construct a filtertype from a mode.
Definition filter_config.h:76