#!/bin/bash
# energy-profile: Generate RMS energy profile over time for audio files
# Usage: energy-profile <audio_file> [interval_seconds] [window_seconds]
#
# Output: timestamp (MM:SS) and RMS level in dB
# Use to detect track transitions via energy changes

set -euo pipefail

FILE="${1:?Usage: energy-profile <audio_file> [interval=30] [window=30]}"
INTERVAL="${2:-30}"
WINDOW="${3:-30}"

if [[ ! -f "$FILE" ]]; then
    echo "Error: File not found: $FILE" >&2
    exit 1
fi

# Get duration
DURATION=$(sox "$FILE" -n stat 2>&1 | grep "Length" | awk '{print int($3)}')

echo "# Energy profile for: $(basename "$FILE")"
echo "# Duration: ${DURATION}s ($(printf '%02d:%02d:%02d' $((DURATION/3600)) $(((DURATION%3600)/60)) $((DURATION%60))))"
echo "# Interval: ${INTERVAL}s, Window: ${WINDOW}s"
echo "#"
echo "# TIME_S  TIME      RMS_dB"

for ((i=0; i<DURATION; i+=INTERVAL)); do
    rms=$(sox "$FILE" -n trim "$i" "$WINDOW" stats 2>&1 | grep "RMS lev dB" | awk '{print $4}')
    printf "%6d  %02d:%02d:%02d  %s\n" "$i" $((i/3600)) $(((i%3600)/60)) $((i%60)) "$rms"
done
