Hi again,
Thank you for all this. I am trying to see how far I can go and one last thing
is if it could be possible to have a ramp volume change rather than 0-1 which
is harsh enough.
On Mar 14, 2013, at 11:26 AM, Samuel Mimram wrote:
> Hi,
>
> Unfortunately, there is nothing as general as you expect (ie
> automatically binding functions to sources is not possible). However,
> with a bit of coding all you are asking is (relatively) easy to
> program. The idea is to change references when a command occurs. I
> have coded the solo function as follows, by elaborating on this you
> can achieve the other commands. Here we go:
>
> # We have two sources
> s1 = playlist("~/Music")
> s2 = sine()
>
> # The volume for each source
> vol1 = ref 1.
> vol2 = ref 1.
>
> # Amplify sources according to their volume
> s1 = amplify({!vol1},s1)
> s2 = amplify({!vol2},s2)
>
> # Change the volume when we want to solo / unsolo
> def solo1 (on) =
> if on then
> vol1 := 1.
> vol2 := 0.
> else
> vol1 := 1.
> vol2 := 1.
> end
> end
>
> # Handle commands
> def on_command1(m) =
> cmd = fst(m)
> val = snd(m)
>
> if cmd == "solo" and val == "on" then solo1(true) end
> if cmd == "solo" and val == "off" then solo1(false) end
> end
>
> # Add handler for commands
> osc.on_string_pair("/s1/command",on_command1)
>
> # Mix the two sources and play them
> s = add([s1,s2])
> output.pulseaudio(s)
>
> Then I can solo the source s1 using:
>
> oscsend localhost 7777 /s1/command ss solo on
>
> Unfortunately, you have to program a similar functions command2/solo2
> to implement the handler for source2, etc.
>
> For the sky function, the trick is to add a skyed source with a
> non-skyed source with amplifications 1./0. or 0./1. depending on
> whether you want the sky activated. So, you can implement this as
> follows:
>
> # When sky1 is 1. the we have the sky effect and when 0. we don't have it
> sky1 = ref 1.
> s1 = add([amplify({!sky1},sky(s1)), amplify({1. - !sky1}, s1)])
>
> And then you can add the following lines in command1 in order to
> implement the handler:
>
> if cmd == "sky" and val == "on" then sky1 := 1. end
> if cmd == "sky" and val == "off" then sky1 := 0. end
>
> Cheers,
>
> Samuel.
>
> On Tue, Mar 12, 2013 at 7:36 PM, Kyriakos Tsoukalas
> <[email protected]> wrote:
>> Hi Samuel,
>>
>> thanks for giving time to this.
>> On Mar 12, 2013, at 7:24 PM, Samuel Mimram wrote:
>>
>>> Hi,
>>>
>>> Something along the lines you are mentionning is certainly doable, but
>>> before answering I would like to undestand better what you want to
>>> achieve. Could you please give me a more high-level explanation (i.e.
>>> in english) of the kind of commands you have in mind?
>> I would like to send osc messages and change one or more sources to new ones
>> as "requested" in the osc message.
>> - If I have 4 different sources from input.harbor and I mix them to a
>> "final" one to stream to icecast, I want to send an osc message and change
>> one or all sources. If I send "solo on" for source1, I want all other
>> sources to silence (amplify 0.), if I send "solo off", I want all sources
>> affected before to resume volume. But If I send "sky on" for source1 I want
>> source1 to become sky(source1) and if I send "sky off" I want the source1 to
>> become the old source1. Ohh, and if I send "high on" and then "sky on" for
>> source1 I would like the source1 to become sky(high(source1)). So in the
>> future someone would be able to create functions of "source processing" to
>> apply to sources by sending an osc message. Just this :-}
>>>
>>> For instance, it seems that you want to mute the source s1 when you
>>> receive quiet/on on /s1/rule. Is it necessary to have it muted for 5
>>> secs or would it be ok to have the source sounding again when it
>>> recieves quiet/off on /s1/rule? A timeout is much more difficult to
>>> achieve: without timeout it is just a matter of changing a "volume"
>>> variable to 0. or 1. (I can help with the code if that's what you
>>> want). What other kind of commands do you have in mind?
>>>
>>> ++
>>>
>>> Sam.
>>>
>>> On Tue, Mar 12, 2013 at 4:05 PM, Kyriakos Tsoukalas
>>> <[email protected]> wrote:
>>>> Hi Samuel,
>>>>
>>>> Is it possible to have a source that gets a different processing per
>>>> "rule" and "value" when a handler is called, say, by osc.on_string_pair to
>>>> provide "rule" and "value". Please point out documentation to read
>>>> (request.dynamic? ... concepts I must understand:)
>>>>
>>>> Something looking like:
>>>> # Different processing per OSC "rule" and "value"
>>>> def rule_handler(rule,value,s)
>>>> if (rule == "quiet" then
>>>> if (value == "on") then
>>>> s = blank(duration=5.)
>>>> elsif (value == "off")
>>>> s = s
>>>> end
>>>> elsif (rule == "sine") then
>>>> s = sine(#{value})
>>>> ...
>>>> end
>>>> end
>>>> def on_rule_s1(m) =
>>>> rule = fst(m)
>>>> value = snd(m)
>>>> # Trigger new source for s1?
>>>> end
>>>> s1 = sine()
>>>> s2 = sine()
>>>> s1 = rule_handler(?,s1)
>>>> s1 = rule_handler(?,s2)
>>>> output = add(normalize=false,[s1,s2])
>>>>
>>>> osc.on_string_pair("/s1/rule",on_rule_s1)
>>>> osc.on_string_pair("/s2/rule",on_rule_s2)
>>>>
>>>> output.icecast(%mp3,mount="test.mp3",output)
>>>>
>>>>
>>>> Thanks,
>>>>
>>>> Kyriakos
>>>> On Mar 6, 2013, at 8:57 PM, Samuel Mimram wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> This is quite an interesting application of OSC! It was not really
>>>>> possible to do so, but I just commited a patch on the git (
>>>>> 114d1fa908fc9e02547f0de540c11d127d5964cd ) to make it possible. With
>>>>> this latest git version you can write the following:
>>>>>
>>>>> # Replace with music source
>>>>> s = sine()
>>>>> s = mksafe(s)
>>>>>
>>>>> # Create a function to insert metadata
>>>>> ms = insert_metadata(s)
>>>>> # The function to insert metadata
>>>>> imeta = fst(ms)
>>>>> # The new source
>>>>> s = snd(ms)
>>>>>
>>>>> # Handler for OSC events (gets pairs of strings)
>>>>> def on_meta(m) =
>>>>> # Extract the label
>>>>> label = fst(m)
>>>>> # Extract the value
>>>>> value = snd(m)
>>>>> # A debug message
>>>>> print("Insert metadata #{label} = #{value}")
>>>>> # Insert the metadata
>>>>> imeta([(label,value)])
>>>>> end
>>>>>
>>>>> # Call the above handler when we have a pair of strings on /metadata
>>>>> osc.on_string_pair("/metadata",on_meta)
>>>>>
>>>>> # Output on icecast
>>>>> output.icecast(%mp3,mount="test.mp3",s)
>>>>>
>>>>>
>>>>> Then each time I am doing something like:
>>>>>
>>>>> oscsend localhost 7777 "/metadata" ss "title" "The new title"
>>>>>
>>>>> I get a new metadata :) You should elaborate on this in order to
>>>>> output all the metadata at once, but it should help to get you
>>>>> started!
>>>>>
>>>>> Cheers,
>>>>>
>>>>> Sam.
>>>>>
>>>>> On Tue, Mar 5, 2013 at 5:32 PM, Kyriakos Tsoukalas
>>>>> <[email protected]> wrote:
>>>>>> Hi all,
>>>>>> I would like to send OSC messages to a liquidsoap (v1.0.1) server and
>>>>>> have it perform specific functions (to a harbor stream) per incoming OSC
>>>>>> tags(paths). How would I setup an OSC tag function trigger?
>>>>>>
>>>>>> Thanks in advance,
>>>>>> Kyriakos
>>>>>> ------------------------------------------------------------------------------
>>>>>> 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_feb
>>>>>> _______________________________________________
>>>>>> Savonet-users mailing list
>>>>>> [email protected]
>>>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>>>
>>>>> ------------------------------------------------------------------------------
>>>>> Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
>>>>> Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the
>>>>> endpoint security space. For insight on selecting the right partner to
>>>>> tackle endpoint security challenges, access the full report.
>>>>> http://p.sf.net/sfu/symantec-dev2dev
>>>>> _______________________________________________
>>>>> Savonet-users mailing list
>>>>> [email protected]
>>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>>>
>>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>>> Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
>>>> Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the
>>>> endpoint security space. For insight on selecting the right partner to
>>>> tackle endpoint security challenges, access the full report.
>>>> http://p.sf.net/sfu/symantec-dev2dev
>>>> _______________________________________________
>>>> Savonet-users mailing list
>>>> [email protected]
>>>> https://lists.sourceforge.net/lists/listinfo/savonet-users
>>>
>>> ------------------------------------------------------------------------------
>>> Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester
>>> Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the
>>> endpoint security space. For insight on selecting the right partner to
>>> tackle endpoint security challenges, access the full report.
>>> http://p.sf.net/sfu/symantec-dev2dev
>>> _______________________________________________
>>> 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
>
> ------------------------------------------------------------------------------
> 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
>
------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite
It's a free troubleshooting tool designed for production
Get down to code-level detail for bottlenecks, with <2% overhead.
Download for free and get started troubleshooting in minutes.
http://p.sf.net/sfu/appdyn_d2d_ap2
_______________________________________________
Savonet-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/savonet-users