A collection of MIDI filters in LV2 plugin format.

This documentation is still incomplete. Most of the notes collected here are also built-in into the plugins themselves, and not all plugins are covered here.

Many filters have an operation mode 'bypass', to allow enabling and disabling the processing of events. In bypass-mode, the filter acts like the passthru (null) filter.

Also most filters can be configured to operate on any MIDI channel or a specific channel (1-16) only. Events on not selected channels are passed through unmodified.


This filter simply forwards all MIDI events from input to output. It can be used as a template to program other custom filters.


One to One MIDI channel matrix


The channelmap filter allows to map any MIDI input channel (1-16) to any output channel (1-16) in a 1:1 way. Furthermore, channels can be masked out (off).

Possible use-cases: map a specific input channel to a different output channel. Create 'catch-all' by mapping input channels 1-16 to the same output channel, for instance channel 1. Process events on channel 7 only (discarding / stripping other input channels).


Chromatic Transpose


  • Filter Channel [0,16] – midi channels 1 - 16 to modify, 0 means any-channel.
  • Transpose [-64,64] – half-tone (midi-note) to add/subtract.


This filter will transpose incoming notes by the given amount up or down.

Possible use-case: arbitrary chromatic key changes


The mididup filter duplicates all events of the given source channel to a given channel. Possible use-case: duplicate all events from MIDI channel 1 to channel 2, drive two instruments (configured on channel 1 and 2) at the same time; instruments can still be addressed individually via channel 1 and 2 respectively.



The mididelay filter affects the temporal position of notes. As the name suggests, it can only delay (and not push backward in time) since it can not predict events that will arrive in the future. The BPM (beats per minute) setting defines the time-base for the other parameters. The 'delay beats (4/4)' parameter will offset/delay a note by the given amount of beats. A value of 0 will not delay any notes. The maximum delay is four bars (=4×4 beats). At 120 BPM, 4×4 beats are equal to 16 beats * 120 BPM / 60 seconds = 32 seconds. The third parameter is a randomize factor 0-1, that allows to randomize the temporal position within a span of maximum 1 beat (randomize factor=1). Possible use-cases: create a MIDI echo with a defined delay in beats. Randomize the temporal position of notes with a given factor to mimic a human player.



This filter will delay note-off messages by a given time (0-60 sec). See also notetoggle filter. Possible use-case: emulate a piano sostenuto pedal.


The enforcescale filter will enforce a musical scale (a set of allowed note pitches). The scale can be one of C Major, C# Major, D Major, D# Major, E Major, E# Major, F Major, F# Major, G Major, G# Major, A Major, A# Major or B Major. Note pitches that doesn't fit the scale can be either discarded or moved up or down to the nearest pitch in scale. Possible use-case: extract only notes that fit a specified scale. Enforce all notes to be played in a specified scale.


Toggle Notes: play a note to turn it on, play it again to turn it off.


  • Filter Channel [0,16] – midi channels 1 - 16 to process events, 0 means process events from any-channel.


Normally, pressing a key on a MIDI keyboard will send a note-on event (on a specific channel, at a specific pitch), and releasing the key will send note-off. With the notetoggle filter, pressing and releasing a key (note-on, note-off) will be interpreted as note-on (note keeps playing). The next note-on / note-off sequence (key pressed and released again) will yield a note-off on the output.

Use-cases: Building clusters. simulate a long key hold by just shortly hitting the key. For instance, trigger a sample, keep it playing and have hands free until sample needs to stop (hit key again).


The mapkeyscale filter allows to lower or increase note pitches by a given amount. For every pitch C, C#, D, D#, E, F, F#, G, G#, A, A# and B, a separate amount (-12 - +12 halftones) can be defined. Furthermore, notes of a specific pitch can be masked out (off). Use-cases: create a special musical scale (also see: enforcescale filter). Remove notes of a specified pitch. Flatten note pitches so they get monotonic (for instance, map all pitches to the same resulting pitch).


With the keyrange filter, a range defined by lowest and highest pitch of a note (0-127) can be used to let pass only the notes that fit the pitch range. The range can be inclusive or exclusive (inverted). Possible use-cases: get all notes with pitch values 90-100. Get all notes with pitches above value 100 (range 100-127). Get all notes with pitches below value 100 (range 0-99). Get only notes of pitch value=100 (range 100-100).


Another range filter is the velocityrange filter. A range defined by lowest and highest volume/velocity (0-127) can be used to let pass only the notes with a velocity that fit the range. The range can be inclusive or exclusive (inverted). Possible use-cases: get all notes with velocities 90-100. Get all notes with velocities above value 100 (range 100-127). Get all notes with velocity below value 100 (range 0-99). Get only notes with velocity of value=100 (range 100-100).


Radomize Note Velocity.


  • Filter Channel [0,16] – midi channels 1 - 16 to filter events, 0 means any-channel.
  • Velocity Randomization [0,127] – random number range to add/subtract from the velocity


This filter will modify the velocity in a random way. The amount of possible change is defined through a parameter (0-127), where 0 will leave the original velocity and 127 will add or subtract an amount between 0 and 127 to / from the original velocity value. The new value will never be less than 0 or greater than 127 (limited). Possible use-case: slightly change velocities of incoming notes in a random way so that the new velocities will not be greater or less than original value +/- the value of randomization parameter (for instance 10).


Like the randvelocity filter, the normrandvel filter will randomly change the velocity of incoming notes by a certain amount. In this instance, the amount is given by a standard deviation. Possible use-case: randomize velocity in a way that reflects a distribution of velocities around the original value with the given standard deviation. Chances that new velocities are close to the original value are greater with this filter than with the randvelocity filter because of the distribution of random values.


This filter has no controls. It simply blocks all active sensing events from passing through.

Active sensing messages are optional and intended to be sent repeatedly to tell a receiver that a connection is alive.

Use-case: remove active sensing messages before recording raw MIDI data


Change the velocity of note events with separate controls for Note-on and Note-off.


  • Note-on Min, Note-on Max [1,127] – The input range 1 - 127 is mapped to the range between Min and Max. If Min is greater than Max, the range is reversed.
  • Note-on Offset [-64,64] – value added to the velocity of Note-on events after mapping the Min/Max range.
  • Note-off Min, Note-off Max [0,127] – identical to Note-on Min, Note-on Max but for Note-off events which have a valid range of 0 - 127.
  • Note-off Offset [-64,64] – value added to the velocity of Note-off events after mapping above Min/Max range.

Deprecated Effects


Superseded by Velocityscale

oss/lv2/midifilter.txt · Last modified: 22.10.2013 14:59 by rgareus