Search code examples
liquidsoap

Problem Trying to Process Audio in Liquidsoap with StereoTool


I am attempting to process audio in Liquidsoap using StereoTool, but the following code does not appear to be working. The connection to Icecast never works. It only does if I remove the two lines piping audio to StereoTool.

#!/usr/bin/liquidsoap

# Setup telnet
set("server.telnet",true)
set("server.telnet.port",1234)

# Log dir
set("log.file.path","/home/wruser/radio/logs/basic-radio.log")
set("log.stdout",true)

def my_request_function() = 
    # Get the first line of my external process
    result = list.hd(default="", get_process_lines("python3 /home/wruser/radio/python/get_track.py"))
    print(result)
    # Create and return a request using this result
    [request.create(result)]
end

# Create the source
s = request.dynamic.list(my_request_function)

processed = pipe(process='/home/wruser/radio/stereotool/stereo_tool_cmd_64 -s /home/wruser/radio/stereotool/radio.sts', s)

# Stream it out
output.icecast(%mp3(bitrate=192),
        fallible=true,
        host = "localhost",
        port = 8000,
        password = "************",
        mount = "radio",
        processed)

When I run Liquidsoap, the log output is as follows:

2020/07/28 15:18:48 >>> LOG START
2020/07/28 15:18:47 [main:3] Liquidsoap 1.4.2
2020/07/28 15:18:47 [main:3] Using: bytes=[distributed with OCaml 4.02 or above] pcre=7.4.3 sedlex=2.1 menhirLib=20200525 dtools=0.4.2 duppy=0.8.0 cry=0.6.1 mm=0.5.0 ogg=0.5.2 vorbis=0.7.1 opus=0.1.3 mad=0.4.5 flac=0.1.5 flac.ogg=0.1.5 dynlink=[distributed with Ocaml] lame=0.3.3 fdkaac=0.3.1 samplerate=0.1.4 taglib=0.3.3 ssl=0.5.9 camomile=1.0.2 faad=0.4.0
2020/07/28 15:18:48 [frame:3] Using 44100Hz audio, 25Hz video, 44100Hz master.
2020/07/28 15:18:48 [frame:3] Frame size must be a multiple of 1764 ticks = 1764 audio samples = 1 video samples.
2020/07/28 15:18:48 [frame:3] Targetting 'frame.duration': 0.04s = 1764 audio samples = 1764 ticks.
2020/07/28 15:18:48 [frame:3] Frames last 0.04s = 1764 audio samples = 1 video samples = 1764 ticks.
2020/07/28 15:18:48 [sandbox:3] Sandboxing disabled
2020/07/28 15:18:48 [video.converter:3] Couldn't find preferred video converter: gavl.
2020/07/28 15:18:48 [audio.converter:3] Using samplerate converter: libsamplerate.
2020/07/28 15:18:48 [clock.wallclock_main:3] Streaming loop starts, synchronized with wallclock.
2020/07/28 15:18:51 [decoder:3] Method "WAV" accepted "/home/wruser/Music/10 Holy, Holy, Holy Lord God Almighty.wav".
2020/07/28 15:18:51 [request.dynamic.list_7658:3] Prepared "/home/wruser/Music/10 Holy, Holy, Holy Lord God Almighty.wav" (RID 0).
2020/07/28 15:18:52 [decoder:3] Method "WAV" accepted "/home/wruser/Music/God So Loved Me That He Gave.wav".

Solution

  • Found the issue. I had to change this line:

    processed = pipe(process='/home/wruser/radio/stereotool/stereo_tool_cmd_64 -s /home/wruser/radio/stereotool/radio.sts', s)
    

    to the following:

    processed = pipe(process='/home/wruser/radio/stereotool/stereo_tool_cmd_64 - - -s /home/wruser/radio/stereotool/radio.sts', s)