From 8d5f2ca81db8fae6b59b6b9b8bda91526507dbd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Lalinsk=C3=BD?= Date: Sat, 10 Feb 2018 06:52:10 +0100 Subject: [PATCH] Change LoadAudioFile to not depend on little-endian CPU Fixes https://github.com/acoustid/chromaprint/issues/46 --- tests/test_utils.cpp | 9 +++++++++ tests/test_utils.h | 14 +++++++++----- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/tests/test_utils.cpp b/tests/test_utils.cpp index fc8bb86..536f46e 100644 --- a/tests/test_utils.cpp +++ b/tests/test_utils.cpp @@ -2,6 +2,7 @@ #include #include #include "utils.h" +#include "test_utils.h" using namespace chromaprint; @@ -92,3 +93,11 @@ TEST(Utils, CountSetBits64) { EXPECT_EQ(64, CountSetBits(0xFFFFFFFFFFFFFFFFU)); EXPECT_EQ(8, CountSetBits(0x0101010101010101U)); } + +TEST(Utils, LoadAudioFile) { + std::vector data = LoadAudioFile("data/test_mono_44100.raw"); + ASSERT_EQ(data.size(), 176400/2); + EXPECT_EQ(data[1000], 0); + EXPECT_EQ(data[2000], 107); + EXPECT_EQ(data[3000], 128); +} diff --git a/tests/test_utils.h b/tests/test_utils.h index 3631007..d01e9e3 100644 --- a/tests/test_utils.h +++ b/tests/test_utils.h @@ -31,11 +31,15 @@ inline std::vector LoadAudioFile(const std::string &file_name) { std::string path = TESTS_DIR + file_name; std::ifstream file(path.c_str(), std::ifstream::in | std::ifstream::binary); - file.seekg(0, std::ios::end); - int length = file.tellg(); - file.seekg(0, std::ios::beg); - std::vector data(length / 2); - file.read((char *)&data[0], length); + uint8_t buf[4096]; + std::vector data; + while (!file.eof()) { + file.read((char *) buf, 4096); + size_t nread = file.gcount(); + for (size_t i = 0; i < nread - 1; i += 2) { + data.push_back((int16_t) (((uint16_t) buf[i+1] << 8) | ((uint16_t) buf[i]))); + } + } file.close(); return data; }