Hello everyone again Can anyone lend me their brain for 5 minutes so I can get a second opinion of my problem?
Essentially what I'm trying to do is create a *generic* module that links bi-directionally to other modules: send audio information and also receive it with minimal time delay.
It is more easily understood by looking at this diagram: http://www-users.york.ac.uk/~kt503/pd/ID-specific-buffers.JPG (this example uses 'send'/'receive' but that's just so you get the idea, they're not appropriate as functions...)
Given a line of connected modules, audio can be transmitted DOWN the signal chain easily, by simply connecting the modules. For audio going up the signal chain though there is difficulty:I had planned to implement a delread~ function in each module which is set to something like [delread~ $1-buffer] so that function A for instance has its own receive buffer (A-buffer), also make the blocksize 1 to minimize delay. However writing to these buffers is where I'm stuck- for a connected object I cannot dynamically alter a delwrite~, even though I can determine the name of the buffer (by receiving the name of the previous object in sequence) 'set..' is not supported for that function.
I also tried throw~/catch~ objects, and I posted about this a few days ago. Throw will allow me to set it dynamically, however these functions do weird things at blocksizes other than 64!
So I am stuck. Is there any way I can dynamically create/set a delwrite~? It seems to be the only function that might work in this case, and all that I need to do is change the destination. Or can anyone see another way i could realise the structure shown in the image?
Alternatively, is this something that can be done with externals? I had hoped I wouldn't have to resort to them and i have no experiece at all in that department but this is crucial to my project.
Any help would be greatly appreciated Regards, Kim
Kim Taylor wrote:
So I am stuck. Is there any way I can dynamically create/set a delwrite~? It seems to be the only function that might work in this
no, you cannot dynamically change the [delwrite~] name, because [delwrite~] is the object that actually holds the delay line. all the [delread~]s and [vd~]s out there will depend on the existence of a named [delwrite~].
this is much the same as with [catch~]/[throw~] and [send~]/[receive~], so it follows the same logic: the object that would break everything when missing, cannot be made missing.
pd does not impose much, but it tends to not allow you to create invalid dsp-graphs.
case, and all that I need to do is change the destination. Or can anyone see another way i could realise the structure shown in the image?
if you really want a settable [delwrite~], why don't you just use something like
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
Alternatively, is this something that can be done with externals? I
not if you prefer no segfaults.
mfga.sdr IOhannes
Hi
if you really want a settable [delwrite~], why don't you just use something like
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
How exactly can this function as a settable delwrite~?
no, you cannot dynamically change the [delwrite~] name, because [delwrite~] is the object that actually holds the delay line.
Okay I understand... How about delread~ and vd~? If delwrite~ cannot be dynamically changed because it holds the delay line, then shouldn't the functions that read from it be more flexible? I have tested and they do not seem to respond to set :(
Thanks for your help K
On 5/15/07, IOhannes m zmoelnig zmoelnig@iem.at wrote:
Kim Taylor wrote:
So I am stuck. Is there any way I can dynamically create/set a delwrite~? It seems to be the only function that might work in this
no, you cannot dynamically change the [delwrite~] name, because [delwrite~] is the object that actually holds the delay line. all the [delread~]s and [vd~]s out there will depend on the existence of a named [delwrite~].
this is much the same as with [catch~]/[throw~] and [send~]/[receive~], so it follows the same logic: the object that would break everything when missing, cannot be made missing.
pd does not impose much, but it tends to not allow you to create invalid dsp-graphs.
case, and all that I need to do is change the destination. Or can anyone see another way i could realise the structure shown in the image?
if you really want a settable [delwrite~], why don't you just use something like
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
Alternatively, is this something that can be done with externals? I
not if you prefer no segfaults.
mfga.sdr IOhannes
Yep, I should have thought of that before... I'll stick it on my dolist. Meantime, if the number of possible sources is reasonably small, just make delread~ objects for all of them and use multiplication to select which one :)
cheers Miller
On Tue, May 15, 2007 at 06:10:25PM +0100, Kim Taylor wrote:
Hi
if you really want a settable [delwrite~], why don't you just use something like
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
How exactly can this function as a settable delwrite~?
no, you cannot dynamically change the [delwrite~] name, because [delwrite~] is the object that actually holds the delay line.
Okay I understand... How about delread~ and vd~? If delwrite~ cannot be dynamically changed because it holds the delay line, then shouldn't the functions that read from it be more flexible? I have tested and they do not seem to respond to set :(
Thanks for your help K
On 5/15/07, IOhannes m zmoelnig zmoelnig@iem.at wrote:
Kim Taylor wrote:
So I am stuck. Is there any way I can dynamically create/set a delwrite~? It seems to be the only function that might work in this
no, you cannot dynamically change the [delwrite~] name, because [delwrite~] is the object that actually holds the delay line. all the [delread~]s and [vd~]s out there will depend on the existence of a named [delwrite~].
this is much the same as with [catch~]/[throw~] and [send~]/[receive~], so it follows the same logic: the object that would break everything when missing, cannot be made missing.
pd does not impose much, but it tends to not allow you to create invalid dsp-graphs.
case, and all that I need to do is change the destination. Or can anyone see another way i could realise the structure shown in the image?
if you really want a settable [delwrite~], why don't you just use something like
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
Alternatively, is this something that can be done with externals? I
not if you prefer no segfaults.
mfga.sdr IOhannes
PD-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 15/05/2007, at 19.10, Kim Taylor wrote:
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
How exactly can this function as a settable delwrite~?
Something along the line of the attached, i'm quite sure.
Oh I see... Sorry this isn't what I meant- I was looking to switch the assignments from delread/write objects. I wasn't really intending to use the delay to add a time delay, more that it's the only function that allows non-local connections which works at a reduced block size. I thought I might as well use send/receive and setting receive like you did here, but s/r don't work at lower block sizes unfortunately :(
Thanks for your help anyway K
On 5/15/07, Steffen stffn@dibidut.dk wrote:
On 15/05/2007, at 19.10, Kim Taylor wrote:
[set varname2( | [receive~ varname] | [delwrite~ fixedname]
How exactly can this function as a settable delwrite~?
Something along the line of the attached, i'm quite sure.