Midimixfix Feature Overview

This is an unedited republication related to the Midimixfix project. It first appeared on the Lars' Electric Endeavors blog on larsee.dk

Lars, January 2018

The software in Midimixfix has now reached a level of maturity and functionality that makes it a very versatile and usable piece of equipment. Its about time I get to the alphabetic keyboard and describe what the box is capable of!

This post will serve as an introduction and an overview of the features in Midimixfix. I intend to keep the post updated when features are added or changed in the software.

In future posts I plan to zoom in on specific use cases of Midimixfix and provide more in depth information including video demonstrations.

Quick recap of Midimixfix

Midimixfix is a standalone MIDI processing unit with custom designed electronics and software, made by me as a hobby project:

Midimixfix in box

Features at a glance

  • Two MIDI inputs and one MIDI output.
  • Two pedal inputs assignable to MIDI controllers.
  • All inputs can have their MIDI channels filtered, reassigned, merged or individually processed very flexibly. MIDI messages can be modified and generated.
  • Midimixfix is independent of a PC. Configuration is done using the buttons and display.
  • Transformation of continuous MIDI message values based on configurable curves.
  • Splitting of polyphony into seperate monophonic MIDI channels for control of individual notes.
  • Aftertouch processing, smoothing and reassignment to other controllers.
  • Conditional processing based on triggers or keyboard split.
  • Analysis of MIDI data with the MIDI logger feature.
  • Save/Load of configuration presets. One preset is loaded at start up.
  • Software in Midimixfix can be upgraded using the USB connection.

Acquiring a Midimixfix

Getting your own Midimixfix involves some DIY work regarding assembly of the parts into a suitable box or enclosure. You won’t have to make the electronics though, as I offer Midimixfix kits including a tested electronics board, display, knobs, buttons, internal cables etc. Everything except the box and the USB power supply is in the kit. Drop me an email if interested.


What are Midimixfix filters?

In the Midimixfix software all processing is done by filters. A filter may consume, modify and produce MIDI messages and has a set of configuration parameters. To achieve the desired processing, the user must set up various filters in a sequence: the processing chain. The same type of filter can (with few exceptions) be in the chain multiple times with individual configuration parameters.

As a very basic example, here is a MidiMixFix configuration that merges data from MIDI In 1 and MIDI In 2, transposes keys 12 semitones and sends it all out:

MIDI In1         >1
MIDI In2         >1
Transpose       1>1
 Semitones : 12
MIDI Out        1>
 Runn. status : On

Filter routes

To enable different paths through the processing chain, Midimixfix uses a concept named routes. These are not to be confused with MIDI channels. All filters are assigned routes to consume MIDI messages from and routes to output them to. There are 9 routes, numbered from 1 to 9 and its possible to use “A” for all routes and “X” for routing something to trash. The notation “1>2″ means to listen on route 1 and output on route 2, unless the filter decides to leave the message alone letting it stay on route 1.

Lets explain by a few examples. Say we want transpose data from MIDI In 1, but not from MIDI In 2, while still merging the two MIDI inputs:

MIDI In1         >1
MIDI In2         >2
Transpose       1>1
 Semitones : 12
MIDI Out        A>
 Runn. status : On

Now MIDI In2 places it’s messages on route 2 and the transpose filter only works on messages on route 1, so it won’t touch stuff on route 2. To have it all come out of the box, the MIDI Out filter is configured to take messages from all routes: “A”.

Now, lets say we also want to get rid of the data on MIDI channel 2. This can be done with a “Filtered route” filter:

MIDI In1         >1
MIDI In2         >2
Filtered route  A>X
 Type : Chan 2
Transpose       1>1
 Semitones : 12
MIDI Out        A>
 Runn. status : On

Here, the “Filtered route” is configured to deal with messages from all routes “A” and to send the messages passing the filter to “X” which will discard them. MIDI Channel 2 goes away.

By reconfiguring the routes, a totally different behaviour can be achieved with the same filters, for example:

MIDI In1         >1
MIDI In2         >1
Filtered route  1>2
 Type : Chan 2
Transpose       2>2
 Semitones : 12
MIDI Out        A>
 Runn. status : On

What happens now? Instead of discarding MIDI channel 2, it’s moved to another route that the Transpose filter is set to work on, such that we get a processing chain that only transposes MIDI Channel 2.

List of filters

Now, with a basic understanding of the filter and route concepts, lets go through the available filters in Midimixfix:

Regular MIDI messages from Input 1
Regular MIDI messages from Input 2
MIDI In1 Realt
Realtime MIDI messages from Input 1
MIDI In2 Realt
Realtime MIDI messages from Input 2
Pedal 1
Generation of MIDI messages from Pedal 1 input

