[$0-] arguments inside [clone]
@differencetones Use the clone number instead........ $1-grain.
It will start at 0 unless you specify a different start number using the -s switch.
So normally for 16 clones the $1 values will be 0-15.
If you will have another set of 16 clones of the same abstraction then you can add another argument to each set........ say 1 and 2.......... and then use $2-$1-grain for the array (translated 1-12-grain for example for the sender) to send to the clones.
Something like this........ eg.zip
David
How to...sort of...clone a gui: using embedded subpatches in the clones with vis $1 on the clone inlet
Here is a working example of what I have in mind,
See the clone-gui.pd to see it working.
The gist is you embed your gui inside the clone and then have one of the clone inlets be a [vis $1( message to pop that subpatch window.
p.s. I have a really complex control right now I am working on, and this might be one (better) way to approach it.
Peace thru Sharing and Love through Music.
p.p.s Has anybody done any work on making a treeview control? Say...to set an heiarchical apps properties for instance. My thinking thus far is since we all have "wish" we might be able to use its treeview widget to do it. (my apoloigies for crossposting.)
Snail... a pure data patch for slow sounds
Hello there, this seemed an interesting patch, so i unzipped it on a folder and tried to open it but got an unusable display and a string of errors on console, something like this (its not all of it);
list fromsymbol
... couldn't create
list tosymbol: unknown function
list tosymbol
... couldn't create
pdcontrol
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
clone 1 0 3 0 (canvas->outlet) connection failed
clone 1 1 8 0 (canvas->list split) connection failed
else/receiver
... couldn't create
else/receiver
... couldn't create
text search $1
... couldn't create
text set $1
... couldn't create
text search $1
... couldn't create
text get $1
... couldn't create
text size $1
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
text delete $1
... couldn't create
text_replace.pd 31 0 6 0 (canvas->select) connection failed
text_replace.pd 31 1 34 0 (canvas->trigger) connection failed
text define $0-guithru
... couldn't create
text size
... couldn't create
text get
... couldn't create
else/loadbanger -init
... couldn't create
else/receiver
... couldn't create
else/dollsym 1
... couldn't create
else/dollsym 2
... couldn't create
text define -k $0-controls
... couldn't create
array: no method for 'set'
else/args
... couldn't create
else/break -
... couldn't create
list fromsymbol: unknown function
list fromsymbol
... couldn't create
list tosymbol: unknown function
list tosymbol
... couldn't create
pdcontrol
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
clone 1 0 3 0 (canvas->outlet) connection failed
clone 1 1 8 0 (canvas->list split) connection failed
else/receiver
... couldn't create
else/receiver
... couldn't create
text search $1
... couldn't create
text set $1
... couldn't create
text search $1
... couldn't create
text get $1
... couldn't create
text size $1
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
text delete $1
... couldn't create
text_replace.pd 31 0 6 0 (canvas->select) connection failed
text_replace.pd 31 1 34 0 (canvas->trigger) connection failed
text define $0-guithru
... couldn't create
text size
... couldn't create
text get
... couldn't create
else/loadbanger -init
... couldn't create
else/receiver
... couldn't create
else/dollsym 1
... couldn't create
else/dollsym 2
... couldn't create
text define -k $0-controls
... couldn't create
array: no method for 'set'
else/click
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
q 8 0 11 0 (canvas->outlet) connection failed
q 8 1 5 0 (canvas->+~) connection failed
q 8 2 12 1 (canvas->canvas) connection failed
else/args
... couldn't create
else/break -
... couldn't create
list fromsymbol: unknown function
list fromsymbol
... couldn't create
list tosymbol: unknown function
list tosymbol
... couldn't create
pdcontrol
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
clone 1 0 3 0 (canvas->outlet) connection failed
clone 1 1 8 0 (canvas->list split) connection failed
else/receiver
... couldn't create
else/receiver
... couldn't create
text search $1
... couldn't create
text set $1
... couldn't create
text search $1
... couldn't create
text get $1
... couldn't create
text size $1
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
text delete $1
... couldn't create
text_replace.pd 31 0 6 0 (canvas->select) connection failed
text_replace.pd 31 1 34 0 (canvas->trigger) connection failed
text define $0-guithru
... couldn't create
text size
... couldn't create
text get
... couldn't create
else/loadbanger -init
... couldn't create
else/receiver
... couldn't create
else/dollsym 1
... couldn't create
else/dollsym 2
... couldn't create
text define -k $0-controls
... couldn't create
array: no method for 'set'
else/click
... couldn't create
text define -k $0-controls
... couldn't create
array: no method for 'set'
else/args
... couldn't create
text define -k $0-controls
... couldn't create
array: no method for 'set'
else/args
... couldn't create
else/loadbanger -init
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
mode 14 0 3 0 (canvas->clip) connection failed
mode 14 1 4 0 (canvas->wrap) connection failed
mode 14 2 6 0 (canvas->abs) connection failed
mode 14 3 15 0 (canvas->moses) connection failed
else/args
... couldn't create
else/break -
... couldn't create
list fromsymbol: unknown function
list fromsymbol
... couldn't create
list tosymbol: unknown function
list tosymbol
... couldn't create
pdcontrol
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
clone 1 0 3 0 (canvas->outlet) connection failed
clone 1 1 8 0 (canvas->list split) connection failed
else/receiver
... couldn't create
else/receiver
... couldn't create
text search $1
... couldn't create
text set $1
... couldn't create
text search $1
... couldn't create
text get $1
... couldn't create
text size $1
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
text delete $1
... couldn't create
text_replace.pd 31 0 6 0 (canvas->select) connection failed
text_replace.pd 31 1 34 0 (canvas->trigger) connection failed
text define $0-guithru
... couldn't create
text size
... couldn't create
text get
... couldn't create
else/loadbanger -init
... couldn't create
else/receiver
... couldn't create
else/dollsym 1
... couldn't create
else/dollsym 2
... couldn't create
text define -k $0-controls
... couldn't create
array: no method for 'set'
else/click
... couldn't create
else/break -
... couldn't create
list fromsymbol: unknown function
list fromsymbol
... couldn't create
list tosymbol: unknown function
list tosymbol
... couldn't create
pdcontrol
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
clone 1 0 3 0 (canvas->outlet) connection failed
clone 1 1 8 0 (canvas->list split) connection failed
else/receiver
... couldn't create
else/receiver
... couldn't create
text search $1
... couldn't create
text set $1
... couldn't create
text search $1
... couldn't create
text get $1
... couldn't create
text size $1
... couldn't create
else/args
... couldn't create
else/loadbanger -init
... couldn't create
text delete $1
... couldn't create
text_replace.pd 31 0 6 0 (canvas->select) connection failed
text_replace.pd 31 1 34 0 (canvas->trigger) connection failed
text define $0-guithru
... couldn't create
text size
... couldn't create
text get
... couldn't create
else/loadbanger -init
... couldn't create
else/receiver
... couldn't create
else/dollsym 1
... couldn't create
else/dollsym 2
... couldn't create
count.pd 15 0 8 0 (canvas->+) connection failed
count.pd 15 1 14 0 (canvas->-) connection failed
else/args
... couldn't create
else/loadbanger -init
... couldn't create
display 60 0 29 0 (canvas->message) connection failed
display 60 1 31 0 (canvas->select) connection failed
display 60 2 32 0 (canvas->message) connection failed
display 60 3 31 0 (canvas->select) connection failed
Any ideas ? cheers
s~/r~ throw~/catch~ latency and object creation order
@whale-av To be fair, cut and repaste would only affect the heads of audio chain tributaries and fully independent audio chains (and also certain audio fanout connections), so it's not like there are landmines everywhere. Also, in the case of clone, unless you're sending signal between siblings you'll probably never be affected by the different sort order. I'm currently searching through all of my Pd code to see how many times I've fallen victim, I'll report back with my results.
Speaking of clone, I was able to reproduce the clone tilde object sort order reversal using [tabsend~] in an abstraction, which is way simpler (and hence more convincing as a test) than the tortured way I was trying to pass signal laterally. Each instance of [tabsender] sends a different constant to array1. The last instance to run "wins", i.e. overwrites whatever the first one wrote. In the clone version, the 2nd one wins; in the manual version, the 1st wins. So yes, clone seems to reverse Pd's normal tilde object sort order. tabsender.zip


s~/r~ throw~/catch~ latency and object creation order
@seb-harmonik.ar Wow, that change would affect the sound of a lot of existing patches!
@whale-av OK, so I no longer think that "creation order side effects are scoped locally and don't reach across patch-subpatch boundaries". Check out these mystifying examples: cloneException.zip

This is a really contrived patch that passes signal left to right and right to left between instances of [lateral~]. I arranged the creation order to theoretically run [phasor~] first, then [clone -s 1 lateral 4 6], then the [catch~]s. Were my previous creation order side effect scope claim true, then you'd expect the latency flowing left to equal the latency flowing right because each clone instance of [lateral~] is an abstraction. And then you'd be excused for thinking that Pd is treating all clone instances as one combined abstraction for the purposes of computing tilde object sort order, but the problem is that it appears to be sorting in order of creation--the opposite of what I found previously!
Even crazier, if I create the [lateral~] instances by hand in the same order that clone creates them, the sort order reverses!

gensyn~: generic, multi-modulator synthesizer abstraction
Given the way clones work, you can send each table/abstraction their own values by send the [r msgs] in the form [abstractionId parameterName value(.
So, for example, if you want to change the first clone's mod-type to the 3rd type you send a list to [msgs] as [0 t1 2(.
If you open the examples abstractions, they will point you to how to write the list for each abstraction/parameter pair.
Having each table have its own ID is handy, because then you can change the tables on a per (clone) voice basis.
p.s. if you want to change all of the voices/clones to a certain value, you send to [msgs] [all parameterName value (.
p.p.s. Thank you, for your support. I am glad you like it/them. Keep sending the questions, as helping to clarify for you may also do the same for others.
p.p.p.s. am currently working on a version that further abstracts the abstraction to allow for multiple [clone] objects simultaneously. will share it...prob here...once it's stable.
[clone] confusion?
@namie216 "next" will send the $1 value to the next clone every time it is banged. So it will step through the clones 0,1,2,3,4 etc.
Say you have 8 clones (0-7).......
If you send 10 11 12 (3 bangs) into [next $1 .......and the last time you sent a message it went to clone 5.... then 10 will go to clone 6, 11 to clone 7, 12 to clone 0.
There is no "time" as such. 3 bangs can all pass at the same logical time (but in order of course) although control messages are only processed between audio blocks (normally 64 samples).
David.
[clone] argument order
@JamesStick You can send messages to a specific clone (through an inlet) by adding the clone number before the message........ so just leave off the "this" "next" or "all" from your message..
.......... example.zip
Don't forget that clone numbering ($1) starts at 0 unless you use the -s switch to force numbering starting at 1 or some other number....... [clone -s 1 module 4 1 0] for the screenshot below will create clones 1-4 instead of clones 0-3.
Ignore the other stuff in the example unless you need to send messages between identical clones.
So [3 data( sent into an inlet will only be received by the clone which has the value 3 assigned to $1.
The 3 is stripped as the message arrives...... so clone 3 receives "data" on the inlet.
You could also send the message in "wirelessly" of course using a [receive whatever-$1] within the cloned abstraction.
David.

Too many bangs or wrong note on onset for granular synth
@morpheu5 Your clones are identical. There are two incoming messages that change their operation.
[next $1( and [r $1-grainSpeed].
But [s $0-grainSpeed] sends to all of them so they all have their speed settings changed at the same time as a note is played (except that they do not without the "cursed" bang..)
With the cursed bang they are all updated for an incoming note...... but all the [vline~] are restarted causing an overload.
Without the cursed bang none are updated until the metro bangs again....... but there will be an indeterminate delay until the metro bangs........ during which time the tail of the previous grain will still be playing the previous note..... and then none of the others will be updated......
Assuming you want all the grain tails to be updated by the note but not be restarted..... (that is how it looks at the moment....... Monophonic.... if not then everything below is untrue).......
........ you will need to bang [vline~] only from the [next $1] message and modify the output of [vline~] before [tabread4~ $1-grainData] with a [x~] for all the other clones..... the value for the [x~] being the relationship between the current and the previous note.
..... And the new note needs to bang the [next $1( message...... not the [metro]
BUT you will not want the multiplier for the newly banged [vline~]....... and your clones are identical...... aargh.
SO in fact you need to get the grainSpeed into the clone as a modifier of the output of [vline~] and not as part of it's received message (so that they all change)....... and only bang one clone to restart one [vline~] at the same time through the [next $1] message..
Doing that you will only need to set the modifier as a value for the note and you will not need to mess around with relative values between notes.......
I think that is it in summary.....
David.
Routing different signals to clone instances
@lacuna Thank you for this information. However, I'm having a really hard time trying to wrap my head around this. As far as I understand, you can use s~ and r~ to route signals from the cloned instances to other cloned instances but can't figure out how to do that. Here is a very simple example explaining what I'm trying to achieve, The idea is to modulate the frequency of each cloned instance inside the second module with signals coming from corresponding cloned instances of the first module, so each note can be modulated separately.



