• WANTED: Happy members who like to discuss audio and other topics related to our interest. Desire to learn and share knowledge of science required as is 20 years of participation in forums (not all true). Come here to have fun, be ready to be teased and not take online life too seriously. We now measure and review equipment for free! Click here for details.

Offline Loudness (LUFS) plotting

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
#1
Hi all,
Not sure if this is the correct section, but it makes the most sense (unless I am corrected).
I've a few loudness meters to use in the DAW, but nothing that can scan an audio file and provide a nice graphed plot.

I knew ffmpeg could utilise the ebur128 audio filter to generate all the necessary stats every 100ms (Momentary, Short-Term, Integrated), so it was just a matter of formatting that data into a CSV file which could be handed over to a program to plot a graph.
..and after messing around with gnuplot recently, I thought this should work for this purpose.

Here is the Powershell code for a "Send-To" (right-click context menu) item in Windows 10 (and maybe 7 if updated).
Of course, you'll have to download and compile or just download the already compiled gnuplot binary.
The correct path to gnuplot.exe needs to be entered for the variable "$gnuplot".
It is assumed ffmpeg.exe (at least v3.4) is in the system path, like C:\Windows\System32. If not, then it should be properly pathed in this script.
It uses the system 'Temp' folder for temporary files, which are deleted afterwards. The plot image also ends up there unless changed "$outplot"

Save this as a .ps1 file somewhere.
To make it run as a send to, create a shortcut to the .ps1 file in the Windows SendTo folder (hit WinKey+'R', then type 'shell:sendto' without the quotes, then Enter key).
Make the shortcut (hold shift and ctrl and drag the .ps1 in to create a shortcut). Open the shortcut properties and add 'Powershell.exe -ExecutionPolicy bypass -file ' before the path to the ps1 file. Then follow after the path with ' -infile'. OK and close out (all test without quotes).
Windows security is probably setup to prevent running unsigned and scripts not verified locally. It seems a bit pointless when a simple argument turns that off. Oh well.

Code:
# takes selected audio file,
# uses ffmpeg ebur128 filter for lufs stats
# and converts data to csv for graphing.
# uses gnuplot to plot the graph.

Param($infile)

$outcsv = "$env:Temp\loudnesscsv.txt"
$gnuplotcommandfile = "$env:Temp\gnuplotcmdfile.txt"
$outplot = "$env:Temp\LoudnessPlot.png"
$gnuplot = "C:\Program Files (x86)\gnuplot\gnuplot.exe"


Write-Host "Getting Loudness Data with ffmpeg."
$lufs_data = & ffmpeg.exe -i $infile -af ebur128 -f null - 2>&1
#$lufs_data | Out-File "t:\lufsdata.txt" -Encoding ASCII

Write-Host "Data Collected, now formatting to csv file."
$csv = $(
ForEach($rawentry in $lufs_data){
    $entry = if($rawentry -match "parsed_ebur128"){$rawentry}
    $array_tmsir = $entry -split(":") -split (" ") | ?{$_ -ne ""} | Select-Object -index 4,9,11,13,16

    if($array_tmsir){
        $time = $array_tmsir[0]
        $Momentary = $array_tmsir[1]
        $Short = $array_tmsir[2]
        $Integrated = $array_tmsir[3]
        $lra = $array_tmsir[4]

        "$([math]::Round($time,1))" + ",$Momentary,$Short,$Integrated,$lra"
    }
}
)
$csv | Out-String | Out-File $outcsv -Encoding ASCII
$entries = $csv.count


Write-Host "Running GNUPlot..."
$(
"set terminal png size 1280,720;"
"set output '$outplot';"
"set datafile separator ',';"
"set title `"$($infile -replace("\\","\\"))`" noenhanced;"
"set yrange [-60:0];"
"set ylabel 'Loudness (LUFS)';"
"set ytic 6;"

"set ytics nomirror;"
"set y2tics;"
"set y2range [0:30];"
"set y2tic 1;"
"set y2label 'Loudness Range (LU)';"

"set grid;"
"set key top left;"

"set xdata time;"
"set format x '%M:%S';"
"set xlabel 'Time (MM:SS)';"
"set autoscale xfix;"

"plot '$outcsv' using (`$0/10):2 axes x1y1 with lines lc rgb '#ff0000' lw 1 title 'Momentary', \"
"               '' using (`$0/10):3 axes x1y1 with lines lc rgb '#8080ff' lw 3 title 'Short-Term', \"
"               '' using (`$0/10):4 axes x1y1 with lines lc rgb '#0000ff' lw 4 title 'Integrated', \"
"               '' using (`$0/10):5 axes x1y2 with lines lc rgb '#00aa00' lw 2 title 'Loudness Range';"
) | Out-String | Out-File $gnuplotcommandfile -Encoding ASCII

