MIDI Control Change Tools
(Jump to downloads)
I started this project with the hope of creating a way to make MIDI controllers easily interact with lights, fog machines, bubble machines, and all kinds of other devices. Essentially if you want to create a Rube Goldberg machine with MIDI this might be the right software for you!
This utility allows you to work with MIDI control change and note on/off messages from your controller (sliders, keys, pads and knobs), and associate unconventional rules with them.
Game controllers supported by jInput are also available as input sources, and every button and analog input is remapped to a MIDI CC.
This program is built with a focus on "short" messages, however it is a full functional MIDI Router as well when using the "Port Mappings" feature.
Tutorials
Features
- Fully functional MIDI router (create virtual connections between midi devices)
- JACK Midi Support
- Plugin support for controlling popular hardware via MIDI (Philips Hue Plugin available)
- All OS compatable game controllers (Xbox Controller, 8Bitdo, etc) recognized as MIDI inputs
- RTP MIDI support for use with Apple's network MIDI implementation including browsing for connections
- Detailed MIDI logging for troubleshooting issues with MIDI devices
- Media Canvas feature lets you create audio/visual content triggered by MIDI messages
- Mobile friendly remote control interface
How do I use it?
On the left hand side of the interface you will see a list labeled "MIDI Devices" this will show all detected
MIDI Hardware and Game Controllers (as detected by jInput).
- >> Input only device MIDI Tools can read from this device
- << Output only device MIDI Tools can write to this device
- <> Bidirectional device, MIDI Tools can read and write to this device
By Checking a device you are opening a connection to that device. Allowing MIDI Tools to interact with it. All messages from that device can trigger rules defined in the rules tab
In the main part of the interface you will see 4 tabs, "Midi Controls", "Control Change Rules", "Port Mappings", "Logger A", and "Randomizer"
|
Midi Controls This tab will display a list of all the Control Change inputs you are working with, if you are unsure
of the mapping of your controlers knobs and inputs, select "Create Control on MIDI input" under the options menu. Once
this option is selected any input from the controller will create a Control entry in the list. |
|
Control Change Rules Actions to be performed when certain conditions are met, see "creating a rule" below |
|
Port Mappings This allows you to create virtual mappings between MIDI ports, think of it like a patchbay.
You can even use this to connect a game controller directly to a MIDI output (assuming you dont want to modify the messages) |
|
Logger A This is one of two logger output panels for displaying messages or debugging your rules. |
|
Randomizer This allows you to configure the randomizer midi device to produce randomized control change messages. (This tab is only availabe when the device is enabled) |
|
Project Assets This allows you to Import resources such as images and sounds for use with your project. Upon saving these files will be stored inside your project file. |
|
RTP 0.0.0.0 This allows you to control RTP connections for Apple's network MIDI protocol, a tab will appear when the RTP device is opened. |
Creating a rule
"Rules" are a way to trigger an action under certain types of MIDI input. For instance if you would like to trigger a sound, run a script or call an API when the mod wheel is moved or any knobs are adjusted.
In order to create a rule right-click or double click on the control listed in the "MIDI Controls" tab, then click "create rule"
- Rule Name - This is just a label for the rule
- Rule Group - A group identifier for this rule, can be used to toggle rules by group
- Select Control - Midi Control to listen for events on (A control represents a channel and cc#)
- Modifiers
- Value Inverted - reverse the value from 0-127 to 127-0
- Value Settled - Wait for the value to finish changing before triggering the rule
- Select Event - When should this rule trigger?
- onChange - Whenever there is a change in value, best option if you are looking to detect any change in the slider or knob
- onChangedIncrease - whenever the value goes higher then the previous value
- onChangedDecrease - whenever the value goes lower then the previous value
- onChangedHigh (64+) - whenever the value changes above the middle of its range in the upperbound direction
- onChangedLow (63-) - whenever the value changes above the middle of its range in the lowerbound direction
- onEnteredHigh (64+) - whenever the value changes and passes the middle of its range in the upperbound direction
- onEnteredLow (63-) - whenever the value changes and passes the middle of its range in the lowerbound direction
- onEnteredHighOrLow - whenever the value changes and passes the middle of its range in the either direction
- onChangeBottomThird (0-42) - whenever the value changes below 42
- onChangeMiddleThird (43-85) - whenever the value changes above 42 below 86
- onChangeTopThird (86-127) - whenever the value changes above 85
- onEnteredBottomThird (0-42) - whenever the value enteres a range below 42
- onEnteredMiddleThird (43-85) - whenever the value enteres a range above 42 below 86
- onEnteredTopThird (86-127) - whenever the value enteres a range above 85
- Action Type - What Kind of action do you want to take?
- CALL URL - Make a request to a URL (response is ignored)
Action Type: specify a url http://www.domain.com/program.php?v={{value}}
- RUN PROGRAM - Execute a program or shell script
Action Type: specify a program c:\program.exe,{{value}} (value will be passed as first parameter)
- PLAY SOUND - Play a wav file
Action Type: you may specify a url or local path to a wav file
- PLUGIN - Send message to a plugin
Action Type: Select an installed plugin to handle the rule
- TRANSMIT CONTROL CHANGE - Send a control change Message
Action Type: Device Name,channel#,cc#,{{value}}
- ENABLE RULE GROUP - Enable a group of rules
Action Type: groupname
- DISABLE RULE GROUP - Disable a group of rules
Action Type: groupname
- TOGGLE RULE GROUP - Toggle a group of rules, if the value >= 64 the group is enabled otherwise its disabled.
Action Type: groupname
- LOGGER A MESSAGE - Add some text to Logger A
Action Type: message to display in log
- LOGGER B MESSAGE - Add some text to Logger B
Action Type: message to display in log
- EFFECT IMAGE - Change the effects on an image and brings it visible on the canvas
Action Type: image to effect and the effect you want, you can also set the way the image fills the canvas and its layer
- MAPPING ENABLE - Enable a Port Mapping
Action Type: Port Mapping to enable
- MAPPING DISABLE - Disable a Port Mapping
Action Type: Port Mapping to disable
- MAPPING TOGGLE - Toggle a Port Mapping, if the value >= 64 the mapping is enabled otherwise its disabled.
Action Type: Port Mapping to toggle
- Target Canvas - Specify the canvas this action should take place, this applies to PLAY SOUND and SHOW IMAGE. Canvas names can be made up on the fly!
- Action Value - Specify the parameters to an Action Type (variables supported below, these will be replaced at the rule's runtime)
- {{value}} - The value of the MIDI Event (0-127)
- {{value.inv}} - The inverted value of the MIDI Event (127-0)
- {{value.old}} - The value previously held by the midi control before the event
- {{value.old.inv}} - The inverted value previously held by the midi control
- {{value.change}} - The amount the controls value has changed (-127 to +127)
- {{value.map(min,max)}} - Remaps the 0-127 value to a new range specified by min/max think of it like the arduino map function
- {{cc}} - Control change number of the event.
- {{note}} - Note # that was triggered.
- {{note.name}} - Name of triggered note
- {{channel}} - Channel number of the event.
Once you've set all the parameters for your rule. Just click "Create Rule" you can go back and edit a rule at
any time just by clicking on it (rules are listed at the bottom of the interface)
Github Project
If you are feeling generous and would like to support this project
Latest Update: October 06 2023 12:55:28 PM EDT
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.