FreeLCS FAQ



What is FreeLCS  ?

Can I modify FreeLCS  ?

What programs are used to process audio files ?

What formats are supported ?

FFmpeg and patents

Can I restrict FFmpeg to use only patent free formats

How many audio streams in a file are supported ?

What is the maximum / minimum file duration supported ?

What is the output format of FreeLCS ?

What happens to the files when they are processed ?

Is TruePeak measurement supported ?

Is peak limiting used when loudness correction adjusts volume up ?

What happens to the internal dynamics of a processed file ?

What channel orders are supported ?

What is the calculation precision ?

Is bit depth and sample rate preserved ?

What happens if output file size exceeds wav format 4 GB size limit ?

Will FreeLCS remux loudness corrected audio back to the video it was extracted from ?

Is MXF supported ?

Considerations for using a target loudness higher than -23 LUFS

Any suggestion for free tools to manipulate the Flac format ?

How can I test multichannel behaviour of my loudness meter ?

What Linux distributions are supported ?

FreeLCS error messages

Critical error messages

Non-critical error messages

Errors copying files from OS X 10.7 - 10.10 to FreeLCS - Server

Is there a way to find out FreeLCS options used during installation ?

Was AI used when programming FreeLCS  ?




What is FreeLCS  ?


Can I modify FreeLCS ?

Yes. FreeLCS is open source so you have access to all the source files and you can modify them anyway you see fit. Also you can install this software on as many computers as you like, there are no license fees.

FreeLCS is published under the Gnu GPL 3 license. The text of the license is here: https://www.gnu.org/licenses/gpl-3.0.en.html

Programming languages used:


What programs are used to process audio files ?


What formats are supported ?


FFmpeg and patents


Can I restrict FFmpeg to use only patent free formats


How many audio streams in a file are supported ?


What is the maximum / minimum file duration supported ?


What is the output format of FreeLCS ?


What happens to the files when they are processed ?


Is TruePeak measurement supported ?

Yes :) When you install the software you can choose which method of peak measurement is used: sample peak or TruePeak. Also TruePeak limiting is used when peak limiting is needed.


Is peak limiting used when loudness correction adjusts volume up ?


What happens to the internal dynamics of a processed file ?


What channel orders are supported ?

The following channel orders are supported:
Ebu R128 recommendation (or to be more precise ITU 1770 that R128 refers to) does not support any specific channel order, it only defines how loudness measurement of: Front, Surround and LFE channels differs from each other. Surround channels are weighted differently from front channels and LFE channel is always discarded from loudness calculation. This means that for example in the case of 3.0 any channel order is supported since all of the channels L, R, C are front channels and weighted equally in loudness calculation.

Important notes:


What is the calculation precision ?


Is bit depth and sample rate preserved ?

Sample rate should be preserved in all cases.

The following rules for bit depth conversion comes from internal limitations in sox and FFmpeg.

What happens if output file size exceeds wav format 4 GB size limit ?


Will FreeLCS remux loudness corrected audio back to the video it was extracted from ?


Is MXF supported ?


Considerations for using a target loudness higher than -23 LUFS


Apple Music (sound check on)    -16 LUFS
Spotify                         -14 LUFS
Tidal                           -14 LUFS
Amazon Music                    -14 LUFS
Youtube                         -13 LUFS

Infromation sources:
https://www.masteringthemix.com/blogs/learn/76296773-mastering-audio-for-soundcloud-itunes-spotify-and-youtube
https://toneprints.com/media/2040040/mobile-test-paper-2013.pdf
http://productionadvice.co.uk/youtube-loudness/
https://artists.spotify.com/faq/mastering-and-loudness#how-does-spotify-calculate-loudness


FreeLCS 3.6 and later will let you select any target loudness in the range of -31 LUFS to -12 LUFS. Using target loudness higher than -23 LUFS requires you to master your audio using a reduced loudness range or you may introduce limiting. High target loudness levels might introduce heavy limiting if source file loudness needs to adjusted up and:

  1. The file has very low overall loudness and peaks are already near 0 dbTP
  2. The file has very low overall loudness and a relatively short part that is very loud

