[flocking-users] combining with processingjs? and timing accuracy

Colin Clark colin at colinclark.org
Tue Apr 15 15:37:13 EDT 2014


Hi Enrike,

Yes, this makes perfect sense. There’s currently no way to make an arbitrary callback from the synthesis engine in Flocking, but I’m in the process of implementing something for you. It should be available in the next day or two.

Colin

On Apr 14, 2014, at 12:56 PM, enrike <altern2 at gmail.com> wrote:

> sorry I am kinf of half offline...
> 
> this code is very old I just copied and pasted I hope it works fine
> 
> (
> SynthDef ( "StereoPlayer" , {
> 	arg outbus=0, buffer=0, amp=1, pan=0, mute=1, start=0, end=1, rate=1, fps=12, index=0; //, trig=1, resetpos=0;
>    	var length, offset, clock, env, sound, left, right, phasor, dur;
> 
> 	dur = BufFrames.kr(buffer);
>    	length = (end - start) * dur; // scale from range 0 - 1 to 0 - buflength
>    	clock = LFPulse.kr(rate.abs / length, 0); // loop
>    	length = Latch.kr(length, clock);
>    	offset = Latch.kr(start * dur, clock);
>    	env = EnvGen.kr( Env .new([0,1,1,0], [0.01, 0.98,0.01]), clock, timeScale:length /(rate.abs)) * amp * mute;
> 
> 	phasor = Phasor.ar( 0, rate, start*dur, end*dur);
>    	SendTrig .kr( LFPulse.kr(fps, 0), index, phasor/dur); //12 times per sec playhead. Normalised to 0-1 range
>    	#left, right = BufRd.ar( 2, buffer, phasor, 1 ) * env;
>    	Out .ar(outbus, Balance2.ar(left, right, pan));
> }).load(s)
> )
> 
> Basically this does the job
> SendTrig .kr( LFPulse.kr(fps, 0), index, phasor/dur);
> 
> In this case this is a sample player that is looping a buffer. I needed to display in the graphics a "playhead" that shows where in the buffer the player was, typically going left to right. This kind of thing
> 
> But I was also thinking on other things such as the frequency of a sinosc controlling the radius of a circle, for instance. That kind of things, visuals responding to audio units internal states. I am not sure I am clear I am writing very quickly
> 
> thanks!!!!
> 
> 
> 
> 
> ig., 2014.eko apiren 13a 18:14(e)an, Colin Clark(e)k idatzi zuen:
>> It’d definitely possible to write a unit generator to do this. Just to be sure I fully understand your use case, can you elaborate on what you want to accomplish or send an example of some SuperCollider code? Are you thinking of things like SendTrig in SuperCollider, where a message can be sent from the server to the client? That should be easy to implement.
>> 
>> Thanks,
>> 
>> Colin
>> 
>> On Apr 11, 2014, at 7:22 AM, enrike <altern2 at gmail.com> wrote:
>> 
>>> would it be possible to call a function from a ugen like a pulse for instance? or set a variable from a ugen? a bit like in Supercollider you can use triggers from synthdefs. For instance flock.ugen.xLine to control the value of a variable
>>> 
>>> 
>>> og., 2014.eko apiren 10a 01:55(e)an, Colin Clark(e)k idatzi zuen:
>>>> Hi Enrike,
>>>> 
>>>> I haven’t heard of anyone yet who is using Processing.js with Flocking, but I don’t see any reason why it wouldn’t work. Web Audio in general has some risks with very sophisticated visuals because of the fact that the audio processing runs in the same thread as the visuals, but I think there’s lots of room to work with them both.
>>>> 
>>>> In terms of the reliability of timing in Flocking, it depends on how you schedule things. At the moment, the asynchronous scheduler is a little bit “drifty,” especially in Firefox. I’m in the midst of planning out a block-accurate scheduler that will have no drift, and I can fast-track that work if it’s a priority for you. In the meantime, I do most of my high priority scheduling within the unit generator graph, by using unit generators like flock.ugen.sequence as well as triggers like flock.ugen.impulse. It’s solid and simple. Here’s an example of a piece I wrote recently that has a very accurate drum pulse in it.
>>>> 
>>>> https://github.com/colinbdclark/compositions/blob/master/greenwich-park/js/instruments.js#L4-L60
>>>> 
>>>> Colin
>>>> 
>>>> On Apr 9, 2014, at 10:00 AM, enrike <altern2 at gmail.com> wrote:
>>>> 
>>>>> hi
>>>>> 
>>>>> two different questions...
>>>>> 
>>>>> has anyone tried to combine Flockingjs with Processingjs?
>>>>> http://processingjs.org/
>>>>> 
>>>>> how accurate and reliable is timing using Flocking? I need to work on a percussion system that needs to be quite precise.
>>>>> 
>>>>> thanks
>>>>> 
>>>>> enrike
>>>> 
>>>> 
>>> 
>> 
>> 
> 




More information about the flocking mailing list