#!/bin/bash # Script to calculate audio track and album loudness values # Christopher Hampson 11/02/2019 function calc # calculate whole album values { ALBUM_INT=`cat $ALBUMLUFS_VALUES | awk '{if(NR==1) print $3}'` ALBUM_LRA=`cat $ALBUMLUFS_VALUES | awk '{if(NR==2) print $3}'` ALBUM_TP=`cat $ALBUMLUFS_VALUES | awk '{if(NR==3) print $3}'` ALBUM_MM=`cat $ALBUMLUFS_VALUES | awk '{if(NR==8) print $3}'` ALBUM_STM=`cat $ALBUMLUFS_VALUES | awk '{if(NR==9) print $4}'` } LUFS_HEADER=$(mktemp) FILENAME=$(mktemp) LUFS_VALUES=$(mktemp) ALBUMLUFS_VALUES=$(mktemp) SCREEN=$(mktemp) ANALYSIS=$(mktemp) sox "$@" -t wav - | ebur128 --lufs --full - >> $ALBUMLUFS_VALUES & date > $LUFS_HEADER echo "LOUDNESS ANALYSIS" >> $LUFS_HEADER echo "File,Int (LUFS),LRA (LU) ,TP (dB)" >> $LUFS_HEADER for file in "$@"; do echo `basename "$file"` >> $FILENAME echo -n "," >> $LUFS_VALUES ebur128 --lufs "$file" | tee $SCREEN | awk '{print $3}' | tr "\n" "," | sed 's/\(.*\),/\1/' >> $LUFS_VALUES echo >> $LUFS_VALUES echo echo "$file" echo cat $SCREEN & done wait sed -i 's/,//g' $FILENAME paste -d "" $FILENAME $LUFS_VALUES > $ANALYSIS cat $ANALYSIS >> $LUFS_HEADER calc # calculates the whole album data echo echo "ALBUM:" echo "Integrated loudness:" $ALBUM_INT "LUFS" echo "Loudness range:" $ALBUM_LRA "LU" echo "Peak level:" $ALBUM_TP "dB" echo "Momentary max:" $ALBUM_MM "LUFS" echo "Short term max:" $ALBUM_STM "LUFS" cat > loudness_analysis.html <<'EOF' EOF while read INPUT ; do echo ""; done < $LUFS_HEADER >> loudness_analysis.html echo "" >> loudness_analysis.html echo "" >> loudness_analysis.html echo "" >> loudness_analysis.html echo "" >> loudness_analysis.html echo "
${INPUT//,/}
ALBUM"$ALBUM_INT""$ALBUM_LRA""$ALBUM_TP"
MMAX"$ALBUM_MM"
SMAX"$ALBUM_STM"
" >> loudness_analysis.html echo "
" >> loudness_analysis.html rm $LUFS_HEADER $FILENAME $LUFS_VALUES $ALBUMLUFS_VALUES $SCREEN $ANALYSIS