From 49dca93196f3e418f5b23589ab116d8feb03bd0d Mon Sep 17 00:00:00 2001 From: benya Date: Sun, 19 Apr 2026 15:25:59 +0300 Subject: [PATCH] Tighten MPEG classification and reduce false positives --- src/AudioAnalyzer.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/AudioAnalyzer.cpp b/src/AudioAnalyzer.cpp index 4cf784c..a5d1d21 100644 --- a/src/AudioAnalyzer.cpp +++ b/src/AudioAnalyzer.cpp @@ -529,9 +529,12 @@ AudioAnalysisReport AudioAnalyzer::analyzeFile(const QString &path) const { const double genuineRatio = static_cast(report.genuineWindows) / report.informativeWindows; const bool hasStrongCdBoundary = report.cutoffKhz > 20.5 && report.rolloffKhz > 18.5 && - report.spectralFlatness > 0.09 && report.suspectRatio <= 0.20; + report.spectralFlatness > 0.06 && report.suspectRatio <= 0.20; const bool hasCdTopBand = report.veryHighBandRatio > 0.0000005 && report.spectralFlatness > 0.09; const bool hasLossyFlatness = report.spectralFlatness < 0.075; + const bool hasLossyBoundary = report.cutoffKhz < 19.5 || report.rolloffKhz < 17.5; + const bool hasStrongLowpassSignature = hasLossyFlatness && hasLossyBoundary; + const bool hasSuspectEvidence = report.suspectWindows >= 2 && report.suspectRatio >= 0.45; const bool hasAacLikeLowpass = report.veryHighBandRatio <= 0.0000005 && report.spectralFlatness < 0.19 && report.suspectRatio >= 0.55 && report.suspectWindows >= 2; @@ -549,7 +552,8 @@ AudioAnalysisReport AudioAnalyzer::analyzeFile(const QString &path) const { report.conclusion = QString("CDDA %1").arg(QString::number(confidence) + "%"); report.accuracy = QString::number(confidence) + "%"; report.confidence = confidence; - } else if (hasLossyFlatness || hasAacLikeLowpass || (report.suspectRatio >= 0.72 && report.suspectWindows >= 4)) { + } else if (hasAacLikeLowpass || hasStrongLowpassSignature || + (hasSuspectEvidence && (hasLossyFlatness || hasLossyBoundary || report.suspectRatio >= 0.72))) { const int confidence = std::clamp(static_cast(std::round(55.0 + report.suspectRatio * 45.0)), 55, 100); report.conclusion = QString("MPEG %1").arg(QString::number(confidence) + "%"); report.accuracy = QString::number(confidence) + "%";