MIDI Mod features a massive 32-slot mod matrix, which can be used for routing internally and externally to any number of things, including hardware devices, software, and other apps.
The sheer number of possibilities can be daunting, but don't let that stop you. To make things less overwhelming, MIDI Mod comes preloaded with parameter mappings for more than 50 devices and apps, including some of the most popular devices on the market today from manufacturers like Korg, Roland, Yamaha, Sequential (DSI), Novation, Elektron, Behringer, Moog, and more. More are being added, and if a mapping doesn't exist for your device yet, fear not. It's very easy to create routings just by entering a CC number or via MIDI Learn. MIDI Learn even works with Sysex!
- All the classic wave forms, plus 1 slot per LFO for a user-editable waveform
- Key retrig and LFO delay
- Slow and Fast modes, up to 40 Hz
- Rate sync to BPM subdivisions
- Sync any LFO to the rate of another
- Each LFO can have up to 8 destinations
3 Envelope Generators
- 2 ADSR with delay and hold
- 1 4-stage with individual levels per stage, plus delay and hold
- Auto-triggered by BPM subdivisions or the rate of an LFO
- Manual trigger buttons
- Each envelope generator can have up to 8 destinations
- Stores up to 16 notes in latch mode
- Standard features, including Octave Up/Down, Note Repeat, Gate Length, Clock Subdivision, and several playback patterns
- Velocity decay/fade feature
- Chord memory with polyphonic playback
- Create rhythmic patterns by turning on/off individual notes in latch mode
- Auto Transpose Sequencer allows automated transposition of the entire note sequence up to 16 steps. Think of it as a sequencer of a sequence
- Arp note on and note off can be used as a modulation source (up to 8 destinations)
- Note messages can be suppressed so that only modulation takes place
32-Slot Mod Matrix
- Destinations can be internal or external (only limited by the amount of devices/software/apps you have)
- Internal destinations include just about every knob and fader within MIDI Mod
- Over 50 (and increasing) included device control mappings, making it easy to simply select your device, and the name of the parameter
- Destinations can be MIDI CC, Sysex, or NRPN
- MIDI Learn for destination select (CC and Sysex only)
- Individual range controls for each mod slot (If the destination has a range of 0-63, you could set the min to 5, and max to 55, for example)
- Destinations also include pitch bend, aftertouch, mod wheel, and even MIDI note
- Every mod slot can have its output inverted (negative)
- Mod sources include the 4 LFOs and 3 Envelopes, Arpeggiator note on/off, Aftertouch, Velocity, MIDI Note (keyboard tracking), Modwheel, Pitchbend, Expression, or any CC of your choice
- Quick access on-screen keyboard for entering notes/playing devices
- Create and save your own named parameter mappings
- Configurable Max LFO Delay and Envelope Phase times, up to 40 seconds
- Aftertouch delay, which filters out incoming aftertouch messages until the desired time after key press
- Max MIDI messages per second (some devices are better at handling audio rates over MIDI than others)
- MIDI clock send and receive (sync)
- Analog sync out (sends out an audio pulse in sync with the current tempo)
- In app User Guide
Features of this app are made possible by the AudioKit framework.
Current list of devices and apps with defined parameter mappings:
Please submit any requests, questions or comments via email:
eokuwwy [at] gmail [dot] com
Full Overview with the Yamaha Reface CS and Arturia Keystep
Sound Design and patch match with the Roland System-8 and Behringer DeepMind 12
Multiple device connection setup and short jam with the Roland System-8, Korg Volca Sample, and Source Audio Ventris Dual Reverb
Arpeggiator Jam with AudioKit Synth One
Modular Possibilities with the Behringer Neutron
Impromptu Sound Design - Hoover on the OB-6
MIDI Mod User GuideMIDI Mod is a set of modules designed to be used as modulation sources that send MIDI to various destinations. In addition, the majority of MIDI Mod's own parameters can be modulated internally. For example, the output of ENV 3 could be used to control the rate of LFO 1. The output of LFO 1 could be used to control the playback velocity of the arpeggiator, and so on.
MIDI Mod has 7 main modulation sources, 4 LFO's (Low Frequency Oscillators) and 3 Envenlope Generators. The arpeggiator can also be used as a modulation source. In addition, when MIDI Mod is combined with an input source, such as an external MIDI-enabled keyboard, the following modulation sources are available.
CC (Any MIDI CC of your choice)
MIDI Mod allows up to 32 source to destination assignments. Each source has a maximum of 8 destinations. Allowable destinations include internal ones (parameters within MIDI Mod), MIDI CC, Sysex, NRPN and RPN. In addition, the Default destination set includes Aftertouch (channel pressure), Note (on/off), Pitch Bend, and Volume, among other commonly used parameters.
Assignments can be made in a number of ways. They can be made directly from the main modulation sources (LFO 1-4, ENV 1-3) by tapping the "+" button and then selecting the desired destination. For maximum control over modulation assignments, use the Mod Matrix.
MIDI Mod features a 32-slot mod matrix which can be used for internal and external routing. Simply tap on a source to get started. (Where it says "Empty"). Select a modulation source from the provided options. Then tap on "Dest" to select a destination. The first option in the destination select menu is "MIDI Mod". Use this option for internal routing. Choose any of the other devices in the list for external modulation. You will then select the MIDI channel, and then from there you can enter the destination manually with "Manual or Learn", whereby you can input a CC or Sysex value manually or just twiddle a knob or control from your device to make the assignment. You can also choose a destination from any of the templates in the list. Just select a template and the list of possible destinations will appear.
Once a destination is selected, you can control the exact range of values used for modulation. This gives more granular control than a simple "Depth" parameter. Just tap on the range to change it. If you press the "INV" button, it will invert the values sent to the destination. This is sometimes referred to as a negative amount. For example, if you are using "NOTE" as the modulation source, the output MIDI value will increase the higher you play up on the keyboard. However, when "INV" is pressed, the output values will decrease the higher you play up the keyboard, and they will increase when you play lower notes.
The arpeggiator has the following basic features:
- Octaves: repeats the pattern up or down up to 2 octaves
- Note Repeat: repeat each note in the pattern up to 7 times (plays 8 notes total)
- Subdivision: playback rate ranges from quarter notes to thirtysecond notes
- Gate: changes the gate length of all notes in the pattern
- Arp Pattern: changes the sequence in which the notes are played back. Press the "Incl End" button to repeat the top or bottom notes on a pattern that goes up and down. For example: "C E G G E C C E G G E C...", as opposed to "C E G E C E G E C..."
- Swing: Controls the swing amount of the pattern as it is played back
- Latch: allows you to input the notes and have them played back without needing to hold them down. Up to 16 notes can be entered in Latch mode, which makes it function similar to a basic 16-step sequencer. The notes appear in the "Pattern Edit" section.
- Trans: Turns on transpose. This allows you to transpose the current sequence by pressing a key.
- Ignore: The arpeggiator will ignore all incoming notes, allowing you to play freely over the top.
- Split: Will ignore notes played above the split point (defaults to Middle C)
- Inv Split: Will ingore notes played below the split point.
- Device: Select specific outputs for the Arpeggiator
- Velocity control: Press the "Vel Cntrl" button to set the velocity to a set amount by using the Amount slider.
- Velocity Decay: Use the "Decay" slider to have the velocity decrease as the pattern is played back. Press the "Inv" button to have the velocity increase as it is played back. Press the "Fade" button to have the velocity fade all the way down to 0 by the time the pattern reaches the end of its cycle.
- Pattern Edit: In Latch mode, up to 16 notes can be iterated over. You can skip notes by tapping on them in the "Pattern Edit" grid. This allows for more interesting rhythmic patterns. Keep in mind that the note displayed on the step may not match the actual note, depending on the playback pattern. The notes displayed on each step are in accordance with the order in which they were entered.
- Auto Sequencer: These features allow you to transpose the entire arpeggiator pattern over time according to certain parameters. You can think of it as a sequencer of a sequence. Use the "Auto Trans" slider to change the pattern. The easiest way to hear how this feature works is to just have a single note being played back in latch mode. Then you can cycle through the playback patterns and play with the various options to learn how they work. "Trans Step" controls how many steps the auto sequencer will run through for any given pattern. "Trans Pattern" controls the sequence in which the pattern is applied. In addition, there is one "User" pattern available as an "Auto Trans" pattern type. Pressing the "Edit" button opens a 16-step editor window, in which you can transpose the entire pattern up or down 24 semitones for each step in the pattern.
- Mod Only: Press this button to stop sending notes and only send modulation from the arpeggiator. This assumes that you have mod slots in the Mod Matrix that use the arpeggiator as a mod source.
- Settings (Gear Icon): Open the global settings
- LFO: Opens the LFO Module
- ENV: Opens the Envelope Generator Module
- MOD: Opens the Mod Matrix
- ARP: Opens the Arpeggiator Module
- On/Off: Button to quickly enable or disable the Arpeggiator from anywhere
- KBD: Toggles an on-screen multi-touch keyboard that can be used to enter notes in the ARP or to be sent to an output. (Configured in the settings)
- Tempo Controls: Press the right or left arrow to increase or decrease the tempo
- Tap: Tap the button 4 times to set the Tempo
- Sync: Sync MIDI Mod's tempo to an incoming MIDI Clock source. (Configured in the settings)
- BG: Allow MIDI Mod to continue operating when the app is in the background
- Panic: Sends all notes off to all output devices (Configured in the settings)
- BPM: Only allows the LFO rate to be a clock subdivision of the tempo. Ranges from 8-bars to 32nd notes.
- Sync: Allows you to sync the rate of one LFO to the rate of another.
- Main Switch: Enables or disables the LFO
- Slow/Fast Switch: Changes the range from Slow to Fast. This makes it easier to dial in very slow rates. The max rate for Fast mode can be configured in the Settings.
- Main Knob: Controls the rate of the LFO
- Wave Shape Slider: Sets the wave shape of the LFO. Options include: Sine, Triangle, Saw, Ramp, Square, Random, and User (editable wave shape that can be modified with the "Edit" button)
- Delay: When a key is pressed (or MIDI Note On is sent) this controls the amount of time between that key press and when the LFO begins to have any affect on its destinations.
- Key Button: Restarts the LFO's oscillator whenever a key is pressed
- Depth: A master depth control that allows you to quickly adjust the impact the LFO has on all of its destinations.
- "+" Button: Assign destinations to the LFO quickly with the "+" button.
- Edit Button: When the selected wave shape is "User", press the Edit button to open the wave shape editor. Use the sliders to effectively "draw" your own LFO wave shape. If you turn off the "Smooth" button, then the waveform changes in between the slider positions will be abrupt (similar to a square or random wave)
- Sync: Allows you to automatically re-trigger (loop) the envelope according to a subdivision of the current tempo, rate of an LFO, or simply just iterate over the envelope's whole cycle with the "Loop" option.
- Main Switch: Enables or disables the envelope
- Trig: Manually trigger the envelope on and off with this button. Otherwise, you can use the onscreen keyboard or external keyboard to trigger it.
- Depth: A master depth control that allows you to quickly adjust the impact the ENV has on all of its destinations.
- "+" Button: Assign destinations to the ENV quickly with the "+" button.
- Stages: Envelopes 1 and 2 have the classic "Attack", "Decay", and "Release" stages with a "Sustain"
level. (ADSR). In addition, they also have a "Delay" and "Hold" time, which are especially useful for
Envelope 3 has an additional time stage, and allows you to control the levels reached for each stage. If you wanted to use this as a classic ADSR, you could completely ignore "T1" and "L1", and then set "L2" to the max and treat "L3" as "Sustain" level. Then "T2" becomes "Attack", "T3" would be "Decay", and "T4" would be release.
Maximum stage times for each envelope can be configured in the settings.
The following parameters can be configured in the Settings section. Tap the "Gear" icon to open the settings window.
- Send Midi Clock: Sends MIDI clock system messages to any destinations specified in "Outputs"
- Analog Sync Out: Sends a pulse out of the device's audio output, which can be used to trigger an external device.
- Subdivision: The clock subdivision used for the above pulse
- Latency: The amount of latency for sending out a pulse
- Clock Source: Select an input source for MIDI clock. Use this in conjunction with the "Sync" button on the Toolbar to allow external MIDI clock to control MIDI Mod's tempo.
- Control Inputs: Devices that can be used to control MIDI Mod's parameters either by MIDI Learn or the published MIDI CC's (which are shown below)
- Note/Mod Inputs: Devices that can send MIDI notes, expression, aftertouch, pitch, and modulation to MIDI Mod, such as an external keyboard
- Outputs: Any notes from the internal keyboard or Note/Mod inputs will be routed to the outputs
- Parameter Mappings: Opens an editor window which allows you to configure your own named parameter mappings, which will show up when selecting a destination. See the section below for specifics.
- MIDI Learn: This allows you to override MIDI Mod's default parameter mappings. Simply tap on the parameter name in the list, and then send a MIDI CC (by twisting a knob on your MIDI controller, for example)
- Favorites (1-8): Select up to 8 named favorites to be displayed first when selecting a destination. This allows you to select destinations more quickly for the things that you use the most.
- ENV Max Time (1-3): Controls the maximum amount of time for each stage of the given envelope.
- LFO Delay Max Time (1-4): Control the maximum delay time for each LFO.
- LFO Max Rate: Sets the maximum LFO rate (in Hz) for fast mode. The default is 10 and the max is 40.
- AT Delay Time: Controls the amount of time between when a note is first detected and when you wish to start processing incoming Aftertouch messages. This is useful for sensitive keyboards that start sending aftertouch messages immediately when the keys are pressed.
- ARP Split Point: Customize the left/right split point which can be used when the Arpeggiator is on<
- Max MIDI messages per second: The maximum number of MIDI messages a mod source can send per second. This can be useful when working with a device that might not handle a rapid stream of incoming MIDI messages very well.
Parameter Mappings Editor
Open the parameter mappings editor by clicking on "Parameter Mappings" in the settings. This editor window allows you to create a custom named mapping, which will show up in the list of destinations under "User Defined Mappings" when making assignments. Create a new mapping by selecting "New Mapping" in the menu that appears. You can also edit or delete an existing mapping from this menu.
- Display Name: The name of the device, app, etc that this mapping is for. This is what will show up first when selecting a destination.
- At least one parameter mapping
Enter parameters by editing cells in the scrollable table in the top half of the editor window. Enter the name of the parameter, the type (CC, Sysex, NRPN) and then the value.
The value will be either a CC number, a sysex string, or an MSB/LSB pair for an NRPN (separated by spaces). If the type is NRPN, you can also simply enter the integer equivalent. For example, the MSB/LSB pair 1 1 is equivalent to 129.
A Sysex string needs to have a value substitution byte in order for any control to take place. This is denoted with the symbol $V. First, omit the leading F0 and closing F7 bytes. Then put in the remaining bytes in hexadecimal format (refer to your device's documentation), using $V as a substitute for the byte that actually has value changes. For example: "41 36 00 23 20 01 0E $V". Where $V is the value that actually changes, most likely ranging from 00 to F7 (0 - 127)
Finally, enter the minimum and maximum allowed integer values for the parameter.
Press the "X" on the far left of a row to delete that parameter mapping.
Setting the capabilities: Setting the "device" capabilities will allow certain parameters to show up automatically when selecting a destination for the current mapping. For example, if you press the "Receive" button for "Ch Aftertouch", then "Aftertouch" will show up as a parameter choice when selecting a destination.
Press the "Done" button to save your changes and close the Parameter Mappings Editor window.
Please see eokuwwy.com for more info or email firstname.lastname@example.org for questions/feedback.
Video demonstrations will be posted on thesrabbit youtube channel.
Be sure to checkout CV Mod for iOS if you want to modulate or add a sound source to your CV equipped modular or semi-modular gear!
MIDI Mod proudly uses the AudioKit framework. Visit audiokit.io for more info.
List of Existing Device Parameter Mappings
MIDI Mod Controllable Parameters
Control Change List
|Parameter Name||CC Number||Value Range||Info|
|LFO 1 Rate||3||0 - 127||Sets the rate of LFO 1|
|LFO 2 Rate||9||0 - 127||Sets the rate of LFO 2|
|LFO 3 Rate||12||0 - 127||Sets the rate of LFO 3|
|LFO 4 Rate||13||0 - 127||Sets the rate of LFO 4|
|LFO 1 Shape||14||0 - 6||Sets the wave shape of LFO 1|
|LFO 2 Shape||15||0 - 6||Sets the wave shape of LFO 2|
|LFO 3 Shape||16||0 - 6||Sets the wave shape of LFO 3|
|LFO 4 Shape||17||0 - 6||Sets the wave shape of LFO 4|
|LFO 1 Enabled||18||0 - 1||Toggles LFO 1 on/off - External control only|
|LFO 2 Enabled||19||0 - 1||Toggles LFO 2 on/off - External control only|
|LFO 3 Enabled||20||0 - 1||Toggles LFO 3 on/off - External control only|
|LFO 4 Enabled||21||0 - 1||Toggles LFO 4 on/off - External control only|
|LFO 1 Mode||22||0 - 1||Toggles LFO 1 fast/slow - External control only|
|LFO 2 Mode||23||0 - 1||Toggles LFO 2 fast/slow - External control only|
|LFO 3 Mode||24||0 - 1||Toggles LFO 3 fast/slow - External control only|
|LFO 4 Mode||25||0 - 1||Toggles LFO 4 fast/slow - External control only|
|LFO 1 Sync||26||0 - 1||Toggles LFO 1 BPM sync - External control only|
|LFO 2 Sync||27||0 - 1||Toggles LFO 2 BPM sync - External control only|
|LFO 3 Sync||28||0 - 1||Toggles LFO 3 BPM sync - External control only|
|LFO 4 Sync||29||0 - 1||Toggles LFO 4 BPM sync - External control only|
|LFO 1 Delay||30||0 - 127||Sets the Delay for LFO 1|
|LFO 2 Delay||31||0 - 127||Sets the Delay for LFO 2|
|LFO 3 Delay||32||0 - 127||Sets the Delay for LFO 3|
|LFO 4 Delay||33||0 - 127||Sets the Delay for LFO 4|
|ENV 1 Enabled||34||0 - 1||Toggles ENV 1 on/off - External control only|
|ENV 2 Enabled||35||0 - 1||Toggles ENV 2 on/off - External control only|
|ENV 3 Enabled||36||0 - 1||Toggles ENV 3 on/off - External control only|
|ENV 1 Sync||37||0 - 12||Set auto trigger for ENV 1|
|ENV 2 Sync||39||0 - 12||Set auto trigger for ENV 2|
|ENV 3 Sync||40||0 - 12||Set auto trigger for ENV 3|
|LFO 1 Depth||41||0 - 127||Sets the depth of LFO 1|
|LFO 2 Depth||42||0 - 127||Sets the depth of LFO 2|
|LFO 3 Depth||43||0 - 127||Sets the depth of LFO 3|
|LFO 4 Depth||44||0 - 127||Sets the depth of LFO 4|
|ENV 1 Depth||45||0 - 127||Sets the depth of ENV 1|
|ENV 2 Depth||46||0 - 127||Sets the depth of ENV 2|
|ENV 3 Depth||47||0 - 127||Sets the depth of ENV 3|
|ENV 1 Delay||48||0 - 127||Sets the delay time of ENV 1|
|ENV 1 Hold||49||0 - 127||Sets the hold time of ENV 1|
|ENV 1 Attack||50||0 - 127||Sets the attack time of ENV 1|
|ENV 1 Decay||51||0 - 127||Sets the decay time of ENV 1|
|ENV 1 Sustain||52||0 - 127||Sets the sustain level of ENV 1|
|ENV 1 Release||53||0 - 127||Sets the release time of ENV 1|
|ENV 2 Delay||54||0 - 127||Sets the delay time of ENV 2|
|ENV 2 Hold||55||0 - 127||Sets the hold time of ENV 2|
|ENV 2 Attack||56||0 - 127||Sets the attack time of ENV 2|
|ENV 2 Decay||57||0 - 127||Sets the decay time of ENV 2|
|ENV 2 Sustain||58||0 - 127||Sets the sustain level of ENV 2|
|ENV 2 Release||59||0 - 127||Sets the release time of ENV 2|
|ENV 3 Delay||60||0 - 127||Sets the delay time of ENV 3|
|ENV 3 Hold||61||0 - 127||Sets the hold time of ENV 3|
|ENV 3 T1||62||0 - 127||Sets the T1 time of ENV 3|
|ENV 3 L1||63||0 - 127||Sets the L1 level of ENV 3|
|ENV 3 T2||66||0 - 127||Sets the T2 time of ENV 3|
|ENV 3 L2||69||0 - 127||Sets the L2 level of ENV 3|
|ENV 3 T3||70||0 - 127||Sets the T3 time of ENV 3|
|ENV 3 L3||75||0 - 127||Sets the L3 sustain level of ENV 3|
|ENV 3 T4||76||0 - 127||Sets the T4 release time of ENV 3|
|ARP On/Off||77||0 - 1||Toggles ARP on and off - External control only|
|ARP Latch On/Off||78||0 - 1||Toggles ARP latch mode on and off - External control only|
|ARP Trans On/Off||79||0 - 1||Toggles ARP key transpose on and off - External control only|
|ARP Octaves||80||0 - 4||Sets the number of ARP octaves|
|ARP Note Repeat||81||0 - 7||Sets the number of ARP note repeats|
|ARP Clock Subdivision||82||0 - 5||Sets the ARP clock subdivision|
|ARP Gate||83||0 - 127||Sets the ARP gate length|
|ARP Playback Mode||85||0 - 7||Sets the ARP playback pattern for the notes|
|ARP Swing||86||0 - 127||Sets the ARP swing amount|
|ARP Velocity Amount||87||0 - 127||Sets the ARP velocity amount|
|ARP Velocity Decay Amount||88||0 - 127||Sets the rate of ARP velocity decay|
|ARP Auto Trans Prog||89||0 - 16||Sets the ARP auto transpose progression|
|ARP Auto Trans Step||90||1 - 16||Sets the ARP auto transpose number of steps|
|ARP Auto Trans Pattern||91||0 - 12||Sets the ARP auto transpose playback pattern|
|ARP Auto Trans Step 1||92||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 2||93||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 3||94||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 4||95||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 5||102||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 6||103||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 7||104||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 8||105||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 9||106||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 10||107||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 11||108||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 12||109||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 13||110||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 14||111||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 15||112||0 - 48||Sets ARP step for custom auto transpose pattern|
|ARP Auto Trans Step 16||113||0 - 48||Sets ARP step for custom auto transpose pattern|
|Tempo||114||0 - 127||Sets master tempo|
|Tempo Sync On/Off||115||0 - 1||Toggles tempo sync to incoming clock - External control only|
|ENV 1 Trigger||116||0 - 1||Fires trigger for envelope 1|
|ENV 2 Trigger||117||0 - 1||Fires trigger for envelope 2|
|ENV 3 Trigger||118||0 - 1||Fires trigger for envelope 3|
|ARP Chord On/Off||119||0 - 1||Toggles ARP poly playback on and off|