Line data Source code
1 : #pragma once
2 :
3 : #include "audio/engine/audio_engine.h"
4 : #include "audio/effects/effect.h"
5 : #include "gui/commands/command_base.h"
6 : #include <vector>
7 :
8 : namespace Amplitron {
9 :
10 : /**
11 : * @brief Command that resets all parameters of all effects to their default
12 : * values.
13 : *
14 : * Captures the current parameter values before resetting so that undo() can
15 : * restore them.
16 : */
17 : class ResetAllCommand : public Command {
18 : public:
19 32 : explicit ResetAllCommand(AudioEngine &engine) : engine_(engine) {
20 24 : auto &effects = engine_.effects();
21 51 : for (auto &fx : effects) {
22 27 : std::vector<float> values;
23 111 : for (const auto ¶m : fx->params()) {
24 84 : values.push_back(param.value);
25 : }
26 27 : saved_values_.push_back(values);
27 27 : saved_enabled_.push_back(fx->is_enabled());
28 27 : }
29 32 : }
30 :
31 30 : bool execute() override {
32 30 : auto &effects = engine_.effects();
33 63 : for (auto &fx : effects) {
34 33 : fx->reset(); // Resets internal DSP state
35 33 : auto &p = fx->params();
36 135 : for (auto ¶m : p) {
37 102 : param.value = param.default_val;
38 : }
39 : }
40 30 : return true;
41 : }
42 :
43 15 : void undo() override {
44 15 : auto &effects = engine_.effects();
45 33 : for (size_t i = 0; i < effects.size() && i < saved_values_.size(); ++i) {
46 18 : auto &fx = effects[i];
47 18 : auto &p = fx->params();
48 18 : auto &values = saved_values_[i];
49 75 : for (size_t j = 0; j < p.size() && j < values.size(); ++j) {
50 57 : p[j].value = values[j];
51 19 : }
52 18 : fx->set_enabled(saved_enabled_[i]);
53 6 : }
54 15 : }
55 :
56 0 : const char *description() const override { return "Reset All"; }
57 :
58 : private:
59 : AudioEngine &engine_;
60 : std::vector<std::vector<float>> saved_values_;
61 : std::vector<bool> saved_enabled_;
62 : };
63 :
64 : } // namespace Amplitron
|