Home | History | Annotate | Download | only in vad
      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_VAD_PITCH_BASED_VAD_H_
     12 #define WEBRTC_MODULES_AUDIO_PROCESSING_VAD_PITCH_BASED_VAD_H_
     13 
     14 #include "webrtc/base/scoped_ptr.h"
     15 #include "webrtc/modules/audio_processing/vad/common.h"
     16 #include "webrtc/modules/audio_processing/vad/gmm.h"
     17 #include "webrtc/typedefs.h"
     18 
     19 namespace webrtc {
     20 
     21 class AudioFrame;
     22 class VadCircularBuffer;
     23 
     24 // Computes the probability of the input audio frame to be active given
     25 // the corresponding pitch-gain and lag of the frame.
     26 class PitchBasedVad {
     27  public:
     28   PitchBasedVad();
     29   ~PitchBasedVad();
     30 
     31   // Compute pitch-based voicing probability, given the features.
     32   //   features: a structure containing features required for computing voicing
     33   //             probabilities.
     34   //
     35   //   p_combined: an array which contains the combined activity probabilities
     36   //               computed prior to the call of this function. The method,
     37   //               then, computes the voicing probabilities and combine them
     38   //               with the given values. The result are returned in |p|.
     39   int VoicingProbability(const AudioFeatures& features, double* p_combined);
     40 
     41  private:
     42   int UpdatePrior(double p);
     43 
     44   // TODO(turajs): maybe defining this at a higher level (maybe enum) so that
     45   // all the code recognize it as "no-error."
     46   static const int kNoError = 0;
     47 
     48   GmmParameters noise_gmm_;
     49   GmmParameters voice_gmm_;
     50 
     51   double p_prior_;
     52 
     53   rtc::scoped_ptr<VadCircularBuffer> circular_buffer_;
     54 };
     55 
     56 }  // namespace webrtc
     57 #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_VAD_PITCH_BASED_VAD_H_
     58