Skip to content

Releases: savonet/liquidsoap

Liquidsoap 1.3.1

28 May 09:55
Compare
Choose a tag to compare

This is a bugfix release, addressing a couple of bugs from the recent 1.3.0 release. Changelog is:

New:

  • Allow any tags allowed in "encoder.encoder.export" settings in vorbis streams (#418)

  • Allow "audio/mp3" mime-type for mp3 in file resolution protocol. (#451)

Fixed:

  • Fixed run_process, get_process_lines, get_process_output when compiling with OCaml <= 4.03 (#437, #439)

  • Calls to wait_for while the scheduler isn't running (#442)

  • Revert default handling of environment in run_process, get_process_lines, get_process_output to passing calling process' environment by default.

Liquidsoap 1.3.0

27 Apr 12:51
Compare
Choose a tag to compare

New:

  • Added support for recursive functions (#406)

  • Add peak and peak.stereo operators (#364)

  • Change track_sensitive parameter to a boolean getter (fixed value or anonymous function).

  • Add SSL support to the varous harbor operators, either via openssl or OSX's SecureTransport.

  • Add optional "dj" and "next" metadata for Shoutcast v2, wrap "dj" value in a callback in output.shoutcast (#370, #388)

  • Allow partial parsing of JSON objects in of_json.

  • Generalize list.assoc to allow default values. Legacy code must be updated: list.assoc(k,l) -> list.assoc(default="",k,l)

  • Generalize list.hd to allow default values. Legacy code must be updated: list.hd(l) -> list.hd(default="",l)

  • Allow to pass a default to list.nth. Legacy code must be updated: list.nth(l,pos) -> list.nth(default=<..>,l,pos)

  • Added on_offset to execute a callback at a given offset within a source's tracks.

  • Added mutexify to protect a function from being called concurrently.

  • Added request.log to get log data associated with a request

  • Added overlap_sources to rotate between sources with overlapping tracks.

  • Added replay_metadata to input.harbor()

  • Added <char code> syntax for strings (#368)

  • Added string.sub

  • Added run_process to run a process with optional environment and return (stdout,stderr,exit_status)

  • Added add_playlist_parser to register new playlist parsers

  • Added optional static parameter to add_protocol

  • Added file.temp to create fresh temporary filename

  • Added process: protocol

  • Reimplemented curl-based fetch process using process:

  • Added s3:// protocol to fetch files from AWS S3 using the AWS CLI.

  • Added polly: protocol to enable speech synthesis using AWS polly. Generated files are mono so make sure you use audio_to_stereo().

  • Added youtube-dl: protocol to resolved requests using youtube-dl

  • Added which() to find an exectuable within the $PATH

  • Added register() to allow to register new configuration settings

Changed:

  • Reverted default value for --error_as_warnings option, renamed to --strict.

  • Moved say: protocol registration to utils.liq.

  • Moved get_process_lines and get_process_output to utils.liq, added optional env parameter

  • Set conservative=true by default in cross() and smartcross()

Deprecated (can be removed in any future version):

  • Dynamic plugins compilation, deprecated in favor of opam rebuild mechanism.

Removed:

  • aac and aacplus encoders, removed in favor of fdk-aac.

  • dirac/schroedinger video encoder: obsolete, abandoned upstream.

  • force_mpeg option in taglib metadata decoder. Has not been used for years and allows to decouple taglib code from the mad decoder.

Bugfixes:

  • Fix negative seek (#390)

  • Prevent flows metadata updata from stalling sources (#377)

  • Add revdns setting for telnet, set all revdns default to false (#372)

  • Fix icy metadata in output.harbor (#358)

  • Fix missing first line of headers from icy clients in input.harbor (#380)

  • Fix timestamp in some logged output (#395)

  • Fix crash in external (download) protocol.

  • Fix fade.{in,out} metadata handling for new fade duration and type.

  • Compute normalization regardless of child sources ready status in add() to avoid unexpected change of volume.

Liquidsoap 1.2.1

02 Jul 15:21
Compare
Choose a tag to compare

1.2.1 (01-07-2016)

New:

  • Support for https (SSL/TLS) icecast connections.
  • Added http.{put,head,delete}, https.{get,post,head,put,delete}.
  • Added input.https.
  • Added list.mapi.
  • Added rotate.sequence.
  • New pipe() operator to pipe audio data through an external program.
  • Switched to curl for request resolution/fetch.

Bugfixes:

  • Fix metadata update for shoutcast v2 when sid <> 1 (#320).
  • Fix connection to input.harbor using the shoutcast v1 protocol (#337).

Liquidsoap 1.2.0

12 Jan 23:33
Compare
Choose a tag to compare

New:

  • Websocket server (#90): this means that you can stream to harbor directly from
    your browser!
  • Add support for AIFF format (#112).
  • Add url.split_args to split the argument of an url (#123).
  • Add buffer.adaptative to cope with small network delays (#131).
  • Add sleeper operator to simulate network delays and test robustness (#131).
  • Add stereo.left and stereo.right to extract channels from a stereo stream.
  • Add restart command to restart liquidsoap (#135).
  • Add file.contents to read the contents of a file.
  • Add filter.rc for first-order RC filters.

Enhancements:

  • Add support for sending OSC data (osc.send_*).
  • Native support for (some) AVI files (#256) which enables support for external
    video encoders (#233).
  • Improve rms operator (#105) to have per channel rms (#102), the ability to
    dynamically set window duration (#103) and multiple monitors (#104).
  • Icecast streaming can now use HTTP1.1 chunked encoding (#82, #107).
  • Add support for multiple shoutcast extensions (#216).
  • Fade type can be overridden by metadata in fade.in / fade.out (#64).
  • Allow LADSPA plugins with arbitrary number of channels (#191).
  • Rename shine encoder from %mp3.fxp to %shine.
  • fdkaac: dynamic plugin (#79), set afterburner parameter, use MPEG4 by default
    (#83).
  • Improved subtyping on lists (#125, #126).
  • Add native simple JSON decoder.
  • Better code: do not abusively use assertions (#137), issue more warnings and
    fix them (#162).

Bugfixes:

  • Correctly close connection in http.get / http.post (#72).
  • Remove input.lastfm which has been broken for a while.
  • Lots of small bugfixes.

Liquidsoap 1.1.1

13 Jan 11:53
Compare
Choose a tag to compare

New:

  • Add support for FDK-AAC, which seems to be the best AAC(+) encoder around for
    now. Replacement candidate for VO-AAC and AACPLUS
  • Add %ifencoder to check whether Liquidsoap was compiled with support for a
    particular encoding format.
  • There is now an emacs mode in scripts/liquidsoap-mode.el.
  • Liquidsoap can be used as a Windows service.

Enhancements:

  • Handle more OSC types (float, float_pair, bool, string, string_pair) and added
    osc.on_*.
  • Better infrastructure for decoding images. add_image can now handle most image
    file types.
  • Add random.int as well as min_int and max_int to standard library.
  • Add playlist.merge to play a whole playlist as one track.
  • Add gstreamer.hls to play http live streams (HLS).
  • Add say.program to specify text-to-speech program in scripts.
  • Add "random" transition type to video.fade.* in order to select a random
    transition each time.
  • Add max parameter to drop data on buffer overrun with input.gstreamer.*.
  • Add bytes_per_page parameter to ogg encoders.
  • Add support for DTX in speex and opus, as well as VAD for speex.
  • Localize some more parsing errors in files.

Bugfixes:

  • Avoid deadlocks in harbor.
  • Correctly flush lame encoder.
  • Correct sequence operator when there is only one source.
  • Handle relative URLs in http playlists.
  • portaudio is now an active source.
  • Avoid jack I/O lowering the volume.

Liquidsoap 1.1.0

13 Jan 11:54
Compare
Choose a tag to compare

New:

  • Add support for GStreamer decoding, processing and encoding (%gstreamer
    format, v4l webcam input is now implemented using GStreamer).
  • Add support for opus decoding and encoding.
  • Add support for the shine encoder, which can efficiently work on architectures
    without FPU.
  • Add support for automatically computing the duration of tracks in the
    "duration" metadata [LS-641]. It can be enabled with
    set("request.metadata_decoders.duration",true)
  • Add support for frei0r video effects.
  • Allow %define'd variables in encoding formats [LS-634], e.g.
    %define BITRATE 24
    %define STEREO true
    output.file(%mp3(bitrate = BITRATE, stereo = STEREO),"bla.mp3",s)

Enhancements:

  • Taglib now reads all metadatas (even non-standard ones).
  • Add a mode to automatically reload a playlist when the file was changed
    [LS-363,LS-523]. For instance, s =
    playlist("~/Music",reload_mode="watch"). Also, add file.watch to call a
    callback when a file is changed, with inotify support when present.
  • Add support for FFMpeg as video converter, which you can use with
    set("video.converter.preferred", "ffmpeg")
  • Add back_time argument to blank operators [LS-609].
  • Add a metadata to override fade.final duration.
  • MIME is computed at most once when extracting replaygain.
  • Default samplerate converter is now "fast".
  • BPM detection (bpm) now uses a callback.
  • Add clock.unify to unify clocks of all sources from a list.
  • Add "source_url" metadata to input.http streams.
  • Improved error message when theora format is not supported.
  • Add list.filter function.
  • video.add_image can now take any image format as input.
  • Add mux_stereo.
  • Support for external decoders in streams.
  • Move bugtracker to https://github.com/savonet/liquidsoap/issues

Bugfixes:

  • Configure is now compatible with OCaml >= 4.0 and removed support for OCaml <
    3.11 [LS-625].
  • Fix random memory access / memory leak when decoding AAC/MP4 files [LS-647].
  • Correct resampling of wav files.
  • Use the length for data indicated in header for wav files.
  • Argv.(0) now returns the script name [LS-605].
  • Liquidsoap should now operate fine when compiled with -noassert [LS-578].
  • Better handling of inexistent MIDI channels.
  • Video decoder now correctly handles videos from Icecast.
  • Avoid visu.volume freezing Liquidsoap on shutdown.
  • Fix a memory leak when decoding both audio and video in ogg [LS-636].
  • More efficient handling of video converters, also fixes some crashes [LS-623].
  • Have the soundtouch operator preserve tags [LS-621].
  • Fix remaining time estimation in cross and smart_cross.
  • Avoid deadlocks in harbor and input.http.
  • Remove leftover files in configure [LS-567].
  • Handle wav files with padded fmt headers.
  • Handle end-of-stream when seeking mp3 with mad.

Liquidsoap 1.0.1

13 Jan 11:55
Compare
Choose a tag to compare

Fixes:

  • correct type for the "flush" parameter in output.external()
    thanks to Romaric Petion for pointing it out
  • fix bug where MP3 encoder would discard initial ID3v2 rendering
  • fix bug where smart_cross() would stop before the end of tracks,
    thanks to Edward Kimber for raising the issue
  • load libraries in --interactive [LS-618]
  • update examples, notably the installed radio.liq
    thanks to Emery Hemingway for noticing the problem
  • generalize the types of input.http() and input.harbor() to allow variable
    content kinds, and also allow video for harbor [LS-601]
  • request.equeue() now allows to remove requests from the primary queue
  • fix compilation of lame dynamic plugin.

New:

  • new values for metadata fields does not override old one anymore;
    use setting "request.metadata_decoders.override" to restore old behavior
  • stereo_mode and internal_quality parameters for %mp3 encoder
  • enable mad decoder for MP1 and MP2 in addition to MP3, create aliased
    configuration keys "decoder.file_extensions/mime_types.mad"
  • support for CUE sheet playlists and metadata in M3U
  • setting "decoder.taglib.force_mpeg" to force taglib to consider files as MPEG
  • scripting builtins getenv(), setenv() and environment()
  • scripting builtin source.fallible()
  • harbor is now verb-oriented, supporting GET, POST, PUT, HEAD, DELETE, OPTIONS
  • load DSSI plugins from environment variables and using dssi.register()
  • also display the type of the whole expression when -i is passed
  • generalized custom path support for facilitating standalone distributions
  • and as usual, various improvements in the code, log and error messages, etc.

Liquidsoap 1.0.0

13 Jan 11:58
Compare
Choose a tag to compare

Finally, the 1.0.0 release! It brings several important fixes, but also some nice novelties. The most outstanding difference concerns output.icecast(): its restart and restart_delay parameters are gone, replaced by a new on_stop handler which is called on every error (failed connection or disconnection) and returns the new restart delay. The on_error handler receives a string describing the error which enables user-friendly reporting, adaptative
delays, etc. Note that on_error defaults to fun(_)->3. which is equivalent to having restart=true, restart_delay=3. in previous versions, NOT the same as the former restart=false default. As a result, Liquidsoap won't fail to startup if an initial connection attempt fails.

Fixes:

  • LS-532,527: avoid freeze after errors in streaming threads or source
    initialization routines
  • LS-542: race condition in playlist*() breaking randomness
  • LS-489: double expiration lead to illegal queue length and freeze of
    request-based sources
  • Avoid multiple simultaneous reloading in playlist*(),
    thanks to Fabio Costa for his help on this one!
  • Pass charset information to icecast server to avoid encoding bugs
  • LS-555: timeout for icecast connection attempts
  • LS-559: permanent stop after disconnection on Ogg streams
  • LS-565: efficient and crash-free error handling in input.http/harbor()
    when the input stream has an invalid number of channels
  • LS-431: proper handling of duration in blank() avoids abusive empty tracks
  • LS-556: rework conversion operators, optimizations used to be unsafe & broken
  • LS-574: silent MIDI synthesis operators
  • LS-396: drop*()'s types reflect that they don't support variable arities
  • LS-442: allow comments not terminated by newline at end of file

New:

  • on_error handler in output.icecast(), see above
  • New msg param in %mp3 for marking frame headers, defaults to version string
  • output.file(): new on_close parameter, may be used to write exact duration
  • %mp3.vbr/abr for variable bitrate MP3, %mp3 is now a synonym of %mp3.cbr
  • MP3 encoders now support ID3v2 tags
  • input.http(): new "status" command
  • LS-556: mux_mono() for adding a single audio channel into a stream
  • video.add_text() using libgd (gd4o) for environments without X
    Dependency on graphics can be disabled (to work around erreneous detection)
  • script language: add infix operator mod (patch by Fabio Costa)
  • delay() now has an "initial" parameter
  • LS-557: "server.timeout" setting can now be disabled by setting it to -1
  • LS-532: source.init() for selective init with a way to handle errors,
    plus settings "clock.allow_streaming_errors" and "init.force_stat" (or
    --force-start on the command line) for easing dynamic uses of liquidsoap
    Enhancements:
  • Panic crash to avoid frozen liquidsoap after duppy crashes
  • Text-to-speech: festival and sox are now only runtime dependencies
  • LS-475,516: better support for dynamic URL change in input.http()
  • LS-484: display user-friendly error messages in interactive mode
  • LS-308: use seconds internally in request sources, avoid overflow and
    display more user-friendly debug messages
  • Cleanup visu.volume() and video.vis_volume()
  • LS-573: replace " " by "_" in identifiers to make them valid in the server
  • Script syntax: unary minus now usable without parenthesis after semicolon
  • Two generic queues by default, to avoid deadlocks in advanced situations
  • Documentation, build & install system, etc.

Liquidsoap 1.0.0 beta 3

13 Jan 12:10
Compare
Choose a tag to compare
Pre-release
  • Feature: Added of_json to parse json data. Depends
    on json-wheel.
  • Feature: Added file.exists and is_directory.
  • Feature: Added timeout options for:
    telnet, harbor (server), input.icecast
  • Enhancement: finer-grained timeout detection
    for input.harbor and input.http
  • Fix: deadlock when disconnecting harbor users
    through server/telnet command.
  • Fix: dynlink detection in native mode with old
    versions of ocaml
  • Fix: deadlock when an exception is raised during
    startup while the clock is owned by a source
    (e.g. input.alsa). See LS-527 for more details.

Liquidsoap 1.0.0 beta 2.1

13 Jan 12:11
Compare
Choose a tag to compare
Pre-release
  • Fix: playlist.safe() was unusable in beta2, as a side effect of removing
    duplicate "timeout" parameter in playlist().
  • Minor enhancements to documentation, settings and reference.