openstatic.org

openstatic.org

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)
  • 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
  • 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
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.

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#)
  • 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
    • onSettled - When the value has settled for at least 500ms
    • onHigh (64+) - whenever the value passes the middle of its range in the upperbound direction
    • onLow (63-) - whenever the value passes the middle of its range in the lowerbound direction
    • onIncrease - whenever the value increases
    • onDecrease - whenever the value decreases
    • onSettledIncrease - whenever the value settles higher then the previous value
    • onSettledDecrease - whenever the value settles lower then the previous value
  • 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
      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
    • SHOW IMAGE - Display an image on the Canvas
      Action Type: image to display on canvas
  • 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



Downloads

Latest Update: September 17 2022 11:30:26 AM 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.