<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    The following is going somewhat OT but nonetheless based on this
    very interesting topic: application framerate is no more
    deterministic than the proposed idea. Just because monitor refreshes
    at 60Hz doesn't mean the app will do the same or consistently. Yet,
    pegging GUI updates at 60Hz (think speedlim-like behavior) despite
    all the loose ends will undoubtedly provide improved responsiveness
    over a GUI where one can send sub-millisecond change requests, most
    of which will never see the light of the day, despite eating up tons
    of CPU and in all likelihood bringing it down to its knees.<br>
    <br>
    <div class="moz-cite-prefix">On 1/4/2016 9:32 PM, Jonathan Wilkes
      wrote:<br>
    </div>
    <blockquote
      cite="mid:1355739325.91368.1451961130883.JavaMail.yahoo@mail.yahoo.com"
      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="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>
                </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" size="2"
                          face="Arial"> On Monday, January 4, 2016 5:20
                          PM, Ivica Ico Bukvic <a class="moz-txt-link-rfc2396E" href="mailto:ico@vt.edu"><ico@vt.edu></a> 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 size="2"
                                              face="Arial"> On Sunday,
                                              January 3, 2016 1:08 PM,
                                              Ivica Ico Bukvic <a
                                                moz-do-not-send="true"
                                                rel="nofollow"
                                                shape="rect"
                                                class="yiv6492268201moz-txt-link-rfc2396E"
ymailto="mailto:ico@vt.edu" target="_blank" href="mailto:ico@vt.edu"><a class="moz-txt-link-rfc2396E" href="mailto:ico@vt.edu"><ico@vt.edu></a></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 moz-do-not-send="true" 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 moz-do-not-send="true" 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 moz-do-not-send="true"
                                                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
                                                moz-do-not-send="true"
                                                rel="nofollow"
                                                shape="rect"
                                                class="yiv6492268201moz-txt-link-freetext"
                                                target="_blank"
                                                href="http://lists.puredata.info/listinfo/pd-list"><a class="moz-txt-link-freetext" href="http://lists.puredata.info/listinfo/pd-list">http://lists.puredata.info/listinfo/pd-list</a></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>
    </blockquote>
    <br>
  </body>
</html>