audio_analyzer / scoring.py
Mr7Explorer's picture
Update scoring.py
89f4dba verified
def compute_quality_score(issues):
"""
Compute the weighted quality score based on detected issues.
Logic is identical to your original implementation.
"""
# Count severities
critical = sum(1 for _, sev, _ in issues if sev == "CRITICAL")
high = sum(1 for _, sev, _ in issues if sev == "HIGH")
medium = sum(1 for _, sev, _ in issues if sev == "MEDIUM")
low = sum(1 for _, sev, _ in issues if sev == "LOW")
# ============================================
# Weighted scoring
# ============================================
score = 100
score -= critical * 35
score -= high * 20
score -= medium * 8
score -= low * 3
# Heavy processing penalties
if len(issues) >= 6:
score -= 10
if (critical + high) >= 3:
score -= 10
# Clean bonus
if len(issues) == 0:
score += 5
score = max(0, min(score, 100))
# ============================================
# Grade Mapping
# ============================================
if score >= 90:
grade = "A"
quality = "EXCELLENT"
color = "#00C853"
recommendation = "Excellent for TTS dataset"
elif score >= 75:
grade = "B"
quality = "GOOD"
color = "#64DD17"
recommendation = "Very good quality; suitable for TTS"
elif score >= 60:
grade = "C"
quality = "FAIR"
color = "#FFD600"
recommendation = "Usable but may contain processing artifacts"
elif score >= 40:
grade = "D"
quality = "POOR"
color = "#FF6D00"
recommendation = "Not recommended for TTS (heavy processing)"
else:
grade = "F"
quality = "CRITICAL"
color = "#D50000"
recommendation = "Severely degraded or processed; avoid for TTS"
# ============================================
# Cleanliness + Processing Index
# ============================================
cleanliness_score = max(0, 100 - (medium * 5 + low * 3))
processing_severity = (critical * 3) + (high * 2) + medium
return {
"score": score,
"grade": grade,
"quality": quality,
"color": color,
"recommendation": recommendation,
"cleanliness_score": cleanliness_score,
"processing_severity": processing_severity,
"critical": critical,
"high": high,
"medium": medium,
"low": low
}