LCOV - code coverage report
Current view: top level - src/audio/effects/modulation - flanger.h (source / functions) Coverage Total Hit
Test: merged.info Lines: 75.0 % 4 3
Test Date: 2026-06-07 15:51:50 Functions: 75.0 % 4 3

            Line data    Source code
       1              : #pragma once
       2              : 
       3              : // Short modulated delay effect for comb-filter sweep sounds.
       4              : // Uses y[n]=x[n]+feedback*y[n-D(n)] mixed with a wet tap x[n-D(n)], where
       5              : // D(n)=D0 + A*sin(2*pi*f_lfo*n/Fs); the varying delay moves comb notches at
       6              : // frequencies approximately k*Fs/D(n).
       7              : 
       8              : #include "audio/effects/core/effect.h"
       9              : 
      10              : namespace Amplitron {
      11              : 
      12              : /**
      13              :  * Flanger effect — short modulated delay line (0.1–15ms) mixed with dry signal.
      14              :  * Feedback through the delay line creates the classic "comb filter sweep" sound.
      15              :  */
      16              : class Flanger : public Effect {
      17              :    public:
      18              :     Flanger();
      19              :     void process(float* buffer, int num_samples) override;
      20              :     void process_stereo(float* left, float* right, int num_samples) override;
      21              :     void set_sample_rate(int sample_rate) override;
      22              :     void reset() override;
      23           65 :     const char* name() const override { return "Flanger"; }
      24            3 :     const char* type_id() const override { return "Flanger"; }
      25          225 :     std::vector<EffectParam>& params() override { return params_; }
      26            0 :     const std::vector<EffectParam>& params() const override { return params_; }
      27              : 
      28              :    private:
      29              :     std::vector<EffectParam> params_;
      30              :     std::vector<float> delay_buffer_;
      31              :     int write_pos_ = 0;
      32              :     float lfo_phase_ = 0.0f;
      33              :     int max_delay_samples_ = 0;
      34              :     // Right-channel delay line — LFO is 180° out of phase
      35              :     std::vector<float> delay_buffer_r_;
      36              :     int write_pos_r_ = 0;
      37              : };
      38              : 
      39              : }  // namespace Amplitron
        

Generated by: LCOV version 2.0-1