Hello all,
Seems to be really dead this whole liquidsoap-thing doesn't it? Anyway,
if there's anybody who can help me in integrating my
sidechain-compressor into my liquidsoap-script to do what i described in
my previous mail here's what i get when i type:
hserver:~# liquidsoap -h ladspa.sidechaincompressor

Calf Sidechain Compressor LADSPA by Markus Schmidt / Thor Harald Johansen.

Type: (?id:string,?attack:'a,?bypass:bool,?detection:int,
 ?f1_freq:'b,?f1_level:'c,?f2_freq:'d,?f2_level:'e,
 ?input:'f,?knee:'g,?makeup_gain:'h,?ratio:'i,
 ?release:'j,?s_c_level:'k,?s_c_listen:bool,
 ?s_c_mode:int,?s_c_route:int,?stereo_link:int,
 ?threshold:'l,source(audio=2,video=0,midi=0))->
source(audio=2,video=0,midi=0)
where
  'a, 'b, 'c, 'd, 'e, 'f, 'g, 'h, 'i, 'j, 'k, 'l is either float or
()->float

Category: Source / Sound Processing
Flag: hidden

Parameters:

 * id : string (default: "")
     Force the value of the source ID.

 * attack : anything that is either float or ()->float (default:
4.47213602066)
     Attack (0.01 <= attack <= 2000).

 * bypass : bool (default: false)
     Bypass.

 * detection : int (default: 0)
     Detection (0 <= detection <= 1).

 * f1_freq : anything that is either float or ()->float (default:
424.264068604)
     F1 Freq (10 <= f1_freq <= 18000).

 * f1_level : anything that is either float or ()->float (default: 1.)
     F1 Level (0.0625 <= f1_level <= 16).

 * f2_freq : anything that is either float or ()->float (default:
2763.4675293)
     F2 Freq (10 <= f2_freq <= 18000).

 * f2_level : anything that is either float or ()->float (default: 1.)
     F2 Level (0.0625 <= f2_level <= 16).

 * input : anything that is either float or ()->float (default: 1.)
     Input (0 <= input <= 64).

 * knee : anything that is either float or ()->float (default: 2.75)
     Knee (1 <= knee <= 8).

 * makeup_gain : anything that is either float or ()->float (default: 1.)
     Makeup Gain (1 <= makeup_gain <= 64).

 * ratio : anything that is either float or ()->float (default: 1.)
     Ratio (1 <= ratio <= 20).

 * release : anything that is either float or ()->float (default:
94.5741577148)
     Release (0.01 <= release <= 2000).

 * s_c_level : anything that is either float or ()->float (default: 1.)
     S/C Level (0.015625 <= s_c_level <= 64).

 * s_c_listen : bool (default: false)
     S/C-Listen.

 * s_c_mode : int (default: 0)
     S/C Mode (0 <= s_c_mode <= 9).

 * s_c_route : int (default: 0)
     S/C Route (0 <= s_c_route <= 2).

 * stereo_link : int (default: 0)
     Stereo Link (0 <= stereo_link <= 1).

 * threshold : anything that is either float or ()->float (default:
0.250732421875)
     Threshold (0.000976563 <= threshold <= 1).

 * (unlabeled) : source(audio=2,video=0,midi=0) (default: None)

hserver:~# exit
Abgemeldet

Thanks and best Regards, Attila.



Am 02.02.2015 15:20, schrieb Attila Konietzka:
> Hello all,
> Currently i am running liquidsoap 1.0.1 on debian 7 64-bit.
> My basic script is running just fine, playing out some 90S Dance Tracks
> for testing stuff etc.
> I used the complete case analysis script found on the liquidsoap
> homepage as a starting reference.
> I am fine with the audiosettings for the most part and am especially
> glad that i can use the calf multiband-compressor thanks to kxstudio and
> falkTX.
> This saves me 5% of cpu load for the multibandcompression alone.
> Being 100% visually impaired and getting more and more dissatisfied with
> the growing inaccessibility of gui-driven radio automation software i am
> all the more happy to have liquidsoap available for my needs.
> I am a total beginner in liquidsoap and not yet fully into the inner
> workings and the possibilities of this programming language. So
> naturally i would be stuck at some point and this is where i'd be asking
> for help right now.
> Knowing that there is a sidechain-compressor available in my
> ladspa-plugincollection i wonder if i could build some talkover-effect
> found on several dj-mixers, so that whenever i connect my microphone
> over a harbor input the music will be ducked whenever i speak. This is
> good for playing out the usual trance-dj-sessions. So all i had to do is
> to feed my microphone harbor-input into my sidechain compressor and
> because the 2 streams from my playlist are mixed together, the
> microphone is able to influence the volume of the playing music.
> Is there any break in the music-stream when the mic-harbor-input
> connects and disconnects, since i might not be available all the time,
> and would like to leave the stream doing it's job on it's own.
> But i don't know how to go about it. The next problem is the 10 seconds
> bufferdelay from the stream to the end listener which makes realtime
> monitoring nearly impractical, since my linux-box is colocated in berlin
> and i'm residing in esslingen close to stuttgart most of the time. Maybe
> some lowlatency speex-output for testing and nearly-realtime monitoring
> except for a 1 to 2 seconds delay, which would be acceptable to me.
> Does anybody know about the meaning of the ladspa-compressor-parameters?
> It seems to me the treshold-parameter isn't expressed in decibel. Anyway
> i even have a hard time understanding some of my multiband-compressors
> parameters because of this.
> Any Ideas? This would be really great.
> I will attach my script below as a quick reference for you to know where
> i am at right now.
> Sensible data has been exchanged with meaningless parameters. Passwort
> etc...
> Thanks and best Regards, Attila.
>
>
> #!/usr/bin/liquidsoap
>
> # Lines starting with # are comments, they are ignored.
>
> # Put the log file in some directory where
> # you have permission to write.
> set("log.file.path","/tmp/<script>.log")
> # Print log messages to the console,
> # can also be done by passing the -v option to liquidsoap.
> set("log.stdout", false)
> # Use the telnet server for requests
> set("server.telnet", true)
>
>
> # A bunch of files and playlists,
> # supposedly all located in the same base dir.
>
> default = single("/home/mp3/fallback/default.ogg")
>
> day     = playlist("/home/mp3/day/")
> night   = playlist("/home/mp3/night/")
> jingles = playlist("/home/mp3/jingles/")
>
> # clock   = single("/home/mp3/fallback/clock.ogg")
> # start   = single("/home/mp3/fallback/start.ogg")
> # stop    = single("/home/mp3/fallback/stop.ogg")
>
> # Play user requests if there are any,
> # otherwise one of our playlists,
> # and the default file if anything goes wrong.
> radio = fallback([ request.queue(id="request"),
>                     switch([({ 6h-22h }, day),
>                             ({ 22h-6h }, night)]),
>                     default])
>
> # Metadata rewriting to show Station Infos and no Artist/title-infos.
> radio =
>   rewrite_metadata([
>                   ("artist", "meinprivatesradio"),
>                   ("album", ""),
>                   ("date", ""),
>                   ("genre", "diverse"),
>                   ("title","Wir spielen, was Ihr hoeren wollt!"),
>                     ("comment","http://www.meinprivatesradio.de";)],
>                   strip=true,radio)
>
> # smart crossfading
> # first generate our custom Fading Function
> def my_fade
> (~start_next=3.,~fade_in=3.,~fade_out=3.,~width=1.,~conservative=true,s)
> mf_high = 20.
> mf_medium = 32.
> mf_margin = 4.
> fade.out = fade.out(duration=fade_out)
> fade.in = fade.in(duration=fade_in)
>
> add = fun (from,to) ->
> add(normalize=false,
> [ to,from ])
>
> log = log(label="my_fade")
> def transition (a, b, ma, mb, sa, sb)
> if
>
> (a + mf_high >= 0. and b + mf_high >= 0.) or
>
> (a + mf_medium >= 0. and b + mf_medium >= 0. and abs(a - b) <= mf_margin)
>
> then
>
> log("No transition, just sequencing.")
>
> sequence([sa, sb])
>
> elsif
>
> a + mf_medium <= 0. and b + mf_medium >= 0. and abs(a - b) <= mf_margin
>
> then
>
> log("Using transition 1: crossed.")
>
> add(fade.out(sa),fade.in(sb))
> elsif
>
> b >= a + mf_margin and a <= mf_high
>
> then
>
> log("Using transition 2: crossed, fade-out.")
>
> add(fade.out(sa),sb)
> elsif
>
> a >= b + mf_margin and b <= mf_high
>
> then
>
> log("Using transition 3: crossed, fade-in.")
>
> add(sa,fade.in(sb))
> else
>
> log("Using transition 4: crossed, fade-in, fade-out.")
>
> add(fade.out(sa),fade.in(sb))
>
> end
>
> end
> smart_cross(transition,width=width,duration=start_next,conservative=conservative,s)
> end
>
> # process this function within our stream
> radio = my_fade(radio)
> # Add the normal jingles
> radio = random(weights=[1,5],[ jingles, radio ])
> # And the clock jingle
> # radio = add([radio, switch([({0m0s},clock)])])
>
> # Add the ability to relay live shows
> full =
>   fallback(track_sensitive=false,
>            [input.harbor("live",port=9001,password="dukommsthiernetrein"),
>             radio])
>
>
> ## Audio processing
> # Tap Equalizer to pump up and brighten up the sound
> full = ladspa.tap_equalizer (
> band_1_gain = 2.0,
> band_6_gain = 2.0,
> band_7_gain = 3.0,
> full)
>
> # old custom Function for Multiband-compression.
> # will be phased out, for it's extraordinarily cpu-intensive.
> # Instead we'll be using the falkTX/calf githup repo's ladspa libraries
> so we have the calf multiband-compressor available.
> # Shouldn't be so demanding on cpu resources and gives more clean and
> understandable Code.
> # the old one sounded crappy anyway.
> #def multicomp(s)
>   # 3-band crossover
> #  low = filter.iir.eq.low(frequency = 130.)
> #  mh = filter.iir.eq.high(frequency = 70.)
> #  mid = filter.iir.eq.low(frequency = 7400.)
> #  high = filter.iir.eq.high(frequency = 350.)
>
>   # Add back
> #  add(normalize = false,
> #      [ compress(attack = 10., release = 20., threshold = -12.,
> #                 ratio = 2., gain = 2.0, knee = 0.3,
> #                 low(s)),
> #        compress(attack = 10., release = 20., threshold = -28.,
> #                 ratio = 5., gain = 4.0, knee = 1.3,
> #                 mid(mh(s))),
> #        compress(attack = 5., release = 10., threshold = -22.,
> #                 ratio = 5., gain = 5.0, knee = 0.3,
> #                 high(s))
> #      ])
> # end
>
> # Use bandpass filter to narrow signal to 30-15000 Hz for FM broadcast
> full = filter.iir.butterworth.bandpass(
>   frequency1 = 30.0,
>   frequency2 = 15000.0,
>   order = 4,
>   full
> )
>
> # apply our custom multiband compressor
> #  full = multicomp(full)
>
> # Gate to stop Background noise during quiet times
> full = ladspa.gate(
> full,
> threshold = -50.0,
> attack = 0.15,
> )
>
>
> # maybe it's gonna get grovier with the ladspa bassenhancer
> # commented out until i know how to use it properly.
> #  full = ladspa.bassenhancer(full,
> #     amount=5.,floor_active=true,
> #     input=1.,output=1.,)
>
> # apply the Calf Multiband Compressor
> # puh, lot's of parameters to tweak!
> full = ladspa.multibandcompressor(
> bypass=false,
> input=1.,
> output=1.,
> split_1_2=140.,
> split_2_3=1500.,
> split_3_4=7000.,
> s1=-0.25,
> s2=-0.136,
> s3=-0.148,
> q1=0.90,
> q2=0.90,
> q3=0.90,
>
> threshold_1=0.211,
> ratio_1=6.5,
> attack_1=50.,
> release_1=100.,
> makeup_1=2.,
> knee_1=1.,
> detection_1=1,
> bypass_1=false,
>
> threshold_2=0.300,
> ratio_2=2.5,
> attack_2=70.,
> release_2=150.,
> makeup_2=1.,
> knee_2=3.,
> detection_2=1,
> bypass_2=false,
>
> threshold_3=0.260,
> ratio_3=2.5,
> attack_3=70.,
> release_3=150.,
> makeup_3=1.,
> knee_3=3.,
> detection_3=1,
> bypass_3=false,
>
> threshold_4=0.145,
> ratio_4=1.9,
> attack_4=10.,
> release_4=20.,
> makeup_4=1.9,
> knee_4=2.,
> detection_4=1,
> bypass_4=false,
> full
> )
>
> # Overall Compressor -LS's single band compressor using a harder ratio,
> fast attack and mainly RMS based calc.
> full = compress(
>   full,
>   attack = 1.0,
>   gain = 2.0,
>   knee = 1.0,
>   ratio = 5.0,
>   release = 2.0,
>   threshold = -3.0,
>   rms_window = 0.9
> )
>
> # Limiter - scaling limiter with good artifact rejection
> full = ladspa.tap_limiter(
>   full,
>   limit_level = -1.5
> )
>
> # Final Hard Limiter - keeps level from causing over mod. in worst case.
> EXTREMELY peak based calc.
> full = limit(
>   full,
>   threshold = -0.1,
>   attack = 2.0,
>   release = 25.0,
>   rms_window = 0.02
> )
>
> # Output the full stream in OGG and MP3
> # mp3-stream will not be affected by dsp for listening tests.
> output.icecast(%mp3,
>   host="localhost",port=23456,password="dukommsthiernetrein",
>   mount="radio",radio)
> output.icecast(%vorbis,
>   host="localhost",port=23456,password="dukommsthiernetrein",
>   mount="radio.ogg",full)
>
>
>
> ------------------------------------------------------------------------------
> Dive into the World of Parallel Programming. The Go Parallel Website,
> sponsored by Intel and developed in partnership with Slashdot Media, is your
> hub for all things parallel software development, from weekly thought
> leadership blogs to news, videos, case studies, tutorials and more. Take a
> look and join the conversation now. http://goparallel.sourceforge.net/
> _______________________________________________
> Savonet-users mailing list
> Savonet-users@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/savonet-users


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
Savonet-users mailing list
Savonet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to