Hi everyone, i can't understand where is the problem...

%include "library/pervasives.liq"
%include "/etc/airtime/liquidsoap.cfg"

set("log.file.path", log_file)
set("log.stdout", true)
set("server.telnet", true)
set("server.telnet.port", 1234)

time = ref string_of(gettimeofday())

queue = audio_to_stereo(id="queue_src", request.equeue(id="queue", length=0.5))
queue = cue_cut(queue)

pypo_data = ref '0'
web_stream_enabled = ref false
stream_metadata_type = ref 0
default_dj_fade = ref 0.
station_name = ref ''
show_name = ref ''

s1_connected = ref ''
s2_connected = ref ''
s3_connected = ref ''
s1_namespace = ref ''
s2_namespace = ref ''
s3_namespace = ref ''
just_switched = ref false

%include "ls_lib.liq"

queue = dole_fade(queue)
#ignore(output.dummy(queue, fallible=true))

server.register(namespace="vars", "pypo_data", fun (s) -> begin pypo_data := s 
"Done" end)
server.register(namespace="vars", "web_stream_enabled", fun (s) -> begin 
web_stream_enabled := (s == "true") string_of(!web_stream_enabled) end)
server.register(namespace="vars", "stream_metadata_type", fun (s) -> begin 
stream_metadata_type := int_of_string(s) s end)
server.register(namespace="vars", "show_name", fun (s) -> begin show_name := s 
s end)
server.register(namespace="vars", "station_name", fun (s) -> begin station_name 
:= s s end)
server.register(namespace="vars", "bootup_time", fun (s) -> begin time := s s 
end)
server.register(namespace="streams", "connection_status", fun (s) -> begin 
"1:#{!s1_connected},2:#{!s2_connected},3:#{!s3_connected}" end)
server.register(namespace="vars", "default_dj_fade", fun (s) -> begin 
default_dj_fade := float_of_string(s) s end)

default = amplify(id="silence_src", 0.00001, noise())
default = rewrite_metadata([("artist",""), ("title", "")],default)
rnd=playlist(mode='randomize',reload=1,reload_mode="rounds", 
"/home/mediaimported")

# One source for static jingles, added between tracks
jingles_stat = playlist.safe(mode='randomize',"/home/jingle")
music = dole_fade2(jingles=jingles_stat,rnd)


ignore(output.dummy(default, fallible=true))
ignore(output.dummy(music, fallible=true))
ignore(output.dummy(rnd, fallible=true))

master_dj_enabled = ref false
live_dj_enabled = ref false
scheduled_play_enabled = ref false

def make_master_dj_available()
        master_dj_enabled := true
end

def make_master_dj_unavailable()
        master_dj_enabled := false
end

def make_live_dj_available()
        live_dj_enabled := true
end

def make_live_dj_unavailable()
        live_dj_enabled := false
end

def make_scheduled_play_available()
        scheduled_play_enabled := true
        just_switched := true
end

def make_scheduled_play_unavailable()
        scheduled_play_enabled := false
end

#live stream setup
set("harbor.bind_addr", "0.0.0.0")

