// Signals mixing
    void OnAudioFilterRead(float[] data, int channels)
    {
        // Oscillators
        for (int i = 0; i < data.Length; i += channels)
        {
            foreach (Oscillator oscillator in oscillators)
            {
                data[i] += oscillator.GenerateSignal(lfoFreqSlider.value, lfoAmpSlider.value) * volumeSlider.value;
            }
            if (channels == 2)
            {
                data[i + 1] += data[i];
            }
        }

        // Filters
        for (int i = 0; i < data.Length; i++)
        {
            dataCopy[i] = data[i];
        }

        if (data[0] != 0 && lpCutoff.value != lpCutoff.minValue)
        {
            lpFilter.ExecuteFilter(ref data, channels, dataCopy, oldY, oldX);
        }
        if (data[0] != 0 && hpCutoff.value != hpCutoff.minValue)
        {
            hpFilter.ExecuteFilter(ref data, channels, dataCopy, oldY, oldX);
        }
        if (data[0] != 0 && bpCutoff.value != bpCutoff.minValue)
        {
            bpFilter.ExecuteFilter(ref data, channels, dataCopy, oldY, oldX);
        }

        oldY[0] = data[2044];
        oldY[1] = data[2045];
        oldY[2] = data[2046];
        oldY[3] = data[2047];

        oldX[0] = dataCopy[2044];
        oldX[1] = dataCopy[2045];
        oldX[2] = dataCopy[2046];
        oldX[3] = dataCopy[2047];

        // Needed to cutoff lfo
        timer++;
    }