1470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
2b9d7d934deef2faafc6e0901d0891c93ca73b350andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
4470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  Use of this source code is governed by a BSD-style license
5470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  that can be found in the LICENSE file in the root of the source
6470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  tree. An additional intellectual property rights grant can be found
7470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  in the file PATENTS.  All contributing project authors may
8470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *  be found in the AUTHORS file in the root of the source tree.
9470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
10470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
119b72af94cd61782ada88f777b07854daf9657bb2Henrik Kjellander#ifndef WEBRTC_MODULES_AUDIO_PROCESSING_NS_NOISE_SUPPRESSION_X_H_
129b72af94cd61782ada88f777b07854daf9657bb2Henrik Kjellander#define WEBRTC_MODULES_AUDIO_PROCESSING_NS_NOISE_SUPPRESSION_X_H_
13470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
147fad4b8c9f1e9a6e3de9962fb74d4953b4f1bb03pbos@webrtc.org#include "webrtc/typedefs.h"
15470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
16470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comtypedef struct NsxHandleT NsxHandle;
17470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
18470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef __cplusplus
19470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.comextern "C" {
20470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif
21470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
22470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
239345e86551a0e59e77dfee6eed3e2fe2a833b269Bjorn Volcker * This function creates an instance of the fixed point Noise Suppression.
24470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
259345e86551a0e59e77dfee6eed3e2fe2a833b269Bjorn VolckerNsxHandle* WebRtcNsx_Create();
26470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
27470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
28470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This function frees the dynamic memory of a specified Noise Suppression
29470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * instance.
30470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
31470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
32470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : Pointer to NS instance that should be freed
33470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
34f6a99e63b6e18d3b3db25e0059a4979743046f31Bjorn Volckervoid WebRtcNsx_Free(NsxHandle* nsxInst);
35470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
36470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
37470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This function initializes a NS instance
38470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
39470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
40470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : Instance that should be initialized
41470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - fs            : sampling frequency
42470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
43470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
44470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : Initialized instance
45470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
46470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Return value         :  0 - Ok
47470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                        -1 - Error
48470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
49b7192b82476d00384fdc153e6a09a6ac53cef67bpbos@webrtc.orgint WebRtcNsx_Init(NsxHandle* nsxInst, uint32_t fs);
50470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
51470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
52470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This changes the aggressiveness of the noise suppression method.
53470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
54470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input:
55470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : Instance that should be initialized
56470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - mode          : 0: Mild, 1: Medium , 2: Aggressive
57470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
58470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
59470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : Initialized instance
60470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
61470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Return value         :  0 - Ok
62470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *                        -1 - Error
63470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
64af57de006ac9dbb7b25bf83e1bae2d8da4359923kma@webrtc.orgint WebRtcNsx_set_policy(NsxHandle* nsxInst, int mode);
65470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
66470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com/*
67470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * This functions does noise suppression for the inserted speech frame. The
68470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * input and output signals should always be 10ms (80 or 160 samples).
69470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
70470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Input
71470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : NSx instance. Needs to be initiated before call.
72c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.org *      - speechFrame   : Pointer to speech frame buffer for each band
73c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.org *      - num_bands     : Number of bands
74470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *
75470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com * Output:
76470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com *      - nsxInst       : Updated NSx instance
77c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.org *      - outFrame      : Pointer to output frame for each band
78470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com */
79c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.orgvoid WebRtcNsx_Process(NsxHandle* nsxInst,
80c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.org                       const short* const* speechFrame,
81c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.org                       int num_bands,
82c5ebbd98f5996db0defbbfc14f5ca41e620bd7e4aluebs@webrtc.org                       short* const* outFrame);
83470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
84470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#ifdef __cplusplus
85470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com}
86470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com#endif
87470e71d3649f6cac4688e83819640b012b5d38bbniklase@google.com
889b72af94cd61782ada88f777b07854daf9657bb2Henrik Kjellander#endif  // WEBRTC_MODULES_AUDIO_PROCESSING_NS_NOISE_SUPPRESSION_X_H_
89