[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Sc-devel] Servers with nil latency?



I agree that we shouldn't change the meaning of latency for 3.2, but could we perhaps modularize its handling in the default event? Right now, ~lag + (server.latency ? 0) is hard coded into lots of different places, which as we know is not great programming practice because it makes it harder to make updates later. It also fixes in stone a very large assumption about latency that not every user will agree with. What option does that user have, except to copy the entire default event into a separate file and make the changes there?

The default event already defers a lot of calculations into functions. If we did the same for latency, the default behavior could be exactly the same as it is today but it would be easier to customize.

hjh


Index: Event.sc
===================================================================
--- Event.sc    (revision 6813)
+++ Event.sc    (working copy)
@@ -274,7 +274,7 @@
                                                        ~amp = ~amp.value;
                                                        addAction = Node.actionNumberFor(~addAction);
                                                        group = ~group.asUGenInput;
-                                                       lag = ~lag;
+                                                       lag = ~getLagInSeconds.value;  // ~lag;
                                                        strum = ~strum;
                                                        sustain = ~sustain = ~sustain.value;
                                                        instrumentName = ~instrument.asSymbol;
@@ -320,7 +320,7 @@
                                                        ~amp = ~amp.value;
                                                        addAction = Node.actionNumberFor(~addAction);
                                                        group = ~group.asUGenInput;
-                                                       lag = ~lag + (server.latency ? 0); 
+                                                       lag = ~getLatencyInSeconds.value(server);  // ~lag + (server.latency ? 0); 
                                                        strum = ~strum;
                                                        sustain = ~sustain = ~sustain.value;
                                                        instrumentName = ~instrument.asSymbol;
@@ -373,7 +373,7 @@
                                                        ~amp = ~amp.value;
                                                        addAction = Node.actionNumberFor(~addAction);
                                                        group = ~group.asUGenInput;
-                                                       lag = ~lag + (server.latency ? 0);
+                                                       lag = ~getLatencyInSeconds.value(server); // ~lag + (server.latency ? 0);
                                                        strum = ~strum;
                                                        ~sustain = ~sustain.value;
                                                        synthLib = ~synthLib.value;
@@ -404,7 +404,7 @@
 
                                                if (freqs.isKindOf(Symbol).not) {
                                                        ~amp = ~amp.value;
-                                                       lag = ~lag + server.latency;
+                                                       lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                        ~sustain = ~sustain.value;
                                                        strum = ~strum;
 
@@ -421,7 +421,7 @@
                                        off: #{|server|
                                                var lag, dur, strum, hasGate, gate;
 
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                strum = ~strum;
                                                hasGate = ~hasGate ? true;
                                                gate = min(0.0, ~gate ? 0.0); // accept release times
@@ -438,7 +438,7 @@
                                        group: #{|server|
                                                var     group = ~group.asUGenInput,
                                                        addAction = Node.actionNumberFor(~addAction);
-                                               var lag = ~lag + server.latency;
+                                               var lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                server.listSendBundle(lag,
                                                        ~id.asArray.collect {|id, i|
                                                                [\g_new, id, addAction, group]
@@ -450,7 +450,7 @@
                                        kill: #{|server|
                                                var lag, dur, strum;
 
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                strum = ~strum;
 
                                                ~id.asArray.do {|id, i|
@@ -464,40 +464,40 @@
 
                                        bus: #{|server|
                                                var lag, array;
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                array = ~array.asArray;
                                                server.sendBundle(lag, [\c_setn, ~out.asUGenInput, array.size] ++ array);
                                        },
 
                                        gen: #{|server|
                                                var lag, genarray;
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                genarray = ~genarray;
                                                server.sendBundle(lag, [\b_gen, ~bufnum.asUGenInput, ~gencmd, ~genflags]
                                                         ++ genarray);
                                        },
                                        load: #{|server|
                                                var lag;
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                server.sendBundle(lag, 
                                                        [\b_allocRead, ~bufnum.asUGenInput, ~filename, ~frame, ~numframes]);
                                        },
                                        read: #{|server|
                                                var lag;
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                server.sendBundle(lag, 
                                                [\b_read, ~bufnum.asUGenInput, ~filename, ~frame, ~numframes,
                                                        ~bufpos, ~leaveOpen]);
                                        },
                                        alloc: #{|server|
                                                var lag;
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                server.sendBundle(lag, [\b_alloc, ~bufnum.asUGenInput,
                                                        ~numframes, ~numchannels]);
                                        },
                                        free: #{|server|
                                                var lag;
-                                               lag = ~lag + server.latency;
+                                               lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                server.sendBundle(lag, [\b_free, ~bufnum.asUGenInput]);
                                        },
 
@@ -511,7 +511,7 @@
                                                        ~amp = ~amp.value;
                                                        ~midinote = freqs.cpsmidi;
                                                        strum = ~strum;
-                                                       lag = ~lag;
+                                                       lag = ~getLagInSeconds.value;  // ~lag;
                                                        sustain = ~sustain = ~sustain.value;
                                                        midiout = ~midiout.value;
                                                        hasHate = ~hasGate ? true;
@@ -552,7 +552,7 @@
                                                }
                                        },
                                        monoOff:  #{|server|
-                                               var lag = ~lag + server.latency;
+                                               var lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
 
                                                if(~hasGate == false) {
                                                        server.sendBundle(lag, [\n_free] ++ ~id.asUGenInput);
@@ -569,7 +569,7 @@
 
                                                if (freqs.isKindOf(Symbol).not) {
                                                        ~amp = ~amp.value;
-                                                       lag = ~lag + server.latency;
+                                                       lag = ~getLatencyInSeconds.value(server);  // ~lag + server.latency;
                                                        ~sustain = ~sustain.value;
 
                                                        bndl = ([\n_set, ~id.asUGenInput] ++ ~msgFunc.valueEnvir).flop;
@@ -685,7 +685,11 @@
                                                };
                                                ~bundle = nil;
                                        }
-                               )
+                               ),
+                               getLatencyInSeconds: { |server|
+                                       ~getLagInSeconds.value + ((server ?? { Server.default }).latency ? 0)
+                               },
+                               getLagInSeconds: { ~lag }
                        )
                );
 

: H. James Harkins

: jamshark70@xxxxxxxxxxxxxxxxx

: http://www.dewdrop-world.net

.::!:.:.......:.::........:..!.::.::...:..:...:.:.:.:..:


"Come said the Muse,

Sing me a song no poet has yet chanted,

Sing me the universal."  -- Whitman