Can anyone tell me what one is accomplishing when doing something like this:
[osc~ 440]
|
[+~]
|
[+~]
|
[+~]
|
[+~]
In other words, the chain of [+~] that feed the previous object's output into both inlets of the next... what does this do exactly?
Thanks, Pall
On 01/18/2014 06:24 PM, Pall Thayer wrote:
Can anyone tell me what one is accomplishing when doing something like this:
[osc~ 440] | [+~] |\ x1 [+~] |\ x2 [+~] |\ x3 [+~] x4
In other words, the chain of [+~] that feed the previous object's output into both inlets of the next... what does this do exactly?
it adds a signal with itself: y=x+x=2*x
so the output of the 1st [+~] is x1=x0 (as the 2nd inlet~ is not connected) and the following [+~] will output: x2=x1+x1=2*x1=2*x0 x3=x2+x2=2*x2=2*2*x0=4*x0 x4=x3+x3=2*x3=2*4*x0=8*x0
so you could write the patch as:
[osc~ 440] | [*~ 8]
more often you see [*~] instead of [+~], which is a simple way to square the input.
fgmadsr IOhannes
Ah... I've seen this in some of the help patches. Why would someone do it with multiple [+~] instead of a single [*~]? There's no difference?
On Sat, Jan 18, 2014 at 12:49 PM, IOhannes m zmölnig zmoelnig@iem.atwrote:
On 01/18/2014 06:24 PM, Pall Thayer wrote:
Can anyone tell me what one is accomplishing when doing something like
this:
[osc~ 440] | [+~] |\ x1 [+~] |\ x2 [+~] |\ x3 [+~] x4
In other words, the chain of [+~] that feed the previous object's output into both inlets of the next... what does this do exactly?
it adds a signal with itself: y=x+x=2*x
so the output of the 1st [+~] is x1=x0 (as the 2nd inlet~ is not connected) and the following [+~] will output: x2=x1+x1=2*x1=2*x0 x3=x2+x2=2*x2=2*2*x0=4*x0 x4=x3+x3=2*x3=2*4*x0=8*x0
so you could write the patch as:
[osc~ 440] | [*~ 8]
more often you see [*~] instead of [+~], which is a simple way to square the input.
fgmadsr IOhannes
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 01/18/2014 06:59 PM, Pall Thayer wrote:
Ah... I've seen this in some of the help patches. Why would someone do it with multiple [+~] instead of a single [*~]? There's no difference?
aesthetic reasons? hinting at bigger structures?
but consider this: why would someone write the following code?
#!/usr/bin/perl sleep((8*60)*60);
it does the same as the following (which is slightly faster):
#!/usr/bin/perl sleep(28800);
gfamdsr IOhannes
Touché :-)
On Sat, Jan 18, 2014 at 1:15 PM, IOhannes m zmölnig zmoelnig@iem.at wrote:
On 01/18/2014 06:59 PM, Pall Thayer wrote:
Ah... I've seen this in some of the help patches. Why would someone do it with multiple [+~] instead of a single [*~]? There's no difference?
aesthetic reasons? hinting at bigger structures?
but consider this: why would someone write the following code?
#!/usr/bin/perl sleep((8*60)*60);
it does the same as the following (which is slightly faster):
#!/usr/bin/perl sleep(28800);
gfamdsr IOhannes
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
Hi Pall, Which help patches? I haven't seen a single help patch that substitutes strings of [+~] to double the incoming signal where a simple multiplication would do.
I have seen cascades of [+~] for additive synthesis, but that's not the same.
-Jonathan
On Saturday, January 18, 2014 1:00 PM, Pall Thayer pallthay@gmail.com wrote:
Ah... I've seen this in some of the help patches. Why would someone do it with multiple [+~] instead of a single [*~]? There's no difference?
On Sat, Jan 18, 2014 at 12:49 PM, IOhannes m zmölnig zmoelnig@iem.at wrote:
On 01/18/2014 06:24 PM, Pall Thayer wrote:
Can anyone tell me what one is accomplishing when doing something like this:
[osc~ 440] | [+~] |\ x1 [+~] |\ x2 [+~] |\ x3 [+~] x4
In other words, the chain of [+~] that feed the previous object's output into both inlets of the next... what does this do exactly?
it adds a signal with itself: y=x+x=2*x
so the output of the 1st [+~] is x1=x0 (as the 2nd inlet~ is not connected) and the following [+~] will output: x2=x1+x1=2*x1=2*x0 x3=x2+x2=2*x2=2*2*x0=4*x0 x4=x3+x3=2*x3=2*4*x0=8*x0
so you could write the patch as:
[osc~ 440] | [*~ 8]
more often you see [*~] instead of [+~], which is a simple way to square the input.
fgmadsr IOhannes
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
I don't know. I recall seeing it somewhere years ago.
On Sat, Jan 18, 2014 at 2:32 PM, Jonathan Wilkes jancsika@yahoo.com wrote:
Hi Pall, Which help patches? I haven't seen a single help patch that substitutes strings of [+~] to double the incoming signal where a simple multiplication would do.
I have seen cascades of [+~] for additive synthesis, but that's not the same.
-Jonathan
On Saturday, January 18, 2014 1:00 PM, Pall Thayer pallthay@gmail.com wrote: Ah... I've seen this in some of the help patches. Why would someone do it with multiple [+~] instead of a single [*~]? There's no difference?
On Sat, Jan 18, 2014 at 12:49 PM, IOhannes m zmölnig zmoelnig@iem.atwrote:
On 01/18/2014 06:24 PM, Pall Thayer wrote:
Can anyone tell me what one is accomplishing when doing something like
this:
[osc~ 440] | [+~] |\ x1 [+~] |\ x2 [+~] |\ x3 [+~] x4
In other words, the chain of [+~] that feed the previous object's output into both inlets of the next... what does this do exactly?
it adds a signal with itself: y=x+x=2*x
so the output of the 1st [+~] is x1=x0 (as the 2nd inlet~ is not connected) and the following [+~] will output: x2=x1+x1=2*x1=2*x0 x3=x2+x2=2*x2=2*2*x0=4*x0 x4=x3+x3=2*x3=2*4*x0=8*x0
so you could write the patch as:
[osc~ 440] | [*~ 8]
more often you see [*~] instead of [+~], which is a simple way to square the input.
fgmadsr IOhannes
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
--
Pall Thayer artist http://pallthayer.dyndns.org
Pd-list@iem.at mailing list UNSUBSCRIBE and account-management -> http://lists.puredata.info/listinfo/pd-list
On 2014-01-18 12:49, IOhannes m zmölnig wrote:
On 01/18/2014 06:24 PM, Pall Thayer wrote:
Can anyone tell me what one is accomplishing when doing something like this:
[osc~ 440] | [+~] |\ x1 [+~] |\ x2 [+~] |\ x3 [+~] x4
...
so you could write the patch as:
[osc~ 440] | [*~ 8]
more often you see [*~] instead of [+~], which is a simple way to square the input.
Of course squaring the input like
[osc~] | | [*~]
also doubles its frequency.
It makes an interesting kind of noise too if you do [noise~] | | [*~]
...not sure what colour of noise that is, blue? It seems to have more high frequency content than white noise.
Martin
Since you're dealing with arithmetic, it helps immensely to simplify the data by replacing [osc~ 440] with [sig~ 1], which will just send out blocks where every sample is "1".
The [+~] just goes through a loop every block and does addition, sample by sample. When you don't give it an argument as in your example, it starts with the first sample of each input signal, adds those samples together, stores the sum for the outgoing signal, and then does it again for the next index number until it's gone through the entire block of samples.
When you fan out from a signal outlet into multiple signal inlets, you're essentially just sending the same output the object computed to several places. It's worth noting, however, that for signal chains Pd will ensure that an object receives all of its input before it computes its output. Control objects do not do this, which is why [trigger] exists and why it's often more difficult to read the flow of control diagrams.
Anyway, since our source signal [sig~ 1] only contains the number 1, you can just do the math in your head for the sum of the first two samples to get the number "2", and safely assume it will be the same answer for the rest of the samples in the block. Check your math using something like the [print~] object (or the cord inspector in Pd-extended or Pd-l2ork) at the bottom of the chain.
Finally, put the [osc~ 440] back at the top and see that it's doing the exact same math; it's only that the samples of each block will have different values. But if you use several [print~] objects to see what's being computed at each link of the object chain, you can still check the math works for any sample you want to track visually.
Finally, it's worth noting that most arithmetic signal objects have a simplified method that's used if you specify an argument, like [+~ 42]. In this case, the right inlet is actually a control inlet. It simplifies the math somewhat because there's only one incoming signal, and it gets added to a constant value in the loop to compute the output. If you're going to be sending control data to the right inlet of a [+~] object, you can force this simplification using [+~ 0]. (Same for the other arithmetic signal objects.)
-Jonathan
On Saturday, January 18, 2014 12:24 PM, Pall Thayer pallthay@gmail.com wrote:
Can anyone tell me what one is accomplishing when doing something like this:
[osc~ 440]
|
[+~]
|
[+~]
|
[+~]
|
[+~]
In other words, the chain of [+~] that feed the previous object's output into both inlets of the next... what does this do exactly?
Thanks, Pall