Kim Taylor’s Pd Objects for Digital Waveguide Synthesis

 

Hi there!

This set of objects is made up of modules that let you create custom Digital Waveguide (DWG) models of plucked strings. It is intended that the objects provide the basis for all sorts of patches to be created, with interesting sonic results! Please play with it, and let me know what you think! email

 

Quick Start!

If you don’t know anything about DWG synthesis, or can’t be bothered to read the theory, just try the demo patches I made and have a fiddle.

DEMO PATCHES – demo1.pd, demo2.pd

 

Quick Theory

Digital waveguide modelling is a form of physical modelling synthesis which models the propagation of vibrations on a waveguide using delay lines.

Structures in DWGs have the following basic components: Delay lines, Terminations and Junctions

The simplest instrument that can be modelled with DWG synthesis is a plucked string. In this model, an excitation (pluck) is input to a one-dimensional waveguide (the string), which is ‘terminated’ at either end (the nut and bridge)

 

http://ccrma.stanford.edu/~jos/swgt/Rigidly_Terminated_Ideal_String.html

 

Delay lines can be connected together using ‘scattering junctions’, which models the transmission and reflection of wave energy at a junction between two or more waveguides. In the object set there are various types of scattering junctions depending on how many ports are required: If you’re joining 2 waveguides together you’ll need a 2-port scattering junction (object: 2-port), for three you’ll need a 3-port scattering junction (3-port) and so on. The degree of signal reflection/transmission is determined by the relative 'impedances' of each incoming waveguide.

 

As in the image above, delay lines can also be terminated at their ends. Terminations are simply gain factors or in this case, 1st order low pass filters.

The object ‘Term’ does this, but the object ‘dline-Term’ incorporates a delay-line and a termination into one object for convenience.

 

Those are all the elements. The ‘excitation’ object provides the ‘pluck’ to generate sound, and you’ll need to specify where to take the output from to hear anything!

Hopefully this makes some sense, check out the demos and see if you can tell what’s going on. For instance, in demo2.pd the patch is made up of four delay lines all connected to a 4-port scattering junction and with their other ends terminated.

 

More in depth theory here.

Digital waveguides on wikipedia here.

Things you need to know if you’re building your own:

 

Pd is a bit rubbish for feedback, (which is essential for DWGs) so to avoid the ‘DSP loop error’ when creating a bi-directional link between two objects, you have to break the loop up using delread/write – something like [delwrite~ XXX 0] and [delread~ XXX 0]. The level block size needs to be forced to 1 to avoid incurring a 1.45ms delay each time you do this. Here’s an example of this:

 

 

Object Reference:

Object name <arguments>

Function

[dline <name> <length(ms)>]

Bi-directional delay line

[dline-IN <name> <length(ms)> <position>]

Bi-directional delay line with input at variable position

[dline-OUT <name> <length(ms)> <position>]

Bi-directional delay line with output at variable position

[dline-Term <name> <length(ms)> <damping freq(Hz)>]

Bi-directional delay line, terminated at one end with 1st order Lowpass filter.

[Term <name> <damping freq(Hz)]

Termination (1st order lowpass filter)

[2port <name> <R1> <R2>]

2-port scattering junction

[3port <name> <R1> <R2> <R3>]

3-port scattering junction

[4port <name> <R1> <R2> <R3> <R4>]

4-port scattering junction

[excitation <width> <mode>]

Excitation module.