<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    An approach I've been using successfully is to put a [switch~] and
    some fade-in / fade-out mechanism (with appropriate delays to avoid
    audio artifacts) in all subpatches that need to be exclusively
    active.<br>
    This way you can enable / disable them at will, and you will always
    only consume the processing power of the currently enabled subpatch.<br>
    Going into the details, if you want to cross-fade between patches x
    and y (instead of fading patch x out, then switch it off, then
    switch patch y on, then fade it in), you might get some cpu peaks if
    both patches consume a lot.<br>
    In many cases I don't need to cross-fade (sound continuity is not an
    issue), so this is a solution I've used in several systems.<br>
    Hope this is relevant to the discussion and might be of some help.<br>
    <br>
    Joseph<br>
    <br>
    <div class="moz-cite-prefix">Le 21/08/2019 à 07:10, Alex Norman a
      écrit :<br>
    </div>
    <blockquote type="cite"
      cite="mid:A1913D06-7B2E-4782-9152-3C62408F777B@gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      Yeah, maybe that is positive (reverb tails etc) but if not, you
      could put the control on the other end, send your signal into
      every effect in parallel and then mix in the one you want to hear
      selectively.<br>
      <br>
      Alex<br>
      <br>
      <div class="gmail_quote">On August 20, 2019 7:06:10 PM PDT, Nick
        Porcaro <a class="moz-txt-link-rfc2396E" href="mailto:nick@porcaro.org"><nick@porcaro.org></a> wrote:
        <blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt
          0.8ex; border-left: 1px solid rgb(204, 204, 204);
          padding-left: 1ex;">
          Hey x_nor,
          <div class=""><br class="">
          </div>
          <div class="">The problem with this approach is that you still
            have active signal processing going in</div>
          <div class="">each effect even if they are panned to zero (I
            assume) and you couldn’t change the running</div>
          <div class="">order of effect1 and effect2.</div>
          <div class=""><br class="">
          </div>
          <div class="">Thanks for thinking on it though.  I’m going to
            study Miller’s responses and let you all know it goes-</div>
          <div class=""><br class="">
          </div>
          <div class="">- Nick<br class="">
            <div><br class="">
              <blockquote type="cite" class="">
                <div class="">On Aug 20, 2019, at 7:26 PM, x nor <<a
                    href="mailto:x37v.alex@gmail.com" class=""
                    moz-do-not-send="true">x37v.alex@gmail.com</a>>
                  wrote:</div>
                <br class="Apple-interchange-newline">
                <div class="">
                  <div dir="ltr" class="">
                    <div class="">another approach could be to generate
                      all the permutations of your effects as
                      abstractions and simply route audio to a
                      permutation selectively like you would with a
                      speaker with  an N-channel panner.</div>
                    <div class=""><br class="">
                    </div>
                    <div class="">[adc~]</div>
                    <div class="">|     [pan control]<br class="">
                    </div>
                    <div class="">|      |<br class="">
                    </div>
                    <div class="">[pan~             ]</div>
                    <div class="">|                   | ....<br class="">
                    </div>
                    <div class="">[effect1~]     |</div>
                    <div class="">|                  [effect2~]</div>
                    <div class="">|                   |<br class="">
                    </div>
                    <div class="">[mixer~          ]</div>
                    <div class="">|</div>
                    <div class="">[dac~]</div>
                    <div class=""><br class="">
                    </div>
                    <div class=""><br class="">
                    </div>
                    <div class="">generating abstraction by editing
                      files as text is pretty simple, patching each
                      abstraction to a panner is probably pretty simple
                      with your text editor as well.</div>
                    <div class=""><br class="">
                    </div>
                    <div class="">though, maybe you don't have enough
                      processing power for it?  but.. maybe you do?<br
                        class="">
                    </div>
                    <div class=""><br class="">
                    </div>
                  </div>
                  <br class="">
                  <div class="gmail_quote">
                    <div dir="ltr" class="gmail_attr">On Tue, Aug 20,
                      2019 at 4:09 PM Miller Puckette <<a
                        href="mailto:msp@ucsd.edu" class=""
                        moz-do-not-send="true">msp@ucsd.edu</a>>
                      wrote:<br class="">
                    </div>
                    <blockquote class="gmail_quote" style="margin:0px
                      0px 0px 0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">actually I
                      wrote that before I thought the whole thing out :)<br
                        class="">
                      <br class="">
                      No, if you "tick" a pdlib instance you tick all
                      the patches in it - so teh<br class="">
                      way to get different patches in different orders
                      is to call up a separate<br class="">
                      Pd instance for each of them, and use "adc~" and
                      "dac~" objects to get<br class="">
                      audio in and out - that incurs zero latency (once
                      you've buffered 64<br class="">
                      samples in the first place).<br class="">
                      <br class="">
                      OR, within one pd instance, in libpd or in Pd, you
                      can use switch~ objects,<br class="">
                      switched off, to control each sub-patch.  Send the
                      switch~ objects bangs in<br class="">
                      whatever orders you wish.  In this scenario,
                      tabsend~ and tabreceive~ would<br class="">
                      be the simplemt way to pass signals between them. 
                      In libpd you can do this<br class="">
                      zero-latency (just stuff your inpuits into arrays
                      before sending all the<br class="">
                      tick messages and copy the results out afterward).<br
                        class="">
                      <br class="">
                      Within the Pd app, you can do teh same thing but
                      you incur one tick extra<br class="">
                      latency, because copying the autio into the tables
                      has to happen on the<br class="">
                      previous tick form the one on which you get the
                      outputs back.<br class="">
                      <br class="">
                      If you like danger, you can write an external
                      tilde object that, for its<br class="">
                      "dsp" action, sends a message to teh patch that
                      can "tick" the switch~<br class="">
                      objects right in the middle of Pd/s DSP tick. 
                      This is not part of Pd<br class="">
                      because it could cause major confusion if
                      general-purpose Pd messages<br class="">
                      got sent around in mid-tick.<br class="">
                      <br class="">
                      cheers<br class="">
                      Miller<br class="">
                      <br class="">
                      On Tue, Aug 20, 2019 at 11:55:58PM +0200, Roman
                      Haefeli wrote:<br class="">
                      > On Tue, 2019-08-20 at 12:09 -0700, Miller
                      Puckette wrote:<br class="">
                      > > I think the way to do this in libpd is
                      to open them all as separate<br class="">
                      > > patches<br class="">
                      > > within one instance of Pd (so that
                      symbols are shared) and use<br class="">
                      > > "tabsend"<br class="">
                      > > and "tabreceive" to route signals
                      to/from them, using shared names<br class="">
                      > > like<br class="">
                      > > "channel1" as both inputs and outputs so
                      you can rearrange them in<br class="">
                      > > any<br class="">
                      > > order.<br class="">
                      > > <br class="">
                      > > (Beware of allowing patches to _write_
                      andy of their output channels<br class="">
                      > > before<br class="">
                      > > reading all the input channels, if
                      you're re-using the same channels<br class="">
                      > > as <br class="">
                      > > inputs and outputs :)<br class="">
                      > <br class="">
                      > Do I understand right: When loading them as
                      separate patches, you can<br class="">
                      > dynamically re-order the signal flow by using
                      [tabsend~]/[tabreceive~]<br class="">
                      > (which you could with abstractions, too)
                      _without_ adding latency?<br class="">
                      > <br class="">
                      > And: When changing the symbol of [tabsend~]
                      or [tabreceive~], is the<br class="">
                      > DSP graph re-calculated?<br class="">
                      > <br class="">
                      > Roman<br class="">
                      <br class="">
                      <br class="">
                      <br class="">
                      >
                      _______________________________________________<br
                        class="">
                      > Pd-dev mailing list<br class="">
                      > <a href="mailto:Pd-dev@lists.iem.at"
                        target="_blank" class="" moz-do-not-send="true">Pd-dev@lists.iem.at</a><br
                        class="">
                      > <a
                        href="https://lists.puredata.info/listinfo/pd-dev"
                        rel="noreferrer" target="_blank" class=""
                        moz-do-not-send="true">https://lists.puredata.info/listinfo/pd-dev</a><br
                        class="">
                      <br class="">
                      <br class="">
                      <br class="">
                      <br class="">
                      _______________________________________________<br
                        class="">
                      Pd-dev mailing list<br class="">
                      <a href="mailto:Pd-dev@lists.iem.at"
                        target="_blank" class="" moz-do-not-send="true">Pd-dev@lists.iem.at</a><br
                        class="">
                      <a
                        href="https://lists.puredata.info/listinfo/pd-dev"
                        rel="noreferrer" target="_blank" class=""
                        moz-do-not-send="true">https://lists.puredata.info/listinfo/pd-dev</a><br
                        class="">
                    </blockquote>
                  </div>
                  _______________________________________________<br
                    class="">
                  Pd-dev mailing list<br class="">
                  <a href="mailto:Pd-dev@lists.iem.at" class=""
                    moz-do-not-send="true">Pd-dev@lists.iem.at</a><br
                    class="">
                  <a class="moz-txt-link-freetext" href="https://lists.puredata.info/listinfo/pd-dev">https://lists.puredata.info/listinfo/pd-dev</a><br
                    class="">
                </div>
              </blockquote>
            </div>
            <br class="">
          </div>
        </blockquote>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <pre class="moz-quote-pre" wrap="">_______________________________________________
Pd-dev mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Pd-dev@lists.iem.at">Pd-dev@lists.iem.at</a>
<a class="moz-txt-link-freetext" href="https://lists.puredata.info/listinfo/pd-dev">https://lists.puredata.info/listinfo/pd-dev</a>
</pre>
    </blockquote>
    <br>
  </body>
</html>