Liquidsoap 2.1.0
was just released, some ~10 months after the initial release of the 2.0.x
release cycle!
The release is available here: Release Liquidsoap 2.1.0 · savonet/liquidsoap · GitHub and should be coming through opam
pretty soon.
What is liquidsoap?
Liquidsoap is a statically-typed, type-inferred, functional scripting language equipped with specialized operators to build audio and video stream automation.
The liquidsoap language offers all the flexibility and expressivity of a fully featured programming language to help build your media streams.
Using liquidsoap, one can very quickly stand up a media streaming platform that can rotate files from playlists, accept live DJ input, mux audio and video, encode (or not!) and send the resulting data to youtube, icecast, HLS and more…
Why liquidsoap?
While there are many tools that offer competing features, the real difference with liquidsoap is its scripting language.
Setting up tools using configuration files is often easier and more straight forward, however, when it comes to the finer details, such as inserting jingles between shows, defining crossfades between tracks and more, potentially, each project has its own set of expectations, and this is where liquidsoap becomes really useful!
What’s new in Liquidsoap 2.1.0?
Lots of things have been brewing since the 2.0.0
release. This new release branch is intended to bring up some of the breaking changes that were introduced while we keep working on more exciting future changes that we have on our roadmap
Some noticeable changes include:
Improved JSON parsing
You should now be able to do:
let json.parse ({
foo,
bla,
gni
} : {
foo: string,
bla: float,
gni: bool
}) = '{ "foo": "aabbcc", "bla": 3.14, "gni": true }'
For any one who has ever tried to parse json in their liquidsoap scripts, this is gonna be a game changer. We have a detailed article here
Regular expressions are now first-class entities.
This should be familiar to anyone used to working with Javascript’s regular expression. So, now, instead of doing:
string.match(pattern="\\d+", s)
You will now do:
r/\d+/.test(s)
There’s a detailed description of this new feature here.