settings menu & texsheet
[vg.git] / vg_audio_dsp.h
index 48926e282628eb476e5bd2b78eda908eb0b2450a..c2bed10ebde2a7935fc2c53ddf8167743bb14350 100644 (file)
@@ -4,6 +4,8 @@
 #define VG_GAME
 #include "vg/vg.h"
 
+//#define VG_ECHO_LPF_BUTTERWORTH
+
 static struct vg_dsp{
    float            *buffer;
    u32               allocations;
@@ -160,7 +162,12 @@ static inline void dsp_process_schroeder( struct dsp_schroeder *sch,
 /* temporary global design */
 static struct dsp_lpf __lpf_mud_free;
 static struct dsp_delay __echos[8];
+
+#ifdef VG_ECHO_LPF_BUTTERWORTH
+static struct dsp_biquad __echos_lpf[8];
+#else
 static struct dsp_lpf   __echos_lpf[8];
+#endif
 static struct dsp_schroeder __diffusion_chain[8];
 
 static void async_vg_dsp_alloc_texture( void *payload, u32 size )
@@ -197,7 +204,12 @@ static void vg_dsp_init( void ){
       dsp_init_delay( &__echos[i], total / 1000.0f );
 
       float freq = vg_lerpf( 800.0f, 350.0f, sizes[i] / 256.0f );
+
+#ifdef VG_ECHO_LPF_BUTTERWORTH
+      dsp_init_biquad_butterworth_lpf( &__echos_lpf[i], freq );
+#else
       dsp_init_lpf( &__echos_lpf[i], freq );
+#endif
    }
 
    float diffusions[] = { 187.0f, 159.0f, 143.0f, 121.0f, 
@@ -214,10 +226,15 @@ static void vg_dsp_process( float *stereo_in, float *stereo_out )
    float recieved = 0.0f;
 
    for( int i=0; i<8; i++ ){
-      float echo;
+      f32 echo;
       dsp_read_delay(  __echos+i, &echo, 1 );
+
+#ifdef VG_ECHO_LPF_BUTTERWORTH
+      echo = dsp_biquad_process( __echos_lpf+i, echo );
+#else
       dsp_write_lpf( __echos_lpf+i, &echo );
       dsp_read_lpf(  __echos_lpf+i, &echo );
+#endif
 
       recieved += echo * vg_dsp.echo_tunings[i]*0.98;
    }
@@ -296,7 +313,12 @@ static void dsp_update_tunings(void)
 
    for( int i=0; i<8; i++ ){
       float freq = vg_lerpf( 200.0f, 500.0f, vg_dsp.echo_tunings[i] );
+
+#ifdef VG_ECHO_LPF_BUTTERWORTH
+      dsp_init_biquad_butterworth_lpf( &__echos_lpf[i], freq );
+#else
       dsp_update_lpf( &__echos_lpf[i], freq );
+#endif
    }
 
    for( int i=0;i<8; i++ ){