Hi there,

I was wondering if there is a way to get liquidsoap faster.  Here is  
the case :

I'm running on ubuntu server 8.04.  The script has to read an ogg  
stream and has 2 local playlist filled with mp3's in case of stream  
failure.  It also has a request.queue to be able to add some  
annoucement and a little custom smart_cross transition helped with an  
map_metadata.the whole system call a python script on_metadata which  
fork itself to release a faster as possible the main thread.  (Since  
it was not called during my test, I don't believe he is faulty).   
Finally, there are 2 outputs, one on ogg files (mono, 32kbps, cbr) and  
one on the sound card.

The machine is a Pentium III running at 733Mhz with 128Mb of memory  
(not a lot of memory but top says liquidsoap only use 30% of it...)  
and liquidsoap is running with a nice level of -5.

The problem is that when I run liquidsoap with ouput.alsa, I get a  
"catchup" of about 0.25 seconds about 6 time per minutes but, if I use  
output.ao, I falls at 3 every track change!  I don't know what's the  
difference between both off them but if there is a way to have to get  
liquidsoap even faster on this machine (without disabling the file  
output, which actually works) I'll be happy to know them.

Thanks,
Simon



Here is the main code :

# importation
%include "config.liq.aux"
%include "top.liq.aux"

# mise à jour du status de l'antenne
def updateStatus(meta)
        # Le script qui sera exécuté ici devra être RAPIDE car tournant dans  
le thread principal!
        # system()
        x = string.ref("")
        get = fst(x)
        set = snd(x)
        def makeArgs(meta)
                def replacer(txt)
                        "<apo/>"
                end
                txt = "<Tag>"^fst(meta)^"="^snd(meta)^"</Tag>"
                txt = string.replace(pattern="'", replacer, txt)
                set("'"^txt^"' "^get())
        end
        list.iter(makeArgs, meta)
        log(get())
        system(metaUpdaterCommand^" "^get())
end

# Structure radio

jingles = playlist.safe(DB^"/safe/jingles/")
playlist = playlist.safe(DB^"/safe/songs/")
# le(s) jingles de pub
inPubJingle = single(DB^"/safe/colle/introPub.mp3")
outPubJingle = single(DB^"/safe/colle/extroPub.mp3")

secours = random(weights=[4, 1], [playlist, jingles])
main = strip_blank(length=15., input.http(id="mainStream", buffer=30.,  
max=50., mainStream))
decro = strip_blank(length=15., input.http(id="decroStream",  
autostart=false, buffer=2., decroStream))

# Here, we use 2 dummy output whose main goal is to avoid buffering  
when reading pub
output.dummy(mksafe(main))
output.dummy(mksafe(decro))

radio= map_metadata(setSourceMeta("radio"),
                                                fallback(transitions = 
[crossfade, crossfade, crossfade],
                                                                        
track_sensitive=false, [decro, main, secours]))

pub = map_metadata(setSourceMeta("pub"), request.queue(id="pub"))


def backRadio(s)
        def tr(Vp, Vn, Mp, Mn, p, n)
                if list.assoc("source", Mn) == list.assoc("source", Mp)
                then sequence([p,n])
                elsif list.assoc("source", Mn) == "clock"
                then add(normalize=false,
                                  [ sequence([ blank(duration=2.), n]),
                                  fade.final(duration=2.,p) ])
                elsif list.assoc("source", Mn) == "pub"
                then add(normalize=false,
                                        
[sequence([blank(duration=1.),once(inPubJingle),n]),
                                        fade.final(duration=2.,p)])
                elsif list.assoc("source", Mp) == "clock" and 
list.assoc("source",  
Mn)=="radio"
                then add(normalize=false,
                                          [ sequence([ blank(duration=1.),
                                         fade.initial(duration=2.,n)]),
                                                p ])
                elsif list.assoc("source", Mp) == "pub" and 
list.assoc("source",  
Mn)=="radio"
                then  add(normalize=false,
                                        [ sequence([ blank(duration=4.),
                                fade.initial(duration=3.,n)]),
                                          sequence([ blank(duration=2.), 
once(outPubJingle)]),
                                          p])
                else sequence([p,n])
                end
        end
        smart_cross(width=2., duration=2., conservative=true, tr, s)
end

ClockedRadio = backRadio(fallback(
                                track_sensitive=false,
                                [map_metadata(setSourceMeta("clock"), clock), 
pub, radio]))

out = on_metadata(updateStatus, ClockedRadio)

output.file.vorbis.cbr(stereo=false, bitrate=32, reopen_when={0m},
                                                
DB^"backup/%Y/%m/%d/%H.%M.%S.ogg", out)
output.ao(out)



-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Savonet-users mailing list
Savonet-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to