<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Feb 25, 2020 at 6:43 PM Christof Ressi <<a href="mailto:info@christofressi.com" target="_blank">info@christofressi.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
  
    
  
  <div>
    <p>I think you got it now :-)</p></div></blockquote><div>Well that is very disappointing.  <br></div><div>I hope someone is collecting all of these idiosyncrasies and publishes</div><div>a document for advanced PD programmers.  <br></div><div><br></div><div>I'm about 5 years into PD, and this surprises me. <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
    <p>In Pd every object is a black box (= the concept of the "unit
      generator"), it doesn't care what's going on inside. </p></div></blockquote><div>Yes, but I figured that when a connection is made, PD rebuilds a <i><b>flattened </b></i>graph,</div><div>where only basic computational elements (atoms, builtin operators, externals, etc)</div><div>exist... and any concept of a subpatch or abstraction is lost. <br></div><div><br></div><div>Anyway, the workaround is simple enough. Thanks!</div><div><br></div><div>BH<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>DSP
      computation starts from the outside. An object can be computed
      when all its input dependencies have been computed. This will
      never be the case when one of its inlets is in some way connected
      to one of its outlets - for reason which are hopefully obvious.<br></p></div></blockquote><div><br></div><div><br></div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>
    </p>
    <p>The workaround is to use a pair of [s~]/[r~] or
      [throw~]/[catch~].<br>
    </p>
    <p>Christof<br></p></div></blockquote><div><br></div><div><br></div><div><br></div><div>
<br clear="all"><div><div dir="ltr"><div dir="ltr"><div><div dir="ltr"><span><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div><div dir="ltr"><div>--<br>William Huston:  <a href="mailto:WilliamAHuston@gmail.com" target="_blank">WilliamAHuston@gmail.com</a><br>Binghamton NY<br><div style="text-align:center"><div style="text-align:center"><span></span><br><span><b>Public Service Mapping / Videography / Research / Education / Safety Advocacy</b></span><br><span></span><a href="http://WilliamAHuston.blogspot.com" target="_blank">Blog</a> -- <a href="http://facebook.com/billhuston" target="_blank">Facebook</a> -- <a href="http://twitter.com/WilliamAHuston" target="_blank">Twitter  </a><span><span><span>-- <a href="https://www.youtube.com/channel/UCGijK1amWOLglT3YeTyEBNQ?sub_congfirmation=1" target="_blank">Youtube</a></span></span></span><b> -- <a href="https://billhustonpodcast.blogspot.com/" target="_blank">Podcast Blog</a><br></b></div><div style="text-align:center"><b>Document collections</b>: <a href="http://TinyURL.com/VirtualPipelines" target="_blank">VirtualPipelines</a> -- <a href="http://bit.ly/BHDCSDimockArchive" target="_blank">BHDCSDimockArchive</a><br><span><span><b>Please support my work! -- </b><a href="http://TinyURL.com/DonateToBillHuston" target="_blank">TinyURL.com/DonateToBillHuston</a><br></span></span></div><div style="text-align:center"><span><span><br></span></span></div><div style="text-align:center"><span><span><b><img src="https://4.bp.blogspot.com/-QjAlYXBdfk0/XA7eTMshJPI/AAAAAAAAIGQ/hr-t_w9fu-MCMWja84YnMBJIry0oWiWTACLcBGAs/s600/BH%2BTerra%2BVigilate%2B%2523BT%2Bself%2Bportrait%2Btriptich1.jpg" width="420" height="73"></b></span></span></div><span><span></span></span></div><span><br></span></div><div><br></div></div></div></div></div></div></div></div></div></span></div></div></div></div></div> 

<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><p>
    </p>
    <div>On 26.02.2020 00:26, William Huston
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">> in your example with the effect outside your
        abstraction you can literally *see* the DSP loop, why are you
        surprised?
        <div>
          <div dir="ltr">
            <div dir="ltr">
              <div>
                <div dir="ltr"><span>
                    <div>
                      <div dir="ltr">
                        <div>
                          <div dir="ltr">
                            <div>
                              <div dir="ltr">
                                <div>
                                  <div dir="ltr">
                                    <div><br>
                                    </div>
                                    <div>You have got to be kidding
                                      me!!!</div>
                                    <div><br>
                                    </div>
                                    <div>So are you saying....</div>
                                    <div><br>
                                    </div>
                                    <div>If I have an audio abstraction
                                      FOO, <br>
                                    </div>
                                    <div>with has 4 inlets~ and 4
                                      outlets~.</div>
                                    <div><br>
                                    </div>
                                    <div>and I have another BAR, <br>
                                    </div>
                                    <div>with 2 inlets~ and 2 outlets~,
                                      <br>
                                    </div>
                                    <div><br>
                                    </div>
                                    <div>and I try to connect a pair of
                                      FOO's outlets~ to BAR's inlets~, <br>
                                    </div>
                                    <div>and BAR's outlets to a pair of
                                      FOO's inlet's, <br>
                                    </div>
                                    <div>that <b>PD throws a "DSP loop
                                        error" <u><i>whether or not
                                            there</i></u></b></div>
                                    <div><b><u><i>is in fact an audio
                                            loop in the actual graph</i></u>?</b>??<br>
                                    </div>
                                    <br>
                                    <div>And there is not a way to
                                      override this behavior??<br>
                                    </div>
                                    <div><br>
                                    </div>
                                    <div><br>
                                    </div>
                                    <div><br>
                                    </div>
                                    <div><br>
                                    </div>
                                    <div><br>
                                    </div>
                                    <div>--<br>
                                      William Huston:  <a href="mailto:WilliamAHuston@gmail.com" target="_blank">WilliamAHuston@gmail.com</a><br>
                                      Binghamton NY<br>
                                      <div style="text-align:center">
                                        <div style="text-align:center"><span></span><br>
                                          <span><b>Public Service
                                              Mapping / Videography /
                                              Research / Education /
                                              Safety Advocacy</b></span><br>
                                          <span></span><a href="http://WilliamAHuston.blogspot.com" target="_blank">Blog</a>
                                          -- <a href="http://facebook.com/billhuston" target="_blank">Facebook</a>
                                          -- <a href="http://twitter.com/WilliamAHuston" target="_blank">Twitter 
                                          </a><span><span><span>-- <a href="https://www.youtube.com/channel/UCGijK1amWOLglT3YeTyEBNQ?sub_congfirmation=1" target="_blank">Youtube</a></span></span></span><b>
                                            -- <a href="https://billhustonpodcast.blogspot.com/" target="_blank">Podcast
                                              Blog</a><br>
                                          </b></div>
                                        <div style="text-align:center"><b>Document
                                            collections</b>: <a href="http://TinyURL.com/VirtualPipelines" target="_blank">VirtualPipelines</a>
                                          -- <a href="http://bit.ly/BHDCSDimockArchive" target="_blank">BHDCSDimockArchive</a><br>
                                          <span><span><b>Please support
                                                my work! -- </b><a href="http://TinyURL.com/DonateToBillHuston" target="_blank">TinyURL.com/DonateToBillHuston</a><br>
                                            </span></span></div>
                                        <div style="text-align:center"><span><span><br>
                                            </span></span></div>
                                        <div style="text-align:center"><span><span><b><img src="https://4.bp.blogspot.com/-QjAlYXBdfk0/XA7eTMshJPI/AAAAAAAAIGQ/hr-t_w9fu-MCMWja84YnMBJIry0oWiWTACLcBGAs/s600/BH%2BTerra%2BVigilate%2B%2523BT%2Bself%2Bportrait%2Btriptich1.jpg" width="420" height="73"></b></span></span></div>
                                        <span><span></span></span></div>
                                      <span><br>
                                      </span></div>
                                    <div><br>
                                    </div>
                                  </div>
                                </div>
                              </div>
                            </div>
                          </div>
                        </div>
                      </div>
                    </div>
                  </span></div>
              </div>
            </div>
          </div>
        </div>
        <br>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Tue, Feb 25, 2020 at 6:01
          PM Christof Ressi <<a href="mailto:info@christofressi.com" target="_blank">info@christofressi.com</a>> wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div>
            <p>A DSP loop is when signal connections form a loop. Pd
              can't look into objects so it just treats them as black
              boxes. It's as simple as that.</p>
            <p>After all, in your example with the effect outside your
              abstraction you can literally *see* the DSP loop, why are
              you surprised? And in your other example with the effect
              inside your abstraction you don't get a DSP loop because,
              well, there's is no DSP loop.</p>
            <p>I see where you're coming from. In the analog world your
              two examples are indeed equivalent, but in Pd they are
              *not*.<br>
            </p>
            <p>Christof<br>
            </p>
            <div>On 25.02.2020 23:46, Christof Ressi wrote:<br>
            </div>
            <blockquote type="cite">
              <p> </p>
              <blockquote type="cite">especially because of additional
                potential delay of inlet~/outlet~.</blockquote>
              inlet~/outlet~ does *not* add a delay (unless when going
              to a larger blocksize).
              <p> </p>
              <blockquote type="cite">
                <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                  <div>But you're using [r~] and [s~] which is not the
                    same as direct signal connections. The former can
                    act like a short delay line. Please read
                    "3.audio.examples/G05.execution.order".</div>
                </blockquote>
                <div><br>
                </div>
                Christof, Yes! Exactly!</blockquote>
              I think you misunderstood. With "former" I meant
              [r~]/[s~]. [inlet~]/[outlet~] does not add a delay.<br>
              <p> </p>
              <blockquote type="cite">Also, believe me, r~/s~ has
                nothing to do with it. </blockquote>
              Believe me, it certainly has. Can you finally share a
              minimal test patch, please? I would like to see an actual
              patch where you get an unexpected DSP loop error.<br>
              <p>Christof<br>
              </p>
              <div>On 25.02.2020 23:40, William Huston wrote:<br>
              </div>
              <blockquote type="cite">
                <div dir="ltr">
                  <div dir="ltr" class="gmail_attr">On Tue, Feb 25, 2020
                    at 6:14 AM Christof Ressi <<a href="mailto:info@christofressi.com" target="_blank">info@christofressi.com</a>>
                    wrote:<br>
                  </div>
                  <div class="gmail_quote">
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div>
                        <p>@Dan<br>
                        </p>
                        <blockquote type="cite">As far as I recall,
                          going between abstraction to parent patch via
                          inlet~/outlet~ introduces a block delay, hence
                          no error</blockquote>
                      </div>
                    </blockquote>
                    <div>Dan, correction-- that is the exact
                      circumstance where I *am* getting the error. <br>
                    </div>
                    <div>So now I think you are beginning to see why I
                      think it's unexpected,</div>
                    <div>especially because of additional potential
                      delay of inlet~/outlet~.</div>
                    <br>
                    <div>Dan also wrote:</div>
                    <div>> As the error says, you shouldn't create a
                      direct feedback loop with signal cords. <br>
                    </div>
                    <div><br>
                    </div>
                    <div>Let me try to explain again:</div>
                    <div><br>
                    </div>
                    <div><span style="background-color:rgb(255,255,0)"><b>I
                          have taken a WORKING CIRCUIT--</b></span></div>
                    <div><b> </b>
                      <div>(a simple stereo delay circuit, with
                        cris-cross L/R feedback <br>
                      </div>
                      <div>implemented with [delwrite~] + [vd~]) <br>
                      </div>
                      <div><b><span style="background-color:rgb(255,255,0)">--
                            which DOES NOT produce a "DSP Loop Error", </span><br>
                        </b></div>
                      <div><b>pulled a Null (straight-wire) Filter <br>
                        </b></div>
                      <div><b>(which had been installed in the feedback
                          path)<br>
                        </b></div>
                      <div><b>and moved it externally to the abstraction</b></div>
                      <div><b>(up to the parent patch), via
                          outlet~/inlet~,</b></div>
                      <div><b>which, if anything ADDS additional block
                          delays, <br>
                        </b></div>
                      <div><b>yet this produces "DSP Loop Error". <br>
                        </b></div>
                      <div><b><br>
                        </b></div>
                      <div><b>Clearly (the way I see it) <br>
                        </b></div>
                      <div><b>the logic behind detecting "DSP Loop
                          Error" condition<br>
                        </b></div>
                      <div><b>has a bug.</b></div>
                      <br>
                      <div><b>I believe this is a false error,</b></div>
                      <div><b>because as I have stated--</b></div>
                      <div><b>the circuit HAD been working!</b></div>
                      <div><b><br>
                        </b></div>
                      <div><b>All I did was add the potential for
                          additional</b></div>
                      <div><b>blocks of delay on the feedback path. <br>
                        </b></div>
                    </div>
                    <div><br>
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div>But you're using [r~] and [s~] which is not
                        the same as direct signal connections. The
                        former can act like a short delay line. Please
                        read "3.audio.examples/G05.execution.order".</div>
                    </blockquote>
                    <div><br>
                    </div>
                    <div>Christof, Yes! Exactly!<br>
                    </div>
                    <div>Added delay should REDUCE the chance of a "DSP
                      Loop Detected"!</div>
                    <div><br>
                    </div>
                    <div>Also, believe me, r~/s~ has nothing to do with
                      it. <br>
                    </div>
                    <div>My original patch was extremely ugly, due to
                      criss-crossed feedback.</div>
                    <div>I only implemented with r~/s~ to clean up the
                      patch to share. <br>
                    </div>
                    <div><br>
                    </div>
                    <div>Thanks everyone!</div>
                    <div>BH<br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                      <br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <div><br>
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
                      <div>
                        <p>Christof<br>
                        </p>
                        <div>On 25.02.2020 11:42, Dan Wilcox wrote:<br>
                        </div>
                        <blockquote type="cite"> As far as I recall,
                          going between abstraction to parent patch via
                          inlet~/outlet~ introduces a block delay, hence
                          no error
                          <div><br>
                          </div>
                          <div>
                            <blockquote type="cite">
                              <div dir="auto">
                                <div dir="auto">
                                  <div dir="auto">Third patch is like
                                    the second, only the effect has been
                                    moved out of the abstraction, and
                                    into the parent patch. ONLY HERE do
                                    I get the DSP loop error. </div>
                                </div>
                              </div>
                            </blockquote>
                            <div><br>
                            </div>
                            Signal loop in a single patch without
                            abstractions = error. Pd has no way to read
                            and write to the same signal buffer in the
                            patch at the same time *without* some tiny
                            delay.</div>
                          <div><br>
                          </div>
                          <div>
                            <blockquote type="cite">
                              <div dir="auto">
                                <div dir="auto">
                                  <div dir="auto"><b style="font-family:sans-serif">The
                                      point is the last two patches have
                                      (or should have) an identical
                                      graph! </b></div>
                                </div>
                              </div>
                            </blockquote>
                            <br>
                          </div>
                          <div>At the lower level, they don't. What
                            happens if you put part of the path inside a
                            subpath which uses inlet~/outlet~?</div>
                          <div><br>
                          </div>
                          <div>
                            <div>
                              <blockquote type="cite">
                                <div>On Feb 25, 2020, at 11:36 AM,
                                  William Huston <<a href="mailto:williamahuston@gmail.com" target="_blank">williamahuston@gmail.com</a>>
                                  wrote:</div>
                                <br>
                                <div>
                                  <div dir="auto">
                                    <div dir="auto">
                                      <div dir="auto">First abstraction,
                                        simple stereo delay:  2 delay
                                        lines, variable feedback
                                        L->R, R->L.</div>
                                      <div dir="auto"> This <b>works</b>,
                                        no DSP loop error. <br>
                                      </div>
                                      <div dir="auto"><br>
                                      </div>
                                      <div dir="auto">Second abstraction
                                        contains an effect in the
                                        feedback path. (in my simple
                                        example, it's just a null wire:
                                        In-L passes to Out-L, etc).
                                        Again this <b>works</b>, no DSP
                                        error. </div>
                                      <div dir="auto"><br>
                                      </div>
                                      <div dir="auto">Third patch is
                                        like the second, only the effect
                                        has been moved out of the
                                        abstraction, and into the parent
                                        patch. ONLY HERE do I get the
                                        DSP loop error. </div>
                                      <div dir="auto"><br>
                                      </div>
                                      <div dir="auto"><b style="font-family:sans-serif">The
                                          point is the last two patches
                                          have (or should have) an
                                          identical graph! </b><br>
                                      </div>
                                      <div dir="auto"><b style="font-family:sans-serif"><br>
                                        </b></div>
                                      <div dir="auto"><font face="sans-serif">It really
                                          seems like a bug to me. </font></div>
                                      <div dir="auto"><span style="font-family:sans-serif"><br>
                                        </span></div>
                                      <div dir="auto"><span style="font-family:sans-serif">I'll
                                          upload a test patch a little
                                          later. </span></div>
                                      <div dir="auto"><span style="font-family:sans-serif"><br>
                                        </span></div>
                                      <div dir="auto"><font face="sans-serif">Thanks, </font></div>
                                      <div dir="auto"><font face="sans-serif">BH</font></div>
                                    </div>
                                  </div>
                                </div>
                              </blockquote>
                            </div>
                            <br>
                            <div>
                              <div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">--------</div>
                              <div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Dan
                                Wilcox</div>
                              <div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><a href="http://twitter.com/danomatika" target="_blank">@danomatika</a></div>
                              <div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><a href="http://danomatika.com" target="_blank">danomatika.com</a></div>
                              <div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><a href="http://robotcowboy.com" target="_blank">robotcowboy.com</a></div>
                              <div style="color:rgb(0,0,0);font-family:Helvetica;font-size:12px;font-style:normal;font-variant-caps:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br>
                              </div>
                              <br>
                            </div>
                            <br>
                          </div>
                          <br>
                          <fieldset></fieldset>
                          <pre>_______________________________________________
<a href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list
UNSUBSCRIBE and account-management -> <a href="https://lists.puredata.info/listinfo/pd-list" target="_blank">https://lists.puredata.info/listinfo/pd-list</a>
</pre>
                        </blockquote>
                      </div>
                      _______________________________________________<br>
                      <a href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a>
                      mailing list<br>
                      UNSUBSCRIBE and account-management -> <a href="https://lists.puredata.info/listinfo/pd-list" rel="noreferrer" target="_blank">https://lists.puredata.info/listinfo/pd-list</a><br>
                    </blockquote>
                  </div>
                </div>
              </blockquote>
              <br>
              <fieldset></fieldset>
              <pre>_______________________________________________
<a href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list
UNSUBSCRIBE and account-management -> <a href="https://lists.puredata.info/listinfo/pd-list" target="_blank">https://lists.puredata.info/listinfo/pd-list</a>
</pre>
            </blockquote>
          </div>
          _______________________________________________<br>
          <a href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br>
          UNSUBSCRIBE and account-management -> <a href="https://lists.puredata.info/listinfo/pd-list" rel="noreferrer" target="_blank">https://lists.puredata.info/listinfo/pd-list</a><br>
        </blockquote>
      </div>
    </blockquote>
  </div>

_______________________________________________<br>
<a href="mailto:Pd-list@lists.iem.at" target="_blank">Pd-list@lists.iem.at</a> mailing list<br>
UNSUBSCRIBE and account-management -> <a href="https://lists.puredata.info/listinfo/pd-list" rel="noreferrer" target="_blank">https://lists.puredata.info/listinfo/pd-list</a><br>
</blockquote></div></div>