1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112
|
#include <gtest/gtest.h>
#include <algorithm>
#include <vector>
#include <fstream>
#include "test_utils.h"
#include "audio_processor.h"
#include "audio_buffer.h"
#include "utils.h"
using namespace chromaprint;
TEST(AudioProcessor, Accessors)
{
std::vector<short> data = LoadAudioFile("data/test_mono_44100.raw");
AudioBuffer buffer;
AudioBuffer buffer2;
AudioProcessor processor(44100, &buffer);
EXPECT_EQ(44100, processor.target_sample_rate());
EXPECT_EQ(&buffer, processor.consumer());
processor.set_target_sample_rate(11025);
EXPECT_EQ(11025, processor.target_sample_rate());
processor.set_consumer(&buffer2);
EXPECT_EQ(&buffer2, processor.consumer());
}
TEST(AudioProcessor, PassThrough)
{
std::vector<short> data = LoadAudioFile("data/test_mono_44100.raw");
AudioBuffer buffer;
AudioProcessor processor(44100, &buffer);
processor.Reset(44100, 1);
processor.Consume(data.data(), data.size());
processor.Flush();
ASSERT_EQ(data.size(), buffer.data().size());
for (size_t i = 0; i < data.size(); i++) {
ASSERT_EQ(data[i], buffer.data()[i]) << "Signals differ at index " << i;
}
}
TEST(AudioProcessor, StereoToMono)
{
std::vector<short> data1 = LoadAudioFile("data/test_stereo_44100.raw");
std::vector<short> data2 = LoadAudioFile("data/test_mono_44100.raw");
AudioBuffer buffer;
AudioProcessor processor(44100, &buffer);
processor.Reset(44100, 2);
processor.Consume(data1.data(), data1.size());
processor.Flush();
ASSERT_EQ(data2.size(), buffer.data().size());
for (size_t i = 0; i < data2.size(); i++) {
ASSERT_EQ(data2[i], buffer.data()[i]) << "Signals differ at index " << i;
}
}
TEST(AudioProcessor, ResampleMono)
{
std::vector<short> data1 = LoadAudioFile("data/test_mono_44100.raw");
std::vector<short> data2 = LoadAudioFile("data/test_mono_11025.raw");
AudioBuffer buffer;
AudioProcessor processor(11025, &buffer);
processor.Reset(44100, 1);
processor.Consume(data1.data(), data1.size());
processor.Flush();
ASSERT_EQ(data2.size(), buffer.data().size());
for (size_t i = 0; i < data2.size(); i++) {
ASSERT_EQ(data2[i], buffer.data()[i]) << "Signals differ at index " << i;
}
}
TEST(AudioProcessor, ResampleMonoNonInteger)
{
std::vector<short> data1 = LoadAudioFile("data/test_mono_44100.raw");
std::vector<short> data2 = LoadAudioFile("data/test_mono_8000.raw");
AudioBuffer buffer;
AudioProcessor processor(8000, &buffer);
processor.Reset(44100, 1);
processor.Consume(data1.data(), data1.size());
processor.Flush();
ASSERT_EQ(data2.size(), buffer.data().size());
for (size_t i = 0; i < data2.size(); i++) {
ASSERT_NEAR(data2[i], buffer.data()[i], 3) << "Signals differ at index " << i;
}
}
TEST(AudioProcessor, StereoToMonoAndResample)
{
std::vector<short> data1 = LoadAudioFile("data/test_stereo_44100.raw");
std::vector<short> data2 = LoadAudioFile("data/test_mono_11025.raw");
AudioBuffer buffer;
AudioProcessor processor(11025, &buffer);
processor.Reset(44100, 2);
processor.Consume(data1.data(), data1.size());
processor.Flush();
ASSERT_EQ(data2.size(), buffer.data().size());
for (size_t i = 0; i < data2.size(); i++) {
ASSERT_EQ(data2[i], buffer.data()[i]) << "Signals differ at index " << i;
}
}
|