MidiMod - the modular sequencer


MidiMod - Index

Contents

Preface

Module descriptions

Some examples



Preface

About what the MidiMod program is and about what it is not.

The MidiMod program is - as indicated by the Midi part of it's name- a Midi processing and generating program. So it is not an audio processing or audio generating program. The Mod in the program's name refers to modular, so here it is : MidiMod is for Midi what a modular synthesizer would be for audio. For that reason I would like to call this program a modular sequencer.

So what would that be, a modular sequencer. Presumably it would have modules, and it would have a means to connect modules into some kind of processing device. Being a MIDI oriented program it would need modules for MIDI input and for MIDI output. It would have generators and it would have some means for data processing. And indeed MidiMod does have modules for all those sorts of tasks, and a user can connect such modules to create a customized Midi processing engine.
 
 

Some explanation about the module details

So lets take a closer look, the following image is what the MidiOut module looks like.

You can see the modules type in the upper left corner. Then there is a black knob, which in this case is used to select a MIDI channel. The black rectangle with the white border indicates that currently channel 1 is selected. By clicking on the black knob and than moving your mouse in circles, around the knob, you can select one of the 16 channels that are available. Then we have the yellow and blue circle like shapes. These are connectors, all inputs in this case. The small rectangular shape above the Gate input is an indicator, whenever there is signal activity detected on the Gate input it will light up in green. The leftmost button will be explained later.

All the knobs have a working range of 270 degrees, this working range maps onto the range of values that is controlled by the knob. For a Midi channel selector the controlled range of values is 1 up to 16. A more normal range would be from 0 up to 1000, or from -1000 through 0 up to 1000.

Another example, the MidiIn module

As you see, this looks almost the same as the MidiOut module. The main difference being the connectors that are square now. Squared connectors are outputs. In this case, when you play a note on your keyboard the Note output will have the value of the key you pressed, the Gate output will be active as long as you keep the key pressed etc.

So outputs are square and inputs are round, but the colors of the connectors do have a meaning too.

In this manual I will use the default colors, as they were when you first installed the program. The actual colors can be changed through a menu setting.

Ok now we are ready to do something with the modules, take a look at the following circuit:

All the outputs of the MidiIn module are connected to the corresponding inputs on the MidiOut module. Now when you play a note on your keyboard (that must be on MIDI channel 1) the note is sent directly to the MidiOut module which will then send it to the MIDI output of your computer. It will be exactly the same note, but now it will be on MIDI channel 2.

There are more examples of how to use the various modules, see the section Some examples.
 

Some notes about connections

It is possible to connect multiple outputs to one input, as in the following illustration

When multiple outputs are connected to the same input the signals will be summed to yield the final input value. It is also possible to chain signals from one input to another, as long as that input is somehow connected to an output.
 

Some notes about the generators

The following image is what the Sine module looks like

Here we have some extra details not discussed before. Below the word 'Sine' you can see a button. All generators have such a button and with this particular button you can turn the generator on or off. In the position shown the generator is turned on.

Then there is another button below de text 'ms' just right of the central black knob. When you click this button you select a different range for the generator. Within a range you can change the generators period time by turning the central knob. The ranges are 60 ms - 4500 ms, 2 s - 150 s and 1 m - 250 m. Where ms stands for milliseconds, s for seconds and m for minutes.

Then there is a third button, it's in the upper right corner. With this button you can switch the output between symmetric mode (red output) and asymmetric mode (blue output). In the image above the output is in symmetric mode. The output's color will change to reflect it's setting.

All generators have inputs for frequency modulation (fm) and for amplitude modulation (am).

All unclocked generators have a snc input. Snc is short for Sync. When an input signal that is applied to the snc input makes a low to high transition the generator will restart its oscillation period.

Clocked generators do not have the snc input, they have a clock input (clk) instead. See the image below.


 

The range selector now selects the ranges e0 (1 - 250 steps in a full period), e2 (100 - 25,000 steps) and e4 (10,000 - 2,500,000 steps).

The left knob selects the number of clock transitions needed to proceed one step further in the wave generation process, or the divisor value.

It is possible to make extremely low frequency signals, the drawback is that for low settings of the divisor value the output wave form will be very inaccurate.


Module Descriptions

The modules are divided into categories the following way



Amplifier

The amplifier module will amplify the signal from the input by an amount that is set by the right knob. A clipping level can be applied by the central knob. The clipping level is modulated by the signal on the clip input.

The amplification factor can be set from -10000 to +10000. A factor of 1000 corresponds to an amplification factor of 1.

The clip level can be set from 1 to 1000, or it can be turned off.

