tor-browser

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

speech_probability_buffer.h (2951B)


      1 /*
      2 *  Copyright (c) 2022 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_SPEECH_PROBABILITY_BUFFER_H_
     12 #define MODULES_AUDIO_PROCESSING_AGC2_SPEECH_PROBABILITY_BUFFER_H_
     13 
     14 #include <vector>
     15 
     16 #include "rtc_base/gtest_prod_util.h"
     17 
     18 namespace webrtc {
     19 
     20 // This class implements a circular buffer that stores speech probabilities
     21 // for a speech segment and estimates speech activity for that segment.
     22 class SpeechProbabilityBuffer {
     23 public:
     24  // Ctor. The value of `low_probability_threshold` is required to be on the
     25  // range [0.0f, 1.0f].
     26  explicit SpeechProbabilityBuffer(float low_probability_threshold);
     27  ~SpeechProbabilityBuffer() {}
     28  SpeechProbabilityBuffer(const SpeechProbabilityBuffer&) = delete;
     29  SpeechProbabilityBuffer& operator=(const SpeechProbabilityBuffer&) = delete;
     30 
     31  // Adds `probability` in the buffer and computes an updatds sum of the buffer
     32  // probabilities. Value of `probability` is required to be on the range
     33  // [0.0f, 1.0f].
     34  void Update(float probability);
     35 
     36  // Resets the histogram, forgets the past.
     37  void Reset();
     38 
     39  // Returns true if the segment is active (a long enough segment with an
     40  // average speech probability above `low_probability_threshold`).
     41  bool IsActiveSegment() const;
     42 
     43 private:
     44  void RemoveTransient();
     45 
     46  // Use only for testing.
     47  float GetSumProbabilities() const { return sum_probabilities_; }
     48 
     49  FRIEND_TEST_ALL_PREFIXES(SpeechProbabilityBufferTest,
     50                           CheckSumAfterInitialization);
     51  FRIEND_TEST_ALL_PREFIXES(SpeechProbabilityBufferTest, CheckSumAfterUpdate);
     52  FRIEND_TEST_ALL_PREFIXES(SpeechProbabilityBufferTest, CheckSumAfterReset);
     53  FRIEND_TEST_ALL_PREFIXES(SpeechProbabilityBufferTest,
     54                           CheckSumAfterTransientNotRemoved);
     55  FRIEND_TEST_ALL_PREFIXES(SpeechProbabilityBufferTest,
     56                           CheckSumAfterTransientRemoved);
     57 
     58  const float low_probability_threshold_;
     59 
     60  // Sum of probabilities stored in `probabilities_`. Must be updated if
     61  // `probabilities_` is updated.
     62  float sum_probabilities_ = 0.0f;
     63 
     64  // Circular buffer for probabilities.
     65  std::vector<float> probabilities_;
     66 
     67  // Current index of the circular buffer, where the newest data will be written
     68  // to, therefore, pointing to the oldest data if buffer is full.
     69  int buffer_index_ = 0;
     70 
     71  // Indicates if the buffer is full and adding a new value removes the oldest
     72  // value.
     73  int buffer_is_full_ = false;
     74 
     75  int num_high_probability_observations_ = 0;
     76 };
     77 
     78 }  // namespace webrtc
     79 
     80 #endif  // MODULES_AUDIO_PROCESSING_AGC2_SPEECH_PROBABILITY_BUFFER_H_