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.

The Unofficial Mozaic User Helpline

12346

Comments

  • Quick question,
    Is there a way to control the pads from some of the Mozaic patches (for example LFOs, https://patchstorage.com/lfos/) from Atom Piano Roll2 for instance? I would like to have a way to turn these pads on or off automatically, without me having to click press on them.

    Thanks!

  • @cfour said:
    Quick question,
    Is there a way to control the pads from some of the Mozaic patches (for example LFOs, https://patchstorage.com/lfos/) from Atom Piano Roll2 for instance? I would like to have a way to turn these pads on or off automatically, without me having to click press on them.

    Thanks!

    The pads (and other controls) are accessible as AUv3 parameters, so you can MIDI map them to notes or CCs in your host, e.g. AUM or Audiobus. Alternatively, you could modify the script to respond to MIDI inputs directly.

  • @uncledave said:

    @cfour said:
    Quick question,
    Is there a way to control the pads from some of the Mozaic patches (for example LFOs, https://patchstorage.com/lfos/) from Atom Piano Roll2 for instance? I would like to have a way to turn these pads on or off automatically, without me having to click press on them.

    Thanks!

    The pads (and other controls) are accessible as AUv3 parameters, so you can MIDI map them to notes or CCs in your host, e.g. AUM or Audiobus. Alternatively, you could modify the script to respond to MIDI inputs directly.

    Thanks for the quick reply @uncledave
    I would like to have the pads on or off from notes triggered by APR2, but on Mozaic I see an option for "note 0", "note 1" etc, but I don't know what notes it is referring to (e.g. C1?, C2?), unless I am misunderstanding something. I tried different notes but none did the job

  • It is referring to the MIDI note number; note the Range 0 MIDI –> 127 MIDI. So, middle C is MIDI 60, named C4 in AUM, C3 in some other apps. You can work out from there.

  • @uncledave said:
    It is referring to the MIDI note number; note the Range 0 MIDI –> 127 MIDI. So, middle C is MIDI 60, named C4 in AUM, C3 in some other apps. You can work out from there.

    Thanks! working perfectly now. I noticed I had forgotten to add the midi source on the midi control window of mozaic :#

    Thanks for the help :smile:

  • edited May 2022

    Any reason or anything I should look at for Mozaic changing a sysex value when it's sent?

    Never happened before. The script is just sending 16 sysex strings to test if a controller is reacting.

  • wimwim
    edited May 2022

    @AlmostAnonymous said:
    Any reason or anything I should look at for Mozaic changing a sysex value when it's sent?

    Never happened before. The script is just sending 16 sysex strings to test if a controller is reacting.

    Nothing has been changed. Mozaic is showing decimal. Streambyter is showing Hexadecimal.

    20 decimal = 14 hexadecimal.

  • McDMcD
    edited May 2022

    For the casual reader, here's the math behind why 20 in decimal is the same as 14 in Hexidecimal. I HAVE EDITED THIS SENTENCE TO FIX TYPO OF "20" as "28".

    Computers came from transistor networks and store all numbers in binary formats of switches representing On and Off values.

    So, numbers internally are stored as rows of 1's and 0's.

    Hexidecimal represents these 1's and 0's in grouping of 4:

    0000 = 0 (add a 1 to get to the next row each time with 1 + 1 going up to a 10)
    0001 = 1
    0010 = 2
    0011 = 3
    0100 = 4
    0101 = 5
    0110 = 6
    0111 = 7
    1000 = 8
    1001 = 9 we need a symbol to represent the next number (10) in a single character...
    letters are chosen
    1011 = A
    1100 = B
    1101 = C
    1110 = D
    1111 = F

    So HEX 14 is seen by the computer as 0001 0100. That's a 1 in the 16 column and a 1 in the 1's 4. 16+4 = 20 in decimal.

    If you got lost in the concepts you are not alone. When you study computer engineering you are not allowed to give up. I recall a test where the sadistic professor made us to some basic
    arithmetic in binary and we had to show our work. It was like multiple 13 x 11 in binary.
    He wanted us to bring essay books for the test so we had pages to show our work.

    He also gave us a final project where we had to implement a 16-bit computer board using "4 Bit Slice" chips... each chip did math on 4 bit values and could pass the carry bits up from the chip on the right. We had to hand code a program to print one of those messages on 4-bit LED displays. Nights and weekends for about 6 weeks to finish it the project win groups of 4 students. The assignment came after it was too late to drop the class.

    The fact that StreamByter treats most numbers are Hex is the main reason Mozaic is so much easier to learn. It's like jumping from Assembly language to Basic.

  • edited May 2022

    I don't have an issue with hex. The controller wasn't responding and MIDISpy was being prude dishing out what it received, so I just tried mfx. My brain just didn't switch gears. It should have seeing the glaring giant F0 F7

    Complete brain fart and I was more wrapped up in the controller not responding.

    Edit: its amazing that things work when you convert ALL of the sysex array to decimal....

  • Interesting nugget of info @McD

  • edited May 2022

    Hi, I just got Mozaic and am fiddling around to see how it works. I know I need to rtfm but have a question which may get a quicker solution here. Using the cc to note preset, I can change the pads on my launchpad pro mki, which is easy to do. That’s fantastic but I want to map about 20 of the buttons. Does this mean I need to have 20 instances of Mozaic going for each button? Or can you stack presets within one Mozaic instance? As I’m using loopy pro, that takes a shed load of mixer space as I don’t think I can group and minimalism the midi groups together. Im sure there’s an easier way to do this. Perhaps I need to learn how to make an appropriate preset. Any suggestions? TIA

  • @Lacerate said:
    Using the cc to note preset

    Can you provide more info on this statement? Is this a preset on the Launchpad or something you found in Mozaic? If it's Moziac then it's a script that can be modified for
    as many mappings as you'll need. You might learn to make the changes or provide details and get a solution crafted for you and others that have launchpads. There's ben a lot of
    work done already for this device I think with solution posted to http://patchstorage.com/mozaic.

    I can change the pads on my launchpad pro mki, which is easy to do. That’s fantastic but I want to map about 20 of the buttons.

    This is requirement someone with this hardware to design and test a solution if it's not solved yet.

    Does this mean I need to have 20 instances of Mozaic going for each button?

    I doubt it. A script can perform thousands of interesting MIDI actions on a target... like a
    MIDI controller hardware, a software synth or any MIDI capable device. Using a DAW like AUM is required however. The Mozaic standalone app does not output MIDI... I wish it did but I understand Bram reason for NOT supporting it since AUM and the DAW's have rock solid MIDI features that he did not want to write or maintain. Writing a programmable
    IOS app is a tricky business and Bram gave us a rock solid tool and went on to make
    a dozen other products while we keep making cool Mozaic hacks.

    Or can you stack presets within one Mozaic instance?

    Should be doable with someone to do the work.

    As I’m using loopy pro, that takes a shed load of mixer space as I don’t think I can group and minimalism the midi groups together. Im sure there’s an easier way to do this. Perhaps I need to learn how to make an appropriate preset. Any suggestions? TIA

    You're welcome. I hope we can help get you a solution but you might have to explain
    more and get the interest of a scripter with a Launchpad. I almost bought one to play but
    a solid developer type jumped in to make the PAD light up and do all sorts of magical controls. Check out patchstorage and learn to download some Launchpad related solutions.

  • @Lacerate said:
    Hi, I just got Mozaic and am fiddling around to see how it works. I know I need to rtfm but have a question which may get a quicker solution here. Using the cc to note preset, I can change the pads on my launchpad pro mki, which is easy to do. That’s fantastic but I want to map about 20 of the buttons. Does this mean I need to have 20 instances of Mozaic going for each button? Or can you stack presets within one Mozaic instance? As I’m using loopy pro, that takes a shed load of mixer space as I don’t think I can group and minimalism the midi groups together. Im sure there’s an easier way to do this. Perhaps I need to learn how to make an appropriate preset. Any suggestions? TIA

    You won’t need multiple instances. You will will probably need to learn the Mozaic scripting language to at least modify scripts for your purposes.

    It’s possible that one of the many pre-written scripts on patch storage.com can be used for your purposes. One that I can think of that might work for you is Basic MIDI Controls. https://patchstorage.com/basic-midi-controls/

    There’s a nice compact listing of scripts on the wiki: https://wiki.audiob.us/doku.php?id=mozaic_scripts_list.

  • @Lacerate said:
    Hi, I just got Mozaic and am fiddling around to see how it works. I know I need to rtfm but have a question which may get a quicker solution here. Using the cc to note preset, I can change the pads on my launchpad pro mki, which is easy to do. That’s fantastic but I want to map about 20 of the buttons. Does this mean I need to have 20 instances of Mozaic going for each button? Or can you stack presets within one Mozaic instance? As I’m using loopy pro, that takes a shed load of mixer space as I don’t think I can group and minimalism the midi groups together. Im sure there’s an easier way to do this. Perhaps I need to learn how to make an appropriate preset. Any suggestions? TIA

    You won't need multiple instances for each button. You may or may not need multiple instances to perform separate tasks.

    Mozaic is one of those things where it's hard to help you with it until you know what you are trying to do with it. What are you trying to accomplish or what problem are you trying to solve?

  • Thanks for the replies! It’s actually wims preset that i was testing https://patchstorage.com/cc-trigger-to-notes/ . As I’m using the LP mki in programmers mode, there’s no editor. And for this particular use, I just want to change the outer buttons to trigger lumbeat apps within loopy pro. So mozaic looks like it can do the job. I figured it’d require a bit of work and thought. The app is very new to me and there’s a lot of things I need to learn about mozaic. Guess I’ll start with the basic midi controls. Cheers!

  • @Lacerate said:
    Thanks for the replies! It’s actually wims preset that i was testing https://patchstorage.com/cc-trigger-to-notes/ .

    You can add or request additional features for cc-trigger-to-notes.
    Here's the workflow to get there:

    What events are generated by the Launchpad when you push one of those buttons?
    Use an @OnMIDIInput code block to catch these events. Such a code block probably exists.
    You just need to add "If" tests to catch the specific MIDI type and data being sent it.
    Then you send out the desired MIDI instructions you want.

    I hope this helps. Anyone can read @wim's script and offer assistance or advice without
    breaking his script as it exists on patchstorage. Check @wim's license for permission to create a "forked" version of the code.

    As a start, what MIDI does pressing these buttons generate? There are MIDI monitors to
    answer this question or there would be details in the product docs.

  • Hey @Lacerate - there might be a solution that doesn't involve scripting for your immediate need. mfxConvert is a great little utility that allows you to change multiple midi messages from one type to another. You just need to set it to Learn mode, then send a midi message. Then you can configure what should come out the other side when that message is received. Keep repeating until all your buttons are mapped. You can save a preset with those mappings for later use.

    Also - for pure converting tasks such as this, StreamByter can be a trimmer alternative to Mozaic. Each conversion is one line of code, such as:

    # Replace Channel 1, CC 20 with Note-on 36
    B0 14 XX = 9X 24 FF
    

    (I didn't actually test that script, but it should give an idea.)

    BTW, mfxConvert is basically just a front-end to internal Streambyter code generated behind the scenes in the plugin.

  • Thanks again everyone….it all helps! @wim that seems to be an easier solution….wasn’t keen on buying more stuff but I’m sure the time it saves is worth it. I’ll have a look at streambyter too as I’ve already got it. Strangely, the basic midi control preset doesn’t show in my mozaic. There’s another LP preset in patch storage that doesn’t appear too. They’re both in my mozaic folder. Cheers for all the help, ideas and suggestions!

  • @Lacerate said:
    Thanks again everyone….it all helps! @wim that seems to be an easier solution….wasn’t keen on buying more stuff but I’m sure the time it saves is worth it. I’ll have a look at streambyter too as I’ve already got it. Strangely, the basic midi control preset doesn’t show in my mozaic. There’s another LP preset in patch storage that doesn’t appear too. They’re both in my mozaic folder. Cheers for all the help, ideas and suggestions!

    File management with Moziac is a bit tricky.

    I use this process:

    1. Request the download from PatchStorage.
    2. Go to the Downloads directory in the Files app and search by Date.
    3. You should see the downloaded *.Mozaic file at the top of the listing (are you using list format?)
    4. Click on the Mozaic file.
    5. IOS will display this page showing that this is a Mozaic script.
    6. Use the “Share” icon in the upper right corner.
    7. A list of possible targets will be displayed and you want to send this file into the Mozaic app. Find it’s icon and click on it. You may have to open the elipsis to see a complete list of apps to select from. After you do this it should display Mozaic in the top line listing.
    8. Mozaic Standalone instance will open and it’s somewhat worthless since it doesn’t output any MIDI but you can confirm the file made it.
    9. Hit LOAD in the Mozaic GUI and scan for your file in the alphabetical listing of loaded scripts… if it’s not there use the refresh button to have Moziac re-Shane storage.
    10. Hit the Script name and it will load.
    11. To read the script use the CODE button and hit UPLOAD if you make any changes.
  • @McD thanks for the detailed solution. That indeed worked for both patches. Cheers!

  • @Lacerate said:
    @McD thanks for the detailed solution. That indeed worked for both patches. Cheers!

    I hope more seek out solutions on patchstorage for Mozaic, Drambo, Atom, AudioKit Synth One, miRack, Moog Model D, Moog Model 15, NanoStudio 2, Beatmaker 3, Holon.ist, Tonality, Groove Rider and (wait for it)... FAC Drumkit which is waiting for it's first upload.

  • edited September 2022

    I think I already know the answer to this, but is there anyway to put a variable in a sysex array you’re sending?
    Var1 = 16
    Sysex1 = [01, 84, Var1]
    SendSysex sysex1, 3

    I’m looking to send a lot of the same strings multiple times with only the variable being a different in every array.
    I have a feeling I might have to copy a few arrays into a new array to send and loop that.

  • Var1 = 16
    Sysex1[0] = [01, 84]
    Sysex1[2] = Var1
    SendSysex sysex1, 3
    
  • @wim said:

    Var1 = 16
    Sysex1[0] = [01, 84]
    Sysex1[2] = Var1
    SendSysex sysex1, 3
    

    That’s what I thought. Had to copy. It will be multiple copies. There will be multiple variables in the string with consistent stuff between them.

    Var1 = [1,2]
    Var2 = [3,4]
    Sysex1 = [10, 11]
    Sysex2 = [12, 13]
    Sysex3 = sysex1
    Sysex3[2] = var1[0]
    Sysex3[3] = sysex2
    Sysex3[5] = var2[0]
    SendSysex3, 6
    

    (Prolly some incorrect syntax in there, but that’s the gist?)

  • Setting a single position by a direct assignment will work, but if you want to insert an array into another array, you need to use CopyArray.

    @OnLoad
      Var1 = [1,2]
      Var2 = [3,4]
      Sysex1 = [10, 11]
      Sysex2 = [12, 13]
    
      // Sysex3 = sysex1 ... won't work
      CopyArray Sysex1, Sysex3
    
      Sysex3[2] = var1[0]
    
      // Sysex3[3] = sysex2  ... won't work
      CopyArray Sysex2, Sysex3[3]
    
      Sysex3[5] = var2[0]
    
      // SendSysex3, 6 ...incorrect syntax
      SendSysex Sysex3, 6
    
      // Test
      for I = 0 to 5
        Log Sysex3[i]
      endfor
    @End
    

    I don't know if you had a specific reason for taking all those steps. If not, you could also do something like this:

    @OnLoad
      Var1 = [1,2]
      Var2 = [3,4]
    
      // I like to use -1 as a placeholder for unknown values.
      Sysex3 = [10, 11, -1, 12, 13, -1]
      Sysex3[2] = Var1[0]
      Sysex3[5] = Var2[0]
      SendSysex Sysex3, 6
    
      // Test
      for I = 0 to 5
        Log Sysex3[i]
      endfor
    @End
    
  • @wim
    My use case here is scripting an Arturia beatstep. For example, to control a pad and make it a midi cc switch, I have to send some or all of the following (x16 pads):

    CC SWITCH MODE (VV=8)
    Invoked by F0 00 20 6B 7F 42 02 00 01 cc 08 F7.
    
    Setting the parameters: Send F0 00 20 6B 7F 42 02 00 and then…
    
    …02 cc vv F7 to set MIDI channel (vv: channel-1, 0-15)
    …03 cc vv F7 to set the CC (vv from 0-127)
    …04 cc vv F7 to set the Off value (vv from 0-127)
    …05 cc vv F7 to set the On value (vv from 0-127)
    …06 cc vv F7 to set the behaviour: 0=Toggle, 1=Gate
    

    (the above taken from https://www.untergeek.de/2014/11/taming-arturias-beatstep-sysex-codes-for-programming-via-ipad/)

    This doesn’t even control the light status. It’s roughly the same thing for the 16 encoders. So I’ll be saving states of lights,pads,encoders in lots of arrays, and finding an easy routine to loop sysex strings built from these arrays seems the best way (no?).

  • wimwim
    edited September 2022

    Fair enough. If there's a reason for copying arrays around then by all means go for it. I was just making sure it's clear that you don't have to build up arrays by appending the parts together in order.

    and that was really distracting from the main point: Changing a single value in an array can be used with an = operation, but operations with multiple elements have to be done with CopyArray.

  • edited September 2022

    Do you see a better way? I’m picturing something for the above would be build the sysex string for midi channel of a pad (pulled from an array), loop that 16 times, replacing pad number and midi channel each time. Then build light status, loops 16 times,…..

    I’d really only have to send all 6 or 7 once to set it up at @onload, after than it’s 2 or 3 to just update.

    I’ve built a couple UIs for controllers, but most of the sysex in those was routine without variables. Single lines here and there. This is the 1st time everything needs to be done in sysex.

  • wimwim
    edited September 2022

    I dunno @AlmostAnonymous - I can't give a meaningful answer to a generalized question like that. I'd have to wrap my head around exactly what you're trying to do. I suggest just going for it. 👍🏼

    You've got the basics you need if you understand arrays in general, and when CopyArray is needed specifically.

Sign In or Register to comment.