| OLD | NEW | 
|---|
|  | (Empty) | 
| 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_VAD_AUDIO_PROC_H_ |  | 
| 12 #define WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_AUDIO_PROC_H_ |  | 
| 13 |  | 
| 14 #include "webrtc/base/scoped_ptr.h" |  | 
| 15 #include "webrtc/modules/audio_processing/vad/common.h" |  | 
| 16 #include "webrtc/typedefs.h" |  | 
| 17 |  | 
| 18 namespace webrtc { |  | 
| 19 |  | 
| 20 class AudioFrame; |  | 
| 21 class PoleZeroFilter; |  | 
| 22 |  | 
| 23 class VadAudioProc { |  | 
| 24  public: |  | 
| 25   // Forward declare iSAC structs. |  | 
| 26   struct PitchAnalysisStruct; |  | 
| 27   struct PreFiltBankstr; |  | 
| 28 |  | 
| 29   VadAudioProc(); |  | 
| 30   ~VadAudioProc(); |  | 
| 31 |  | 
| 32   int ExtractFeatures(const int16_t* audio_frame, |  | 
| 33                       int length, |  | 
| 34                       AudioFeatures* audio_features); |  | 
| 35 |  | 
| 36   static const int kDftSize = 512; |  | 
| 37 |  | 
| 38  private: |  | 
| 39   void PitchAnalysis(double* pitch_gains, double* pitch_lags_hz, int length); |  | 
| 40   void SubframeCorrelation(double* corr, int length_corr, int subframe_index); |  | 
| 41   void GetLpcPolynomials(double* lpc, int length_lpc); |  | 
| 42   void FindFirstSpectralPeaks(double* f_peak, int length_f_peak); |  | 
| 43   void Rms(double* rms, int length_rms); |  | 
| 44   void ResetBuffer(); |  | 
| 45 |  | 
| 46   // To compute spectral peak we perform LPC analysis to get spectral envelope. |  | 
| 47   // For every 30 ms we compute 3 spectral peak there for 3 LPC analysis. |  | 
| 48   // LPC is computed over 15 ms of windowed audio. For every 10 ms sub-frame |  | 
| 49   // we need 5 ms of past signal to create the input of LPC analysis. |  | 
| 50   static const int kNumPastSignalSamples = kSampleRateHz / 200; |  | 
| 51 |  | 
| 52   // TODO(turajs): maybe defining this at a higher level (maybe enum) so that |  | 
| 53   // all the code recognize it as "no-error." |  | 
| 54   static const int kNoError = 0; |  | 
| 55 |  | 
| 56   static const int kNum10msSubframes = 3; |  | 
| 57   static const int kNumSubframeSamples = kSampleRateHz / 100; |  | 
| 58   static const int kNumSamplesToProcess = |  | 
| 59       kNum10msSubframes * |  | 
| 60       kNumSubframeSamples;  // Samples in 30 ms @ given sampling rate. |  | 
| 61   static const int kBufferLength = kNumPastSignalSamples + kNumSamplesToProcess; |  | 
| 62   static const int kIpLength = kDftSize >> 1; |  | 
| 63   static const int kWLength = kDftSize >> 1; |  | 
| 64 |  | 
| 65   static const int kLpcOrder = 16; |  | 
| 66 |  | 
| 67   int ip_[kIpLength]; |  | 
| 68   float w_fft_[kWLength]; |  | 
| 69 |  | 
| 70   // A buffer of 5 ms (past audio) + 30 ms (one iSAC frame ). |  | 
| 71   float audio_buffer_[kBufferLength]; |  | 
| 72   int num_buffer_samples_; |  | 
| 73 |  | 
| 74   double log_old_gain_; |  | 
| 75   double old_lag_; |  | 
| 76 |  | 
| 77   rtc::scoped_ptr<PitchAnalysisStruct> pitch_analysis_handle_; |  | 
| 78   rtc::scoped_ptr<PreFiltBankstr> pre_filter_handle_; |  | 
| 79   rtc::scoped_ptr<PoleZeroFilter> high_pass_filter_; |  | 
| 80 }; |  | 
| 81 |  | 
| 82 }  // namespace webrtc |  | 
| 83 |  | 
| 84 #endif  // WEBRTC_MODULES_AUDIO_PROCESSING_VAD_VAD_AUDIO_PROC_H_ |  | 
| OLD | NEW | 
|---|