1818#include " ../dsp/filter/spec_dynamic/spec_follower.hpp"
1919#include " ../dsp/filter/spec_dynamic/spec_dynamic.hpp"
2020#include " ../dsp/filter/spec_dynamic/spec_smoother.hpp"
21- #include " ../dsp/splitter/inplace_ms_splitter.hpp"
2221#include " ../dsp/fft/zldsp_fft_include.hpp"
2322
2423#include " ../chore/thread/notifier.hpp"
@@ -50,11 +49,33 @@ namespace zlp {
5049 void processMainImpl ();
5150
5251 void setFilterStatus (const size_t idx, const FilterStatus filter_status) {
53- filter_status_ [idx].store (filter_status, std::memory_order::relaxed);
52+ a_filter_status_ [idx].store (filter_status, std::memory_order::relaxed);
5453 to_update_status_.signal ();
5554 to_update_.signal ();
5655 }
5756
57+ void setLRMS (const size_t idx, const FilterStereo filter_stereo) {
58+ a_lrms_[idx].store (filter_stereo, std::memory_order::relaxed);
59+ to_update_lrms_.signal ();
60+ to_update_.signal ();
61+ }
62+
63+ auto & getEmptyFilters () {
64+ return emptys_;
65+ }
66+
67+ auto & getEmptyUpdateFlags () {
68+ return empty_update_flags_;
69+ }
70+
71+ auto & getUpdateFlag () {
72+ return to_update_;
73+ }
74+
75+ bool isSideRequired () const {
76+ return side_status_ != SideStatus::kNotRequired ;
77+ }
78+
5879 private:
5980 enum class SideStatus {
6081 kNotRequired , kLR , kMS , kLRMS
@@ -80,14 +101,27 @@ namespace zlp {
80101 juce::AudioProcessor& p_ref_;
81102 zlchore::thread::Notifier to_update_{false };
82103 // filter status
83- std::array<std::atomic<FilterStatus>, kBandNum > filter_status_ {};
84- std::array<FilterStatus, kBandNum > c_filter_status_ {};
104+ std::array<std::atomic<FilterStatus>, kBandNum > a_filter_status_ {};
105+ std::array<FilterStatus, kBandNum > filter_status_ {};
85106 std::vector<size_t > not_off_total_{};
86107 zlchore::thread::Notifier to_update_status_{false };
108+ // filter l/r/m/s
109+ std::array<std::atomic<FilterStereo>, kBandNum > a_lrms_{};
110+ std::array<FilterStereo, kBandNum > lrms_{};
111+ zlchore::thread::Notifier to_update_lrms_{false };
87112 // empty filters for holding atomic parameters
88113 std::array<zldsp::filter::Empty, kBandNum > emptys_{};
89114 std::array<zlchore::thread::Notifier, kBandNum > empty_update_flags_{};
90115 std::array<zldsp::filter::FilterParameters, kBandNum > filter_paras_{};
116+ // filter dynamic flags
117+ std::array<std::atomic<bool >, kBandNum > a_dynamic_on_{};
118+ std::array<std::atomic<bool >, kBandNum > a_dynamic_bypass_{};
119+ std::array<bool , kBandNum > dynamic_on_{};
120+ std::array<bool , kBandNum > dynamic_bypass_{};
121+ zlchore::thread::Notifier to_update_dynamic_{false };
122+
123+ // filters for calculating prototype response and biquad response
124+ std::array<zldsp::filter::Ideal<float , kFilterSize >, kBandNum > ideals_{};
91125 // spectrum processing
92126 std::array<zldsp::filter::SpecResponse<float >, kBandNum > spec_response_
93127 = make_array_of<zldsp::filter::SpecResponse<float >, kBandNum >();
@@ -120,10 +154,6 @@ namespace zlp {
120154
121155 SideStatus side_status_{SideStatus::kNotRequired };
122156
123- bool isSideRequired () const {
124- return side_status_ != SideStatus::kNotRequired ;
125- }
126-
127157 void processFrame (bool is_bypass);
128158
129159 void processSide ();
0 commit comments