diff --git a/main.cc b/main.cc index b0bba2f..e5312e3 100644 --- a/main.cc +++ b/main.cc @@ -8,16 +8,30 @@ #include #include #include +#include +#include #include - #include "mqa_identifier.h" namespace fs = std::filesystem; +auto getSampleRateString(const uint32_t fs) { + std::stringstream ss; + if (fs <= 768000) + ss << fs / 1000. << "K"; + else if (fs % 44100 == 0) + ss << "DSD" << fs / 44100; + else + ss << "DSD" << fs / 48000 << "x48"; + + return ss.str(); +} + + /** - * @short Recurivly scan a directory for .flac files + * @short Recursively scan a directory for .flac files * @param curDir directory to scan * @param files vector to add the file paths */ @@ -76,7 +90,7 @@ int main(int argc, char *argv[]) { auto id = MQA_identifier(file); if (id.detect()) { if (id.originalSampleRate()) - std::cout << "MQA " << id.originalSampleRate() / 1000. << "K \t"; + std::cout << "MQA " << getSampleRateString(id.originalSampleRate()) << "\t"; else std::cout << "MQA\t\t"; std::cout << fs::path(file).filename().string() << "\n"; diff --git a/mqa_identifier.h b/mqa_identifier.h index dbe350f..7e3b9e4 100644 --- a/mqa_identifier.h +++ b/mqa_identifier.h @@ -33,7 +33,9 @@ uint32_t OriginalSampleRateDecoder(unsigned c) { */ const uint32_t base = (c & 1u) ? 48000 : 44100; - const uint32_t multiplier = 1u << (((c >> 3u) & 1u) | (((c >> 2u) & 1u) << 1u) | (((c >> 1u) & 1u) << 2u)); + uint32_t multiplier = 1u << (((c >> 3u) & 1u) | (((c >> 2u) & 1u) << 1u) | (((c >> 1u) & 1u) << 2u)); + // Double for DSD + if (multiplier > 16) multiplier *= 2; return base * multiplier; }