aboutsummaryrefslogtreecommitdiffstats
path: root/examples/1_convolve_simple.cpp
blob: 8de05d33d0e6341b9e04c766ab66ce22607789bb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
/**
 * 1_convolve_simple.cpp
 * Written by Clyne Sullivan.
 *
 * Computes a convolution in the simplest way possible. While the code is brief, it lacks many
 * possible optimizations. The convolution's result will not fill the output buffer either, as the
 * transient response is not calculated.
 */

Sample *process_data(Samples samples)
{
    // Define our output buffer. SIZE is the largest size of the 'samples' buffer.
    static Sample buffer[samples.size()];

    // Define our filter
    constexpr unsigned int filter_size = 3;
	float filter[filter_size] = {
        0.3333, 0.3333, 0.3333
    };

    // Begin convolving:
    for (int n = 0; n < samples.size() - (filter_size - 1); n++) {
        buffer[n] = 0;
        for (int k = 0; k < filter_size; k++)
            buffer[n] += samples[n + k] * filter[k];
    }

    return buffer;
}