supernova sample-based scheduling bug?
[email protected] Mon, 10 May 2021 14:58:01 +0200
| Newsgroups | gmane.comp.audio.supercollider.user |
|---|---|
| Message-ID | <[email protected]> |
Hi list,
I'm investigating the possibilities of supernova sample based scheduling (which seems to be the default setting), but I get unexpected results that lead me to believe that there is something wrong with it. I'm using the patch below to measure where the scheduled synths fall within the control frame, using OffsetOut. The idea is to schedule a trigger at every control frame and return its position in the block. The phasor is set to run from 0 to 63 in every control cycle, and the trigger is sent from another synth using OffsetOut to make sure it uses the correct timing. Now, this produces a stream of numbers in the post window, which theoretically should stay the same at all time (basically an arbitrary number between 0 and 63). But, in fact, the number changes every ±15 seconds. In some runs it seemed to alternate between two numbers, and then drifting a bit to numbers nearby. To my understanding I'm using logical time to schedule triggers at distinct sample counts, so it should actually be the same number forever (even though the sample clock will drift away from the SystemClock). But it looks a bit as if supernova is re-synchronizing to the SystemClock at an interval of about 15 seconds. Is this the case? And if yes, could this be changed so that it really uses logical time (perhaps with a manual way to re-sync to System time)? Btw I tried this on macos 10.14.6 with built-in audio, with Dante DVS and with a RME FireFace 800 as interface, all with the same results, SC version 3.11.2.
(
SynthDef( "test_sendtrig", {
var in, ramp;
in = In.ar(0);
ramp = Phasor.ar(0, 1, 0, 64); // measure position in control frame
SendTrig.ar( in, 0, Latch.ar( ramp, in ) );
}).load;
SynthDef( "test_playtrig", {
OffsetOut.ar( 0, Impulse.ar( 0 ) );
FreeSelf.kr( Impulse.kr(0) );
}).load;
)
(
OSCFunc({ |...args| args[0][3].postln }, '/tr' );
s.makeBundle( 0.2, { Synth.tail(s, "test_sendtrig" ) });
{
inf.do({
s.makeBundle( 0.2, { Synth( "test_playtrig" ) });
(s.options.blockSize / s.sampleRate).wait;
});
}.fork;
)
cheers & thanks,
Wouter
_______________________________________________
sc-users mailing list
info (subscription, etc.): http://www.birmingham.ac.uk/facilities/ea-studios/research/supercollider/mailinglist.aspx
archive: http://www.listarc.bham.ac.uk/marchives/sc-users/
search: http://www.listarc.bham.ac.uk/lists/sc-users/search/