75 lines
2.3 KiB
C++
75 lines
2.3 KiB
C++
#include <gtest/gtest.h>
|
|
#include <XCEngine/Resources/AudioClip/AudioClip.h>
|
|
#include <XCEngine/Core/Asset/ResourceTypes.h>
|
|
#include <XCEngine/Core/Asset/ResourceManager.h>
|
|
|
|
using namespace XCEngine::Resources;
|
|
|
|
namespace {
|
|
|
|
XCEngine::Containers::Array<XCEngine::Core::uint8> EncodeMono16PCM(std::initializer_list<int16_t> samples) {
|
|
XCEngine::Containers::Array<XCEngine::Core::uint8> pcmData;
|
|
pcmData.ResizeUninitialized(samples.size() * sizeof(int16_t));
|
|
|
|
size_t byteOffset = 0;
|
|
for (const int16_t sample : samples) {
|
|
const uint16_t encoded = static_cast<uint16_t>(sample);
|
|
pcmData[byteOffset++] = static_cast<XCEngine::Core::uint8>(encoded & 0xFFu);
|
|
pcmData[byteOffset++] = static_cast<XCEngine::Core::uint8>((encoded >> 8) & 0xFFu);
|
|
}
|
|
|
|
return pcmData;
|
|
}
|
|
|
|
|
|
TEST(AudioClip, GetType) {
|
|
AudioClip audio;
|
|
EXPECT_EQ(audio.GetType(), ResourceType::AudioClip);
|
|
}
|
|
|
|
TEST(AudioClip, GetMemorySize) {
|
|
AudioClip audio;
|
|
EXPECT_EQ(audio.GetMemorySize(), 0u);
|
|
}
|
|
|
|
TEST(AudioClip, DefaultPCMStatsAreZero) {
|
|
AudioClip audio;
|
|
EXPECT_EQ(audio.GetPCMDataSize(), 0u);
|
|
EXPECT_EQ(audio.GetFrameCount(), 0u);
|
|
EXPECT_EQ(audio.GetSampleCount(), 0u);
|
|
}
|
|
|
|
TEST(AudioClip, DecodedPCMCacheConverts16BitSamplesAndReusesBuffer) {
|
|
AudioClip audio;
|
|
audio.SetSampleRate(4);
|
|
audio.SetChannels(1);
|
|
audio.SetBitsPerSample(16);
|
|
audio.SetPCMData(EncodeMono16PCM({32767, -32768, 16384}));
|
|
|
|
const std::vector<float>& firstDecode = audio.GetDecodedPCMData();
|
|
const std::vector<float>& secondDecode = audio.GetDecodedPCMData();
|
|
|
|
ASSERT_EQ(firstDecode.size(), 3u);
|
|
EXPECT_NEAR(firstDecode[0], 32767.0f / 32768.0f, 1e-5f);
|
|
EXPECT_NEAR(firstDecode[1], -1.0f, 1e-5f);
|
|
EXPECT_NEAR(firstDecode[2], 16384.0f / 32768.0f, 1e-5f);
|
|
EXPECT_EQ(firstDecode.data(), secondDecode.data());
|
|
}
|
|
|
|
TEST(AudioClip, UpdatingSampleRateRefreshesDurationWithoutReplacingPCMData) {
|
|
AudioClip audio;
|
|
audio.SetChannels(1);
|
|
audio.SetBitsPerSample(16);
|
|
audio.SetPCMData(EncodeMono16PCM({1, 2, 3, 4}));
|
|
|
|
audio.SetSampleRate(4);
|
|
EXPECT_FLOAT_EQ(audio.GetDuration(), 1.0f);
|
|
|
|
audio.SetSampleRate(8);
|
|
EXPECT_FLOAT_EQ(audio.GetDuration(), 0.5f);
|
|
EXPECT_EQ(audio.GetFrameCount(), 4u);
|
|
EXPECT_EQ(audio.GetSampleCount(), 4u);
|
|
}
|
|
|
|
} // namespace
|