Integrating the decorrelation API with the echo canceller (speex_echo.h)
authorJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Wed, 4 Jun 2008 07:00:08 +0000 (17:00 +1000)
committerJean-Marc Valin <Jean-Marc.Valin@csiro.au>
Wed, 4 Jun 2008 07:00:08 +0000 (17:00 +1000)
include/speex/speex_echo.h
libspeex/Makefile.am
libspeex/mdf.c
libspeex/scal.c

index 1970af4..fec17e4 100644 (file)
@@ -131,6 +131,36 @@ void speex_echo_state_reset(SpeexEchoState *st);
  */
 int speex_echo_ctl(SpeexEchoState *st, int request, void *ptr);
 
+
+
+struct DecorrState_;
+
+typedef struct DecorrState_ DecorrState;
+
+
+/** Create a state for the channel decorrelation algorithm
+    This is useful for multi-channel echo cancellation only 
+ * @param rate Sampling rate
+ * @param channels Number of channels (it's a bit pointless if you don't have at least 2)
+ * @param frame_size Size of the frame to process at ones (counting samples *per* channel)
+*/
+DecorrState *speex_decorrelate_new(int rate, int channels, int frame_size);
+
+/** Remove correlation between the channels by modifying the phase and possibly
+    adding noise in a way that is not (or little) perceptible.
+ * @param st Decorrelator state
+ * @param in Input audio in interleaved format
+ * @param out Result of the decorrelation (out *may* alias in)
+ * @param strength How much alteration of the audio to apply from 0 to 100.
+*/
+void speex_decorrelate(DecorrState *st, const spx_int16_t *in, spx_int16_t *out, int strength);
+
+/** Destroy a Decorrelation state 
+ * @param st State to destroy
+*/
+void speex_decorrelate_destroy(DecorrState *st);
+
+
 #ifdef __cplusplus
 }
 #endif
index a2898b7..3d4e03f 100644 (file)
@@ -26,7 +26,7 @@ else
 endif
 endif
 
-libspeexdsp_la_SOURCES = preprocess.c jitter.c mdf.c fftwrap.c filterbank.c resample.c buffer.c $(FFTSRC)
+libspeexdsp_la_SOURCES = preprocess.c jitter.c mdf.c fftwrap.c filterbank.c resample.c buffer.c scal.c $(FFTSRC)
 
 noinst_HEADERS =       arch.h  cb_search_arm4.h        cb_search_bfin.h        cb_search_sse.h \
                filters.h       filters_arm4.h  filters_bfin.h  filters_sse.h   fixed_arm4.h \
index d8bacaf..d97e678 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003-2006 Jean-Marc Valin
+/* Copyright (C) 2003-2008 Jean-Marc Valin
 
    File: mdf.c
    Echo canceller based on the MDF algorithm (see below)
index f10e629..4d5dc1a 100644 (file)
@@ -44,6 +44,7 @@ The algorithm implemented here is described in:
 #include "config.h"
 #endif
 
+#include "speex/speex_echo.h"
 #include "vorbis_psy.h"
 #include "arch.h"
 #include "os_support.h"
@@ -75,9 +76,9 @@ struct DecorrState_ {
    float *alpha;
 };
 
-typedef struct DecorrState_ DecorrState;
 
-DecorrState *speex_decorrelate_new(int rate, int channels, int frame_size)
+
+EXPORT DecorrState *speex_decorrelate_new(int rate, int channels, int frame_size)
 {
    int i, ch;
    DecorrState *st = speex_alloc(sizeof(DecorrState));
@@ -133,7 +134,7 @@ static unsigned int irand(int *seed)
 }
 
 
-void speex_decorrelate(DecorrState *st, const spx_int16_t *in, spx_int16_t *out, int strength)
+EXPORT void speex_decorrelate(DecorrState *st, const spx_int16_t *in, spx_int16_t *out, int strength)
 {
    int ch;
    float amount;
@@ -270,7 +271,7 @@ void speex_decorrelate(DecorrState *st, const spx_int16_t *in, spx_int16_t *out,
    }
 }
 
-void speex_decorrelate_destroy(DecorrState *st)
+EXPORT void speex_decorrelate_destroy(DecorrState *st)
 {
 #ifdef VORBIS_PSYCHO
    vorbis_psy_destroy(st->psy);