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.
91 lines
2.4 KiB
Bash
Executable File
91 lines
2.4 KiB
Bash
Executable File
#!/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
|