[sharing] Digital Waveguide Mesh

.quasar's icon

Played around recently with Digital Waveguide Meshes in gen~ to model membranes. Used this thesis as a basis.

There are a few examples in max for rectilinear Waveguide Mesh patches but from what I read so far, the "triangular" meshes offer some advantages in terms of dispersion.

This is a 3 nodes triangular Digital Waveguide Mesh examples (each node consist of 6 waveguides). Implemented a few other options like damping and nonlinearity.

Tell me if you're missing any abstraction of gendsp file but i think everything is in there !

Max Patch
Copy patch and select New From Clipboard in Max.

mp's icon

Hi .QUASAR,

great patch, thanks!

Just a small suggestion to replace the third party object dcblock~ with a simple gen~ abstraction (native dcblock) or with [biquad~ 1. -1. 0. -0.9997 0] to prevent errors in the absence of the object (my case…).

Cheers

.quasar's icon

Thanks ! Did not spot that one, usually I actually use the native gen~ version ;)

The msp dcblock~ external comes from the Percolate package. great one btw => there's is actually a rectilinear waveguide mesh external in it (mesh2d~)

Rodrigo's icon

I totally missed this when it was first posted. This is fantastic!

Roman Thilenius's icon

snaregurdy~

JFS's icon

Sounds very nice indeed, but always blows up on me. On Max 7 if it matters - anyone else have the same experience?

gavin peters's icon

Thanks @MP, was wondering what was so special about the patch until I saw dcblock~ in red hahaha.

Also thanks OP, really interesting. Now that I'm a proper student I love finding patches with accompanying papers.

eLud's icon

I took this patch and make a mc version, pretty fun stuff


edit 1: i should add, i don't really understand what all the parameters mean 100%, so any critique of the patch is very welcome

edit 2: I've worked on the patch and re-applied the curvature that quasar chose, also the nodes now take a frequency instead of a time in ms. they now take (samplerate/input)

and: in the original patch quasar wrote the delay objects in gen~ like this: "delay 44100 @interp cubic"

i changed that to "delay @interp cubic" because ommitting the first argument sets the delays to be the current samplerate.

the testpatch is now pretty good also

edit 3:
i've updated the patch (mainly changing the inlet order and also doing a helpfile)

eLud's icon

I'm working on this patch on a daily basis right now haha

so here is version 4:

eLum.mc.quasar~.maxpat
Max Patch
eLum.mc.quasar~.maxhelp
maxhelp 101.90 KB
quasar_testpatch.maxpat
Max Patch


I've added 2 more parameters:


exciter_gain = gain of the exciter before a limiter is applied. Useful to get rid of harsh attacks
exciter_noise = wether or not to mix white noise to the exciter, with white noise the sound is more interesting, without white noise it is more predictable.

especially the first one is quite useful. Before adding this parameter the OG patch would sometimes produce harsh clicks because the exciter would vary in phase and amplitude depending on the noise input's state.

there is probably a more elegant way to get rid of this harshness. if someone has an idea, i'm all ears :))))

edit 1: fixed the typo, thanks brad!

bdc's icon

Tiny issue with exciter_noise throwing an error (simple enough that even I could figure it out). Inside the mc.gen~ the param is called 'exciter_noice'.

Nice work!

Brad