2021-09-21 18:42:33 +00:00
|
|
|
#include <gmock/gmock.h>
|
2024-12-09 07:25:51 +00:00
|
|
|
|
2024-12-17 11:30:42 +00:00
|
|
|
#include <filesystem>
|
|
|
|
|
2024-12-16 10:33:48 +00:00
|
|
|
#include "audio/wave-file-reader.h"
|
|
|
|
#include "tools/platform-tools.h"
|
2021-09-21 18:42:33 +00:00
|
|
|
|
|
|
|
using namespace testing;
|
2024-12-17 11:30:42 +00:00
|
|
|
using std::filesystem::path;
|
|
|
|
|
|
|
|
path getResourcesDirectory() {
|
|
|
|
path p = getBinDirectory();
|
|
|
|
|
|
|
|
// Search up for resources directory
|
|
|
|
while (true) {
|
|
|
|
path resourcesDirectory = p / "tests/resources";
|
|
|
|
if (std::filesystem::exists(resourcesDirectory)) return resourcesDirectory;
|
|
|
|
|
|
|
|
p = p.parent_path();
|
|
|
|
}
|
|
|
|
}
|
2021-09-21 18:42:33 +00:00
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, float32FromAudacity) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-float32-audacity.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Float32);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 4);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 88);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, float32FromAudition) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-float32-audition.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Float32);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 4);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 92);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, float32FromFfmpeg) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-float32-ffmpeg.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Float32);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 4);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 114);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, float32FromSoundforge) {
|
2024-12-17 11:30:42 +00:00
|
|
|
auto formatInfo =
|
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-float32-soundforge.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Float32);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 4);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, float64FromFfmpeg) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-float64-ffmpeg.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Float64);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 8);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 114);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int16FromAudacity) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int16-audacity.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int16);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 2);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int16FromAudition) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int16-audition.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int16);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 2);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 92);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int16FromFfmpeg) {
|
2024-12-17 11:30:42 +00:00
|
|
|
auto formatInfo = getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int16-ffmpeg.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int16);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 2);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 78);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int16FromSoundforge) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int16-soundforge.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int16);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 2);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int24FromAudacity) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int24-audacity.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int24);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 3);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int24FromAudition) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int24-audition.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int24);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 3);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 92);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int24FromFfmpeg) {
|
2024-12-17 11:30:42 +00:00
|
|
|
auto formatInfo = getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int24-ffmpeg.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int24);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 3);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 102);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int24FromSoundforge) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int24-soundforge.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int24);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 3);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int32FromFfmpeg) {
|
2024-12-17 11:30:42 +00:00
|
|
|
auto formatInfo = getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int32-ffmpeg.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int32);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 4);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 102);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, int32FromSoundforge) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-int32-soundforge.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::Int32);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 4);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, uint8FromAudition) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-uint8-audition.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::UInt8);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 1);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 92);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, uint8FromFfmpeg) {
|
2024-12-17 11:30:42 +00:00
|
|
|
auto formatInfo = getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-uint8-ffmpeg.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::UInt8);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 1);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 78);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
TEST(getWaveFormatInfo, uint8FromSoundforge) {
|
2024-12-09 07:25:51 +00:00
|
|
|
auto formatInfo =
|
2024-12-17 11:30:42 +00:00
|
|
|
getWaveFormatInfo(getResourcesDirectory() / "sine-triangle-uint8-soundforge.wav");
|
2024-12-09 07:31:59 +00:00
|
|
|
EXPECT_EQ(formatInfo.frameRate, 48000);
|
|
|
|
EXPECT_EQ(formatInfo.frameCount, 480000);
|
|
|
|
EXPECT_EQ(formatInfo.channelCount, 2);
|
|
|
|
EXPECT_EQ(formatInfo.sampleFormat, SampleFormat::UInt8);
|
|
|
|
EXPECT_EQ(formatInfo.bytesPerFrame, 2 * 1);
|
|
|
|
EXPECT_EQ(formatInfo.dataOffset, 44);
|
2021-09-21 18:42:33 +00:00
|
|
|
}
|