cmd.exe /c "`"$gnuplot`" <$gnuplotcommandfile"

Remove-Item -LiteralPath $outcsv
Remove-Item -LiteralPath $gnuplotcommandfile

& $outplot
exit
Yeah, it's a bit clumsily done. There are plenty of options that can be changed for colours, line thickness and stuff, as well as plot size, axis ranges etc.
I'm working on some code ideas to handle larger data sets and reducing it for speed. No point supplying data that can't be drawn as there isn't enough pixel space to plot them!


Examples:
LoudnessPlot.png

LoudnessPlot.png

LoudnessPlot.png
 
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #2
edit: added loudness range low and high range (10th and 95th percentile), integrated and range values to the legend.
Obviously change paths for your system in the code.
LoudnessPlot.png

Code:
Param($infile)

$outcsv = "$env:Temp\loudnesscsv.txt"
$gnuplotcommandfile = "$env:Temp\gnuplotcmdfile.txt"
$outplot = "T:\LoudnessPlot.png"
$gnuplot = "d:\0\gnuplot\gnuplot.exe"

Write-Host "Getting Loudness Data with ffmpeg."
$lufs_data = & ffmpeg.exe -i $infile -af ebur128 -f null - 2>&1
#$lufs_data | Out-File "t:\lufsdata.txt" -Encoding ASCII

$lra_high = ($lufs_data | select-string "LRA high:") -replace("[^0-9-.]")
$lra_low = ($lufs_data | select-string "LRA low:") -replace("[^0-9-.]")
$I_LUFS = ($lufs_data | select-string "I:      ") -replace("[^0-9-.]")
$lrange = ($lufs_data | select-string "LRA:      ") -replace("[^0-9-.]")

Write-Host "Data Collected, now formatting to csv file."
$csv = $(
ForEach($rawentry in $lufs_data){
    $entry = if($rawentry -match "parsed_ebur128"){$rawentry}
    $array_tmsir = $entry -split(":") -split (" ") | ?{$_ -ne ""} | Select-Object -index 4,9,11,13,16

    if($array_tmsir){
        $time = $array_tmsir[0]
        $Momentary = $array_tmsir[1]
        $Short = $array_tmsir[2]
        $Integrated = $array_tmsir[3]
        $lra = $array_tmsir[4]

        "$([math]::Round($time,1))" + ",$Momentary,$Short,$Integrated,$lra"
    }
}
)
$csv | Out-String | Out-File $outcsv -Encoding ASCII
$entries = $csv.count

Write-Host "Running GNUPlot..."
$(
"set terminal png truecolor size 1280,720;"
"set output '$outplot';"
"set datafile separator ',';"
"set title `"$($infile -replace("\\","\\"))`" noenhanced;"
"set yrange [-60:0];"
"set ylabel 'Loudness (LUFS)';"
"set ytic 6;"

"set ytics nomirror;"
"set y2tics;"
"set y2range [0:30];"
"set y2tic 1;"
"set y2label 'Loudness Range (LU)';"

"set grid;"
"set key top left;"

"set xdata time;"
"set format x '%M:%S';"
"set xlabel 'Time (MM:SS)';"
"set autoscale xfix;"

"set timefmt '%M:%S';"

"set label 1 'LRA Low: $lra_low LUFS' at '04:30',($lra_low -3) front;"
"set label 2 'LRA High: $lra_high LUFS' at '04:30',($lra_high +3) front;"

"plot \"
"$lra_high with filledcurves above y=$lra_low fc rgb '#00aa00' fs transparent solid 0.1 noborder title 'Loudness Range Low to High', \"
"'$outcsv' using (`$0/10):2 axes x1y1 with lines lc rgb '#ff0000' lw 1 title 'Momentary', \"
"               '' using (`$0/10):3 axes x1y1 with lines lc rgb '#8080ff' lw 3 title 'Short-Term', \"
"               '' using (`$0/10):4 axes x1y1 with lines lc rgb '#0000ff' lw 4 title 'Integrated: $I_LUFS LUFS', \"
"               '' using (`$0/10):5 axes x1y2 with lines lc rgb '#008000' lw 3 title 'Loudness Range: $lrange LU'; \"
) | Out-String | Out-File $gnuplotcommandfile -Encoding ASCII

