Add audio quality check script with delta ratio analysis
This script calculates the Maximum delta / Mean delta ratio to detect clicks in FLAC files. A ratio > 10 indicates audio discontinuities caused by buffer underruns during encoding. Usage: ./check_audio_quality.sh [cache_directory] The script helps verify that the PCM buffer fix (256 instead of 8) has eliminated the clicks.
This commit is contained in:
90
check_audio_quality.sh
Executable file
90
check_audio_quality.sh
Executable file
@@ -0,0 +1,90 @@
|
||||
#!/bin/bash
|
||||
# Script pour vérifier la qualité audio (détection de clics via le ratio delta)
|
||||
|
||||
CACHE_DIR="${1:-/tmp/pmomusic_test/audio_cache}"
|
||||
THRESHOLD=10.0 # Ratio Maximum delta / Mean delta acceptable
|
||||
|
||||
if [ ! -d "$CACHE_DIR" ]; then
|
||||
echo "Error: Cache directory not found: $CACHE_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== Audio Quality Check ==="
|
||||
echo "Scanning: $CACHE_DIR"
|
||||
echo "Threshold: Maximum/Mean delta ratio < $THRESHOLD"
|
||||
echo ""
|
||||
|
||||
# Vérifier que sox est installé
|
||||
if ! command -v sox &> /dev/null; then
|
||||
echo "Error: sox is not installed. Install it with: sudo apt install sox"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
count=0
|
||||
suspicious=0
|
||||
good=0
|
||||
|
||||
for file in "$CACHE_DIR"/*.orig.flac; do
|
||||
if [ ! -f "$file" ]; then
|
||||
echo "No FLAC files found in $CACHE_DIR"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
filename=$(basename "$file")
|
||||
|
||||
# Obtenir les stats delta
|
||||
stats=$(sox "$file" -n stat 2>&1)
|
||||
|
||||
max_delta=$(echo "$stats" | grep "Maximum delta" | awk '{print $3}')
|
||||
mean_delta=$(echo "$stats" | grep "Mean delta" | awk '{print $3}')
|
||||
|
||||
if [ -z "$max_delta" ] || [ -z "$mean_delta" ]; then
|
||||
echo "❌ $filename - Cannot parse stats"
|
||||
suspicious=$((suspicious + 1))
|
||||
count=$((count + 1))
|
||||
continue
|
||||
fi
|
||||
|
||||
# Éviter division par zéro
|
||||
if (( $(echo "$mean_delta == 0" | bc -l) )); then
|
||||
echo "❌ $filename - Invalid mean delta (0)"
|
||||
suspicious=$((suspicious + 1))
|
||||
count=$((count + 1))
|
||||
continue
|
||||
fi
|
||||
|
||||
# Calculer le ratio
|
||||
ratio=$(echo "scale=2; $max_delta / $mean_delta" | bc -l)
|
||||
|
||||
# Comparer au seuil
|
||||
is_bad=$(echo "$ratio > $THRESHOLD" | bc -l)
|
||||
|
||||
if [ "$is_bad" = "1" ]; then
|
||||
echo "⚠️ CLICKS DETECTED: $filename"
|
||||
echo " Max delta: $max_delta, Mean delta: $mean_delta, Ratio: ${ratio}x (threshold: ${THRESHOLD}x)"
|
||||
suspicious=$((suspicious + 1))
|
||||
else
|
||||
echo "✓ OK: $filename (ratio: ${ratio}x)"
|
||||
good=$((good + 1))
|
||||
fi
|
||||
|
||||
count=$((count + 1))
|
||||
done
|
||||
|
||||
echo ""
|
||||
echo "=== Summary ==="
|
||||
echo "Total files scanned: $count"
|
||||
echo "✓ Good quality: $good"
|
||||
echo "⚠️ Clicks detected: $suspicious"
|
||||
|
||||
if [ $suspicious -gt 0 ]; then
|
||||
echo ""
|
||||
echo "⚠️ Warning: $suspicious file(s) have clicks."
|
||||
echo "These files were likely encoded with the old buffer size (8)."
|
||||
echo "Delete the cache and re-download to fix: rm -rf $CACHE_DIR/*.flac"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "✓ All files are good quality!"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user