Connecting a MIDI Controller
Posted: 12 Apr 2012 20:51
To control e.g. the ProppFrexx ONAIR mixer-channel faders from a MIDI-Control-Device you need to enable and configure a so called MIDI-Mapping.
This can be done in the general settings dialog (F3) in the section 'GPIO/Remoting'.
First enable the checkbox 'MIDI Control Enabled' and select the propper MIDI Input Device.
Then you need to translate the incomming MIDI-Messages to appropriate ProppFrexx control-command(s) - which can be done via the MIDI Mapping (click on the flash arrow icon next to the mapping file name to invoke the MIDI Message Mapping dialog).
In the MIDI Message Mapping dialog you can now translate any MIDI ShortMessage into any ProppFrexx control-command.
Meaning when a certain MIDI ShortMessage arrives it will trigger the execution of the given ProppFrexx control-command.
A complete listing of all available control-commands can be found in the appendix of the User Manual.
Some general information about using control-commands can be found: here!
So you need to know what MIDI ShortMessages are send by your external MIDI device.
A MIDI ShortMessage is composed out of three parts (bytes):
- a status byte
- a data1 byte
- a data2 byte
In the following example we assume, that the external MIDI Control-Device (e.g. an external mixer) sends a ControlChange message along with a Channel number as the Status byte. The Data1 byte will then contain e.g. a MainVolume control change value whereas the Data2 byte will finally contain the external fader position:
E.g.:
Status = 0xB1 (Type=ControlChange, Channel=1..16)
Data1 = 0x07 (MainVolume)
Data2 = ANY (between 0 and 255)
Note, that the "ANY" entry for Data2 byte will pass the data2 value as is.
In the "MIDI Message Mapping" dialog you can now map this MIDI ShortMessage to the following ProppFrexx control-command: This mapping will map the MIDI-ShortMessage "0xB1 0x07" to the Control Command "MIXER_OUTPUT_VOLUME_SET OUT1|${mididata2asvol}".
The Control Command 'MIXER_OUTPUT_VOLUME_SET' has 2 parameters:
a) <mixername>
b) <volume>
The <mixername> is the name of the ProppFrexx mixer channel you want to change (in the above example this is "OUT1").
The <volume> represents a decimal number within ProppFrexx and must be between 0.0 (silent) and 1.0 (maximum).
So we need to convert the Data2 byte of the MIDI-ShortMessage from 0...255 to 0.0...1.0.
This can be done via the macro "${mididata2asvol}" - which converts the Data2 byte to an appropriate volume value.
More macros can be found in the appendix of the User Manual.
Therefore the above mapping was used:
MIDI-Message: "0xB1 0x07" (Data2=Any)
to
Command: "MIXER_OUTPUT_VOLUME_SET OUT1|${mididata2asvol}"
You might use the "Control Command Builder" Dialog (just click on the 'Edit' button) to define the control command(s) to be executed.
So each mapping entry works like a filter.
- For each incomming MIDI ShortMessage all mapping entries are checked.
- If the incomming MIDI ShortMessage matches one of the defined MIDI messages (status byte, data1 byte and optionally data2 byte is checked), the related command is executed.
Note: So for each MIDI ShortMessage you must add a seperate mapping entry!
If you for example have 4 output mixer channels defined in ProppFrexx (e.g. OUT1, OUT2, OUT3, OUT4) you would need to also define 4 mapping entries, e.g.:
- "0xB1 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT1|${mididata2asvol}"
- "0xB2 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT2|${mididata2asvol}"
- "0xB3 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT3|${mididata2asvol}"
- "0xB4 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT4|${mididata2asvol}"
Note:
There is a 'Record' button in the 'MIDI Message Mapping' dialog which might be used to get a live incomming MIDI-ShortMessage.
Meaning the Status, Data1 and Data2 bytes will change according to the live recorded incomming MIDI messages. This makes it more simple to know what messages are send by your external MIDI Control-Device. But note, that you might need to change your recorded Data2 value back to 'Any' in case you are dealing with a fader, rotary knob etc. and you want to use the "${mididata2asvol}" macro!
In addition you might click on the 'Monitor...' button (within the 'GPIO/Remoting' section of the general settings dialog) in order to monitor your current mapping and any other incomming MIDI messages.
Mapping of other external GPIOs (like GamePort, Serial-IO, Velleman, IO-Warrior, Keyboard Hotkeys etc.) almost work in exactly the same way.
The only main difference is, that those GPIO mappings do have other input values of course.
E.g.:
- a Keyboard Hotkeys has a 'Key' value which might be mapped to a control-command
- a GamePort has a 'Button Event' value which might be mapped to a control-command
etc.
This can be done in the general settings dialog (F3) in the section 'GPIO/Remoting'.
First enable the checkbox 'MIDI Control Enabled' and select the propper MIDI Input Device.
Then you need to translate the incomming MIDI-Messages to appropriate ProppFrexx control-command(s) - which can be done via the MIDI Mapping (click on the flash arrow icon next to the mapping file name to invoke the MIDI Message Mapping dialog).
In the MIDI Message Mapping dialog you can now translate any MIDI ShortMessage into any ProppFrexx control-command.
Meaning when a certain MIDI ShortMessage arrives it will trigger the execution of the given ProppFrexx control-command.
A complete listing of all available control-commands can be found in the appendix of the User Manual.
Some general information about using control-commands can be found: here!
So you need to know what MIDI ShortMessages are send by your external MIDI device.
A MIDI ShortMessage is composed out of three parts (bytes):
- a status byte
- a data1 byte
- a data2 byte
In the following example we assume, that the external MIDI Control-Device (e.g. an external mixer) sends a ControlChange message along with a Channel number as the Status byte. The Data1 byte will then contain e.g. a MainVolume control change value whereas the Data2 byte will finally contain the external fader position:
E.g.:
Status = 0xB1 (Type=ControlChange, Channel=1..16)
Data1 = 0x07 (MainVolume)
Data2 = ANY (between 0 and 255)
Note, that the "ANY" entry for Data2 byte will pass the data2 value as is.
In the "MIDI Message Mapping" dialog you can now map this MIDI ShortMessage to the following ProppFrexx control-command:
Code: Select all
MIXER_OUTPUT_VOLUME_SET OUT1|${mididata2asvol}
The Control Command 'MIXER_OUTPUT_VOLUME_SET' has 2 parameters:
a) <mixername>
b) <volume>
The <mixername> is the name of the ProppFrexx mixer channel you want to change (in the above example this is "OUT1").
The <volume> represents a decimal number within ProppFrexx and must be between 0.0 (silent) and 1.0 (maximum).
So we need to convert the Data2 byte of the MIDI-ShortMessage from 0...255 to 0.0...1.0.
This can be done via the macro "${mididata2asvol}" - which converts the Data2 byte to an appropriate volume value.
More macros can be found in the appendix of the User Manual.
Therefore the above mapping was used:
MIDI-Message: "0xB1 0x07" (Data2=Any)
to
Command: "MIXER_OUTPUT_VOLUME_SET OUT1|${mididata2asvol}"
You might use the "Control Command Builder" Dialog (just click on the 'Edit' button) to define the control command(s) to be executed.
So each mapping entry works like a filter.
- For each incomming MIDI ShortMessage all mapping entries are checked.
- If the incomming MIDI ShortMessage matches one of the defined MIDI messages (status byte, data1 byte and optionally data2 byte is checked), the related command is executed.
Note: So for each MIDI ShortMessage you must add a seperate mapping entry!
If you for example have 4 output mixer channels defined in ProppFrexx (e.g. OUT1, OUT2, OUT3, OUT4) you would need to also define 4 mapping entries, e.g.:
- "0xB1 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT1|${mididata2asvol}"
- "0xB2 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT2|${mididata2asvol}"
- "0xB3 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT3|${mididata2asvol}"
- "0xB4 0x07" -> "MIXER_OUTPUT_VOLUME_SET OUT4|${mididata2asvol}"
Note:
There is a 'Record' button in the 'MIDI Message Mapping' dialog which might be used to get a live incomming MIDI-ShortMessage.
Meaning the Status, Data1 and Data2 bytes will change according to the live recorded incomming MIDI messages. This makes it more simple to know what messages are send by your external MIDI Control-Device. But note, that you might need to change your recorded Data2 value back to 'Any' in case you are dealing with a fader, rotary knob etc. and you want to use the "${mididata2asvol}" macro!
In addition you might click on the 'Monitor...' button (within the 'GPIO/Remoting' section of the general settings dialog) in order to monitor your current mapping and any other incomming MIDI messages.
Mapping of other external GPIOs (like GamePort, Serial-IO, Velleman, IO-Warrior, Keyboard Hotkeys etc.) almost work in exactly the same way.
The only main difference is, that those GPIO mappings do have other input values of course.
E.g.:
- a Keyboard Hotkeys has a 'Key' value which might be mapped to a control-command
- a GamePort has a 'Button Event' value which might be mapped to a control-command
etc.