StreamByter in MDP is a limited version of the MidiFire StreamByter. MidiFire SB accepts Subroutines and Defines. It is available in the app store and provides input and output interfaces with MDP and other virtual and physical devices for Control and Interface. It includes several Modules to facilitate MIDI routing, design, and programming. Contact me if you need help getting started. I have been using MidiFire for several years.
Attached is a view of my latest "Scene" for Midi Clock Control. and Display that I am currently working on finishing and publishing. Features iI includes are Midi Clock Input, Midi Tempo Control and Measured Display, and Beat Display. SBs are renamed StreamByter Modules. It includes an interface from an external Midi Clock Source, although the Dynamic Clock can be configured to provide the Clock Source within the iPad or Mac. It also provides programmed loopback capabilities.
https://audeonic.com/midifire/manual/#mod_byter
Copied from the manual:
Macros and Subroutines
Version 2.0 introduces two new code features; DEFINE and SUBROUTINE
The DEFINE rule lets you give any sequence of code tokens a name and then use that name further in the code instead of typing in the original text. This is similar to a #define in C but no parameters. Like the C version, you can have DEFINES that refer to previous DEFINES.
DEF[INE] <name> <some code>
It is essentially a find/replace. Best explained by example:
IF LOAD
DEFINE MSG0 M0
DEFINE CHAN_VOLUME B0 07
DEFINE CHAN_VOLUME_MIN MSG0 == CHAN_VOLUME 00
END
IF CHAN_VOLUME_MIN
END
The SUBROUTINE rule allows you to create code subroutines (with arguments) that you can call from elsewhere in your code.
SUB[ROUTINE] <name> [<args>] ... lines of code ... END