Page top



BendIn

The BendIn module responds to MIDI pitch bend messages. The MIDI channel can be selected by the left knob. The sensitivity is controlled by the right knob.

A sensitivity value of 1000 will map a MIDI bend value of 16383 to an output value of 1000, a MIDI bend value of 8192 corresponds to an output value of 0 and a MIDI bend value of 0 will then result in an output value of -1000.

Page top



BendOut

The BendOut module transmits MIDI pitch bend messages on the channel that is selected by the left knob. The amount of pitch bend that is transmitted for a certain input signal is controlled by the right (sensitivity) knob. The midi channel can also be selected by applying a signal to the ch input. A signal present on the sense input
will modulate the sensitivity.

When the sensitivity value is 1000 an input value of 1000 will give the maximum MIDI bend value of 16383. An input value of 0 will give a MIDI bend value of 9192 and when the input value is -1000 the MIDI bend value will be 0.

Page top



ClRandom

Also see the generator notes.

This is the clocked version of the Random module.

Page top



ClRndPulse

Also see the generator notes.

This is the clocked version of the RndPulse module.

Page top



ClSaw

Also see the generator notes.

This is the clocked version of the Saw module.

Page top



ClSine

Also see the generator notes.

This is the clocked version of the Sine module.

Page top



ClSquare

Also see the generator notes.

This is the clocked version of the Square module.

Page top



Constant

The Constant module has an output value that can be set from -1000 trough 0 up to +1000.

Page top



ControlIn

This module accepts MIDI Control Change messages on the selected channel and for the selected controller. The incoming MIDI controller value is multiplied by 8 before it is set as the output value.

Page top



ControlOut

The input signal is first divided by 8, then it is sent as the value in a MIDI Control Change message for the selected controller and the selected channel. The ch input can be used to select the MIDI channel programmatically, the ctr input likewise for the MIDI Controller to use.

Page top



Divider

This is an analog divider module. The output value will be set to input value 1 divided by input value 2. When input value 2 is zero it is set to one before the division is performed. Scaling is performed such that an output value of 1000 will be set when both inputs are at a level of 1000. the output level can be attenuated by the knob.

Page top



DividerFix

A fixed frequency divider. From left to right the first output divides the incoming signal by 2, each next output represents a further division by 2. The last output has the input signal frequency divided by a factor of 2048.

Page top



FreqDivide

A variable frequency divider. The incoming frequency can be divided by a factor of 2 up to 256. The snc input will reset the divider when a low to high transition occurs.

Page top



MidiIn

This module will respond to MIDI note on and note off messages. When a note becomes active on the selected channel the Gate output will become active, the Note output will have the note value multiplied by 8 and the Velocity output (vel) will have the velocity value multiplied by 8.

When that same note note is later released, the Gate output will go inactive, the Note output will stay the same and the Release velocity multiplied by 8 will be set on the Rel vel output.

Page top



MidiOut

This module will send MIDI note on and note off messages for the selected channel. Depending on the button being down or up the output can behave in two different ways
.
Button down : When the gate becomes active or when the Note input value changes a MIDI note on event is sent with a note value that is equal to the value on the Note input divided by 8, a velocity value that is equal to the value on the Vel input divided by 8. A note off message is transmitted when the Gate input goes inactive or when the Note input changes value. For note off messages the Rel vel input's value divided by 8 will be used for the release velocity.

Button up : Almost the same as above, only a new not will only be sent when the gate goes from inactive to active. A note off will only be sent when the gate goes from active to inactive.

Page top



Multiplier

An analog multiplier module. The output value will be the value present on input 1 multiplied by the value present on input 2. Scaling is applied such that 1000 * 1000 results in an output value of 1000. The output level can be set by the knob.

Page top



Morph

A morphing module, or a multi 2 to 1 mixer. There are two rows of inputs and there is one row of outputs. Then there is the control input, that is the right most input in the second row. When the control input has an input value of -1000 all inputs from the top row will be directly connected to the outputs, the input values on the second row of inputs do nothing in this case. The situation is reversed for a control input value of +1000 - now all inputs from the second row are connected to the outputs. The magic happens when the control input has an intermediate value, in such a case a mix of the two rows of inputs will be present on the outputs. So the control input can fade from the first set of input values to the second set of input values.

Page top



Neuron

The Neuron is a sort of clipping mixer. The input signals are multiplied by a weight factor that can be set by the corresponding knob, then the signals are summed, then they are clipped and the result will be used as the output value. The clipping mode is controlled by the push button just to the right of the word mix. It can be set to unclipped (mix), clipped (clip) or to clipping using the sigmoid function (neur). In sigmoid mode the the small knob right of the push button controls the the slope of the sigmoid function. In normal clipping mode the clip level is controlled by the knob. In mix mode the knob does nothing.