cmd.exe /c "`"$gnuplot`" <$gnuplotcommandfile"

Remove-Item -LiteralPath $outcsv
Remove-Item -LiteralPath $gnuplotcommandfile

& $outplot
exit
 
Last edited:
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #3
For dynamic placement of LRA High/Low labels @ 45 seconds in from the right side of the plot, and right justified, with a solid box underneath and border around:

Replace:
Code:
"set timefmt '%M:%S';"

"set label 1 'LRA Low: $lra_low LUFS' at '04:30',($lra_low -3) front;"
"set label 2 'LRA High: $lra_high LUFS' at '04:30',($lra_high +3) front;"
with
Code:
"set obj 1 rect at (($entries/10)-45),($lra_high +3) size char strlen('LRA High: $lra_high LUFS'), char 1 fc 'white' front;"
"set label 1 'LRA High: $lra_high LUFS' at (($entries/10)-45),($lra_high +3) front center font `",10`";"
"set obj 2 rect at (($entries/10)-45),($lra_low -3) size char strlen('LRA Low: $lra_low LUFS'), char 1 fc 'white' front;"
"set label 2 'LRA Low: $lra_low LUFS' at (($entries/10)-45),($lra_low -3) front center font `",10`";"
(yes, it gets rid of the "set timefmt" bit, but means that the total count of the number of lines in the plot data can be easily used to reference the last data point on x-axis, or the far right of the plot if you will).


For a better key legend, that takes up less vertical space:

Replace:
Code:
"set key top left;"
with:
Code:
"set key inside center top Left reverse maxrows 2 width -5;"
It also might be worth changing the y-axis to go up to +3 even though no data can plot there (LUFS - 'Full Scale' as in 'from zero and down'.), it gives a bit of headroom to draw the legend.
Code:
"set yrange [-60:3];"
Code:
"set y2range [0:33];"

To set the title to the "ARTIST - ALBUM - TRACK## - TITLE", or the full file path if those are present:

add in the following, just above " Write-Host "Data Collected, now formatting to csv file." ".

Code:
$artist = (($lufs_data | select-string ("ARTIST  ")) -split ": ")[1]
$album = (($lufs_data | select-string ("ALBUM  ")) -split ": ")[1]
$title = (($lufs_data | select-string ("TITLE  ")) -split ": ")[1]
$track = (($lufs_data | select-string ("TRACK  ")) -split ": ")[1]

$plottitle = @($artist, $album, $('{0:d2}' -f [int]$track), $title) -join " - "
if($plottitle -eq " -  -  - "){$plottitle = $infile}
and replace:
Code:
"set title `"$($infile -replace("\\","\\"))`" noenhanced;"
with:
Code:
"set title `"$($plottitle -replace("\\","\\"))`" noenhanced;"
 
Last edited:
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #4
Things now look like this:
LoudnessPlot.png

LoudnessPlot.png

- removed LRA labels and put that numeric data in the key legend.
- wider spaced key
- y-axis allows headroom for key
- 2nd y-axis every 2 units
- title formatting

With longer material, such as a whole album or orchestral piece, it takes while longer to generate the data, format the data and plot it, but I don't see any other tools that can do this. There are some Loudness Meter plugins that can log to csv, and I guess they could be ran in offline mode/rendering mode. This scripted setup just seems convenient to me.

Code:
Param($infile)

$outcsv = "$env:Temp\loudnesscsv.txt"
$gnuplotcommandfile = "$env:Temp\gnuplotcmdfile.txt"
$outplot = "$env:Temp\LoudnessPlot.png"
$gnuplot = "C:\Program Files (x86)\gnuplot\gnuplot.exe"

Write-Host "Getting Loudness Data with ffmpeg."
$lufs_data = & ffmpeg.exe -i $infile -af ebur128 -f null - 2>&1 
#$lufs_data | Out-File "t:\lufsdata.txt" -Encoding ASCII

$lra_high = ($lufs_data | select-string "LRA high:") -replace("[^0-9-.]")
$lra_low = ($lufs_data | select-string "LRA low:") -replace("[^0-9-.]")
$I_LUFS = ($lufs_data | select-string "I:      ") -replace("[^0-9-.]")
$lrange = ($lufs_data | select-string "LRA:      ") -replace("[^0-9-.]")

$artist = (($lufs_data | select-string ("ARTIST  ")) -split ": ")[1]
$album = (($lufs_data | select-string ("ALBUM  ")) -split ": ")[1]
$title = (($lufs_data | select-string ("TITLE  ")) -split ": ")[1]
$track = (($lufs_data | select-string ("TRACK  ")) -split ": ")[1]

$plottitle = @($artist, $album, $('{0:d2}' -f [int]$track), $title) -join " - "
if($plottitle -eq " -  -  - "){$plottitle = $infile}

Write-Host "Data Collected, now formatting to csv file."
$csv = $(
ForEach($rawentry in $lufs_data){
    $entry = if($rawentry -match "parsed_ebur128"){$rawentry}
    $array_tmsir = $entry -split(":") -split (" ") | ?{$_ -ne ""} | Select-Object -index 4,9,11,13,16

    if($array_tmsir){
        $time = $array_tmsir[0]
        $Momentary = $array_tmsir[1]
        $Short = $array_tmsir[2]
        $Integrated = $array_tmsir[3]
        $lra = $array_tmsir[4]

        "$([math]::Round($time,1))" + ",$Momentary,$Short,$Integrated,$lra"
    }
}
)
$csv | Out-String | Out-File $outcsv -Encoding ASCII
$entries = $csv.count

Write-Host "Running GNUPlot..."
$(
"set terminal png truecolor size 1280,720;"
"set output '$outplot';"
"set datafile separator ',';"
"set title `"$($plottitle -replace("\\","\\"))`" noenhanced;"

