Merge "Refactor VTS tests to use common sine input generation method" into main

This commit is contained in:
Treehugger Robot
2024-11-07 19:27:51 +00:00
committed by Gerrit Code Review
6 changed files with 24 additions and 40 deletions

View File

@@ -429,19 +429,28 @@ class EffectHelper {
}
}
// Generate multitone input between -1 to +1 using testFrequencies
void generateMultiTone(const std::vector<int>& testFrequencies, std::vector<float>& 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<int>& testFrequencies, std::vector<float>& 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<float>& input,
const float amplitude = 1.0,
const int samplingFrequency = kSamplingFrequency) {
generateSineWave(std::vector<int>{testFrequency}, input, amplitude, samplingFrequency);
}
// Use FFT transform to convert the buffer to frequency domain
// Compute its magnitude at binOffsets
std::vector<float> calculateMagnitude(const std::vector<float>& buffer,

View File

@@ -187,18 +187,6 @@ class BassBoostDataTest : public ::testing::TestWithParam<BassBoostDataTestParam
}
}
// Generate multitone input between -1 to +1 using testFrequencies
void generateMultiTone(const std::vector<int>& testFrequencies, std::vector<float>& 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<float> calculateMagnitude(const std::vector<float>& 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);

View File

@@ -224,12 +224,6 @@ class EnvironmentalReverbHelper : public EffectHelper {
output.size());
}
void generateSineWaveInput(std::vector<float>& 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<Maker, static_cast<int>(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<AudioChannelLayout::layoutMask>(
@@ -349,7 +344,7 @@ class EnvironmentalReverbDataTest
: EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
std::tie(mTag, mParamValues) = std::get<TAG_VALUE_PAIR>(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<float> input(kBufferSize);
generateSineWaveInput(input);
generateSineWave(kInputFrequency, input);
std::vector<float> output(kBufferSize);
setParameterAndProcess(input, output, mValue, mTag);
float energy = computeOutputEnergy(input, output);
@@ -475,7 +470,7 @@ class EnvironmentalReverbDiffusionTest
: EnvironmentalReverbHelper(std::get<DESCRIPTOR_INDEX>(GetParam())) {
std::tie(mTag, mParamValues) = std::get<TAG_VALUE_PAIR>(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 {

View File

@@ -132,7 +132,8 @@ class PresetReverbProcessTest : public ::testing::TestWithParam<PresetReverbProc
public:
PresetReverbProcessTest() {
std::tie(mFactory, mDescriptor) = GetParam();
generateSineWaveInput();
mInput.resize(kBufferSize);
generateSineWave(1000 /*Input Frequency*/, mInput);
}
void SetUp() override {
@@ -144,13 +145,6 @@ class PresetReverbProcessTest : public ::testing::TestWithParam<PresetReverbProc
ASSERT_NO_FATAL_FAILURE(TearDownPresetReverb());
}
void generateSineWaveInput() {
int frequency = 1000;
for (size_t i = 0; i < kBufferSize; i++) {
mInput.push_back(sin(2 * M_PI * frequency * i / kSamplingFrequency));
}
}
bool isAuxiliary() {
return mDescriptor.common.flags.type ==
aidl::android::hardware::audio::effect::Flags::Type::AUXILIARY;

View File

@@ -163,10 +163,7 @@ class VirtualizerProcessTest : public ::testing::TestWithParam<VirtualizerProces
if (mZeroInput) {
std::fill(buffer.begin(), buffer.end(), 0);
} else {
int frequency = 100;
for (size_t i = 0; i < buffer.size(); i++) {
buffer[i] = sin(2 * M_PI * frequency * i / kSamplingFrequency);
}
generateSineWave(1000 /*Input Frequency*/, buffer);
}
}

View File

@@ -162,7 +162,7 @@ class VolumeDataTest : public ::testing::TestWithParam<VolumeDataTestParam>,
mInputMag.resize(mTestFrequencies.size());
mBinOffsets.resize(mTestFrequencies.size());
roundToFreqCenteredToFftBin(mTestFrequencies, mBinOffsets, kBinWidth);
generateMultiTone(mTestFrequencies, mInput, kSamplingFrequency);
generateSineWave(mTestFrequencies, mInput);
mInputMag = calculateMagnitude(mInput, mBinOffsets, kNPointFFT);
}