Sound FX modules

In this tutorial we will add an audio effect module offering a simple stereo echo with feedback, filtering and limiting. At the same time we will start looking into some of the features that are common to many or all Jamoma modules. But we will start of with some useful shortcuts.

Shortcuts in Jamoma

We will start of with much the same patch that we ended up with in the previous tutorial, containing an audio input and output module so that we can get sound into and out of the patch. Instead of just continue using the same patch, we’ll start out with a fresh blank patcher window, as this gives us an excuse to introduce a few useful shortcuts.

The input and output modules are used often, so Jamoma adds two shortcuts to the Max environment for creating them.

The Shortcuts_in_Jamoma lists all available key combinations in Jamoma.

Naming instances

We didn’t really get to give these modules a name, did we? If we forget to provide names, Jamoma will try to help us out. So you’ll see from the toolbar of the modules that the two modules have been named input~ and output~ respectively.

Jamoma wants each module to have a unique name, so if we now try making yet another input module by typing SHIFT + I again, the new module will be given the name input~.1. The .1, .2, etc. is a convention often used in Jamoma to distinguish different instances of the same module. Later on we will se how this convention can be used to selectively address one or all instances of a particular module.

For now we only need one instance of the jmod.input~ module, so let’s delete the second copy that we created.

Create modules by SHIFT + B

If all Jamoma module types should have their own shortcut, it would quickly become difficult to remember. In general, when creating a new module, we need to say what kind of module we want, and what name we want to give it. Doing so using the bpatcher inspector can be tedious, so the last shortcut we will introduce for now is SHIFT + B.

This creates a new object box with most of the information filled in for us:

none set

All we need to provide info on now is:

And yes, it is a bit confusing that we set the name with the @args attribute and the type with the @name attribute. But these are attributes passed to bpatcher, not the module itself, so we have to adhere to the attribute namespace that bpatcher have. Hence @name is the name of the patch that we want to load as a subpatcher, while @args are the arguments we want to pass to that patch.

We want to load the jmod.echo~~ module, and give it the name echo~, so we will type in bpacther @args myecho~ @name jmod.echo~.

That is enough shortcuts for now. If you want the full overview of what shortcuts are supported in Jamoma, you can find it here.

Getting to know the echo~ audio effect module

Setting up the patch

Lets connect the echo module to an input and output module. If you connected them correctly you should have something like this in your patch. Remember that the leftmost inlet and outlet are reserved for control messages and the rightmost inlets and outlets are reserved for audio signals.

Turn on the audio, choose a source of audio and press play. Also bring up the levels of the input and output modules so that we can start exploring the echo module.

none set

Some common module features

As you can see the echo module has some dials and buttons in its upper rightmost corner. These are common to many of the audio processing modules, and provides a standardised interface to some features that you will often want audio effects to have.

If you want to apply the Jamoma MIDI range elsewhere in your patches and modules, the external jcom.dataspace can be used for mappings between linear, decibel and midi representations of gain levels. Set @dataspace to gain, and choose the @input and @output attributes appropriate for what you want to do. Please refer to the help file for jcom.dataspace for further details.

Parameters particular to the echo effect

The main part of the echo~ GUI is reserved for the parameters that are particular to the effect. Here we are able to:

Please play around with the parameters and listen to the result.

Under the hood

The module combines delays, feedback and filters, and this might sound like an invitation for the audio to blow up. Still, if you play around and try applying some extreme settings (e.g. a high gain level for the filter while feedback equals 1.0), the effect still behaves. How come? What is actually going on inside the module.

The audio effect processing and MSP nitty-gritty patching stuff is hidden from the user interface, but if we want to, it is still possible to peek inside the module to see what is going on. In the upper left corner of the module there is a small button containing an arrow pointing down. If you click and hold this button, a pop-up menu will appear:

none set

From the pop-up-menu you might now choose View Internal Components. A new window opens, showing the subpatch of the module where most of the audio processing is taking place:

none set

From this you might see that the audio processing of this module consists of a pair of tapin~ / tapout~ objects providing the delays, standard biquad~ filters and a limiter using the Jamoma external jcom.limiter~. The output of the limiter is passed on and out of the module.

In addition the output from the limiter is passed on to two *~ objects controlling the level of the feedback and through a matrix~ so that left and right channels might be swapped, before being passed back up to tapin~.

The subpatch do not show how the overall gain, dry/wet mix, bypassing, muting or metering is taken care of. This we will look into in a later tutorial, as we start to build our own modules.

Some other audio FX modules

Now might be a good time to test out some of the other audio effect modules that Jamoma has to offer. Here are some to get you going:

Summary

What’s next?

For the next tutorial we are going to take a look at how to communicate with the module.

Download

Here you can download the patch used for this tutorial (right-click and save).

comments powered by Disqus