Hi Romain,

Thank you very much for your input!

Your solution is quite different from what I had initially envisioned but
I learned quite a lot from it. And, most importantly, it gives me exactly
what I wanted!

I wasn't aware of the static float variable either. This goes to show how
little I know about scripting with liquidsoap ;)

Having said that, it is all the more amazing how it's possible to quickly
come up with powerful scripts even as a complete beginner... :)

Again, thanks a bunch for your quick help and keep up the awesome work!

Henry

> Le samedi 1 janvier 2011 13:18:39, Henry Favretto a écrit :
>> Hi all,
>
>       Hi !
>
>> I use the following code (liquidsoap 0.9.3) for generating timed
promotions
>> in certain random intervals:
>>         interval = random.float(min=2800.0,max=5000.0)
>>         timed_promotions = delay(interval, promotions)
>>         radio = smooth_add(p=0.4, special=timed_promotions,
>> normal=radio)
>> , where "promotions" and "radio" are both playlist sources.
>> Everything works nice except for one thing: When I start the channel
the
>> special content ("timed_promotions") always gets played first - which
is
>> not preferred. Rather, my intention is to have the output starting with
the normal content ("radio") and the special content to be played back
for
>> the first time only after the first interval has passed.
>> Any idea how I can achieve that?
>
> I think i can solve two things here :)
>
> First, I am not sure if this is intentional but "interval" in your
script
> is
> *static*. It is a random float initialized when starting the script but
it
> will
> not change later on..
>
> I believe that perhaps you intented this value to change between two
promotions... In this case, the delay operator is not interesting (it
does
> not
> support interactive floats -- maybe a todo!). However, you may be able
to
> do it
> using add_timeout.
>
> add_timeout registers a task to be executed after a given timeout. When
executed, the task returns a new float. If this float is positive or
null,
> the
> tasks will be executed again after the given amount of time.
>
> In you case, you may create a task that inserts new promotions. For
instance:
>
> 8<----------------------->8
> promotions = request.queue()
>
> def add_promotion() =
>   # Get a new promotion
>   # Replace this code with what you
>   # want..
>   promotion = list.hd(get_process_lines("find ~/promotions | \
>                                                                  sort -R
|
> \
>                                                                  head -n
> 1"))
>
>   # Push it in the queue
>   ignore(server.execute("#{source.id(promotions)}.push #{promotion}"))
>
>   # Return a random float
>   random.float(min=2800.0,max=5000.0)
> end
>
> # Register task
> initial_timeout = random.float(min=2800.0,max=5000.0)
> add_timeout(fast=false, initial_timeout, add_promotion)
> 8<----------------------->8
>
> This also solves your second problem because the task is registered with an
> initial random timeout.
>
>
> Romain
>





------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and, 
should the need arise, upgrade to a full multi-node Oracle RAC database 
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to