18aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org/*
28aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *  Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
38aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *
48aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *  Use of this source code is governed by a BSD-style license
58aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *  that can be found in the LICENSE file in the root of the source
68aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *  tree. An additional intellectual property rights grant can be found
78aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *  in the file PATENTS.  All contributing project authors may
88aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org *  be found in the AUTHORS file in the root of the source tree.
98aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org */
108aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
118aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org#ifndef WEBRTC_COMMON_AUDIO_VAD_INCLUDE_VAD_H_
128aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org#define WEBRTC_COMMON_AUDIO_VAD_INCLUDE_VAD_H_
138aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
148aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org#include "webrtc/base/checks.h"
15e9e7896293747b2084e7f018675276f5096cdafckwiberg#include "webrtc/base/scoped_ptr.h"
168aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org#include "webrtc/common_audio/vad/include/webrtc_vad.h"
178aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org#include "webrtc/typedefs.h"
188aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
198aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.orgnamespace webrtc {
208aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
218aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.orgclass Vad {
228aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org public:
238aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org  enum Aggressiveness {
248aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org    kVadNormal = 0,
258aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org    kVadLowBitrate = 1,
268aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org    kVadAggressive = 2,
278aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org    kVadVeryAggressive = 3
288aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org  };
298aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
308aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org  enum Activity { kPassive = 0, kActive = 1, kError = -1 };
318aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
32e9e7896293747b2084e7f018675276f5096cdafckwiberg  virtual ~Vad() = default;
338aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
34e9e7896293747b2084e7f018675276f5096cdafckwiberg  // Calculates a VAD decision for the given audio frame. Valid sample rates
35e9e7896293747b2084e7f018675276f5096cdafckwiberg  // are 8000, 16000, and 32000 Hz; the number of samples must be such that the
36e9e7896293747b2084e7f018675276f5096cdafckwiberg  // frame is 10, 20, or 30 ms long.
37ff1a3e36bdd023fc2d3bef9af6b161ce144ffd6bhenrik.lundin@webrtc.org  virtual Activity VoiceActivity(const int16_t* audio,
38ff1a3e36bdd023fc2d3bef9af6b161ce144ffd6bhenrik.lundin@webrtc.org                                 size_t num_samples,
39e9e7896293747b2084e7f018675276f5096cdafckwiberg                                 int sample_rate_hz) = 0;
4012cfc9b4dacd6942377df1f29a64bdbec591920ekwiberg
41e9e7896293747b2084e7f018675276f5096cdafckwiberg  // Resets VAD state.
42e9e7896293747b2084e7f018675276f5096cdafckwiberg  virtual void Reset() = 0;
438aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org};
448aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org
45e9e7896293747b2084e7f018675276f5096cdafckwiberg// Returns a Vad instance that's implemented on top of WebRtcVad.
46e9e7896293747b2084e7f018675276f5096cdafckwibergrtc::scoped_ptr<Vad> CreateVad(Vad::Aggressiveness aggressiveness);
47e9e7896293747b2084e7f018675276f5096cdafckwiberg
488aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org}  // namespace webrtc
49e9e7896293747b2084e7f018675276f5096cdafckwiberg
508aa4d2d2cd46bca6da7e071583482dd7ed0e2d0chenrik.lundin@webrtc.org#endif  // WEBRTC_COMMON_AUDIO_VAD_INCLUDE_VAD_H_
51