1b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
2b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *
4b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  Use of this source code is governed by a BSD-style license
5b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  that can be found in the LICENSE file in the root of the source
6b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  tree. An additional intellectual property rights grant can be found
7b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  in the file PATENTS.  All contributing project authors may
8b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
9b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
10b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
11b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
12b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org/*
13b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org * This header file includes the VAD API calls. Specific function calls are given below.
14b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org */
15b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
16b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifndef WEBRTC_COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_  // NOLINT
17b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#define WEBRTC_COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_
18b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
19f24ac5923cbe5e806fac59a0d15e32567553ce8epbos@webrtc.org#include "webrtc/typedefs.h"
20b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
21b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgtypedef struct WebRtcVadInst VadInst;
22b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
23b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef __cplusplus
24b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgextern "C" {
25b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
26b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
27b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Creates an instance to the VAD structure.
28b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
29b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - handle [o] : Pointer to the VAD instance that should be created.
30b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
31b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// returns      : 0 - (OK), -1 - (Error)
32b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcVad_Create(VadInst** handle);
33b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
34b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Frees the dynamic memory of a specified VAD instance.
35b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
36b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - handle [i] : Pointer to VAD instance that should be freed.
37642e80e5fed3b05fdada3dd8b5dbdfabbccaa5cebjornv@webrtc.orgvoid WebRtcVad_Free(VadInst* handle);
38b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
39b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Initializes a VAD instance.
40b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
41b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - handle [i/o] : Instance that should be initialized.
42b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
43b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// returns        : 0 - (OK),
44b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                 -1 - (NULL pointer or Default mode could not be set).
45b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcVad_Init(VadInst* handle);
46b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
47b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Sets the VAD operating mode. A more aggressive (higher mode) VAD is more
48b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// restrictive in reporting speech. Put in other words the probability of being
49b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// speech when the VAD returns 1 is increased with increasing mode. As a
50b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// consequence also the missed detection rate goes up.
51b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
52b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - handle [i/o] : VAD instance.
53b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - mode   [i]   : Aggressiveness mode (0, 1, 2, or 3).
54b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
55b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// returns        : 0 - (OK),
56b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                 -1 - (NULL pointer, mode could not be set or the VAD instance
57b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                       has not been initialized).
58b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcVad_set_mode(VadInst* handle, int mode);
59b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
60b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Calculates a VAD decision for the |audio_frame|. For valid sampling rates
61b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// frame lengths, see the description of WebRtcVad_ValidRatesAndFrameLengths().
62b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
63b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - handle       [i/o] : VAD Instance. Needs to be initialized by
64b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                        WebRtcVad_Init() before call.
65b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - fs           [i]   : Sampling frequency (Hz): 8000, 16000, or 32000
66b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - audio_frame  [i]   : Audio frame buffer.
67b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - frame_length [i]   : Length of audio frame buffer in number of samples.
68b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
69b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// returns              : 1 - (Active Voice),
70b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                        0 - (Non-active Voice),
71b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//                       -1 - (Error)
72785c2fdd22c9ad2d172c0976d1224bbe44073bc7andrew@webrtc.orgint WebRtcVad_Process(VadInst* handle, int fs, const int16_t* audio_frame,
73b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org                      int frame_length);
74b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
75b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// Checks for valid combinations of |rate| and |frame_length|. We support 10,
76b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// 20 and 30 ms frames and the rates 8000, 16000 and 32000 Hz.
77b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
78b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - rate         [i] : Sampling frequency (Hz).
79b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// - frame_length [i] : Speech frame buffer length in number of samples.
80b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org//
81b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org// returns            : 0 - (valid combination), -1 - (invalid combination)
82b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.orgint WebRtcVad_ValidRateAndFrameLength(int rate, int frame_length);
83b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
84b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#ifdef __cplusplus
85b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org}
86b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif
87b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org
88b015cbede88899f67a53fbbe581b02ce8e32794andrew@webrtc.org#endif  // WEBRTC_COMMON_AUDIO_VAD_INCLUDE_WEBRTC_VAD_H_  // NOLINT
89