1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "remoting/host/audio_silence_detector.h" 6 7 #include "base/basictypes.h" 8 #include "testing/gtest/include/gtest/gtest.h" 9 10 namespace remoting { 11 12 namespace { 13 14 const int kSamplingRate = 1000; 15 16 void TestSilenceDetector(AudioSilenceDetector* target, 17 const int16* samples, int samples_count, 18 bool silence_expected) { 19 target->Reset(kSamplingRate, 1); 20 bool silence_started = false; 21 int threshold_length = 0; 22 for (int i = 0; i < 3 * kSamplingRate / samples_count; ++i) { 23 bool result = target->IsSilence(samples, samples_count); 24 if (silence_started) { 25 ASSERT_TRUE(result); 26 } else if (result) { 27 silence_started = true; 28 threshold_length = i * samples_count; 29 } 30 } 31 32 // Check that the silence was detected if it was expected. 33 EXPECT_EQ(silence_expected, silence_started); 34 35 if (silence_expected) { 36 // Check that silence threshold is between 0.5 and 2 seconds. 37 EXPECT_GE(threshold_length, kSamplingRate / 2); 38 EXPECT_LE(threshold_length, kSamplingRate * 2); 39 } 40 } 41 42 } // namespace 43 44 TEST(AudioSilenceDetectorTest, Silence) { 45 const int16 kSamples[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; 46 47 AudioSilenceDetector target(0); 48 TestSilenceDetector(&target, kSamples, arraysize(kSamples), true); 49 } 50 51 TEST(AudioSilenceDetectorTest, Sound) { 52 const int16 kSamples[] = {65, 73, 83, 89, 92, -1, 5, 9, 123, 0}; 53 54 AudioSilenceDetector target(0); 55 TestSilenceDetector(&target, kSamples, arraysize(kSamples), false); 56 } 57 58 TEST(AudioSilenceDetectorTest, Threshold) { 59 const int16 kSamples[] = {0, 0, 0, 0, 1, 0, 0, -1, 0, 0}; 60 61 AudioSilenceDetector target1(0); 62 TestSilenceDetector(&target1, kSamples, arraysize(kSamples), false); 63 64 AudioSilenceDetector target2(1); 65 TestSilenceDetector(&target2, kSamples, arraysize(kSamples), true); 66 } 67 68 } // namespace remoting 69