From ed98f7b27ca7581dc8555df52da396ee541c44ed Mon Sep 17 00:00:00 2001 From: Sneha Patil Date: Tue, 22 Oct 2024 13:07:47 +0000 Subject: [PATCH] Refactor VTS tests to use common sine input generation method Bug: 305866207 Test: atest VtsHalVolumeTargetTest atest VtsHalPresetReverbTargetTest atest VtsHalVirtualizerTargetTest atest VtsHalBassBoostTargetTest atest VtsHalEnvironmentalReverbTargetTest Change-Id: I6b31ba94ffed15b4ac467eec87e45c4c5f5b3805 --- audio/aidl/vts/EffectHelper.h | 17 +++++++++++++---- audio/aidl/vts/VtsHalBassBoostTargetTest.cpp | 15 ++------------- .../vts/VtsHalEnvironmentalReverbTargetTest.cpp | 15 +++++---------- audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp | 10 ++-------- audio/aidl/vts/VtsHalVirtualizerTargetTest.cpp | 5 +---- audio/aidl/vts/VtsHalVolumeTargetTest.cpp | 2 +- 6 files changed, 24 insertions(+), 40 deletions(-) diff --git a/audio/aidl/vts/EffectHelper.h b/audio/aidl/vts/EffectHelper.h index f0622a8937..d71697520b 100644 --- a/audio/aidl/vts/EffectHelper.h +++ b/audio/aidl/vts/EffectHelper.h @@ -429,19 +429,28 @@ class EffectHelper { } } - // Generate multitone input between -1 to +1 using testFrequencies - void generateMultiTone(const std::vector& testFrequencies, std::vector& input, - const int samplingFrequency) { + // Generate multitone input between -amplitude to +amplitude using testFrequencies + // All test frequencies are considered having the same amplitude + void generateSineWave(const std::vector& testFrequencies, std::vector& input, + const float amplitude = 1.0, + const int samplingFrequency = kSamplingFrequency) { for (size_t i = 0; i < input.size(); i++) { input[i] = 0; for (size_t j = 0; j < testFrequencies.size(); j++) { input[i] += sin(2 * M_PI * testFrequencies[j] * i / samplingFrequency); } - input[i] /= testFrequencies.size(); + input[i] *= amplitude / testFrequencies.size(); } } + // Generate single tone input between -amplitude to +amplitude using testFrequency + void generateSineWave(const int testFrequency, std::vector& input, + const float amplitude = 1.0, + const int samplingFrequency = kSamplingFrequency) { + generateSineWave(std::vector{testFrequency}, input, amplitude, samplingFrequency); + } + // Use FFT transform to convert the buffer to frequency domain // Compute its magnitude at binOffsets std::vector calculateMagnitude(const std::vector& buffer, diff --git a/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp b/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp index 4c540434cf..5a24be7225 100644 --- a/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp +++ b/audio/aidl/vts/VtsHalBassBoostTargetTest.cpp @@ -187,18 +187,6 @@ class BassBoostDataTest : public ::testing::TestWithParam& testFrequencies, std::vector& input) { - for (auto i = 0; i < kInputSize; i++) { - input[i] = 0; - - for (size_t j = 0; j < testFrequencies.size(); j++) { - input[i] += sin(2 * M_PI * testFrequencies[j] * i / kSamplingFrequency); - } - input[i] /= testFrequencies.size(); - } - } - // Use FFT transform to convert the buffer to frequency domain // Compute its magnitude at binOffsets std::vector calculateMagnitude(const std::vector& buffer, @@ -251,7 +239,8 @@ TEST_P(BassBoostDataTest, IncreasingStrength) { roundToFreqCenteredToFftBin(testFrequencies, binOffsets); - generateMultiTone(testFrequencies, input); + // Generate multitone input + generateSineWave(testFrequencies, input); inputMag = calculateMagnitude(input, binOffsets); diff --git a/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp b/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp index 1e4e735976..a29920ee28 100644 --- a/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp +++ b/audio/aidl/vts/VtsHalEnvironmentalReverbTargetTest.cpp @@ -224,12 +224,6 @@ class EnvironmentalReverbHelper : public EffectHelper { output.size()); } - void generateSineWaveInput(std::vector& input) { - int frequency = 1000; - for (size_t i = 0; i < input.size(); i++) { - input[i] = sin(2 * M_PI * frequency * i / kSamplingFrequency); - } - } using Maker = EnvironmentalReverb (*)(int); static constexpr std::array(EnvironmentalReverb::bypass) + 1> @@ -287,6 +281,7 @@ class EnvironmentalReverbHelper : public EffectHelper { static constexpr int kDurationMilliSec = 500; static constexpr int kBufferSize = kSamplingFrequency * kDurationMilliSec / 1000; + static constexpr int kInputFrequency = 1000; int mStereoChannelCount = getChannelCount(AudioChannelLayout::make( @@ -349,7 +344,7 @@ class EnvironmentalReverbDataTest : EnvironmentalReverbHelper(std::get(GetParam())) { std::tie(mTag, mParamValues) = std::get(GetParam()); mInput.resize(kBufferSize); - generateSineWaveInput(mInput); + generateSineWave(kInputFrequency, mInput); } void SetUp() override { SKIP_TEST_IF_DATA_UNSUPPORTED(mDescriptor.common.flags); @@ -439,7 +434,7 @@ class EnvironmentalReverbMinimumParamTest TEST_P(EnvironmentalReverbMinimumParamTest, MinimumValueTest) { std::vector input(kBufferSize); - generateSineWaveInput(input); + generateSineWave(kInputFrequency, input); std::vector output(kBufferSize); setParameterAndProcess(input, output, mValue, mTag); float energy = computeOutputEnergy(input, output); @@ -475,7 +470,7 @@ class EnvironmentalReverbDiffusionTest : EnvironmentalReverbHelper(std::get(GetParam())) { std::tie(mTag, mParamValues) = std::get(GetParam()); mInput.resize(kBufferSize); - generateSineWaveInput(mInput); + generateSineWave(kInputFrequency, mInput); } void SetUp() override { SKIP_TEST_IF_DATA_UNSUPPORTED(mDescriptor.common.flags); @@ -554,7 +549,7 @@ class EnvironmentalReverbDensityTest if (mIsInputMute) { std::fill(mInput.begin(), mInput.end(), 0); } else { - generateSineWaveInput(mInput); + generateSineWave(kInputFrequency, mInput); } } void SetUp() override { diff --git a/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp b/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp index 8b82427c11..3ce9e53011 100644 --- a/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp +++ b/audio/aidl/vts/VtsHalPresetReverbTargetTest.cpp @@ -132,7 +132,8 @@ class PresetReverbProcessTest : public ::testing::TestWithParam, mInputMag.resize(mTestFrequencies.size()); mBinOffsets.resize(mTestFrequencies.size()); roundToFreqCenteredToFftBin(mTestFrequencies, mBinOffsets, kBinWidth); - generateMultiTone(mTestFrequencies, mInput, kSamplingFrequency); + generateSineWave(mTestFrequencies, mInput); mInputMag = calculateMagnitude(mInput, mBinOffsets, kNPointFFT); }