[PD] How can I weave multiple signals together?

Charles Z Henry czhenry at gmail.com
Thu Mar 28 03:06:05 CET 2019


 fexpr~ ($y1+1)*($y1<2);
$x1*($y1==0)+$x2*($y1==1)+$x3*($y1==2)

might have a *lot* of high frequency content.

you could replace the counter in the above fexpr~ with a slower
counter and it would have a coarser effect.  That would reduce the
pitch of the noise. If the counter got slow enough, it would sound
more like abrubt panning between the signals instead of mixing the
signals and adding noise.

fexpr~ ($y1+$f4)-3*($y1+$f4>=3);
$x1*($y1<1)+$x2*($y1>=1&&$y1<2)+$x3*($y1>=2)

That adds a $f4 inlet, set to a float less than 1 to slow down the
counter.  It will pitch the noise down into a more usable range.  At
around 0.01-0.1, you'd start to hear some tones pop out (80-800 Hz).
Probably at around 0.0001, it would start to sound like an arpeggio.

Replace the counter with a random walk with drift on [0,3] might also
be good.  It would smear out the high frequency noise.  It would give
you 2 parameters to control the effect, speed and noise amplitude.

Or you could try to add some cross-fading with another parameter that
would cut down on the clicks.  I don't know what you had in mind for
this effect

Chuck




On Wed, Mar 27, 2019 at 5:04 PM Charles Z Henry <czhenry at gmail.com> wrote:
>
> there's another option you're missing which doesn't involve storage
>
> When you do your interleaving in a literal way, think of it as the sum
> of 3 signals:
> A,0,0,B,0,0,C,0,0,...
> 0,1,0,0,2,0,0,3,0,...
> 0,0,!,0,0,@,0,0,#,...
>
> Those signals are versions of the original, except pitched down by
> factor of 3, with an additional bit of harmonic content, and then
> added together.
>
> If you didn't want to pitch down the signals, and you know that your
> osc~ frequencies are low (< 4kHz should be enough)
> you could just multiply by
> 1,0,0,1,0,0,1,0,0
> 0,1,0,0,1,0,0,1,0
> 0,0,1,0,0,1,0,0,1
>
> and add them up.  If you DID want them pitched down by factor 3, you
> could adjust your inputs to osc~ to freq/3
>
> And you can do it with a single fexpr~
>
> [ fexpr~ ($y1+1)*($y1<2); $x1*($y1==0)+$x2*($y1==1)+$x3*($y1==2) ]
>
> That object takes your 3 input signals $x1, $x2, $x3, makes a counter
> in the first output $y1 (0,1,2,0,1,2,...) and the 2nd output $y2 has
> your interleaved signal ($x1[-1], $x2[0], $x3[1], $x1[1], ...)
>
> I'd say, give it a try, it's a nice idea, but the high frequencies
> you're going to introduce may be harsh and in the range of 8kHz and
> up... and the result in the low frequency range won't be much
> different from simply adding them up.
>
> Chuck





More information about the Pd-list mailing list