"set key inside center top Left reverse maxrows 2 width -5;"

"set yrange [-60:3];"
"set ylabel 'Loudness (LUFS)';"
"set ytic 6;"
"set mytics 2;"

"set ytics nomirror;"
"set y2tics;"
"set y2range [0:33];"
"set y2tic 2;"
"set y2label 'Loudness Range (LU)';"

"set grid;"

"set xdata time;"
"set format x '%M:%S';"
"set xlabel 'Time (MM:SS)';"
"set autoscale xfix;"

#"set timefmt '%M:%S';"

#"set obj 1 rect at (($entries/10)-45),($lra_high +3) size char strlen('LRA High: $lra_high LUFS'), char 1 fc 'white' front;"
#"set label 1 'LRA High: $lra_high LUFS' at (($entries/10)-45),($lra_high +3) front center font `",10`";"
#"set obj 2 rect at (($entries/10)-45),($lra_low -3) size char strlen('LRA Low: $lra_low LUFS'), char 1 fc 'white' front;"
#"set label 2 'LRA Low: $lra_low LUFS' at (($entries/10)-45),($lra_low -3) front center font `",10`";"

"plot \"
"$lra_high with filledcurves above y=$lra_low fc rgb '#00aa00' fs transparent solid 0.1 noborder title 'Loudness Range: ($lra_low to $lra_high LUFS)', \"
"'$outcsv' using (`$0/10):2 axes x1y1 with lines lc rgb '#ff0000' lw 1 title 'Momentary', \"
"               '' using (`$0/10):3 axes x1y1 with lines lc rgb '#8080ff' lw 3 title 'Short-Term', \"
"               '' using (`$0/10):4 axes x1y1 with lines lc rgb '#0000ff' lw 4 title 'Integrated: $I_LUFS LUFS', \"
"               '' using (`$0/10):5 axes x1y2 with lines lc rgb '#008000' lw 3 title 'Loudness Range: $lrange LU'; \"
) | Out-String | Out-File $gnuplotcommandfile -Encoding ASCII

