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