Starting with version
2.2.0, liquidsoap supports the
shared library distributed by Thimeo Audio Technology
stereotool operator (and
track.audio.stereotool for the low-level, track-specific
This feature is enabled in all release builds of liquidsoap starting
rolling-release-v2.2.x and should be enabled if you
compile liquidsoap with the optional
The operator can replace the use of the stereotool binary in your script and offers multiple benefits. In particular, it has a very low latency compared to using the binary and also operates synchronously.
The operator should be quite easy to use. Here’s an example:
# Define a source s = ... # Apply stereotool to it: s = stereotool( library_file="/path/to/stereotool/shared/lib", license_key="my_license_key", preset="/path/to/preset/file" )
That’s it! You can apply as many
stereotool operators as
you wish and at any stage in the script, thanks to its synchronous
nature. However, a current limitation is that the processed
audio signal is slightly delayed.
This is because the operator has an internal processing buffer. We do
plan on delaying metadata and track marks to match this latency but this
has not yet been implemented and will probably have to wait for the
2.3.x release cycle.
This means that, until then, track switches and metadata updates
might happen slightly earlier than the corresponding signal. We’re
100ms earlier, though,
so that might not be a super big deal.
For the same reason, the source returned by
is an audio-only source. Otherwise, other concurrent tracks
such as video and etc would be slightly out of sync. If you need to use
the operator in this kind of situation, you might want to use a
ffmpeg filter to e.g. adjust the video’s PTS to match the
In such case, you can refer to the
latency method that
is available on the source returned by the operator which should
indicate the delay to compensate from the processed audio signal.
preset parameter has a companion
load_type parameter that can optionally be used to only
load a subset of the preset. You might refer to the upstream
documentation if you need to use it.
stereotool is a proprietary
software. While we actively promote open source, we also want
to meet our users where they are and, for a lot of them, this means
supporting the sound processing provided by the tool.
However, to use it, you will need a license. Using the operator without the proper license will not result in an error in your script but the audio signal might have spoken text and/or beeps added to it.
Using the operator with an invalid license will be reported in the
logs. You might also use the
valid_license method available
on the source returned by the operator, which returns
if the license is invalid. In this case, the
unlincensed_used_features method returns a string
indicating which unlicensed features are being used.