cmd.exe /c "`"$gnuplot`" <$gnuplotcommandfile"

Remove-Item -LiteralPath $outcsv
Remove-Item -LiteralPath $gnuplotcommandfile

& $outplot
exit
 
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #5
LoudnessPlot.png

Added truePeak to Momentary Loudness Ratio (tPLR) with coloring (0-6 red, to orange at 9, to green at 13 and to blue at 21 dB).
Can be called from cmdline and extra switched can be used:
Powershell.exe -file <this script.ps1> -infile <some audio file> -w <img width pxls> -h <img height pxls> -outplot <output plot image path .png>

(this is getting scrappy as I play with ideas)
Code:
# Generates Loudness plots
# uses ffmpeg to generate loudness data
# formats into csv
# uses gnuplot to draw graphs

Param(
    $infile,
    $w,
    $h,
    $outplot
    )


$outcsv = "$env:Temp\loudnesscsv.txt"
$gnuplotcommandfile = "$env:Temp\gnuplotcmdfile.txt"
$gnuplot_histodata = "$env:Temp\gnuplot_histo_data.txt"
if(!$outplot){$outplot = "T:\LoudnessPlot.png"}
$gnuplot = "d:\0\gnuplot\gnuplot.exe"

#
if(!$w){$w=1280}
if(!$h){$h=720}


Write-Host "Getting Loudness Data with ffmpeg."
$lufs_data = & ffmpeg.exe -i $infile -af ebur128=peak=true -ar 4410 -f null - 2>&1
#$lufs_data | Out-File "t:\lufsdata.txt" -Encoding ASCII

$lra_high = ($lufs_data | select-string "LRA high:") -replace("[^0-9-.]")
$lra_low = ($lufs_data | select-string "LRA low:") -replace("[^0-9-.]")
$I_LUFS = ($lufs_data | select-string "I:      ") -replace("[^0-9-.]")
$lrange = ($lufs_data | select-string "LRA:      ") -replace("[^0-9-.]")

$artist = (($lufs_data | select-string ("ARTIST  ")) -split ": ")[1]
$album = (($lufs_data | select-string ("ALBUM  ")) -split ": ")[1]
$title = (($lufs_data | select-string ("TITLE  ")) -split ": ")[1]
$track = (($lufs_data | select-string ("TRACK  ")) -split ": ")[1]

$plottitle = @($artist, $album, $('{0:d2}' -f [int]$track), $title) -join " - "
if($plottitle -eq " -  - 00 - "){$plottitle = $infile}

Write-Host "Data Collected, now formatting to csv file."
$csv = $(
ForEach($rawentry in $lufs_data){
    $entry = if($rawentry -match "parsed_ebur128"){$rawentry}
    $array_tmsir = $entry -split(":") -split (" ") | ?{$_ -ne ""} | Select-Object -index 4,9,11,13,16,19,20

    if($array_tmsir){
        $time = $array_tmsir[0]
        $Momentary = $array_tmsir[1]
        $Short = $array_tmsir[2]
        $Integrated = $array_tmsir[3]
        $lra = $array_tmsir[4]
        $tpk_l = $array_tmsir[5]
        $tpk_r = $array_tmsir[6]

        "$([math]::Round($time,1))" + ",$Momentary,$Short,$Integrated,$lra,$tpk_l,$tpk_r"
    }
}
)
$csv | Out-String | Out-File $outcsv -Encoding ASCII
$entries = $csv.count

Write-Host "Running GNUPlot..."
$gnuplotinstructions = $(
"set terminal png truecolor size $w,$h;"
"set output '$outplot';"
"set title `"$($plottitle -replace("\\","\\"))`" noenhanced;"

<# for plotting an additional distribution plot

"set multiplot layout 1,2;"

"set datafile separator ',';"
"bin_width = 0.1;"
"bin_number(x) = floor(x/bin_width);"
"rounded(x) = bin_width * ( bin_number(x) + 0.5 );"
"set table '$gnuplot_histodata';"
"plot '$outcsv' using (rounded(`$2)):(1) smooth frequency;"
"unset table;"
"unset datafile separator;"

"set key left top;"
"stats '$gnuplot_histodata' using 2:1 nooutput;"
"set xrange [1:(STATS_max_x)];"
"set yrange [-60:0];"
"set xtics 1;"
"set ytics 6;"
"set grid;"
"plot '$gnuplot_histodata' using (`$2 * 1.41):1 smooth bezier title 'Loudness Distribution';"
"unset grid;"
"unset xrange;"
"unset yrange;"
"unset xtics;"
"unset ytics;"
"unset key;"
#>

"set datafile separator ',';"
"set key inside center top Left reverse maxrows 2 width -4;"

"set yrange [-60:3];"
"set ylabel 'Loudness (LUFS)';"
"set ytic 6;"
"set mytics 2;"

"set ytics nomirror;"
"set y2tics;"
"set y2range [0:31.5];"
"set y2tic 2;"
"set y2label 'Loudness Range (LU)';"

"set grid;"

"set xdata time;"
"set format x '%M:%S';"
"set xlabel 'Time (MM:SS)';"
"set autoscale xfix;"

#"set timefmt '%M:%S';"

