[PD] [tabwrite4~], is it possible at all?

katja katjavetter at gmail.com
Mon Jan 9 13:05:23 CET 2012


On Sun, Jan 8, 2012 at 9:01 PM, Miller Puckette <msp at ucsd.edu> wrote:
> Hi all --
>
> Peter Brinkmann and Michael Goggins did some related work recently:
>
> http://nettoyeur.noisepages.com/2010/10/doppler-effects-without-equations/
>
> but back in the dark ages Barry Vercoe made a Music 11 ugen called 'pipadv'
> that added a signal into a delay line assuming the write location was
> continuous and could be stably differentiated (so that for each point of the
> delay line you could associate a fractional pposition in the incoming signal.
> He then interpolated to get fractional-indexed values of the incoming signal
> to correspond with successive sample locations in the delay line, turning
> the problem around backward.)

Yes, PIPADV seems to be the process I'm looking for, so let me say
[pipadv~] instead of [tabwrite4~]. Barry Vercoe describes a 'community
of pipelines', forming a delay network for room acoustics simulation,
to which PIPADV can add a signal 'whose distance is time-varying'.

http://web.media.mit.edu/~bv/papers/compsys%20&%20langs.pdf

But the article has no technical details, and Peter Brinkmann and
Michael Goggins solve another problem, related to this topic of
doppler shifts caused by moving positions of listeners and/or or
sources.

If it is true that PIPADV could write to fractional indexes on a
PDP-11 (though not quite in realtime yet), then it must be possible to
make such a thing for Pd. Here's another brainstorm:

Writing at double speed would be done after upsampling/filtering.
Writing at half speed would be done after filtering/downsampling.

Writing at speeds ratio's not some power of two could be done via
chirp z-transform: resample the spectrum in forward chirp z-transform,
and go back to time domain with regular IFFT. Illustrated here:

http://www.katjaas.nl/chirpZsampling/chirpZsampling.html

However this would still require an integer number of output samples
every time, if the output blocks are to be neatly stitched together.
The speed ratio would be forced to blocksize/n or n/blocksize, and the
larger blocksize, the more options.

If this is not flexible enough for the purpose, it must be done
different still. I am now thinking how it could be done as
'fractional-phase convolution'. A non-linear convolution where the
filter kernel changes for every input sample. The change in the kernel
is a phase rotation, such that the filter kernel's identity point
coincides with the fractional index where the output sample should be
located. This dynamic filter kernel would regulate the resampling
amplitude filtering, plus a fractional delay needed to get the signal
energy at the right position. Seen over time, the filter kernel would
kind of undulate, like a snake moving forward.

To recalculate a filter kernel for every input sample is a CPU
intensive matter, specially for substantial upsampling factors where
the filter kernel must be long. So this is not a very practical
concept yet. But there may be ways to make this idea more efficient.
If it makes sense at all.

Katja



More information about the Pd-list mailing list