The picture below demonstrates the latter case: very low overall loudness and a relatively short part that is very loud.

Most of this audio is at about -42 LUFS and the last part is at about -20 LUFS. That is a 22 LUFS difference. R128 has a relative gate that discards measurements 10 LU below calculated loudness. In this case it means that loudness is only calculated from the last loudest part of the audio and measurements from all other parts are discarded. If loudness is now adjusted up to -12 LUFS then limiting is needed or peaks will overshoot. Limiting the last part of the audio lowers total loudness because only the last part affects overall loudness.

Files like these needs to be prepared for a high target loudness by eliminating too wide loudness variations. FreeLCS is not a multi purpose compressor and it will not handle gracefully extreme cases like this.


Any suggestion for free tools to manipulate the Flac format ?


How can I test multichannel behavior of my loudness meter ?


What Linux distributions are supported ?

Beginning from May 2026 the plan is to support all stable Ubuntu LTS Docker - image releases. Canonical will release these once every two years.


FreeLCS 4.0 and 4.1 Supports:

FreeLCS 3.12 Supports:

FreeLCS 3.11 Supports:

FreeLCS 3.10 Supports:

FreeLCS 3.9 Supports:

FreeLCS 3.8 Supports:

FreeLCS 3.7 Supports:

FreeLCS 3.6 Supports:

FreeLCS 3.5 Supports:

FreeLCS 3.4 supports:

FreeLCS 3.3 supports:

FreeLCS 3.2 supports:

FreeLCS 3.0 supports:

FreeLCS 2.4 supports:

FreeLCS error messages

If you enable FreeLCS to send error messages by email, then you probably sometimes get some messages that at first might seem puzzling. Here are the explanations :)


Critical error messages

LoudnessCorrection has stopped updating timestamps

If you get the following error message, then it means that FreeLCS has encountered an error that it can not recover from and has stopped. FreeLCS (namely the LoudnessCorrection - program) starts jobs in threads that periodically sends timestamps to the Docker image where Heartbeat_Checker runs in. HeartBeat_Checker sends you email if timestamps stops arriving.

You can restart FreeLCS either by rebooting the computer or going into the directory where the FreeLCS apps and config - files are and giving these commands:

docker compose down

docker compose up -d


I have worked very hard to make FreeLCS solid as a rock. My goal is to keep it 100% reliable, so that it can be used in business environments. So you should never see this message :) but with computers anything is possible :) For example a failing hard disk may corrupt FreeLCS installation.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com


LoudnessCorrection has stopped updating main_thread timestamps.
The thread has probably crashed and a restart of the script is needed.
Last update happened at: 2026.05.26 at 10:08:31

LoudnessCorrection has stopped updating progress_report timestamps.
The thread has probably crashed and a restart of the script is needed.
Last update happened at: 2026.05.26 at 10:08:35

FreeLCS version: 4.0


LoudnessCorrection info:
--------------------------------------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/LoudnessCorrection_Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 27822
LoudnessCorrection version: 400

HeartBeat Checker info:
--------------------------------------
Commandline: /usr/bin/heartbeat_checker -configfile /etc/LoudnessCorrection_Settings.json
PID: 1
HeartBeat Checker version: 400

All Heartbeat timestamps started updating again

If you got the message above informing you that a FreeLCS thread has stopped updating timestamps, then you might get the following message if the problem was caused by some temporary glitch that just prevented FreeLCS from updating the timestamps in time, but did not crash FreeLCS. This message tells you that FreeLCS is working normally again.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com


All Heartbeat timestamps started updating again at: 2026.05.26 at 09:48:07

FreeLCS version: 4.0


LoudnessCorrection info:
--------------------------------------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/LoudnessCorrection_Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 27822

LoudnessCorrection version: 400

HeartBeat Checker info:
--------------------------------------
Commandline: /usr/bin/heartbeat_checker -configfile /etc/LoudnessCorrection_Settings.json
PID: 1
HeartBeat Checker version: 400
started updating again at: 2014.05.10 at 23:33:49