#"set obj 1 rect at (($entries/10)-45),($lra_high +3) size char strlen('LRA High: $lra_high LUFS'), char 1 fc 'white' front;"
#"set label 1 'LRA High: $lra_high LUFS' at (($entries/10)-45),($lra_high +3) front center font `",10`";"
#"set obj 2 rect at (($entries/10)-45),($lra_low -3) size char strlen('LRA Low: $lra_low LUFS'), char 1 fc 'white' front;"
#"set label 2 'LRA Low: $lra_low LUFS' at (($entries/10)-45),($lra_low -3) front center font `",10`";"

"set palette model RGB defined (0 'red', 6 'red', 9 'orange', 13 'green', 21 'blue');"
"set cbrange [0:21];"
"unset colorbox;"

"plot \"
"$lra_high with filledcurves above y=$lra_low fc rgb '#00aa00' fs transparent solid 0.1 noborder title 'LRA H: $lra_high - L: $lra_low LUFS', \"
"'$outcsv' using (`$0/10):2 axes x1y1 with lines lc rgb '#ff0000' lw 1 title 'Momentary', \"
"               '' using (`$0/10):( (`$6>`$7?(`$6-`$2):(`$7-`$2)) ) : ( (`$6>`$7?(`$6-`$2):(`$7-`$2)) ) with boxes lc palette fs transparent solid 0.1 noborder axes x1y2 title 'tPLR', \"
#"               '' using (`$0/10):( (`$6>`$7?(`$6-`$2):(`$7-`$2)) ):( (`$6>`$7?(`$6-`$2):(`$7-`$2)) ) axes x1y2 with filledcurves above y1=0 fc palette z fs transparent solid 0.1 noborder title 'PLR', \"
#"               '' using (`$0/10):2 axes x1y1 with histeps lc rgb '#ff8000' notitle, \"
"               '' using (`$0/10):3 axes x1y1 with lines lc rgb '#8080ff' lw 3 title 'Short-Term', \"
"               '' using (`$0/10):4 axes x1y1 with lines lc rgb '#0000ff' lw 4 title 'Integrated: $I_LUFS LUFS', \"
"               '' using (`$0/10):5 axes x1y2 with lines lc rgb '#008000' lw 3 title 'Loudness Range: $lrange LU'; \"

) | Out-String
$gnuplotinstructions | Out-File $gnuplotcommandfile -Encoding ASCII

<#
$bytes = [System.Text.Encoding]::UTF8.GetBytes($gnuplotinstructions)
$str = [system.text.Encoding]::UTF8.GetString($bytes)
$str
#>

cmd.exe /c "`"$gnuplot`" <$gnuplotcommandfile"

Remove-Item -LiteralPath $outcsv
Remove-Item -LiteralPath $gnuplotcommandfile
Remove-Item -LiteralPath $gnuplot_histodata -ErrorAction silentlycontinue

#cmd.exe /c pause
& $outplot
exit
 

RayDunzl

Major Contributor
Central Scrutinizer
Joined
Mar 9, 2016
Messages
10,845
Likes
10,339
Location
Riverview FL
#6
Is there an example of a music file mastered "the old way" and mastered "the LUFS" way?
 
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #7
Is there an example of a music file mastered "the old way" and mastered "the LUFS" way?
I'm not sure what you mean, do you mean compare an older song/album that would have been transferred from tape and mastered the analogue way, but recorded to CD for distribution, and a later remaster of the same song, which would have come from tape again, but been remastered 'in the box' so to speak and with likely an all digital chain?

I don't think there is a 'LUFS way' to master music. LUFS is just a replacement for VU, really. An improved set of tools to better understand the volume of the material. Clearly many engineers aren't using the LUFS toolset or if they are they are ignoring it, as many are extremely loud, have hardly any loudness range and are full of true-peak overs.
 
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #8
PurpleHaze_85.png

PurpleHaze_97.png

There's a comparison of two different remasters of the same track.
In this case the '97 doesn't sound utterly terrible. It has been peak limited and some EQ changes were done creating a slightly harder sound IMO.

Generally speaking I don't hold on to multiple versions unless there is a reason. Most of the time an earlier version (or a later premium version) outdoes the others in all qualities, so there's no point taking up space with inferior versions.
 
OP
L5730

L5730

Senior Member
Joined
Oct 6, 2018
Messages
471
Likes
258
Location
East of England
Thread Starter #10
For true peaks, I think I would be most interested if they go over 0dB.
As the data is there for Left and Right peaks only every 100ms, that could be plotted. Some overs are captured as I've seen 0.1 or 0.2 dB listed, and if it was straight sample peaks it'd only go to 0 dB.
 
Top Bottom