tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

features_extraction.h (2513B)


      1 /*
      2 *  Copyright (c) 2018 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 MODULES_AUDIO_PROCESSING_AGC2_RNN_VAD_FEATURES_EXTRACTION_H_
     12 #define MODULES_AUDIO_PROCESSING_AGC2_RNN_VAD_FEATURES_EXTRACTION_H_
     13 
     14 #include <vector>
     15 
     16 #include "api/array_view.h"
     17 #include "modules/audio_processing/agc2/biquad_filter.h"
     18 #include "modules/audio_processing/agc2/cpu_features.h"
     19 #include "modules/audio_processing/agc2/rnn_vad/common.h"
     20 #include "modules/audio_processing/agc2/rnn_vad/pitch_search.h"
     21 #include "modules/audio_processing/agc2/rnn_vad/sequence_buffer.h"
     22 #include "modules/audio_processing/agc2/rnn_vad/spectral_features.h"
     23 
     24 namespace webrtc {
     25 namespace rnn_vad {
     26 
     27 // Feature extractor to feed the VAD RNN.
     28 class FeaturesExtractor {
     29 public:
     30  explicit FeaturesExtractor(const AvailableCpuFeatures& cpu_features);
     31  FeaturesExtractor(const FeaturesExtractor&) = delete;
     32  FeaturesExtractor& operator=(const FeaturesExtractor&) = delete;
     33  ~FeaturesExtractor();
     34  void Reset();
     35  // Analyzes the samples, computes the feature vector and returns true if
     36  // silence is detected (false if not). When silence is detected,
     37  // `feature_vector` is partially written and therefore must not be used to
     38  // feed the VAD RNN.
     39  bool CheckSilenceComputeFeatures(
     40      ArrayView<const float, kFrameSize10ms24kHz> samples,
     41      ArrayView<float, kFeatureVectorSize> feature_vector);
     42 
     43 private:
     44  const bool use_high_pass_filter_;
     45  // TODO(bugs.webrtc.org/7494): Remove HPF depending on how AGC2 is used in APM
     46  // and on whether an HPF is already used as pre-processing step in APM.
     47  BiQuadFilter hpf_;
     48  SequenceBuffer<float, kBufSize24kHz, kFrameSize10ms24kHz, kFrameSize20ms24kHz>
     49      pitch_buf_24kHz_;
     50  ArrayView<const float, kBufSize24kHz> pitch_buf_24kHz_view_;
     51  std::vector<float> lp_residual_;
     52  ArrayView<float, kBufSize24kHz> lp_residual_view_;
     53  PitchEstimator pitch_estimator_;
     54  ArrayView<const float, kFrameSize20ms24kHz> reference_frame_view_;
     55  SpectralFeaturesExtractor spectral_features_extractor_;
     56  int pitch_period_48kHz_;
     57 };
     58 
     59 }  // namespace rnn_vad
     60 }  // namespace webrtc
     61 
     62 #endif  // MODULES_AUDIO_PROCESSING_AGC2_RNN_VAD_FEATURES_EXTRACTION_H_