def update_source_status(sourcename, status) =
    system("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh 
--source-name=#{sourcename} --source-status=#{status} &")
    log("/usr/lib/airtime/pypo/bin/liquidsoap_scripts/notify.sh 
--source-name=#{sourcename} --source-status=#{status} &")
end

def live_dj_connect(header) =
    update_source_status("live_dj", true)
end

def live_dj_disconnect() =
    update_source_status("live_dj", false)
end

def master_dj_connect(header) =
    update_source_status("master_dj", true)
end

def master_dj_disconnect() =
    update_source_status("master_dj", false)
end

#auth function for live stream
def check_master_dj_client(user,password) =
        #get the output of the php script
        ret = get_process_lines("python 
/usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_auth.py --master 
#{user} #{password}")
        #ret has now the value of the live client (dj1,dj2, or djx), or 
"ERROR"/"unknown" ...
        ret = list.hd(ret)
        #return true to let the client transmit data, or false to tell harbor 
to decline
        if (ret == "True") then
            true
        else
            false
        end
end

def check_dj_client(user,password) =
        #get the output of the php script
        ret = get_process_lines("python 
/usr/lib/airtime/pypo/bin/liquidsoap_scripts/liquidsoap_auth.py --dj #{user} 
#{password}")
        #ret has now the value of the live client (dj1,dj2, or djx), or 
"ERROR"/"unknown" ...
        ret = list.hd(ret)
        #return true to let the client transmit data, or false to tell harbor 
to decline
        if (ret == "True") then
            true
        else
            false
        end
end

def append_dj_inputs(master_harbor_input_port, master_harbor_input_mount_point, 
dj_harbor_input_port, dj_harbor_input_mount_point, input) =
    if master_harbor_input_port != 0 and master_harbor_input_mount_point != "" 
and dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then
        master_dj = mksafe(audio_to_stereo(input.harbor(id="master_harbor", 
master_harbor_input_mount_point, port=master_harbor_input_port, 
auth=check_master_dj_client,
                    max=40., on_connect=master_dj_connect, 
on_disconnect=master_dj_disconnect)))
        dj_live = mksafe(audio_to_stereo(input.harbor(id="live_dj_harbor", 
dj_harbor_input_mount_point, port=dj_harbor_input_port, auth=check_dj_client,
                    max=40., on_connect=live_dj_connect, 
on_disconnect=live_dj_disconnect)))
        ignore(output.dummy(master_dj, fallible=true))
        ignore(output.dummy(dj_live, fallible=true))
        switch(id="master_dj_switch", track_sensitive=false, 
transitions=[transition, transition, transition], 
[({!master_dj_enabled},master_dj), ({!live_dj_enabled},dj_live), ({true}, 
input)])
    elsif master_harbor_input_port != 0 and master_harbor_input_mount_point != 
"" then
        master_dj = mksafe(audio_to_stereo(input.harbor(id="master_harbor", 
master_harbor_input_mount_point, port=master_harbor_input_port, 
auth=check_master_dj_client,
                     max=40., on_connect=master_dj_connect, 
on_disconnect=master_dj_disconnect)))
        ignore(output.dummy(master_dj, fallible=true))
        switch(id="master_dj_switch", track_sensitive=false, 
transitions=[transition, transition], [({!master_dj_enabled},master_dj), 
({true}, input)])
    elsif dj_harbor_input_port != 0 and dj_harbor_input_mount_point != "" then
        dj_live = mksafe(audio_to_stereo(input.harbor(id="live_dj_harbor", 
dj_harbor_input_mount_point, port=dj_harbor_input_port, auth=check_dj_client,
                    max=40., on_connect=live_dj_connect, 
on_disconnect=live_dj_disconnect)))
        ignore(output.dummy(dj_live, fallible=true))
        switch(id="live_dj_switch", track_sensitive=false, 
transitions=[transition, transition], [({!live_dj_enabled},dj_live), ({true}, 
input)])
    else
        input
    end
end
queue = switch(id="default_switch", track_sensitive=false, 
transitions=[transition, transition], 
[({!scheduled_play_enabled},queue),({true},music)])
input = append_dj_inputs(master_live_stream_port, master_live_stream_mp, 
dj_live_stream_port, dj_live_stream_mp, queue)
input = map_metadata(append_title, input)
s = input
s = on_metadata(notify, s)

add_skip_command(s)
s = audio_process(s)


server.register(namespace="streams",
                description="Stop Master DJ source.",
                usage="master_dj_stop",
                "master_dj_stop",
                fun (s) -> begin make_master_dj_unavailable() "Done." end)
server.register(namespace="streams",
                description="Start Master DJ source.",
                usage="master_dj_start",
                "master_dj_start",
                fun (s) -> begin make_master_dj_available() "Done." end)
server.register(namespace="streams",
                description="Stop Live DJ source.",
                usage="live_dj_stop",
                "live_dj_stop",
                fun (s) -> begin make_live_dj_unavailable() "Done." end)
server.register(namespace="streams",
                description="Start Live DJ source.",
                usage="live_dj_start",
                "live_dj_start",
                fun (s) -> begin make_live_dj_available() "Done." end)
server.register(namespace="streams",
                description="Stop Scheduled Play source.",
                usage="scheduled_play_stop",
                "scheduled_play_stop",
                fun (s) -> begin make_scheduled_play_unavailable() "Done." end)
server.register(namespace="streams",
                description="Start Scheduled Play source.",
                usage="scheduled_play_start",
                "scheduled_play_start",
                fun (s) -> begin make_scheduled_play_available() "Done." end)

if output_sound_device then

    success = ref false

    log(output_sound_device_type)

    %ifdef output.alsa
        if output_sound_device_type == "ALSA" then
                ignore(output.alsa(s))
        success := true
        end
        %endif

        %ifdef output.ao
        if output_sound_device_type == "AO" then
                ignore(output.ao(s))
        success := true
        end
        %endif

        %ifdef output.oss
        if output_sound_device_type == "OSS" then
        ignore(output.oss(s))
        success := true
        end
        %endif

        %ifdef output.portaudio
        if output_sound_device_type == "Portaudio" then
        ignore(output.portaudio(s))
        success := true
        end
        %endif

        %ifdef output.pulseaudio
        if output_sound_device_type == "Pulseaudio" then
        ignore(output.pulseaudio(s))
        success := true
        end
        %endif

    if (!success == false) then
        ignore(output.prefered(s))
        end

end

if s1_enable == true then
    if s1_output == 'shoutcast' then
        s1_namespace := "shoutcast_stream_1"
    else
        s1_namespace := s1_mount
    end
    server.register(namespace=!s1_namespace, "connected", fun (s) -> begin 
!s1_connected end)
    output_to(s1_output, s1_type, s1_bitrate, s1_host, s1_port, s1_pass, 
s1_mount, s1_url, s1_description, s1_genre, s1_user, s, "1", s1_connected)
end

if s2_enable == true then
    if s2_output == 'shoutcast' then
        s2_namespace := "shoutcast_stream_2"
    else
        s2_namespace := s2_mount
    end
    server.register(namespace=!s2_namespace, "connected", fun (s) -> begin 
!s2_connected end)
    output_to(s2_output, s2_type, s2_bitrate, s2_host, s2_port, s2_pass, 
s2_mount, s2_url, s2_description, s2_genre, s2_user, s, "2", s2_connected)

end

if s3_enable == true then
    if s3_output == 'shoutcast' then
        s3_namespace := "shoutcast_stream_3"
    else
        s3_namespace := s3_mount
    end
    server.register(namespace=!s3_namespace, "connected", fun (s) -> begin 
!s3_connected end)
    output_to(s3_output, s3_type, s3_bitrate, s3_host, s3_port, s3_pass, 
s3_mount, s3_url, s3_description, s3_genre, s3_user, s, "3", s3_connected)
end

ignore(output.dummy(blank()))

Here is my script, but when i use fallback.skip from this evening... i can't 
use Master or Source Stream from Airtime... when someone connect to stream at 
these sources... liquidsoap skip songs.... i'm going crazy!!!! 

queue = switch(id="default_switch", track_sensitive=false, 
transitions=[transition, transition], 
[({!scheduled_play_enabled},queue),({true},music)])
input = append_dj_inputs(master_live_stream_port, master_live_stream_mp, 
dj_live_stream_port, dj_live_stream_mp, queue)
input = map_metadata(append_title, input)
s = input
s = on_metadata(notify, s)

was before this problem like this: 

queue = switch(id="default_switch", track_sensitive=false, 
transitions=[transition, transition], 
[({!scheduled_play_enabled},queue),({true},default)])
input = append_dj_inputs(master_live_stream_port, master_live_stream_mp, 
dj_live_stream_port, dj_live_stream_mp, queue)
input = map_metadata(append_title, input)
s = fallback.skip(input=strip_blank(length=8.,input),music)
s = on_metadata(notify, s)

Another thing if someone can help me on... was the tag rewriting... 
How i do to make it working using Airtime form Show - Artist - Title for Queue 
and using the same way for source tag Show - (streamed title) ...

Thanks a Lot!
------------------------------------------------------------------------------
Don't let slow site performance ruin your business. Deploy New Relic APM
Deploy New Relic app performance management and know exactly
what is happening inside your Ruby, Python, PHP, Java, and .NET app
Try New Relic at no cost today and get our sweet Data Nerd shirt too!
http://p.sf.net/sfu/newrelic-dev2dev
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to