StreamByter - Big Hard Excellent... Update!
... Not an Imperfect List
Announcement for all my Audiobus friends.
I have just pressed the release button on StreamByter version 1.4. This was only going to be a bug fix release but I got carried away and have very significant new features for you.
First, the GUI controls box now has 16 customisable controls. As well as sliders, we have buttons and dropdown menus. The layout of the controls box is eminently configurable from the script Here’s an example of a work-in-progress GUI:
Secondly, there has been a major overhaul of the StreamByter language. You are no longer restricted to ‘assembler’ like opcodes and nasty UPPER capitalisation. All rules and flags now have long-form variants. Add to this the ability to give any variable a user defined alias, macros and parameterised subroutines and we’re starting to look a bit more like a modern programming language. By way of example, here is a chunk of code written in the new form:
if load # define custom aliases for GUI controls, variables and literals alias Q0 delaySlider alias Q1 notesOffButton alias I0 loopCounter alias $123 allNotesOffCC # configure the controls appearance set delaySlider Delay_(ms) $0 $2000 +slider set notesOffButton All_Notes_Off +button # initialise the controls assign delaySlider = 0 +preserve # include standard factory includes set include factory standard_includes # subroutine to process a note event subroutine processNoteEvent if midi_msg_type == note_on_msg math midi_msg_velocity = midi_msg_velocity / 2 end send midi_msg_data midi_msg_note midi_msg_velocity +DdelaySlider end # subroutine to send all notes off to a range of channels subroutine allNotesOff startChannel endChannel assign loopCounter = startChannel while loopCounter <= endChannel math I1 = controller_msg + loopCounter send I1 allNotesOffCC 00 increment loopCounter end end end # of load # handle note events if midi_msg_type < A0 processNoteEvent end # handle all notes off button press if control_q1_moved allNotesOff 0 $15 end
Now, that would look like this in the traditional 'compact' form:
# halve note velocity and delay according to slider IF LOAD SET Q0 DELAY 00 3E8 SET Q1 NOTES_OFF 0 1 ASS Q0 = 0 0 +P END # convert note on/zero velocity to note off 9X XX 00 = 8X IF MT < A0 IF MT == 90 MAT M2 = M2 / 2 END SND M0 M1 M2 +DQ0 XX = XX +B END # handle notes off slider IF M0 == F7 7D 01 01 ASS I0 = 0 IF I0 < 0F +L MAT I1 = B0 + I0 SND I1 7B 00 END END
However, this is entirely backwards compatible so the old code will run perfectly fine in the new version and you now have the choice of concise+esoteric or long+modular.
Finally, I have gone to great lengths to provide some comprehensive materials for learning StreamByter - enter the ‘StreamByter University’ http://audeonic.boards.net/board/14/university (If Trump can do it, so can I), where you can peruse a series of articles from just getting started with StreamByter to advanced techniques. There is even a step by step tutorial on building your own custom MIDI channel switcher.
The full details of the new release (and there are many more new enhancements) are in the App Store ‘What’s New’ description: https://itunes.apple.com/us/app/streambyter/id1398712641?mt=8
I do hope you enjoy this new update. I hope to be able to announce some new drop’n’run scripts (that’s a hint above) very soon also.
PS. The new StreamByter is currently retrofitted back into MidiFire (along with some new features and some bug fixes) so some love coming there also. StreamByterAU for macOS should also be available this week too.