Hi Rob,

Quite a subtle question as usual :) There are basically two kinds of
encoding of floats used in Liquidsoap. The first is for constants (as
in del=300.) which are simply of type float. The other one is used for
floats which can vary over time such as those produced by osc.float:
osc.float("/sc/topoverdel", 300.) has type ()->float which mean that
it is a function, which takes an empty list of arguments and returns
the current value of the float. You could define a function of this
type manually, for instance by

def x() = 300. end

or even

{300.}

the second being a short notation for the first one. There is a little
trick used in Liquidsoap, which makes that most functions can either
take a constant float (a float) or a varying float (a ()->float);
Liquidsoap chooses the right type for you. You can see this in the
type:

$ ./liquidsoap -h ladspa.bandpass_a_iir

Type: (?id:string,?bandwidth:'a,?center_frequency:'b,
 source(audio='#c,video='#d,midi='#e))->
source(audio='#c,video='#d,midi='#e)
where 'a, 'b is either float or ()->float

 * bandwidth : anything that is either float or ()->float (default:
295.831787109)
     Bandwidth (Hz) (4.41 <= <code>bandwidth</code> <= 19845).

[...]

This is the meaning of "either float or ()->float" above. However, the
way you coded this forces deltime to be a float (and not a ()->float)
because you multiply it by 1.5 and multiplication can only be
performed between floats (and not ()->float). You can check this by

liquidsoap -i test.liq

pandelay :
  (source(audio=2,video=0,midi=0),float,'a)->source(audio=2,video=0,midi=0)
  where 'a is either float or ()->float

We could extend multiplication for this case to work, but this is not
done for now. So, if you want a ()->float as deltime, you have to
handle the function explicitly, i.e. the following should be fine:

def pandelay (z,deltime,f)
   z = ladspa.lcrdelay(id="", dry_wet_level=1., l_level=50.,
c_level=50., r_level=50., l_delay=deltime, delay={deltime()*1.5},
r_delay={deltime()*1.25}, low_damp=0., high_damp=0.,
feedback=90.,spread=50., z)
   z=ladspa.tap_autopan(frequency=f, depth=80., z)
   z
end

I hope this helps!

Cheers,

Sam.

PS : thanks for the typo on infer_r_ed, its now corrected!

On Tue, Mar 19, 2013 at 1:37 PM, Rob Canning <[email protected]> wrote:
> hi,
> maybe i didn't give enough information...
> perhaps it is something the way types need to be defined in function
> arguments?
> or i somehow need to evaluate the  <fun> before passing it as an argument??
>
> On 15/03/13 15:34, Rob Canning wrote:
>> hi!
>>
>> not sure why the value del here causes an error when uncommented while
>> freqx work fine
>> del is being passed on one function further but not sure why this causes
>> a problem as its fine when i hardcode it with del=300.
>>
>> del=300.
>> #del=osc.float("/sc/topoverdel", 300.)
>> freqx=osc.float("/sc/topoverfreq", 11110.)
>>
>> topover =
>> pandelay(ladspa.bandpass_a_iir(center_frequency=freqx,bandwidth=50.,
>> topover), del, 0.3)
>
> my function is like this:
>
> def pandelay (z,deltime,f)
>    z = ladspa.lcrdelay(id="", dry_wet_level=1.,
>    l_level=50.,c_level=50.,r_level=50.,
>    l_delay=deltime, c_delay=deltime*1.5,r_delay=deltime*1.25,
>    low_damp=0.,high_damp=0., feedback=90.,spread=50.,
>    z)
>    z=ladspa.tap_autopan(frequency=f, depth=80., z)
>    z
> end
>
> the message from osc is created the exact same way as freqx so is
> definitely a float
>
> any ideas?
>
> thanks,
>
> rob
>>
>> thanks
>>
>> rob
>>
>> At line 71, char 93:
>>     this value has type
>>       ()->_ (infered at line 60, char 14-37)
>>     but it should be a subtype of (the type of the value at line 10, char 24)
>>       float (infered at line 18, char 19-21)
>>
>>
>> btw. inferred is spelt inferred not infered
>>
>>
>
>
> ------------------------------------------------------------------------------
> Everyone hates slow websites. So do we.
> Make your web apps faster with AppDynamics
> Download AppDynamics Lite for free today:
> http://p.sf.net/sfu/appdyn_d2d_mar
> _______________________________________________
> Savonet-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/savonet-users

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users

Reply via email to