summaryrefslogtreecommitdiff
path: root/pjmedia/src/pjmedia-codec/speex/speex_preprocess.h
diff options
context:
space:
mode:
Diffstat (limited to 'pjmedia/src/pjmedia-codec/speex/speex_preprocess.h')
-rw-r--r--pjmedia/src/pjmedia-codec/speex/speex_preprocess.h171
1 files changed, 171 insertions, 0 deletions
diff --git a/pjmedia/src/pjmedia-codec/speex/speex_preprocess.h b/pjmedia/src/pjmedia-codec/speex/speex_preprocess.h
new file mode 100644
index 00000000..5bb3a2c4
--- /dev/null
+++ b/pjmedia/src/pjmedia-codec/speex/speex_preprocess.h
@@ -0,0 +1,171 @@
+/* Copyright (C) 2003 Epic Games
+ Written by Jean-Marc Valin */
+/**
+ @file speex_preprocess.h
+ @brief Speex preprocessor
+*/
+/*
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are
+ met:
+
+ 1. Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ 3. The name of the author may not be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#ifndef SPEEX_PREPROCESS_H
+#define SPEEX_PREPROCESS_H
+
+#include "speex/speex_types.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+struct drft_lookup;
+
+/** Speex pre-processor state. */
+typedef struct SpeexPreprocessState {
+ int frame_size; /**< Number of samples processed each time */
+ int ps_size; /**< Number of points in the power spectrum */
+ int sampling_rate; /**< Sampling rate of the input/output */
+
+ /* parameters */
+ int denoise_enabled;
+ int agc_enabled;
+ float agc_level;
+ int vad_enabled;
+ int dereverb_enabled;
+ float reverb_decay;
+ float reverb_level;
+ float speech_prob_start;
+ float speech_prob_continue;
+
+ float *frame; /**< Processing frame (2*ps_size) */
+ float *ps; /**< Current power spectrum */
+ float *gain2; /**< Adjusted gains */
+ float *window; /**< Analysis/Synthesis window */
+ float *noise; /**< Noise estimate */
+ float *reverb_estimate; /**< Estimate of reverb energy */
+ float *old_ps; /**< Power spectrum for last frame */
+ float *gain; /**< Ephraim Malah gain */
+ float *prior; /**< A-priori SNR */
+ float *post; /**< A-posteriori SNR */
+
+ float *S; /**< Smoothed power spectrum */
+ float *Smin; /**< See Cohen paper */
+ float *Stmp; /**< See Cohen paper */
+ float *update_prob; /**< Propability of speech presence for noise update */
+
+ float *zeta; /**< Smoothed a priori SNR */
+ float Zpeak;
+ float Zlast;
+
+ float *loudness_weight; /**< Perceptual loudness curve */
+
+ float *echo_noise;
+
+ float *noise_bands;
+ float *noise_bands2;
+ int noise_bandsN;
+ float *speech_bands;
+ float *speech_bands2;
+ int speech_bandsN;
+
+ float *inbuf; /**< Input buffer (overlapped analysis) */
+ float *outbuf; /**< Output buffer (for overlap and add) */
+
+ float speech_prob;
+ int last_speech;
+ float loudness; /**< loudness estimate */
+ float loudness2; /**< loudness estimate */
+ int nb_adapt; /**< Number of frames used for adaptation so far */
+ int nb_loudness_adapt; /**< Number of frames used for loudness adaptation so far */
+ int consec_noise; /**< Number of consecutive noise frames */
+ int nb_preprocess; /**< Number of frames processed so far */
+ struct drft_lookup *fft_lookup; /**< Lookup table for the FFT */
+
+} SpeexPreprocessState;
+
+/** Creates a new preprocessing state */
+SpeexPreprocessState *speex_preprocess_state_init(int frame_size, int sampling_rate);
+
+/** Destroys a denoising state */
+void speex_preprocess_state_destroy(SpeexPreprocessState *st);
+
+/** Preprocess a frame */
+int speex_preprocess(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo);
+
+/** Preprocess a frame */
+void speex_preprocess_estimate_update(SpeexPreprocessState *st, spx_int16_t *x, spx_int32_t *echo);
+
+/** Used like the ioctl function to control the preprocessor parameters */
+int speex_preprocess_ctl(SpeexPreprocessState *st, int request, void *ptr);
+
+
+
+/** Set preprocessor denoiser state */
+#define SPEEX_PREPROCESS_SET_DENOISE 0
+/** Get preprocessor denoiser state */
+#define SPEEX_PREPROCESS_GET_DENOISE 1
+
+/** Set preprocessor Automatic Gain Control state */
+#define SPEEX_PREPROCESS_SET_AGC 2
+/** Get preprocessor Automatic Gain Control state */
+#define SPEEX_PREPROCESS_GET_AGC 3
+
+/** Set preprocessor Voice Activity Detection state */
+#define SPEEX_PREPROCESS_SET_VAD 4
+/** Get preprocessor Voice Activity Detection state */
+#define SPEEX_PREPROCESS_GET_VAD 5
+
+/** Set preprocessor Automatic Gain Control level */
+#define SPEEX_PREPROCESS_SET_AGC_LEVEL 6
+/** Get preprocessor Automatic Gain Control level */
+#define SPEEX_PREPROCESS_GET_AGC_LEVEL 7
+
+/** Set preprocessor dereverb state */
+#define SPEEX_PREPROCESS_SET_DEREVERB 8
+/** Get preprocessor dereverb state */
+#define SPEEX_PREPROCESS_GET_DEREVERB 9
+
+/** Set preprocessor dereverb level */
+#define SPEEX_PREPROCESS_SET_DEREVERB_LEVEL 10
+/** Get preprocessor dereverb level */
+#define SPEEX_PREPROCESS_GET_DEREVERB_LEVEL 11
+
+/** Set preprocessor dereverb decay */
+#define SPEEX_PREPROCESS_SET_DEREVERB_DECAY 12
+/** Get preprocessor dereverb decay */
+#define SPEEX_PREPROCESS_GET_DEREVERB_DECAY 13
+
+#define SPEEX_PREPROCESS_SET_PROB_START 14
+#define SPEEX_PREPROCESS_GET_PROB_START 15
+
+#define SPEEX_PREPROCESS_SET_PROB_CONTINUE 16
+#define SPEEX_PREPROCESS_GET_PROB_CONTINUE 17
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif