LOUDNESS LUFS METER FOR ADJUSTING TRACK GAIN LEVELS IN DECKS & SAMPLES
This loudness meter can be used to determine gain/trim adjustment in DB however indicates Loudness Unit both current and across entire track as well as dynamic range to assist DJs in correctly setting gain levels. This also relies on a peak limiter to prevent distortion and clipping on each deck.
Example is Waves WLM Plus VST which I have added to my to-do list in testing it within DJ Studio.
Log in to comment and vote
Comments2
Gavin Staveley
Sep 19, 2025
This request is now redundant in light of new information and a new request will be posted. I will mention it here when it is done.
Gavin Staveley
Sep 6, 2025
I noticed DJ Studio uses ffmpeg which has an LUFS analysis function. I use a batch file to analyze the LUFS of tracks. This could be integrated into DJ Studio. LUFS works on average presence of the file, not RMS or Peak levels and is what a lot of audio engineers/producers use in the studio for mastering.
i mix for an overal mixset LUFS of -10 LUFS but could go as loud as -8 LUFS.
The output generated is as follows:
Input Integrated: -16.0
LUFS Input True Peak: -4.5 dBTP
Input LRA: 8.0 LU
Output Integrated: -10.0
LUFS Output True Peak: -1.0 dBTP
Recommended Gain to Ceiling: +3.5 dB
Recommended Gain to Target LUFS: +6 dB
Compression Needed: 42%
The Last 3 are the ones to pay attention to.
Recommended Gain to Ceiling: (+3.5 dB) is the gain to bring a track’s peaks to the PCM ceiling (before clipping), when using compression to raise the presence the rest of the way.
Recommended Gain to Target LUFS: (eg: +6 dB) is how much total gain is needed to hit target loudness.
Compression Needed: (eg: 42%) is the % ratio increase of compression to reach a presence of +6db after a gain increase of 3.5 dB. (2.5 db / 6.0 db = 42%)
So the theoretical guideline is a gain of 3.5dB & Compression increase of 42%.
Use of the following script.
LUFSCALC {Absolute Path & File Name}
LUFSCALC {Folder Path}
LUFSCALC {Text File name containing list of paths & file names to process}
-f opcode/switch dumps the output into a text file in the same folder and name as the audio file but with .lufs.txt filename extension.
Here is my draft script.
[batch file begin]
@echo off
setlocal enabledelayedexpansion
:: --- CONFIGURATION ---
set TARGET_LUFS=-10
set CEILING=-1.0
:: --- FUNCTIONS ---
:ProcessFile
set "file=%~1"
set "basename=%~dpn1"
set "outfile=%basename%.lufs.txt"
echo.
echo Analyzing: %file%
:: Capture full ffmpeg output into temporary file
set "tmpfile=%basename%.tmp"
ffmpeg -hide_banner -i "%file%" -af "loudnorm=I=%TARGET_LUFS%:TP=%CEILING%:LRA=11:print_format=summary" -f null NUL 2>&1 > "%tmpfile%"
:: Extract Input Integrated and True Peak
for /f "tokens=3" %%A in ('findstr /C:"Input Integrated:" "%tmpfile%"') do set "INTEGRATED=%%A"
for /f "tokens=3" %%A in ('findstr /C:"Input True Peak:" "%tmpfile%"') do set "TRUEPEAK=%%A"
set "INTEGRATED=!INTEGRATED:LUFS=!"
set "INTEGRATED=!INTEGRATED: =!"
set "TRUEPEAK=!TRUEPEAK:dBTP=!"
set "TRUEPEAK=!TRUEPEAK: =!"
:: Calculate gains
set /a LUFS_GAIN=%TARGET_LUFS% - %INTEGRATED%
set /a PEAK_GAIN=(%CEILING% -100) - (%TRUEPEAK% -100)
set /a PEAK_GAIN=PEAK_GAIN/100
if %LUFS_GAIN% LEQ %PEAK_GAIN% (
set COMPRESSION=0
) else (
set /a COMPRESSION=(%LUFS_GAIN% - %PEAK_GAIN%)*100 / %LUFS_GAIN%
)
if "%DO_FILE%"=="1" (
copy "%tmpfile%" "%outfile%" >nul
echo.>> "%outfile%"
echo Recommended Gain to Ceiling: %PEAK_GAIN% dB >> "%outfile%"
echo Recommended Gain to Target LUFS: %LUFS_GAIN% dB >> "%outfile%"
echo Compression Needed: %COMPRESSION%%% >> "%outfile%"
del "%tmpfile%"
echo Results saved to %outfile%
) else (
type "%tmpfile%"
echo Recommended Gain to Ceiling: %PEAK_GAIN% dB
echo Recommended Gain to Target LUFS: %LUFS_GAIN% dB
echo Compression Needed: %COMPRESSION%%%
del "%tmpfile%"
)
goto :eof
:: --- MAIN LOGIC ---
if "%~1"=="" (
echo Usage:
echo normalize.bat file.mp3
echo normalize.bat foldername
echo normalize.bat filelist.txt
echo Options:
echo -f Write per-file .lufs.txt report
exit /b
)
:: --- Parse switches ---
set DO_FILE=0
for %%A in (%*) do (
if "%%A"=="-f" set DO_FILE=1
)
:: Get the last non-switch argument (the target path/file)
set "input="
for %%A in (%*) do (
if not "%%A"=="-f" set "input=%%A"
)
:: Case 1: Text file list
if /i "%~x1"==".txt" (
for /f "usebackq tokens=*" %%F in ("%input%") do (
call :ProcessFile "%%F"
)
goto :eof
)
:: Case 2: Single audio file
if /i "%~x1"==".mp3" (
call :ProcessFile "%input%"
goto :eof
)
if /i "%~x1"==".wav" (
call :ProcessFile "%input%"
goto :eof
)
if /i "%~x1"==".flac" (
call :ProcessFile "%input%"
goto :eof
)
:: Case 3: Folder
if exist "%input%" (
for /r "%input%" %%F in (*.mp3 .wav .flac) do (
call :ProcessFile "%%F"
)
goto :eof
)
echo Invalid input: %input%
exit /b
[batch file end]