Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Side by Side Diff: webrtc/modules/audio_processing/agc/standalone_vad_unittest.cc

Issue 1212543002: Pull the Voice Activity Detector out from the AGC (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
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 #include "webrtc/modules/audio_processing/agc/standalone_vad.h"
12
13 #include <string.h>
14
15 #include "gtest/gtest.h"
16 #include "webrtc/base/scoped_ptr.h"
17 #include "webrtc/modules/interface/module_common_types.h"
18 #include "webrtc/test/testsupport/fileutils.h"
19 #include "webrtc/test/testsupport/gtest_disable.h"
20
21 namespace webrtc {
22
23 TEST(StandaloneVadTest, Api) {
24 rtc::scoped_ptr<StandaloneVad> vad(StandaloneVad::Create());
25 int16_t data[kLength10Ms] = { 0 };
26
27 // Valid frame length (for 32 kHz rate), but not what the VAD is expecting.
28 EXPECT_EQ(-1, vad->AddAudio(data, 320));
29
30 const int kMaxNumFrames = 3;
31 double p[kMaxNumFrames];
32 for (int n = 0; n < kMaxNumFrames; n++)
33 EXPECT_EQ(0, vad->AddAudio(data, kLength10Ms));
34
35 // Pretend |p| is shorter that it should be.
36 EXPECT_EQ(-1, vad->GetActivity(p, kMaxNumFrames - 1));
37
38 EXPECT_EQ(0, vad->GetActivity(p, kMaxNumFrames));
39
40 // Ask for activity when buffer is empty.
41 EXPECT_EQ(-1, vad->GetActivity(p, kMaxNumFrames));
42
43 // Should reset and result in one buffer.
44 for (int n = 0; n < kMaxNumFrames + 1; n++)
45 EXPECT_EQ(0, vad->AddAudio(data, kLength10Ms));
46 EXPECT_EQ(0, vad->GetActivity(p, 1));
47
48 // Wrong modes
49 EXPECT_EQ(-1, vad->set_mode(-1));
50 EXPECT_EQ(-1, vad->set_mode(4));
51
52 // Valid mode.
53 const int kMode = 2;
54 EXPECT_EQ(0, vad->set_mode(kMode));
55 EXPECT_EQ(kMode, vad->mode());
56 }
57
58 TEST(StandaloneVadTest, DISABLED_ON_IOS(ActivityDetection)) {
59 rtc::scoped_ptr<StandaloneVad> vad(StandaloneVad::Create());
60 const size_t kDataLength = kLength10Ms;
61 int16_t data[kDataLength] = { 0 };
62
63 FILE* pcm_file =
64 fopen(test::ResourcePath("audio_processing/agc/agc_audio", "pcm").c_str(),
65 "rb");
66 ASSERT_TRUE(pcm_file != NULL);
67
68 FILE* reference_file = fopen(
69 test::ResourcePath("audio_processing/agc/agc_vad", "dat").c_str(), "rb");
70 ASSERT_TRUE(reference_file != NULL);
71
72 // Reference activities are prepared with 0 aggressiveness.
73 ASSERT_EQ(0, vad->set_mode(0));
74
75 // Stand-alone VAD can operate on 1, 2 or 3 frames of length 10 ms. The
76 // reference file is created for 30 ms frame.
77 const int kNumVadFramesToProcess = 3;
78 int num_frames = 0;
79 while (fread(data, sizeof(int16_t), kDataLength, pcm_file) == kDataLength) {
80 vad->AddAudio(data, kDataLength);
81 num_frames++;
82 if (num_frames == kNumVadFramesToProcess) {
83 num_frames = 0;
84 int referece_activity;
85 double p[kNumVadFramesToProcess];
86 EXPECT_EQ(1u, fread(&referece_activity, sizeof(referece_activity), 1,
87 reference_file));
88 int activity = vad->GetActivity(p, kNumVadFramesToProcess);
89 EXPECT_EQ(referece_activity, activity);
90 if (activity != 0) {
91 // When active, probabilities are set to 0.5.
92 for (int n = 0; n < kNumVadFramesToProcess; n++)
93 EXPECT_EQ(0.5, p[n]);
94 } else {
95 // When inactive, probabilities are set to 0.01.
96 for (int n = 0; n < kNumVadFramesToProcess; n++)
97 EXPECT_EQ(0.01, p[n]);
98 }
99 }
100 }
101 fclose(reference_file);
102 fclose(pcm_file);
103 }
104 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698