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