Audiobus: Use your music apps together.

What is Audiobus?Audiobus is an award-winning music app for iPhone and iPad which lets you use your other music apps together. Chain effects on your favourite synth, run the output of apps or Audio Units into an app like GarageBand or Loopy, or select a different audio interface output for each app. Route MIDI between apps — drive a synth from a MIDI sequencer, or add an arpeggiator to your MIDI keyboard — or sync with your external MIDI gear. And control your entire setup from a MIDI controller.

Download on the App Store

Audiobus is the app that makes the rest of your setup better.

StreamByter remapping works, but not quite (?)

CONTEXT: I'm working on a remap of all controls on my Beatstep Pro so I can control every relevant CC on every MIDI device on its own channel (in "Control Mode"). I have every control mapped sequentially from left to right/top to bottom (1, 2, 3, etc.) in Arturia MIDI Control Center. Now I want to use StreamByter in AUM to remap those CC's per device/MIDI channel.

PROBLEM: This works for all my mappings (yay!), except the four first shown in the screenshot (???). The output doesn't match the mapping (other screenshot). BA 01 translates to BA 66 (instead of BA 05) What is happening here?


Please help!

Comments

  • edited May 2021

    Your problem is that you are hitting multiple mappings with BA 01. It first gets converted to BA 05 on line 5 (Glide) and then gets converted to BA 66 (Rise).

    I don't think there is a way with the basic Streambyter rules that will let you "escape" after a mapping happens. You may be able to re-arrange your rules so that no CC message will trigger two of them. In the bit of mappings you showed here, if you put the 05 to 66 mapping first then your 01 to 05 mapping wouldn't get double converted.

    If you can't fix the problem with re-arranging, your next step is to set up a series of "IF" statements in streambyter depending on BA XX. Something along the line of:

    IF M0 == BA 01
    snd BA 01 M2
    exit #Stops further processing
    End

    (note that even though we are referencing "M0" you can actually compare to M0 and M1 by just comparing to more than one argument)

    (note 2: this is untested and I just woke up :P)

  • @Proleet - it appears the remappings are done in order:
    BA 01 -> BA 05 and then BA 05 -> BA 66 results in: BA 01-> BA 66.

  • edited May 2021

    Thanks, @quartzite and @Tim6502. OMG It's so obvious to me what's happening. Can't believe I've been staring at it for so long and didn't notice that a had double mappings!

  • Using StreamByter like this seems like a very complex way to accomplish a relatively easy task. Is there another way to do this? With another app, perhaps? I have been trying Midiflow. It works, but remapping everything has to be done in the UI and it takes SO MUCH TIME...

  • edited May 2021

    Ok, fixed it the easy way! On page 6 of the manual, it says:

    "Rules are evaluated top to bottom and the results of each rule are fed into the next (unless the clone flag is set)."

    So just adding +C at the end of each line does the trick!

  • @Proleet said:
    Using StreamByter like this seems like a very complex way to accomplish a relatively easy task. Is there another way to do this? With another app, perhaps? I have been trying Midiflow. It works, but remapping everything has to be done in the UI and it takes SO MUCH TIME...

    Streambyter is my goto, but I'm a software guy so its the sort of thing I'm use to. The syntax is pretty terse but once you get over that hump there is nothing better in my opinion.

  • @Proleet said:
    Using StreamByter like this seems like a very complex way to accomplish a relatively easy task. Is there another way to do this? With another app, perhaps? I have been trying Midiflow. It works, but remapping everything has to be done in the UI and it takes SO MUCH TIME...

    Why does streambyter seem like a very complex way to accomplish this? I can't think of anything that would be simpler or computationally more efficient.

    Anything that does remapping via u.i. will be even more work.

  • @quartzite said:

    @Proleet said:
    Using StreamByter like this seems like a very complex way to accomplish a relatively easy task. Is there another way to do this? With another app, perhaps? I have been trying Midiflow. It works, but remapping everything has to be done in the UI and it takes SO MUCH TIME...

    Streambyter is my goto, but I'm a software guy so its the sort of thing I'm use to. The syntax is pretty terse but once you get over that hump there is nothing better in my opinion.

    MidiFire is a nice halfway house – you have all the StreamByter syntax available but within a graphic object-based environment. MidiFlow is brilliant at what it does, but having to figure out graphical ways to do things that can be sorted in a couple of lines of StreamByter code can be more trouble than it's worth; while sometimes with StreamByter you just need to be able to string a couple of objects together with a signal flow and everything falls into place.

  • @Masanga said:

    @quartzite said:

    @Proleet said:
    Using StreamByter like this seems like a very complex way to accomplish a relatively easy task. Is there another way to do this? With another app, perhaps? I have been trying Midiflow. It works, but remapping everything has to be done in the UI and it takes SO MUCH TIME...

    Streambyter is my goto, but I'm a software guy so its the sort of thing I'm use to. The syntax is pretty terse but once you get over that hump there is nothing better in my opinion.

    MidiFire is a nice halfway house – you have all the StreamByter syntax available but within a graphic object-based environment. MidiFlow is brilliant at what it does, but having to figure out graphical ways to do things that can be sorted in a couple of lines of StreamByter code can be more trouble than it's worth; while sometimes with StreamByter you just need to be able to string a couple of objects together with a signal flow and everything falls into place.

    Another vote for MidiFire. Yes, StreamByter is free and AUv3 capable but MidiFire simplifies so much of the stuff that crosses me up in StreamByter. Sometimes I use MidiFire to sketch out a complex project and then map it to SB later. Anyway, I think SB is a very generous utility to be offered for free; my complaints about it are swallowed up by the price tag.

  • @lukesleepwalker said:
    StreamByter is free and AUv3 capable but MidiFire simplifies so much of the stuff that crosses me up in StreamByter. Sometimes I use MidiFire to sketch out a complex project and then map it to SB later. Anyway, I think SB is a very generous utility to be offered for free; my complaints about it are swallowed up by the price tag.

    Interesting, according to my purchase history I paid $9.99 for StreamByter in 2018.

    I guess it became free at some point after that.

  • @busker said:

    @lukesleepwalker said:
    StreamByter is free and AUv3 capable but MidiFire simplifies so much of the stuff that crosses me up in StreamByter. Sometimes I use MidiFire to sketch out a complex project and then map it to SB later. Anyway, I think SB is a very generous utility to be offered for free; my complaints about it are swallowed up by the price tag.

    Interesting, according to my purchase history I paid $9.99 for StreamByter in 2018.

    I guess it became free at some point after that.

    Yes, the iOS version went free in 2019 after Mozaic basically killed its market. But it's still £19.99 on desktop and I hope bringing Nic in a reasonable income; it is a wonderful app in its own right.

  • @Proleet said:
    Ok, fixed it the easy way! On page 6 of the manual, it says:

    "Rules are evaluated top to bottom and the results of each rule are fed into the next (unless the clone flag is set)."

    So just adding +C at the end of each line does the trick!

    When you clone, the original message remains present, so both the original and the clone exit the script. You need to block the original messages. You could enclose the whole process in if M0==BA so non-CCs can still pass normally.

Sign In or Register to comment.