Non-critical error messages

These error messages are usually harmless and can be ignored.


HeartBeat_Checker has started

The HeartBeat_Checker - program sends this message when FreeLCS starts up. If you set up a weekly reboot for the machine, then this message greets you when FreeLCS service is up and running.


Subject: HeartBeat_Checker has started.

From: VirtualMachine_1@company.com


HeartBeat_Checker started: 2026.05.25 at 22:02:15

FreeLCS version: 4.0


LoudnessCorrection info:
--------------------------------------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/LoudnessCorrection_Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 19
LoudnessCorrection version: 400

HeartBeat Checker info:
--------------------------------------
Commandline: /usr/bin/heartbeat_checker -configfile /etc/LoudnessCorrection_Settings.json
PID: 1
HeartBeat Checker version: 400

Error deleting files queued for deletion

You may see this error message if you mount FreeLCS HotFolder with the NFS protocol. This error happens when a user uses a program that creates a file on the FreeLCS disk and then unlinks it.

According to: http://serverfault.com/questions/201294/nfsxxxx-files-appearing-what-are-those  Linux keeps this file available to the user while hiding the file from others. The file is renamed with a name that starts with a dot and Linux filesystem hides these files from file listings by default.

The hidden file will disappear when the user closes the program that keeps the file open.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com


2014.05.07_at_15.31.23   Error deleting files queued for deletion [Errno 16] Device or resource busy: '/data/LoudnessCorrection/.nfs00000001094fe93f00000007'

2014.05.07_at_15.31.28   Error deleting files queued for deletion [Errno 16] Device or resource busy: '/data/LoudnessCorrection/.
nfs00000001094fe93f00000007'


LoudnessCorrection info:
------------------------------
--------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/Loudness_Correction_
Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 1616
LoudnessCorrection version: 229




File size has changed during processing

I haven't been able to find a way to stop users from deleting files from the HotFolder without affecting other file processing. The following error message is caused when a user copies a file to the server, and the server starts processing it. Now the user deletes the file and replaces it with a file with the same name but with different size. FreeLCS notices that file size has changed during processing.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com


2014.05.05_at_16.56.14   ERROR !!! in libebur128 timeslice calculation: File size has changed during processing from: 3168838 -> 65536:  HALONEN 100.wav


LoudnessCorrection info:
------------------------------
--------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/Loudness_Correction_Settings.json


Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 1616
LoudnessCorrection version: 229




Error reading HotFolder file metadata

This error happens when user deletes a file that FreeLCS is about to start processing. FreeLCS makes a final check before processing and notices that the file is no longer available.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com


2014.05.14_at_13.40.44   Error reading HotFolder file metadata [Errno 2] No such file or directory: '/data/LoudnessCorrection/KUN_Putkiremonttipuffi GRAF.wav'


LoudnessCorrection info:
--------------------------------------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/Loudness_Correction_Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 1699
LoudnessCorrection version: 229




Many error messages for one audio file

This error message can mean one of two things. If you get these messages and they are all about the same audio file, then the user has deleted the file just when FreeLCS was about to start processing it.

If you get these messages and they mention several files, then this can mean that the hard disk might be failing. I have not tried to get rid of these error messages since they might indicate a hard disk failure.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com

2013.11.22_at_12.02.18   ERROR !!! I could not parse sox channel count string: 'can't open input file /mountpoint/raid-disk/LoudnessCorrection/Channels-2.0.flac
2013.11.22_at_12.02.18   ERROR !!! I could not parse sox sample rate string: '' for file: Channels-2.0.flac
2013.11.22_at_12.02.18   ERROR !!! I could not parse sox bit depth string: '' for file: Channels-2.0.flac
2013.11.22_at_12.02.18   ERROR !!! I could not parse sox sample count string: '' for file: Channels-2.0.flac
2013.11.22_at_12.02.18   ERROR !!! in libebur128 timeslice calculation: Error accessing file: [Errno 2] No such file or directory: '/mountpoint/raid-disk/LoudnessCorrection/Channels-2.0.flac'
2013.11.22_at_12.02.18   ERROR !!!!!!! FILE Channels-2.0.flac dissapeared from disk before processing started.

