tor-browser

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

speech_probability_buffer_unittest.cc (8289B)


      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 #include "modules/audio_processing/agc2/speech_probability_buffer.h"
     12 
     13 #include "test/gtest.h"
     14 
     15 namespace webrtc {
     16 namespace {
     17 
     18 constexpr float kAbsError = 0.001f;
     19 constexpr float kActivityThreshold = 0.9f;
     20 constexpr float kLowProbabilityThreshold = 0.2f;
     21 constexpr int kNumAnalysisFrames = 100;
     22 
     23 }  // namespace
     24 
     25 TEST(SpeechProbabilityBufferTest, CheckSumAfterInitialization) {
     26  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
     27 
     28  EXPECT_EQ(buffer.GetSumProbabilities(), 0.0f);
     29 }
     30 
     31 TEST(SpeechProbabilityBufferTest, CheckSumAfterUpdate) {
     32  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
     33 
     34  buffer.Update(0.7f);
     35 
     36  EXPECT_NEAR(buffer.GetSumProbabilities(), 0.7f, kAbsError);
     37 
     38  buffer.Update(0.6f);
     39 
     40  EXPECT_NEAR(buffer.GetSumProbabilities(), 1.3f, kAbsError);
     41 
     42  for (int i = 0; i < kNumAnalysisFrames - 1; ++i) {
     43    buffer.Update(1.0f);
     44  }
     45 
     46  EXPECT_NEAR(buffer.GetSumProbabilities(), 99.6f, kAbsError);
     47 }
     48 
     49 TEST(SpeechProbabilityBufferTest, CheckSumAfterReset) {
     50  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
     51 
     52  buffer.Update(0.7f);
     53  buffer.Update(0.6f);
     54  buffer.Update(0.3f);
     55 
     56  EXPECT_GT(buffer.GetSumProbabilities(), 0.0f);
     57 
     58  buffer.Reset();
     59 
     60  EXPECT_EQ(buffer.GetSumProbabilities(), 0.0f);
     61 }
     62 
     63 TEST(SpeechProbabilityBufferTest, CheckSumAfterTransientNotRemoved) {
     64  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
     65 
     66  buffer.Update(1.0f);
     67  buffer.Update(1.0f);
     68  buffer.Update(1.0f);
     69  buffer.Update(1.0f);
     70  buffer.Update(1.0f);
     71  buffer.Update(1.0f);
     72  buffer.Update(1.0f);
     73  buffer.Update(1.0f);
     74  buffer.Update(1.0f);
     75 
     76  buffer.Update(0.0f);
     77 
     78  EXPECT_NEAR(buffer.GetSumProbabilities(), 9.0f, kAbsError);
     79 
     80  buffer.Update(0.0f);
     81 
     82  EXPECT_NEAR(buffer.GetSumProbabilities(), 9.0f, kAbsError);
     83 }
     84 
     85 TEST(SpeechProbabilityBufferTest, CheckSumAfterTransientRemoved) {
     86  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
     87 
     88  buffer.Update(0.0f);
     89  buffer.Update(0.0f);
     90  buffer.Update(0.0f);
     91  buffer.Update(0.0f);
     92  buffer.Update(0.0f);
     93  buffer.Update(0.0f);
     94  buffer.Update(1.0f);
     95  buffer.Update(1.0f);
     96  buffer.Update(1.0f);
     97 
     98  EXPECT_NEAR(buffer.GetSumProbabilities(), 3.0f, kAbsError);
     99 
    100  buffer.Update(0.0f);
    101 
    102  EXPECT_NEAR(buffer.GetSumProbabilities(), 0.0f, kAbsError);
    103 }
    104 
    105 TEST(SpeechProbabilityBufferTest, CheckSegmentIsNotActiveAfterNoUpdates) {
    106  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    107 
    108  EXPECT_FALSE(buffer.IsActiveSegment());
    109 }
    110 
    111 TEST(SpeechProbabilityBufferTest, CheckSegmentIsActiveChangesFromFalseToTrue) {
    112  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    113 
    114  // Add low probabilities until the buffer is full. That's not enough
    115  // to make `IsActiveSegment()` to return true.
    116  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    117    buffer.Update(0.0f);
    118  }
    119 
    120  EXPECT_FALSE(buffer.IsActiveSegment());
    121 
    122  // Add high probabilities until `IsActiveSegment()` returns true.
    123  for (int i = 0; i < kActivityThreshold * kNumAnalysisFrames - 1; ++i) {
    124    buffer.Update(1.0f);
    125  }
    126 
    127  EXPECT_FALSE(buffer.IsActiveSegment());
    128 
    129  buffer.Update(1.0f);
    130 
    131  EXPECT_TRUE(buffer.IsActiveSegment());
    132 }
    133 
    134 TEST(SpeechProbabilityBufferTest, CheckSegmentIsActiveChangesFromTrueToFalse) {
    135  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    136 
    137  // Add high probabilities until the buffer is full. That's enough to
    138  // make `IsActiveSegment()` to return true.
    139  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    140    buffer.Update(1.0f);
    141  }
    142 
    143  EXPECT_TRUE(buffer.IsActiveSegment());
    144 
    145  // Add low probabilities until `IsActiveSegment()` returns false.
    146  for (int i = 0; i < (1.0f - kActivityThreshold) * kNumAnalysisFrames - 1;
    147       ++i) {
    148    buffer.Update(0.0f);
    149  }
    150 
    151  EXPECT_TRUE(buffer.IsActiveSegment());
    152 
    153  buffer.Update(1.0f);
    154 
    155  EXPECT_TRUE(buffer.IsActiveSegment());
    156 }
    157 
    158 TEST(SpeechProbabilityBufferTest,
    159     CheckSegmentIsActiveAfterUpdatesWithHighProbabilities) {
    160  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    161 
    162  for (int i = 0; i < kNumAnalysisFrames - 1; ++i) {
    163    buffer.Update(1.0f);
    164  }
    165 
    166  EXPECT_FALSE(buffer.IsActiveSegment());
    167 
    168  buffer.Update(1.0f);
    169 
    170  EXPECT_TRUE(buffer.IsActiveSegment());
    171 }
    172 
    173 TEST(SpeechProbabilityBufferTest,
    174     CheckSegmentIsNotActiveAfterUpdatesWithLowProbabilities) {
    175  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    176 
    177  for (int i = 0; i < kNumAnalysisFrames - 1; ++i) {
    178    buffer.Update(0.3f);
    179  }
    180 
    181  EXPECT_FALSE(buffer.IsActiveSegment());
    182 
    183  buffer.Update(0.3f);
    184 
    185  EXPECT_FALSE(buffer.IsActiveSegment());
    186 }
    187 
    188 TEST(SpeechProbabilityBufferTest, CheckSegmentIsActiveAfterBufferIsFull) {
    189  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    190 
    191  for (int i = 0; i < kNumAnalysisFrames - 1; ++i) {
    192    buffer.Update(1.0f);
    193  }
    194 
    195  EXPECT_FALSE(buffer.IsActiveSegment());
    196 
    197  buffer.Update(1.0f);
    198 
    199  EXPECT_TRUE(buffer.IsActiveSegment());
    200 
    201  buffer.Update(1.0f);
    202 
    203  EXPECT_TRUE(buffer.IsActiveSegment());
    204 }
    205 
    206 TEST(SpeechProbabilityBufferTest, CheckSegmentIsNotActiveAfterBufferIsFull) {
    207  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    208 
    209  for (int i = 0; i < kNumAnalysisFrames - 1; ++i) {
    210    buffer.Update(0.29f);
    211  }
    212 
    213  EXPECT_FALSE(buffer.IsActiveSegment());
    214 
    215  buffer.Update(0.29f);
    216 
    217  EXPECT_FALSE(buffer.IsActiveSegment());
    218 
    219  buffer.Update(0.29f);
    220 
    221  EXPECT_FALSE(buffer.IsActiveSegment());
    222 }
    223 
    224 TEST(SpeechProbabilityBufferTest, CheckSegmentIsNotActiveAfterReset) {
    225  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    226 
    227  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    228    buffer.Update(1.0f);
    229  }
    230 
    231  EXPECT_TRUE(buffer.IsActiveSegment());
    232 
    233  buffer.Reset();
    234 
    235  EXPECT_FALSE(buffer.IsActiveSegment());
    236 }
    237 
    238 TEST(SpeechProbabilityBufferTest,
    239     CheckSegmentIsNotActiveAfterTransientRemovedAfterFewUpdates) {
    240  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    241 
    242  buffer.Update(0.4f);
    243  buffer.Update(0.4f);
    244  buffer.Update(0.0f);
    245 
    246  EXPECT_FALSE(buffer.IsActiveSegment());
    247 }
    248 
    249 TEST(SpeechProbabilityBufferTest,
    250     CheckSegmentIsActiveAfterTransientNotRemoved) {
    251  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    252 
    253  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    254    buffer.Update(1.0f);
    255  }
    256 
    257  buffer.Update(0.7f);
    258  buffer.Update(0.8f);
    259  buffer.Update(0.9f);
    260  buffer.Update(1.0f);
    261 
    262  EXPECT_TRUE(buffer.IsActiveSegment());
    263 
    264  buffer.Update(0.0f);
    265 
    266  EXPECT_TRUE(buffer.IsActiveSegment());
    267 
    268  buffer.Update(0.7f);
    269 
    270  EXPECT_TRUE(buffer.IsActiveSegment());
    271 }
    272 
    273 TEST(SpeechProbabilityBufferTest,
    274     CheckSegmentIsNotActiveAfterTransientNotRemoved) {
    275  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    276 
    277  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    278    buffer.Update(0.1f);
    279  }
    280 
    281  buffer.Update(0.7f);
    282  buffer.Update(0.8f);
    283  buffer.Update(0.9f);
    284  buffer.Update(1.0f);
    285 
    286  EXPECT_FALSE(buffer.IsActiveSegment());
    287 
    288  buffer.Update(0.0f);
    289 
    290  EXPECT_FALSE(buffer.IsActiveSegment());
    291 
    292  buffer.Update(0.7f);
    293 
    294  EXPECT_FALSE(buffer.IsActiveSegment());
    295 }
    296 
    297 TEST(SpeechProbabilityBufferTest,
    298     CheckSegmentIsNotActiveAfterTransientRemoved) {
    299  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    300 
    301  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    302    buffer.Update(0.1f);
    303  }
    304 
    305  buffer.Update(0.7f);
    306  buffer.Update(0.8f);
    307  buffer.Update(0.9f);
    308  buffer.Update(1.0f);
    309 
    310  EXPECT_FALSE(buffer.IsActiveSegment());
    311 
    312  buffer.Update(0.0f);
    313 
    314  EXPECT_FALSE(buffer.IsActiveSegment());
    315 
    316  buffer.Update(0.7f);
    317 
    318  EXPECT_FALSE(buffer.IsActiveSegment());
    319 }
    320 
    321 TEST(SpeechProbabilityBufferTest, CheckSegmentIsActiveAfterTransientRemoved) {
    322  SpeechProbabilityBuffer buffer(kLowProbabilityThreshold);
    323 
    324  for (int i = 0; i < kNumAnalysisFrames; ++i) {
    325    buffer.Update(1.0f);
    326  }
    327 
    328  buffer.Update(0.7f);
    329  buffer.Update(0.8f);
    330  buffer.Update(0.9f);
    331  buffer.Update(1.0f);
    332 
    333  EXPECT_TRUE(buffer.IsActiveSegment());
    334 
    335  buffer.Update(0.0f);
    336 
    337  EXPECT_TRUE(buffer.IsActiveSegment());
    338 
    339  buffer.Update(0.7f);
    340 
    341  EXPECT_TRUE(buffer.IsActiveSegment());
    342 }
    343 
    344 }  // namespace webrtc