| 134 | } |
| 135 | |
| 136 | Array process(Array input) { |
| 137 | // Delay |
| 138 | Array delayed; |
| 139 | for (int c = 0; c < channels; ++c) { |
| 140 | delays[c].write(input[c]); |
| 141 | delayed[c] = delays[c].read(delaySamples[c]); |
| 142 | } |
| 143 | |
| 144 | // Mix with a Hadamard matrix |
| 145 | Array mixed = delayed; |
| 146 | Hadamard<double, channels>::inPlace(mixed.data()); |
| 147 | |
| 148 | // Flip some polarities |
| 149 | for (int c = 0; c < channels; ++c) { |
| 150 | if (flipPolarity[c]) mixed[c] *= -1; |
| 151 | } |
| 152 | |
| 153 | return mixed; |
| 154 | } |
| 155 | }; |
| 156 | |
| 157 | template<int channels=8, int stepCount=4> |