<html><head></head><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yiv6492268201"><div id="yui_3_16_0_1_1451947044533_15541"><div id="yui_3_16_0_1_1451947044533_15540" style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"><div id="yiv6492268201"><div id="yiv6492268201yui_3_16_0_1_1451947044533_11345"><div id="yiv6492268201yui_3_16_0_1_1451947044533_11344" style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"><div id="yui_3_16_0_1_1451947044533_18873">Having an animation method allows GUI-side optimizations that aren't <br></div><div id="yui_3_16_0_1_1451947044533_20176" dir="ltr">possible when the animation is smeared across the socket/parser/eval'er.</div><div dir="ltr"><br></div><div dir="ltr">Determinism: GUI rendering isn't deterministic, at least not in the way Pd's <br></div><div id="yui_3_16_0_1_1451947044533_20262" dir="ltr">scheduler is. For example, how could the GUI (tcl/tk or otherwise) even <br></div><div id="yui_3_16_0_1_1451947044533_20275" dir="ltr">know that it missed a deadline?<br></div><div id="yui_3_16_0_1_1451947044533_20040" dir="ltr"><br></div><div id="yui_3_16_0_1_1451947044533_20644">I guess the simple API I'm toying with is "stretching the accordion" so to <br></div><div id="yui_3_16_0_1_1451947044533_20689" dir="ltr">speak, and potentially showing the cracks more explicitly with a longer <br></div><div id="yui_3_16_0_1_1451947044533_20690" dir="ltr">running animation than can currently be seen in Pd's GUI. But that can be <br></div><div id="yui_3_16_0_1_1451947044533_20767" dir="ltr">remedied, either by recursively halving a single animation into smaller ones, <br></div><div id="yui_3_16_0_1_1451947044533_20794" dir="ltr">or just giving up and using [line].<br></div><div id="yui_3_16_0_1_1451947044533_20714" dir="ltr"><br></div><div id="yui_3_16_0_1_1451947044533_20795" dir="ltr">The greater benefit is that more elegant types of visual feedback become <br></div><div id="yui_3_16_0_1_1451947044533_20796" dir="ltr">possible without being discarded out of hand due to their potential for <br></div><div id="yui_3_16_0_1_1451947044533_20797" dir="ltr">audio interruption.</div><div id="yui_3_16_0_1_1451947044533_20901" dir="ltr"><br></div><div id="yui_3_16_0_1_1451947044533_20929" dir="ltr">-Jonathan<br></div><div class="yiv6492268201qtdSeparateBR" id="yiv6492268201yui_3_16_0_1_1451947044533_11399"><br clear="none"></div><div class="yiv6492268201yqt4755026997" id="yiv6492268201yqt05037"></div></div></div></div><div class="yiv6492268201yqt9730551649" id="yiv6492268201yqt99427"><div id="yui_3_16_0_1_1451947044533_15604"> <div id="yui_3_16_0_1_1451947044533_15603" style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"> <div id="yui_3_16_0_1_1451947044533_15602" style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;"> <div id="yui_3_16_0_1_1451947044533_15601" dir="ltr"><font id="yui_3_16_0_1_1451947044533_15631" face="Arial" size="2"> On Monday, January 4, 2016 5:20 PM, Ivica Ico Bukvic <ico@vt.edu> wrote:<br clear="none"></font></div> <br clear="none"><br clear="none"> <div id="yui_3_16_0_1_1451947044533_19770" class="yiv6492268201y_msg_container"><div id="yiv6492268201"><div id="yui_3_16_0_1_1451947044533_19769">
On 1/3/2016 3:24 PM, Jonathan Wilkes wrote:<br clear="none">
<blockquote id="yui_3_16_0_1_1451947044533_19768" type="cite">
<div id="yui_3_16_0_1_1451947044533_19767" style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div id="yiv6492268201">
<div id="yiv6492268201yui_3_16_0_1_1451851974487_2654">
<div id="yiv6492268201yui_3_16_0_1_1451851974487_2653" style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div id="yiv6492268201yui_3_16_0_1_1451851974487_3004">It's actually
way more simplistic than that-- just an "animate" method
that <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_2710">wraps
around whatever attribute is available to the drawing
command. All <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_2786">I'll
have is a ramp time, an optional delay time, and an
optional easing curve. <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_2997">That
will make it a bit like a [vline~] for GUI side
animation.</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_2998"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_2999">I'm
using the web animations API because it makes things
very simple, even <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3000">to do
complex things like animating path data.</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3094"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3251">The
idea is that this would open up some modest
visualization opportunities <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3252">that
are otherwise too cpu intensive. For example, if you're
animating <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3253">using
[line] the socket messages can quickly get in the way of
the audio.<br clear="none">
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br clear="none">
Will you at some point drown the CPU? Sure, but that is no different
than a million of other ways of doing the same. OTOH, implementing
the animation this way helps you ensure that your animation remains
in sync with the audio, which to me seems much better gain than a
potential CPU/socket overhead may be a shortcoming.<br clear="none">
<br clear="none">
There could be some very cool ways of filtering gui messages, as
well (short of getting rid of the socket-based communication in
favor of a shared memory/multithreaded design). For instance, your
animation object could be given the screen refresh rate and
therefore it would not send out a message via a socket unless a
desired frame-worth of time has transpired since the last message
was sent. This would do wonders not just in terms of animation, but
also the overall gui responsiveness, if implemented system-wide.<br clear="none">
<br clear="none">
Best,<br clear="none">
<br clear="none">
Ico<div class="yiv6492268201yqt3440929373" id="yiv6492268201yqtfd16790"><br clear="none">
<br clear="none">
<blockquote type="cite">
<div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div id="yiv6492268201">
<div id="yiv6492268201yui_3_16_0_1_1451851974487_2654">
<div id="yiv6492268201yui_3_16_0_1_1451851974487_2653" style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3001"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451851974487_3002">-Jonathan<br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451841944661_7669"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451841944661_6038"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451841944661_6497"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451841944661_6039"><br clear="none">
</div>
<div id="yiv6492268201yui_3_16_0_1_1451841944661_6012"><span></span></div>
<div class="yiv6492268201qtdSeparateBR" id="yiv6492268201yui_3_16_0_1_1451851974487_2711"><br clear="none">
<br clear="none">
</div>
</div>
</div>
</div>
<div>
<div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div style="font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div class="yiv6492268201qtdSeparateBR"><br clear="none">
<br clear="none">
</div>
<div class="yiv6492268201yqt1236546037" id="yiv6492268201yqt89869">
<div dir="ltr"><font face="Arial" size="2"> On Sunday,
January 3, 2016 1:08 PM, Ivica Ico Bukvic
<a rel="nofollow" shape="rect" class="yiv6492268201moz-txt-link-rfc2396E" ymailto="mailto:ico@vt.edu" target="_blank" href="mailto:ico@vt.edu"><ico@vt.edu></a> wrote:<br clear="none">
</font></div>
<br clear="none">
<br clear="none">
<div class="yiv6492268201y_msg_container">
<div id="yiv6492268201">
<div> I think it may make sense in addition to
having a one-shot-independent animations that have
no guarantee of staying in sync with the audio
(e.g. these could be useful for mouse-over button
animations) that your animation object can also
receive a decimal value between its originator and
destination, allowing for each keyframe to be a
whole number. So, 0-1 would interpolate between
the starting state and first keyframe, 1-2 between
first and second keyframes, etc., and thus allow
pd to use its timing mechanism to project changes
in animation state via a line object, a counter or
something similar. IIRC most (all?) HTML5-based
animations can be triggered as independent events
or can be given a specific percentage value. The
one-shot object could interact with independent
events, while the proposed object could interact
with the latter.<br clear="none">
<br clear="none">
That said, not knowing how you have imagined your
animation object, it may be tricky to implement
this as it would require object to keep track of
all the keyframed events (assuming there are more
than one). If you are thinking of having the
animation object track only one single animation
(e.g. something progressing from 30% to 90%), the
same could still prove useful except in this case
you would only allow for values between 0 and 1.<br clear="none">
<br clear="none">
<div class="yiv6492268201yqt1831210892" id="yiv6492268201yqt48349">
<div class="yiv6492268201moz-cite-prefix">On
1/2/2016 1:12 PM, Jonathan Wilkes via Pd-list
wrote:<br clear="none">
</div>
<blockquote type="cite">
<div style="color:#000;background-color:#fff;font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px;">
<div id="yiv6492268201yui_3_16_0_1_1451752408813_3953">Hi
list,</div>
<div id="yiv6492268201yui_3_16_0_1_1451752408813_3952">I'm
playing with adding a simple animation api
to data structure drawing commands. <br clear="none">
</div>
<div id="yiv6492268201yui_3_16_0_1_1451752408813_3951">The
parameters will be sent to the GUI, and
the GUI will take care of the ramp, delay,
etc.</div>
<div id="yiv6492268201yui_3_16_0_1_1451752408813_3950"><br clear="none">
</div>
<div id="yiv6492268201yui_3_16_0_1_1451752408813_9398">I'm
thinking of just making it a simple "set
it and forget it" api. That is, you send
a message <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_7749">with
your ramp and delay times to the GUI, and
you just blindly trust that the GUI will
make <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_9399">things
happen in the right amount of time. The
alternative I can think of is to have the
GUI <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_7739">call
back when an animation is finished, but
that would encourage mixing the two clocks
<br clear="none">
</div>
<div dir="ltr">(i.e., GUI and Pd clock) in
unpredictable <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_7740">ways.</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_9400"><br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_9401">Does
this simple approach seem like a
reasonable design? The biggest problem
would be that <br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_9402">a
long-running animation could skew. But in
that case you could probably amortize the
cost of</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_9431">sending
more messages over the longer time period.<br clear="none">
</div>
<div dir="ltr" id="yiv6492268201yui_3_16_0_1_1451752408813_9403"><br clear="none">
</div>
<div dir="ltr">-Jonathan<br clear="none">
</div>
</div>
<br clear="none">
<fieldset class="yiv6492268201mimeAttachmentHeader"></fieldset>
<br clear="none">
<pre>_______________________________________________
<a rel="nofollow" shape="rect" class="yiv6492268201moz-txt-link-abbreviated" ymailto="mailto:Pd-list@lists.iem.at" target="_blank" href="mailto:Pd-list@lists.iem.at">Pd-list@lists.iem.at</a> mailing list
UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" class="yiv6492268201moz-txt-link-freetext" target="_blank" href="http://lists.puredata.info/listinfo/pd-list">http://lists.puredata.info/listinfo/pd-list</a>
</pre>
</blockquote>
</div>
<br clear="none">
</div>
</div>
<br clear="none">
<div class="yiv6492268201yqt1831210892" id="yiv6492268201yqt93725">_______________________________________________<br clear="none">
<a rel="nofollow" shape="rect" ymailto="mailto:Pd-list@lists.iem.at" target="_blank" href="mailto:Pd-list@lists.iem.at">Pd-list@lists.iem.at</a>
mailing list<br clear="none">
UNSUBSCRIBE and account-management -> <a rel="nofollow" shape="rect" target="_blank" href="http://lists.puredata.info/listinfo/pd-list"></a><a rel="nofollow" shape="rect" class="yiv6492268201moz-txt-link-freetext" target="_blank" href="http://lists.puredata.info/listinfo/pd-list">http://lists.puredata.info/listinfo/pd-list</a><br clear="none">
</div>
<br clear="none">
<br clear="none">
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
<br clear="none">
</div></div></div><br clear="none"><br clear="none"></div> </div> </div> </div></div></div></div></div></div></body></html>