MCPcopy Create free account
hub / github.com/Signalsmith-Audio/reverb-example-code / MultiChannelMixedFeedback

Class MultiChannelMixedFeedback

reverb-example-code.h:78–113  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

76
77template<int channels=8>
78struct MultiChannelMixedFeedback {
79 using Array = std::array<double, channels>;
80 double delayMs = 150;
81 double decayGain = 0.85;
82
83 std::array<int, channels> delaySamples;
84 std::array<Delay, channels> delays;
85
86 void configure(double sampleRate) {
87 double delaySamplesBase = delayMs*0.001*sampleRate;
88 for (int c = 0; c < channels; ++c) {
89 double r = c*1.0/channels;
90 delaySamples[c] = std::pow(2, r)*delaySamplesBase;
91 delays[c].resize(delaySamples[c] + 1);
92 delays[c].reset();
93 }
94 }
95
96 Array process(Array input) {
97 Array delayed;
98 for (int c = 0; c < channels; ++c) {
99 delayed[c] = delays[c].read(delaySamples[c]);
100 }
101
102 // Mix using a Householder matrix
103 Array mixed = delayed;
104 Householder<double, channels>::inPlace(mixed.data());
105
106 for (int c = 0; c < channels; ++c) {
107 double sum = input[c] + mixed[c]*decayGain;
108 delays[c].write(sum);
109 }
110
111 return delayed;
112 }
113};
114
115template<int channels=8>
116struct DiffusionStep {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected