20200820_Dynamic_Impacts

Patch Anatomy #4 – Impacts!

KevinDoran

In this Patch Anatomy, we are going to look at creating a dynamically performable impact SFX generator. By using the velocity of a Meta Parameter slider and a few logic modules, we can simulate the effect of door or drawer slamming!

Sound Generation

The Clang module is ideal for generating rich, multi-layered impact sounds. It also conveniently has an “impact” input, which can be used to drive a range of impact intensities. This module is placed front-and-center, with its output fed into a Saturator to add punch and character, finally being processed through a Cabinet. With subtle settings, the Cabinet processor adds a metallic shimmer and makes it resonate as if emanating from within a physical object. The resultant effect is a highly responsive impact generator that bellows and booms convincingly at high intensities.

Impact-1

To ensure this patch is continuously listening for input, an infinitely running Noise generator is placed into the signal chain via a Mixer, with a Gain value of -∞. This inclusion won’t produce any sound but will force the patch to run until manually stopped.

Velocity Curve

Next, the patch needs some meaningful interactive control. This control can be achieved by using a linear Meta Parameter in conjunction with the Derivates module. With this setup, sliding the Meta Parameter faster or slower will approximate the result of more or less force being applied. Plugging the output into a Biquad Filter with low settings will help to smooth the values out, producing a more usable signal. This final control signal can then be checked using the signal analyzer to determine if it is scaling and smoothing correctly. If the signal is too quiet, the Scaling value of the Derivatives module can be increased. If it is too chaotic, lower Cuttoff and Resonance values on the Biquad Filter can be used.

Impact-2

Logic

The truly exciting part of this patch comes from its logical control. By checking if the slider is to the right, playback only triggers at a discrete point, with the process of getting it to that point, mimicking the interaction of slamming one object into another. This logic is easily achieved by using a Comparator to check if the Meta Parameter is greater than 0.99. We can’t always be sure that the max value will be precisely 1 since the slider produces a floating-point value, so this will be a safe approximation.

Then, some additional logic ensures that the sound is triggered only once, and only when the slider is on the way up. This state is determined by subtracting a delayed version of the signal from the real-time signal and checking if it is greater than 0 (i.e., a positive number). A fortunate side effect of this approach is that the sound will also not be triggered if there has been no change in velocity. It is also worth setting the Clang’s Polyphony to 1, to ensure several sounds aren’t triggered in quick succession.

Both logical statements are checked simultaneously using an AND type Logic Gate and applied to the trigger input of the Clang module. The impact input is reading continuously from the Derivates/BiQuad Filter output so that the appropriate value is set right up to the point of playback.

Impact-3

The end product is a patch that can be performed and tested in an intuitive and contextualized way. Of course, the Clang module could easily be swapped out with any other sound generators, and the incoming velocity data could control any number of inputs. A rough way to emulate this effect for other generators could be to control the saturation input of a Saturator. If the effect is too extreme, a Mapper could be used to define a custom gradient. The possibilities truly are endless!

GameSynth