* Copyright (c) 2022 The WebRTC project authors. All Rights Reserved.
*
* Use of this source code is governed by a BSD-style license
* that can be found in the LICENSE file in the root of the source
* tree. An additional intellectual property rights grant can be found
* in the file PATENTS. All contributing project authors may
* be found in the AUTHORS file in the root of the source tree.
*/
#include "modules/audio_processing/transient/voice_probability_delay_unit.h"
#include "test/gtest.h"
namespace webrtc {
namespace {
TEST(VoiceProbabilityDelayUnit, NoDelay) {
VoiceProbabilityDelayUnit delay_unit(0,
48000);
constexpr int kMax = 5;
for (int i = 0; i <= kMax; ++i) {
SCOPED_TRACE(i);
float voice_probability = static_cast<float>(i) / kMax;
EXPECT_EQ(voice_probability, delay_unit.Delay(voice_probability));
}
}
TEST(VoiceProbabilityDelayUnit, IntegerDelay) {
VoiceProbabilityDelayUnit delay_unit_10ms(480,
48000);
delay_unit_10ms.Delay(0.125f);
EXPECT_EQ(0.125f, delay_unit_10ms.Delay(0.9f));
VoiceProbabilityDelayUnit delay_unit_20ms(960,
48000);
delay_unit_20ms.Delay(0.125f);
delay_unit_20ms.Delay(0.8f);
EXPECT_EQ(0.125f, delay_unit_20ms.Delay(0.9f));
}
TEST(VoiceProbabilityDelayUnit, FractionalDelayLessThan10ms) {
VoiceProbabilityDelayUnit delay_unit(288,
48000);
delay_unit.Delay(1.0f);
EXPECT_FLOAT_EQ(0.68f, delay_unit.Delay(0.2f));
}
TEST(VoiceProbabilityDelayUnit, FractionalDelayGreaterThan10ms) {
VoiceProbabilityDelayUnit delay_unit(672,
48000);
delay_unit.Delay(1.0f);
delay_unit.Delay(0.2f);
EXPECT_FLOAT_EQ(0.52f, delay_unit.Delay(1.0f));
}
TEST(VoiceProbabilityDelayUnit, InitializeResetsDelayUnit) {
VoiceProbabilityDelayUnit delay_unit(960,
48000);
delay_unit.Delay(1.0f);
delay_unit.Delay(0.9f);
delay_unit.Initialize(160, 8000);
EXPECT_EQ(0.0f, delay_unit.Delay(0.1f));
EXPECT_EQ(0.0f, delay_unit.Delay(0.2f));
EXPECT_EQ(0.1f, delay_unit.Delay(0.3f));
}
TEST(VoiceProbabilityDelayUnit, InitializeHandlesDelayChanges) {
VoiceProbabilityDelayUnit delay_unit(960,
48000);
delay_unit.Delay(1.0f);
delay_unit.Delay(0.9f);
delay_unit.Initialize(80, 8000);
EXPECT_EQ(0.0f, delay_unit.Delay(0.1f));
EXPECT_EQ(0.1f, delay_unit.Delay(0.2f));
delay_unit.Initialize(120, 8000);
EXPECT_EQ(0.0f, delay_unit.Delay(0.1f));
EXPECT_EQ(0.05f, delay_unit.Delay(0.2f));
EXPECT_EQ(0.15f, delay_unit.Delay(0.3f));
}
}
}