StreamByter is a plugin for creating custom MIDI effects. It can be used as an Apple Audio Unit (AU) effect or as a standalone app connected via CoreMIDI virtual ports. StreamByter is ported from our acclaimed MidiFire MIDI processing environment.
An iOS device (minimum iOS 11) and a suitable AU host app such as AUM, apeMatrix, Cubasis or Sequencism is required to use the AU variant. To use with CoreMIDI, a routing app like MidiFire is recommended and an iOS device with at least iOS 8 is required.
Use StreamByter to:
StreamByter is available via Apple's iOS App Store.
Just click on the download button below to be taken there right now.
Let's explore some of the features of StreamByter in slightly more detail. The definitive reference is in the builtin manual; an online copy of which can be accessed in the Support Resources section.
StreamByter is configured using a (fairly sparse) textual rules 'language' that defines how the effect should operate. You enter rules in the provided edit box and press the 'Install Rules' button which checks and activates your rules. If there are errors in your rules, then the text takes on a red hue with the lines in error flagged with '#ERR' for you to fix. After you fix a rule, you don't need to remove that '#ERR' if the rule is correct; StreamByter will do that for you.
Anything following a '#' character is treated as a comment. You can of course use the copy/cut paste features. A quick way to clear the edit box is to hold-press and choose 'Select All' from the pop-up menu and then choose 'Cut'.
Important - just about everything you do in the Stream Byter is done in hexadecimal. Have a hex calculator/table ready. Also use this handy table for looking up hex values of MIDI notes. You also need to have understanding of the MIDI protocol. Somascape is the best guide out there.
When a MIDI event is passed into the Stream Byter, the rules are evaluated from top to bottom. Now, we will move on to the actual rules.
Also known as Stream Byter I rules, these types of rules match an incoming MIDI event and then transform it in some way. Transformations include rewriting any part of the event, delaying it, blocking it or cloning it.
These types of rules can also be used inside conditionals (see below)
Use the SND rule to send a MIDI message of any type. Additionally, the event can be given a delay and it will not issue until that time has expired.
StreamByter works with arrays of values. There are local arrays (4 of them, each with 256 elements) and one global (also 256 elements) which is shared with all StreamByter instances running in a host. The ASS rule is used to set the value of a variable.
A variable array element can be addressed directly or indirectly.
The incoming message is also presented as a variable array that you can examine and alter.
Variables can be marked as 'preserved' which means their current value (no matter what it is) is stored with the StreamByter configuration and restored when it is loaded.
There are also some 'special' variables that can be used including random number generation values, timing points and shortcuts for message length/status/channel.
Labels are a way for the StreamByter to display information to the user about what is happening in the code. There are two labels (LB0 and LB1) and you use the SET rule to set their value. You can display the value of any variable or event byte in hex, decimal or as a note name. You can also supply a literal string (max 3 chars) to be displayed.
Labels are also really handy for debugging code!
StreamByter includes conditionals and loops using the IF/END rule. There is also an IF LOAD variant that gets executed when the StreamByter loads. This is used to setup variables or issue events on start.
The MAT rule is used to perform mathematical operations on two operands. This includes basic arithmetic and modulo operators.
StreamByter supports AUv3 state saving, and you can save your work into a preset inside an AUv3 host for later recall. A handful of factory presets are also provided with commonly used constructs.