• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef WEBRTC_MODULES_AUDIO_PROCESSING_AGC_STANDALONE_VAD_H_
12 #define WEBRTC_MODULES_AUDIO_PROCESSING_AGC_STANDALONE_VAD_H_
13 
14 #include "webrtc/base/scoped_ptr.h"
15 #include "webrtc/modules/audio_processing/vad/common.h"
16 #include "webrtc/common_audio/vad/include/webrtc_vad.h"
17 #include "webrtc/typedefs.h"
18 
19 namespace webrtc {
20 
21 class AudioFrame;
22 
23 class StandaloneVad {
24  public:
25   static StandaloneVad* Create();
26   ~StandaloneVad();
27 
28   // Outputs
29   //   p: a buffer where probabilities are written to.
30   //   length_p: number of elements of |p|.
31   //
32   // return value:
33   //    -1: if no audio is stored or VAD returns error.
34   //     0: in success.
35   // In case of error the content of |activity| is unchanged.
36   //
37   // Note that due to a high false-positive (VAD decision is active while the
38   // processed audio is just background noise) rate, stand-alone VAD is used as
39   // a one-sided indicator. The activity probability is 0.5 if the frame is
40   // classified as active, and the probability is 0.01 if the audio is
41   // classified as passive. In this way, when probabilities are combined, the
42   // effect of the stand-alone VAD is neutral if the input is classified as
43   // active.
44   int GetActivity(double* p, size_t length_p);
45 
46   // Expecting 10 ms of 16 kHz audio to be pushed in.
47   int AddAudio(const int16_t* data, size_t length);
48 
49   // Set aggressiveness of VAD, 0 is the least aggressive and 3 is the most
50   // aggressive mode. Returns -1 if the input is less than 0 or larger than 3,
51   // otherwise 0 is returned.
52   int set_mode(int mode);
53   // Get the agressiveness of the current VAD.
mode()54   int mode() const { return mode_; }
55 
56  private:
57   explicit StandaloneVad(VadInst* vad);
58 
59   static const size_t kMaxNum10msFrames = 3;
60 
61   // TODO(turajs): Is there a way to use scoped-pointer here?
62   VadInst* vad_;
63   int16_t buffer_[kMaxNum10msFrames * kLength10Ms];
64   size_t index_;
65   int mode_;
66 };
67 
68 }  // namespace webrtc
69 
70 #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_AGC_STANDALONE_VAD_H_
71