From 8f5bc2ad39d038177746d4a13fad58f5f99fd30b Mon Sep 17 00:00:00 2001 From: Alexander Kojevnikov Date: Thu, 21 Feb 2013 21:11:36 -0800 Subject: [PATCH] Test audio file demuxing --- src/spek-audio.h | 5 +++ tests/Makefile.am | 1 + tests/samples/1ch-96000Hz-24bps.flac | Bin 0 -> 3075 bytes tests/samples/2ch-48000Hz-16bps.flac | Bin 0 -> 3061 bytes tests/test-audio-info.cc | 57 +++++++++++++++++++++++++++ tests/test.cc | 4 +- tests/test.h | 1 + 7 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 tests/samples/1ch-96000Hz-24bps.flac create mode 100644 tests/samples/2ch-48000Hz-16bps.flac create mode 100644 tests/test-audio-info.cc diff --git a/src/spek-audio.h b/src/spek-audio.h index 32bf053..c145811 100644 --- a/src/spek-audio.h +++ b/src/spek-audio.h @@ -20,6 +20,7 @@ #define SPEK_AUDIO_H_ #include +#include #include class AudioFile; @@ -73,4 +74,8 @@ inline bool operator!(AudioError error) { return error == AudioError::OK; } +inline std::ostream& operator<<(std::ostream& os, AudioError error) { + return os << static_cast(error); +} + #endif diff --git a/tests/Makefile.am b/tests/Makefile.am index 0eb06dc..4df0f40 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -7,6 +7,7 @@ endif check_PROGRAMS = $(TESTS) test_SOURCES = \ + test-audio-info.cc \ test-utils.cc \ test.cc \ test.h diff --git a/tests/samples/1ch-96000Hz-24bps.flac b/tests/samples/1ch-96000Hz-24bps.flac new file mode 100644 index 0000000000000000000000000000000000000000..8bb8a20e9451669896d43f3a996d49b7b665b7d8 GIT binary patch literal 3075 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 literal 0 HcmV?d00001 diff --git a/tests/samples/2ch-48000Hz-16bps.flac b/tests/samples/2ch-48000Hz-16bps.flac new file mode 100644 index 0000000000000000000000000000000000000000..430ed0d98c6a9dfdeb685443a96d49a789c6723b GIT binary patch literal 3061 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 literal 0 HcmV?d00001 diff --git a/tests/test-audio-info.cc b/tests/test-audio-info.cc new file mode 100644 index 0000000..79670d7 --- /dev/null +++ b/tests/test-audio-info.cc @@ -0,0 +1,57 @@ +/* test-audio-info.cc + * + * Copyright (C) 2013 Alexander Kojevnikov + * + * Spek is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Spek is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Spek. If not, see . + */ + +#include + +#include "spek-audio.h" + +#include "test.h" + +struct FileInfo +{ + std::string codec_name; + int bit_rate; + int sample_rate; + int bits_per_sample; + int channels; + double duration; +}; + +static void test_file(const std::string& name, const FileInfo& info) +{ + Audio audio; + auto file = audio.open("samples/" + name); + test("error", AudioError::OK, file->get_error()); + test("codec", info.codec_name, file->get_codec_name()); + test("bit rate", info.bit_rate, file->get_bit_rate()); + test("sample rate", info.sample_rate, file->get_sample_rate()); + test("bps", info.bits_per_sample, file->get_bits_per_sample()); + test("channels", info.channels, file->get_channels()); + test("duration", info.duration, file->get_duration()); +} + +void test_audio_info() +{ + std::map files = { + { "1ch-96000Hz-24bps.flac", {"FLAC (Free Lossless Audio Codec)", 0, 96000, 24, 1, 0.1} }, + { "2ch-48000Hz-16bps.flac", {"FLAC (Free Lossless Audio Codec)", 0, 48000, 16, 2, 0.1} }, + }; + for (const auto& item : files) { + run([&] () { test_file(item.first, item.second); }, "audio info: " + item.first); + } +} diff --git a/tests/test.cc b/tests/test.cc index fdf4ec6..5031c6e 100644 --- a/tests/test.cc +++ b/tests/test.cc @@ -23,9 +23,11 @@ int g_total = 0; int main() { + std::cerr << "-------------" << std::endl; + + test_audio_info(); test_utils(); - std::cerr << "-------------" << std::endl; std::cerr << g_passes << "/" << g_total << " tests passed" << std::endl; std::cerr << "-------------" << std::endl; if (g_passes < g_total) { diff --git a/tests/test.h b/tests/test.h index 707c526..565cda4 100644 --- a/tests/test.h +++ b/tests/test.h @@ -40,6 +40,7 @@ template void test(const std::string& message, const T& expected, const } } +void test_audio_info(); void test_utils(); #endif