11 num_channels = (num_input_channels > 0) ? num_input_channels : 1;
25 for (
int channel = 0; channel <
num_channels; ++channel) {
26 float *channel_data = block.getWritePointer(channel);
33 for (
int sample = 0; sample <
num_samples; ++sample) {
34 const float input_sample = channel_data[sample];
49 modification(channel);
67 fft = std::make_unique<juce::dsp::FFT>(log2(
fft_size));
113 for (
int sample = 0; sample <
fft_size; ++sample)
118 for (
int sample = 0; sample <
fft_size; ++sample)
119 fft_window[sample] = 1.0f - fabs (2.0f * (
float)sample / (
float)(
fft_size - 1) - 1.0f);
123 for (
int sample = 0; sample <
fft_size; ++sample)
124 fft_window[sample] = 0.5f - 0.5f * cosf (2.0f * M_PI * (
float)sample / (
float)(
fft_size - 1));
128 for (
int sample = 0; sample <
fft_size; ++sample)
129 fft_window[sample] = 0.54f - 0.46f * cosf (2.0f * M_PI * (
float)sample / (
float)(
fft_size - 1));
134 float window_sum = 0.0f;
135 for (
int sample = 0; sample <
fft_size; ++sample)
139 if (
overlap != 0 && window_sum != 0.0f)
145 void STFT::analysis(
const int channel)
148 for (
int index = 0; index <
fft_size; ++index) {
153 input_buffer_index = 0;
157 void STFT::modification(
const int channel)
161 for (
int index = 0; index <
fft_size / 2 + 1; ++index) {
168 if (index > 0 && index <
fft_size / 2) {
177 void STFT::synthesis(
const int channel)
180 for (
int index = 0; index <
fft_size; ++index) {
181 float output_sample =
output_buffer.getSample(channel, output_buffer_index);
183 output_buffer.setSample(channel, output_buffer_index, output_sample);
186 output_buffer_index = 0;