CC: MIDI continuous controller type to generate
Gain: Gain when sampling the pedal resistance. Select “DIGITAL” for only 0 and 127 value output.
Offset: Offset when sampling pedal resistance
Invert: Select “On” to invert the value
Pedal 2
Generation of MIDI messages from Pedal 2 input, similar to Pedal 1
Batch sender
Configurable transmission of a number of MIDI messages. Can send reset messages like: All-Notes-Off and Reset-Controllers, patch selection messages including bank select and variation, and continuous controllers like Volume, Pan, Brightness.

The filter can be configured to send on load of the Preset, or only when activated in the configuration menu.
Generate msg
Configurable transmission of one specific MIDI message. This filter has more options regarding the message and when to send it compared to the Batch sender filter.

For example, its possible to send a message like Pitch-Wheel = 0 right before Note-On messages.
Filtered route
Reroutes a class of MIDI messages. This filter can be used to get rid of a certain type of messages, or route them to alternate processing routes.

Type: Select between: All, Channel 1 through 16, Note-Off, Note-On, Key-AfterTouch, Program change, Channel AfterTouch, Pitch-Wheel, and any specific continuous controller.
Similar to Filtered route filter, although this filter will not reroute the message, but create a copy of the message on the alternate route.
Key split route
Reroute Note-On, Note-Off and Key-Aftertouch messages to another route based on key. This can be used to split the keyboard into different routes of processing.

From key: Messages on this key, example “C0″ and higher are rerouted.
Dupl.other: If “On”, all non-key related messages, such as continuous controllers, are duplicated on the alternate route. This is handy for making eg. a sustain pedal work on both parts of a keyboard split. If “Off”, no duplication happens.
Cond. route
Conditional reroute of messages. Based on a continuous controller, either reroute or not. This can be used to have a foot pedal switch between routes of processing.

On: Select the continuous controller to control the rerouting, example: “FootCtl”
Mode: If “When > 64″, the rerouting happens when the controller is received with a value > 64. If “Toggle”, the filter toggles between rerouting and not whenever the controller is received. If “Toggle > 64″, the filter toggles when the controller is received with a value > 64.
Modify chan
Change the channel of all channel mode MIDI messages.
Modify CC type
Change from one type of MIDI continous controller message to another. Change is possible between continuous controllers as well as Key aftertouch, Channel aftertouch and Program change messages. For example, Channel Aftertouch could be changed to Modulation messages.
Curve filter
Apply a linear or non-linear transformation of the value in a class of MIDI messages.

On: The class of messages to transform. Select between: N.On, N.On black keys, N.On white keys, N.Off, Key aftertouch, Channel aftertouch, or any continuous controller
Low: Output value for input value = 0
High: Output value for input value = 127
Curve: Select between: Linear, gamma: 0.6, 0.8, 1.2, 1.6, S shape and N shape curves.
CC to velocity
Let a certain continuous controller be used to set the velocity of following Note-On messages. For example, if modulation is used in this filter, the modulation wheel position will directly set velocity of the notes played.
Transpose Note-On, Note-Off and Key-Aftertouch messages a number of semitones.
Polyphon. split
Split polyphonic input into a range of monophonic MIDI channels. Eg. playing a chord will result in each note being sent to individual channels. The polyphonic Key-Aftertouch messages are converted to Channel Aftertouch messages for the individual channels in the process.

Ch.range from: First MIDI channel in the range of channels to use
Ch.range to: Last MIDI channel
Broadcast CC.: If “Yes”, incoming continuous controllers are sent to every channel in the range. If “No”, incoming continuous controllers are only sent to the latest actively played channel.
Bcst. Prog chg.: Similar to above regarding program change messages.
Bcst. P.Wheel.: Similar to above regarding pitch wheel messages.
Bcst. Chan.AT.: Similar to above regarding incoming Channel Aftertouch messages.
AT. smoothing
Aftertouch smoothing and assignment to a continuous controller is possible. This filter deals with Channel-Aftertouch messages and implements rate limiting and various features to enable many alternate uses of aftertouch. The filtering is performed individually on each MIDI channel, making it suitable for use after the Polyphonic split filter.

Start: The value to start the filter on when hitting a key. Select “N.On” to start with Note-On velocity or select a value between 0 and 127.

FadeIn: How fast does the value increase. High number means fast fade in.
FadeOut: How fast does the value decrease. High number means fast fade out.
Output: Select “ChanAT” or a continuous controller to use as filter output.
Obligatory filter in the end of the processing chain, responsible for actually sending the messages out of Midimixfix.

Runn. status: Select “On” to send MIDI messages with running status. This means legally omitting the MIDI status byte if the previous message had the same status byte, compressing the MIDI data stream a little bit. Use “Off” if the connected MIDI equipment can’t handle running status.

Change log

  • 2014-05-18: First edition of post describing software v1.02.


Comments powered by Talkyard