tor-browser

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

vad_circular_buffer.h (2497B)


      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 MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_
     12 #define MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_
     13 
     14 #include <memory>
     15 
     16 namespace webrtc {
     17 
     18 // A circular buffer tailored to the need of this project. It stores last
     19 // K samples of the input, and keeps track of the mean of the last samples.
     20 //
     21 // It is used in class "PitchBasedActivity" to keep track of posterior
     22 // probabilities in the past few seconds. The posterior probabilities are used
     23 // to recursively update prior probabilities.
     24 class VadCircularBuffer {
     25 public:
     26  static VadCircularBuffer* Create(int buffer_size);
     27  ~VadCircularBuffer();
     28 
     29  // If buffer is wrapped around.
     30  bool is_full() const { return is_full_; }
     31  // Get the oldest entry in the buffer.
     32  double Oldest() const;
     33  // Insert new value into the buffer.
     34  void Insert(double value);
     35  // Reset buffer, forget the past, start fresh.
     36  void Reset();
     37 
     38  // The mean value of the elements in the buffer. The return value is zero if
     39  // buffer is empty, i.e. no value is inserted.
     40  double Mean();
     41  // Remove transients. If the values exceed `val_threshold` for a period
     42  // shorter then or equal to `width_threshold`, then that period is considered
     43  // transient and set to zero.
     44  int RemoveTransient(int width_threshold, double val_threshold);
     45 
     46 private:
     47  explicit VadCircularBuffer(int buffer_size);
     48  // Get previous values. |index = 0| corresponds to the most recent
     49  // insertion. |index = 1| is the one before the most recent insertion, and
     50  // so on.
     51  int Get(int index, double* value) const;
     52  // Set a given position to `value`. `index` is interpreted as above.
     53  int Set(int index, double value);
     54  // Return the number of valid elements in the buffer.
     55  int BufferLevel();
     56 
     57  // Convert an index with the interpretation as get() method to the
     58  // corresponding linear index.
     59  int ConvertToLinearIndex(int* index) const;
     60 
     61  std::unique_ptr<double[]> buffer_;
     62  bool is_full_;
     63  int index_;
     64  int buffer_size_;
     65  double sum_;
     66 };
     67 
     68 }  // namespace webrtc
     69 #endif  // MODULES_AUDIO_PROCESSING_VAD_VAD_CIRCULAR_BUFFER_H_