[PD-dev] dynamic patching - is iemguts the way to go?

Miller Puckette msp at ucsd.edu
Wed Aug 21 01:08:51 CEST 2019


actually I wrote that before I thought the whole thing out :)

No, if you "tick" a pdlib instance you tick all the patches in it - so teh
way to get different patches in different orders is to call up a separate
Pd instance for each of them, and use "adc~" and "dac~" objects to get
audio in and out - that incurs zero latency (once you've buffered 64
samples in the first place).

OR, within one pd instance, in libpd or in Pd, you can use switch~ objects,
switched off, to control each sub-patch.  Send the switch~ objects bangs in
whatever orders you wish.  In this scenario, tabsend~ and tabreceive~ would
be the simplemt way to pass signals between them.  In libpd you can do this
zero-latency (just stuff your inpuits into arrays before sending all the
tick messages and copy the results out afterward).

Within the Pd app, you can do teh same thing but you incur one tick extra
latency, because copying the autio into the tables has to happen on the
previous tick form the one on which you get the outputs back.

If you like danger, you can write an external tilde object that, for its
"dsp" action, sends a message to teh patch that can "tick" the switch~
objects right in the middle of Pd/s DSP tick.  This is not part of Pd
because it could cause major confusion if general-purpose Pd messages
got sent around in mid-tick.

cheers
Miller

On Tue, Aug 20, 2019 at 11:55:58PM +0200, Roman Haefeli wrote:
> On Tue, 2019-08-20 at 12:09 -0700, Miller Puckette wrote:
> > I think the way to do this in libpd is to open them all as separate
> > patches
> > within one instance of Pd (so that symbols are shared) and use
> > "tabsend"
> > and "tabreceive" to route signals to/from them, using shared names
> > like
> > "channel1" as both inputs and outputs so you can rearrange them in
> > any
> > order.
> > 
> > (Beware of allowing patches to _write_ andy of their output channels
> > before
> > reading all the input channels, if you're re-using the same channels
> > as 
> > inputs and outputs :)
> 
> Do I understand right: When loading them as separate patches, you can
> dynamically re-order the signal flow by using [tabsend~]/[tabreceive~]
> (which you could with abstractions, too) _without_ adding latency?
> 
> And: When changing the symbol of [tabsend~] or [tabreceive~], is the
> DSP graph re-calculated?
> 
> Roman



> _______________________________________________
> Pd-dev mailing list
> Pd-dev at lists.iem.at
> https://lists.puredata.info/listinfo/pd-dev






More information about the Pd-dev mailing list