xref: /aosp_15_r20/external/rnnoise/include/rnnoise.h (revision 1295d6828459cc82c3c29cc5d7d297215250a74b)
1*1295d682SXin Li /* Copyright (c) 2018 Gregor Richards
2*1295d682SXin Li  * Copyright (c) 2017 Mozilla */
3*1295d682SXin Li /*
4*1295d682SXin Li    Redistribution and use in source and binary forms, with or without
5*1295d682SXin Li    modification, are permitted provided that the following conditions
6*1295d682SXin Li    are met:
7*1295d682SXin Li 
8*1295d682SXin Li    - Redistributions of source code must retain the above copyright
9*1295d682SXin Li    notice, this list of conditions and the following disclaimer.
10*1295d682SXin Li 
11*1295d682SXin Li    - Redistributions in binary form must reproduce the above copyright
12*1295d682SXin Li    notice, this list of conditions and the following disclaimer in the
13*1295d682SXin Li    documentation and/or other materials provided with the distribution.
14*1295d682SXin Li 
15*1295d682SXin Li    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16*1295d682SXin Li    ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17*1295d682SXin Li    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
18*1295d682SXin Li    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
19*1295d682SXin Li    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20*1295d682SXin Li    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21*1295d682SXin Li    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22*1295d682SXin Li    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23*1295d682SXin Li    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24*1295d682SXin Li    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25*1295d682SXin Li    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*1295d682SXin Li */
27*1295d682SXin Li 
28*1295d682SXin Li #ifndef RNNOISE_H
29*1295d682SXin Li #define RNNOISE_H 1
30*1295d682SXin Li 
31*1295d682SXin Li #include <stdio.h>
32*1295d682SXin Li 
33*1295d682SXin Li #ifdef __cplusplus
34*1295d682SXin Li extern "C" {
35*1295d682SXin Li #endif
36*1295d682SXin Li 
37*1295d682SXin Li #ifndef RNNOISE_EXPORT
38*1295d682SXin Li # if defined(WIN32)
39*1295d682SXin Li #  if defined(RNNOISE_BUILD) && defined(DLL_EXPORT)
40*1295d682SXin Li #   define RNNOISE_EXPORT __declspec(dllexport)
41*1295d682SXin Li #  else
42*1295d682SXin Li #   define RNNOISE_EXPORT
43*1295d682SXin Li #  endif
44*1295d682SXin Li # elif defined(__GNUC__) && defined(RNNOISE_BUILD)
45*1295d682SXin Li #  define RNNOISE_EXPORT __attribute__ ((visibility ("default")))
46*1295d682SXin Li # else
47*1295d682SXin Li #  define RNNOISE_EXPORT
48*1295d682SXin Li # endif
49*1295d682SXin Li #endif
50*1295d682SXin Li 
51*1295d682SXin Li typedef struct DenoiseState DenoiseState;
52*1295d682SXin Li typedef struct RNNModel RNNModel;
53*1295d682SXin Li 
54*1295d682SXin Li /**
55*1295d682SXin Li  * Return the size of DenoiseState
56*1295d682SXin Li  */
57*1295d682SXin Li RNNOISE_EXPORT int rnnoise_get_size();
58*1295d682SXin Li 
59*1295d682SXin Li /**
60*1295d682SXin Li  * Return the number of samples processed by rnnoise_process_frame at a time
61*1295d682SXin Li  */
62*1295d682SXin Li RNNOISE_EXPORT int rnnoise_get_frame_size();
63*1295d682SXin Li 
64*1295d682SXin Li /**
65*1295d682SXin Li  * Initializes a pre-allocated DenoiseState
66*1295d682SXin Li  *
67*1295d682SXin Li  * If model is NULL the default model is used.
68*1295d682SXin Li  *
69*1295d682SXin Li  * See: rnnoise_create() and rnnoise_model_from_file()
70*1295d682SXin Li  */
71*1295d682SXin Li RNNOISE_EXPORT int rnnoise_init(DenoiseState *st, RNNModel *model);
72*1295d682SXin Li 
73*1295d682SXin Li /**
74*1295d682SXin Li  * Allocate and initialize a DenoiseState
75*1295d682SXin Li  *
76*1295d682SXin Li  * If model is NULL the default model is used.
77*1295d682SXin Li  *
78*1295d682SXin Li  * The returned pointer MUST be freed with rnnoise_destroy().
79*1295d682SXin Li  */
80*1295d682SXin Li RNNOISE_EXPORT DenoiseState *rnnoise_create(RNNModel *model);
81*1295d682SXin Li 
82*1295d682SXin Li /**
83*1295d682SXin Li  * Free a DenoiseState produced by rnnoise_create.
84*1295d682SXin Li  *
85*1295d682SXin Li  * The optional custom model must be freed by rnnoise_model_free() after.
86*1295d682SXin Li  */
87*1295d682SXin Li RNNOISE_EXPORT void rnnoise_destroy(DenoiseState *st);
88*1295d682SXin Li 
89*1295d682SXin Li /**
90*1295d682SXin Li  * Denoise a frame of samples
91*1295d682SXin Li  *
92*1295d682SXin Li  * in and out must be at least rnnoise_get_frame_size() large.
93*1295d682SXin Li  */
94*1295d682SXin Li RNNOISE_EXPORT float rnnoise_process_frame(DenoiseState *st, float *out, const float *in);
95*1295d682SXin Li 
96*1295d682SXin Li /**
97*1295d682SXin Li  * Load a model from a file
98*1295d682SXin Li  *
99*1295d682SXin Li  * It must be deallocated with rnnoise_model_free()
100*1295d682SXin Li  */
101*1295d682SXin Li RNNOISE_EXPORT RNNModel *rnnoise_model_from_file(FILE *f);
102*1295d682SXin Li 
103*1295d682SXin Li /**
104*1295d682SXin Li  * Free a custom model
105*1295d682SXin Li  *
106*1295d682SXin Li  * It must be called after all the DenoiseStates referring to it are freed.
107*1295d682SXin Li  */
108*1295d682SXin Li RNNOISE_EXPORT void rnnoise_model_free(RNNModel *model);
109*1295d682SXin Li 
110*1295d682SXin Li #ifdef __cplusplus
111*1295d682SXin Li }
112*1295d682SXin Li #endif
113*1295d682SXin Li 
114*1295d682SXin Li #endif
115