Sound Synthesis & SFX

Experimental Waveshaping

max patch


General Description

3 voice experimental waveshaping synth with its unique ability to change the transfer functions while playing! Transfer functions are generated or taken from arbitrary selected sample in form of grains or windows. Each voice can even have some of its own settings.

IRCAM’s FTM (Faster Than Music) add-on to Max is required in order for this synth to Work. Version 2.5 is included in Max patch package. For later versions see

ADSR – Volume Envelope

“Distortion index modulation frequency multiplier” is a factor with which the frequency of a pressed note is multiplied. The range for that modulation can be set by “Distortion index modulation range” (middle section of the interface).

Volume & Modulation Envelope

That envelope modulates the “distortion index modulation frequency” (beside volume). The highest frequency of modulation is set by “distortion index modulation range multiplier”. This is a factor with which the frequency of a pressed note is multiplied.


Choose a sample that will be granulated and used as a constantly changing transfer function. You can affect the transfer function by changing the playing speed.

The lower left window represents the window function. The lower right window represents the actual transfer function (normalized grain).

  1. Mattyo

    HI Tadej!

    Very interesting patch! I was looking into dynamically transforming waveshaping, and stumbled across your work. I don’t know if you’re following up on it these days, but I thought you should know that due to the usage of ftm.buffer having been changed (in a not-very-clearly documented way) the transfer function no longer works. It looks like ftm.buffer now only goes one way — from buffer~ to fmat — and thus the dynamic change no longer gets loaded into the waveshaping buffers. (you can see this clearly in the failure of Chris Dobrian’s tutorial example 04 to work.) I haven’t got time to go any more deeply into it right now, but if I come up with a solution, I’ll let you know.

  2. Mattyo

    A couple of things I can add:

    1. you need to create a regular [buffer~] with the same name as the ftm.buffer

    2. the message to fill a buffer~ is no longer ‘set’ but ‘paste 0

    3. seems to help to normalize it before pasting.

  3. Tadej Droljc
    Tadej Droljc04-24-2017

    Thanks a lot for your comment Mattyo! Yes I realised that the FTM stuff does not work any more but unfortunately I never had a time to dig into the problem. Your comment is hence very appreciated:)

Leave a Reply