LoudnessCorrection info:
------------------------------
--------
Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/Loudness_Correction_
Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 1773
LoudnessCorrection version: 229




Premature EOF on .wav input file

FreeLCS uses sox to do the actual loudness adjustment of files. This error message comes directly from sox and happens when file size announced in a files header does not match the actual file size. This in turn might be caused for example by a dropped network connection ending file transfer prematurely.


Subject: Mikan_Arch-Serveri Error Message

From: VirtualMachine_1@company.com


2013.12.17_at_16.15.59   Sox error:  BUU_Radslor_syskonen_degeri.wav: sox WARN wav: Premature EOF on .wav input file


LoudnessCorrection info:
--------------------------------------

Commandline: /usr/bin/LoudnessCorrection.py -configfile /etc/Loudness_Correction_Settings.json
Server name: Mikan_Arch-Serveri
Target loudness: -23 LUFS
PID: 1847
LoudnessCorrection version: 229



Errors copying files from OS X 10.7 - 10.10 to FreeLCS - Server

FreeLCS uses the smb - protocol to share its Hotfolder to the network. Samba is the open source implementation of the smb - protocol that FreeLCS uses. Apple used Samba as its smb - implementation until OS X version 10.6. At this point Samba changed its license in a way that Apple didn't like and Apple decided to write their own smb implementation (smbx) from scratch. This is a huge task and there has been serious problems with OS X's interaction with other smb - implementations. OS X versions 10.7 - 10.10 all suffer from these problems.

OS X incompatibility with the smb standard causes file transfers to FreeLCS - server randomly stop with one of the following error messages (these are from OS X 10.10.4):




After digging around the internet I found two workarounds for the problem. The solution is to force OS X to use an older version of the smb - protocol called cifs. These solutions are from this page: http://www.zdnet.com/article/mavericks-smb2-problem-and-fixes

Important !!!!!!!

If you have problems described above, then try the workarounds below and try to copy files one by to the FreeLCS server. It seems most of the times I get these errors I have tried to transfer multiple files in one go.

Workaround 1:

When you make the connection to FreeLCS replace "smb://" with "cifs://" at the beginning of the mount command. Save the command to the mount command list for later use.

Workaround 2:

Force all smb - connections to use the older cifs - protocol by giving this command in the Terminal. This applies only to the current user.

echo "[default]"    >>   ~/Library/Preferences/nsmb.conf    ;   echo "smb_neg=smb1_only"    >>    ~/Library/Preferences/nsmb.conf


Is there a way to find out FreeLCS options used during installation ?

Yes. FreeLCS 3.12 and later creates a human readable config file LoudnessCorrection_Settings.json

It may be a bit convoluted but the options are there as variable names and values right after it.


Was AI used when programming FreeLCS ?

I started working on FreeLCS in 2012 and then there was no AI capable of doing coding. So everything was written manually by a human being. However while modifying FreeLCS to run on Docker I experimented with AI when translating my Python3 versions of heartbeat_checker and progress_report to Go. This was not a straight forward process since I first converted these Python3 programs to communicate with each other through network instead of writing files to disk. I did not use AI for this. When the conversion was ready I realized that the Python3 libraries I used for network communication were not safe for production so I explored other languages and found that Go network / web libraries were fast, safe and stable.

I had some previous experience in Go and I had done another open source project with it https://github.com/mhartzel/ffcommander so I decided to convert these two programs to Go. Although these are quite small that is a lot of work. My brother is a real programmer at his dayjob :) and he had had very positive experiences with AI - coding at his work so I decided to try it out. Gemini made the first Go - versions of these two programs but the quality was not good. I used these as skeletons and practically wrote them again. AI - code quality was not good because it used short unclear variable names that made the code very hard to read and understand and it also used several different coding styles at once making the code difficult to follow. It also introduced bugs and left out some features of the original programs. Part of these problems might be due to me not being able to prompt it correctly. I learned also that coding is so much fun that I don't want to give that away to a robot :)