The ctr input is used to alter the weights that are applied to the input signals in the following way : A positive signal on de Ctr input will strengthen positive weights by some random amount and it will weaken negative weights by some random amount. A negative Vtr signal will work the other way around, strengthening negative weights, weakening positive weights.

The Ctr output will be proportional to the Ctr input and to the current output value (CtrIn * OutValue / 1000 to be precise).

The sigmoid function is defined as : out = 1/(1+exp(-sum/param)).

 This implements the standard neuron sigmoid function with a controllable steepness. The lower the parameter is set the more the sigmoid will look like the Heaviside step function. Typically the parameter knob should be turned open for 20% to 50%. The  value of param is settable from 1 to 1000 by the extra (unlabeled) knob. This range also applies in clip mode.

The weight's values range from -1000 up to +1000, corresponding to leftmost and rightmost knob positions respectively.
 

Page top



Random

A random generator. Each oscillation period a new random signal will be set on the output. The amplitude can be set by the right knob.

Also see the generator notes.
 

Page top



RndPulse

A random pulse generator. This generator will generate pulses with a random duration. the output value can be set by the right knob.

Also see the generator notes.
 

Page top



Saw

A saw tooth generator, the output volume can be set by the right knob.

Also see the generator notes.
 

Page top



Scope

A very basic oscilloscope. The time base is set fixed to 1280 ms / division, the input sensitivity can be set from 0 to 10000. A setting of 10000 corresponds with amplification by a factor of 10.

The time base is started with a low to high transition on the (yellow) sync input. The signal to monitor is connected to the (red) signal input.

This module can give some debugging assistance.

Page top



Sine

Also see the generator notes.

A sine wave generator, the output amplitude can be set by the right knob.

Page top



Square

Also see the generator notes.

A square wave generator, the output amplitude can be set by the right knob. The pulse width can be set by the middle knob (from 1% to 99%). The pulse width can be modulated with the pw input.

Page top



Table


 

The table module can be seen a generalized sequencer module.

When the start value is 0 and the input value is 0 - 7 the knobs 1 - 8 will be switched to the output. Other input values will result in a zero value on the output.

When an (asymmetric) Saw shaped signal (with an amplitude of 8) is applied on the input the module will step through all of its steps in sequence. The start value can be used to specify an offset value for the sequencing starting point. This way table modules can be chained. You set the first module in the chain to a start value of 0, the second one would get a start value of 8 etc. For each module added to the chain you would raise the amplitude of the input signal by 8 steps.

When however you were to apply a sine shaped input signal, the sequencer would step forwards first, then backwards.

The Chain output is just for convenience, it has a copy of the input value.

The small button in the upper right corner switches the display mode between values and notes.

Page top



Some examples

PadRand - a patch randomizer used for the Clavia Nord Modular synthesizer.

This patch generates random values for the controllers 0 - 119. It does so for random midi channels in the range 1 - 4. Then it plays random notes to a randomly selected midi channel (1 - 4 again). And when the user plays a note on midi channel 1 it will end up as a note on a randomly selected (1 - 4) midi channel.

Setups like this can be useful for the Nord Modular sequencer as it is possible this way to parameterize patch settings that can't be parameterized in another way. This would apply to the following Nord Modular modules :
 



Morph-use, an example of how to use the morph module

There is a left set of input constants and a right set of input constants. The morph module mixes the two sets under control of a sine wave generator. The sine wave generator is frequency modulated by two further sine waves. The outputs of the morph module are connected to a set of ControlOut modules that each control their own Midi controller. This patch gradually changes the values of the Midi controllers from the left set of input constants into the values of the right set of input constants etc.


A table example.


 

I use this patch to tune the delay lines of the Clavia Nord Modular synthesizer over a range of two octaves (the keyboard range). When a note is played it is sent to the output, except for the note value. The note value is first attenuated and shifted, then it is sent into two sets of parallel tables, one for fine and one for coarse tuning. The tables translate the input signal into values to be used for controllers 15 and 16. These controllers control the delay time to be used in the synthesizer patch (the fine tuning signal is further attenuated in the synthesizer patch, to make better use of the limited Midi CC value range). Sound engines based upon delay lines can be played this way in a two octave range, this range can be extended by using more table modules.

The scope module is used to monitor the keyboard on velocity.


A sequencer example.

Just a silly sequence of notes, played up and down.

Page top