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.

Request new Mozaic Scripts *HERE*

1282931333462

Comments

  • wimwim
    edited January 2021

    @palms said:
    I've heard this is a good place to request Mozaic scripts! :p

    I've got a hardware polysynth - Audiothingies Micromonsta 2. It can be microtuned but only by receiving the appropriate midi message. Here is the pertinent info from the manual:

    Unfortunately this advanced midi sysex jargon is simply beyond me. If somebody could help me with a script that can load scala files and spit out MTS messages to the Micromonsta, I would gladly compensate you for your time and effort.

    I'm envisioning something where I paste the scala files in (which are text based) and then turn an associated knob to select a scale, and hit a pad to send it to the synth.

    I don’t really see a much of a path for that to work. Mozaic can’t read in text files, nor would pasting text from a scala file work. You’d need something like a python script that could translate the scala files into array variables declared in Mozaic syntax, then copy and paste that code into a big-ass script. One array for each scale. And since there’s no dynamic text variables, the labeling of the scale select knob would be a huge if..then statement that would have to be hard coded for each scale.

    I guess it’s not impossible, but doesn’t seem very practical either.

  • what i mean is a scala file is just a string of ratios. I guess I meant text based, not text file. Sorry :)

  • here is an example of one tuning I use often. this is the contents of the scala file:

    ! bigler12.scl
    !
    Kurt Bigler, JI organ tuning, TL 28-3-2004
    12
    !
    25/24
    9/8
    7/6
    5/4
    4/3
    11/8
    3/2
    25/16
    5/3
    7/4
    15/8
    2/1

  • edited January 2021

    if this is any help at all, I just found a browser tool that converts scala files to mts.syx

    http://www.microtonalsoftware.com/scl-scala-to-mts-converter.html

    if the mozaic patch could do what this tool does and transmit it, that should get the job done. if that is too tall an order, then perhaps some way to transmit the data converted with this web tool. I just need it to work. The ability to see and edit the ratios from the scala file in the mozaic script would be much more ideal though.

    this is what I get when I drop that same scala tuning in. (opened in textedit because I have no idea what I'm doing)

    ~bigler12Z;ULn>}@AX@{;k} X
    p~Z;ULn>}@AX@{;k}Xp~Z;ULn>}@AX@{; k}!X"p~$$Z;&&UL'n>(}@)AX+@+{;,k}-X.p~00Z;22UL3n>4}@5AX7@7{;8k}9X:p~<<Z;>>UL?n>@}@AAXC@C{;Dk}EXFp~HHZ;JJULKn>L}@MAXO@O{;Pk}QXRp~TTZ;VVULWn>X}@YAX[@[{;\k}]X^p~Z;bbULcn>d}@eAXg@g{;hk}iXjp~llZ;nnULon>p}@qAXs@s{;tk}uXvp~xxZ;zzUL{n>|}@}AX@˜

  • wimwim
    edited January 2021

    @palms said:
    if this is any help at all, I just found a browser tool that converts scala files to mts.syx

    http://www.microtonalsoftware.com/scl-scala-to-mts-converter.html

    if mozaic could do what this tool does, or if that is too tall an order, some way to transmit scales converted with this web tool. I just need it to work. The ability to see and edit the ratios from the scala file in the mozaic script would be ideal.

    this is what I get when I drop that same scala tuning in. (opened in textedit because I have no idea what I'm doing)

    ~��bigler12������������Z;ULn>}@AX@{;k} X
    p~��Z;ULn>}@AX@{;k}Xp~��Z;ULn>}@AX@{; k}!X"p~$��$Z;&&UL'n>(}@)AX+@+{;,k}-X.p~0��0Z;22UL3n>4}@5AX7@7{;8k}9X:p~<��<Z;>>UL?n>@}@AAXC@C{;Dk}EXFp~H��HZ;JJULKn>L}@MAXO@O{;Pk}QXRp~T��TZ;VVULWn>X}@YAX[@[{;\k}]X^p~��Z;bbULcn>d}@eAXg@g{;hk}iXjp~l��lZ;nnULon>p}@qAXs@s{;tk}uXvp~x��xZ;zzUL{n>|}@}AX@˜

    The web tool gets things closer. But the output would still need to be converted into Mozaic syntax. Probably process the file with a python script, open in a text editor, copy and paste into Mozaic... it would be a several step manual process for each scale.

    Is iOS the only option for you? It seems like a desktop with Python scripting and some midi libraries would be more direct. (Not that my Python scripting ability is up to that ... But maybe you could find someone who can manage it.)

  • thanks for the info @wim

    you'll have to forgive me, as I essentially have zero knowledge about coding, so much of that is greek to me. So, should I give up and try another avenue? Is there another tool on ios that might accomplish this task?

    tbh, I wouldn't mind the extra steps as long as I can load a few dozen scales in and use the mozaic panel to select and send them to the Micromonsta.

    I should mention that I don't really need the scale name to be visible on the mozaic interface. simply numbering them is preferable since I'm calling up scales on other synths as well so matching the numbers so the scales match is the simplest method anyhow.

  • ok, I just figured out that I can send these syx tunings from an ios sysex librarian called sysex base. Would be nice to send them from within a host, but this will have to do for now.

  • wimwim
    edited January 2021

    No need to apologize. Any questions are good ones.

    If you'd like to upload a couple of the files, converted with the web tool here, I can take a look at what it might take to convert them to a Mozaic script. If it's a limited number of scales, and you don't need naming in the interface, it might not be so bad. I was picturing there was more to it than you really need.

    Sysex might be the better alternative, but it's worth a look. You might need to zip the files to attach them here.

  • Hi Mozaic gurus,
    I’d like to request a script to sync Gauss recording to the beat.
    It’s impossible to, say, play guitar and record a loop because you have to press the “rec” button right on time. You can automate this via LK or something like that, but it’d be really handy to have Mozaic do it.
    The way it’d work is you press a Mozaic pad and it won’t send the midi Cc until the next bar (4 beats... better if configurable), same to stop the loop. That way you’d get nice loops in time. There’s probably scripts for this or very similar...
    Cheers!.

  • wimwim
    edited February 2021

    @tahiche said:
    Hi Mozaic gurus,
    I’d like to request a script to sync Gauss recording to the beat.
    It’s impossible to, say, play guitar and record a loop because you have to press the “rec” button right on time. You can automate this via LK or something like that, but it’d be really handy to have Mozaic do it.
    The way it’d work is you press a Mozaic pad and it won’t send the midi Cc until the next bar (4 beats... better if configurable), same to stop the loop. That way you’d get nice loops in time. There’s probably scripts for this or very similar...
    Cheers!.

    LK is perfect for this if I understand what you want correctly. Can you describe what would be better about a Mozaic script? It would help in designing something to understand the difference.

  • wimwim
    edited February 2021

    nvm @tahiche - I had a few minutes to kill ...

    @Description
    Press a pad to send a midi message at the next bar, or number of bars.
    @End
    
    @OnLoad
    
      if Unassigned init
        init = YES
    
        // change these to suit (Mozaic channels are numbered 0-15, not 1-16)
        chan = 15
        cc = 20
        ccValue = 127
    
        bars = 0    
        queued = NO 
        counter = 0
    
        knob = 0
        SetKnobValue knob,(TranslateScale bars,0,3,0,127)
        Call @SetKnobLabel
        LabelPad 0, {Press any pad to send.}
        LabelPad 1, {Host must be running.}
      endif
    
      ShowLayout 0
    
    @End
    
    @OnPadDown
      queued = YES
    @End
    
    @OnNewBar
      if queued = YES
        Inc counter
        if counter > bars
          queued = NO
          counter = 0
          SendMIDICC chan,cc,ccValue
          // Gauss needs to have a zero value following.
          SendMIDICC chan,cc,0,200
        endif
      endif
    @End
    
    @OnKnobChange
      knob = LastKnob
      value = GetKnobValue knob
    
      if LastKnob = 0 
        bars = Round (TranslateScale value,0,127,0,3)
      endif
    
      Call @SetKnobLabel
    @End
    
    @SetKnobLabel
      if knob = 0
        if bars = 0
          LabelKnob knob, {Next Bar}
        else
          LabelKnob knob, {Bar }, (bars+1)
        endif
      else 
        LabelKnob knob,{ }
      endif
    @End
    
  • @wim said:
    nvm @tahiche - I had a few minutes to kill ...

    @Description
    Press a pad to send a midi message at the next bar, or number of bars.
    @End
    

    Looks great!. I’ll give it a try.
    Thing with LK is that it’d trigger every time, plus it’s handier yo have this simple functionality on the same track. I know can Enso can do it but I don’t find it very clear.
    Thanks @wim I’ll let you know how it goes!, you’re a Mozaic legend!.

  • @tahiche said:

    @wim said:
    nvm @tahiche - I had a few minutes to kill ...

    @Description
    Press a pad to send a midi message at the next bar, or number of bars.
    @End
    

    Looks great!. I’ll give it a try.
    Thing with LK is that it’d trigger every time, plus it’s handier yo have this simple functionality on the same track. I know can Enso can do it but I don’t find it very clear.
    Thanks @wim I’ll let you know how it goes!, you’re a Mozaic legend!.

    It works!!. Very handy.
    I did have to make a minor adjustment, would have taken you 0.2 secs it took me a while to figure it out... apparently Gauss needs an “off” message. I figured out with LK, having just one node wouldn’t trigger, but it would if you added a second node... so I tried sending a Cc with value 0. Still no luck until I discovered the delay parameter checking out the send note off docs...
    This is the line in question.

    Does that make sense or did I get lucky?. Thanks a lot @wim.
    On a side note... I don’t really get the Gauss hype 😬 but as I said Enso looks a bit confusing for these simple chores, they’re the only 2 “working” loopers I know of (L7 doesn’t work right). With Mozaic Gauss can be made to work for synced use. Cheers.

  • @tahiche said:

    @tahiche said:

    @wim said:
    nvm @tahiche - I had a few minutes to kill ...

    @Description
    Press a pad to send a midi message at the next bar, or number of bars.
    @End
    

    Looks great!. I’ll give it a try.
    Thing with LK is that it’d trigger every time, plus it’s handier yo have this simple functionality on the same track. I know can Enso can do it but I don’t find it very clear.
    Thanks @wim I’ll let you know how it goes!, you’re a Mozaic legend!.

    It works!!. Very handy.
    I did have to make a minor adjustment, would have taken you 0.2 secs it took me a while to figure it out... apparently Gauss needs an “off” message. I figured out with LK, having just one node wouldn’t trigger, but it would if you added a second node... so I tried sending a Cc with value 0. Still no luck until I discovered the delay parameter checking out the send note off docs...
    This is the line in question.

    Does that make sense or did I get lucky?. Thanks a lot @wim.
    On a side note... I don’t really get the Gauss hype 😬 but as I said Enso looks a bit confusing for these simple chores, they’re the only 2 “working” loopers I know of (L7 doesn’t work right). With Mozaic Gauss can be made to work for synced use. Cheers.

    For the record trigger, each toggle needs a 127 followed by a 0. The 0 value is ignore but is needed to complete the trigger.

  • @tahiche said:
    Does that make sense or did I get lucky?. Thanks a lot @wim.

    Makes total sense. Good job figuring it out. Sorry, I didn't have time to test with Gauss directly. I'll make the change to the script in my post just in case someone copies and pastes without reading further on.

  • wimwim
    edited February 2021

    @tahiche said:
    Thing with LK is that it’d trigger every time...

    You can turn off looping in individual LK clips, making them "one-shots" ... just so you know for future reference.

  • @wim said:
    No need to apologize. Any questions are good ones.

    If you'd like to upload a couple of the files, converted with the web tool here, I can take a look at what it might take to convert them to a Mozaic script. If it's a limited number of scales, and you don't need naming in the interface, it might not be so bad. I was picturing there was more to it than you really need.

    Sysex might be the better alternative, but it's worth a look. You might need to zip the files to attach them here.

    yeah, simple works for me. If you have any interest in giving it a go, I'd be overjoyed. My goal is to get the scale loading process streamlined for when playing out in the real world is a thing again. Less fiddling with apps between pieces :)

    here's a zip with 4 converted files.

  • Has anyone got the ability to work on an arpeggiator script close to ableton's functionality...particularly the hold and repeats functionality?

  • @espiegel123 said:

    For the record trigger, each toggle needs a 127 followed by a 0. The 0 value is ignore but is needed to complete the trigger.

    But it also needs a little delay (the 200 ms parameter) between the on and off trigger command, without it it doesn’t work. That was the trickiest part.

  • So this may be a ridiculously large ask, but I'm looking for a controller to use in AUM with 8 channels of Gauss so I can create a tape loop symphony. I started making something basic in KB-1, but I think Mozaic, with all it's pages, would be even better.

    1. I want to have Gauss start and stop with AUM, so the pause/rewind buttons should mapped to start/stop.
    2. 8 buttons each for recording, erase, and overdubbing (1 for each track)
    3. Sliders for tape speeds of each track and knobs for wobble and loop decay

    I'm not as concerned about the delays/filters as I would use external FX.

    What'd be awesome would be to have various pages laid out as such. This would allow you to either control each machine individually, or parts of each one at the same time.

    1. Page with all 8 tracks record, erase, and overdub buttons.
    2. Page with all 8 tracks tape speeds and knobs for wobble/loop decay.
    3. Then 8 pages, 1 for each track, with the record/erase/overdub and sliders/knobs all on one.

    A bonus would be an extra page of 8 sliders and knobs for volume and pan of AUM's channels specifically.

    My brain is not made out for coding. I've tried reading the manual, looking at what other people are doing, and I just can't get a hold of it. I'd be happy to assist in any way I can, though. If anyone has an idea as to how I could easily do this on my own, that'd be awesome. I love Mozaic, but I wish there was a Lemur-like ability to just drag and drop GUI elements and map them immediately.

  • After diving into Mozaic more, I realized that what I'm requesting up top there isn't really feasible since the GUI is set to only 5 layouts. However, I did realize that I could probably make some simple scripts and layouts for what I want using multiple instances of Mozaic (I'd probably need 4 or 5 instances). I started making a basic controller for a few aspects of Gauss that I'd want to control this morning (using @wim basicMIDIcontrols as a learning tool). However, I'm a bit stuck on how to get the XY pad to send MIDI CCs as opposed to be attached to a particular set of knobs.

    I assumed that this would do it, but it does not. Basically, I want to send CC 0 and 1 on Channel 16 (which I believe should be labeled Channel 15, yes?). Thanks in advance!

    @OnXYChange
    X = GetXValue
    SendMIDICC 15, 0, x
    Y = GetYValue
    SendMIDICC 15, 1, y
    @end

  • @slicetwo said:
    After diving into Mozaic more, I realized that what I'm requesting up top there isn't really feasible since the GUI is set to only 5 layouts. However, I did realize that I could probably make some simple scripts and layouts for what I want using multiple instances of Mozaic (I'd probably need 4 or 5 instances).

    Well, it could be done, but it would involve a lot of code.

    I started making a basic controller for a few aspects of Gauss that I'd want to control this morning (using @wim basicMIDIcontrols as a learning tool). However, I'm a bit stuck on how to get the XY pad to send MIDI CCs as opposed to be attached to a particular set of knobs.

    I assumed that this would do it, but it does not. Basically, I want to send CC 0 and 1 on Channel 16 (which I believe should be labeled Channel 15, yes?). Thanks in advance!

    @OnXYChange
    X = GetXValue
    SendMIDICC 15, 0, x
    Y = GetYValue
    SendMIDICC 15, 1, y
    @end

    There's nothing wrong with that code. It works for me. Perhaps you forgot to hit the Upload button?

  • @slicetwo said:
    After diving into Mozaic more, I realized that what I'm requesting up top there isn't really feasible since the GUI is set to only 5 layouts. However, I did realize that I could probably make some simple scripts and layouts for what I want using multiple instances of Mozaic (I'd probably need 4 or 5 instances). I started making a basic controller for a few aspects of Gauss that I'd want to control this morning (using @wim basicMIDIcontrols as a learning tool). However, I'm a bit stuck on how to get the XY pad to send MIDI CCs as opposed to be attached to a particular set of knobs.

    I assumed that this would do it, but it does not. Basically, I want to send CC 0 and 1 on Channel 16 (which I believe should be labeled Channel 15, yes?). Thanks in advance!

    @OnXYChange
    X = GetXValue
    SendMIDICC 15, 0, x
    Y = GetYValue
    SendMIDICC 15, 1, y
    @end

    Are your sure that it isn't working? It works fine for me. Stick send the output to a MIDI monitor and see what values are being sent out.

    Btw you can condense things a little by doing:

    @OnXYChange
     SendMIDICC 15, 0, GetXValue
    SendMIDICC 15, 1, GetYValue
    @end
    
  • @wim @espiegel123 thanks! I didn't upload it... Haha. Ugh.

  • @slicetwo said:
    @wim @espiegel123 thanks! I didn't upload it... Haha. Ugh.

    It'll become like blinking soon. You won't even realize you're doing it. :D

  • @wim said:

    @slicetwo said:
    @wim @espiegel123 thanks! I didn't upload it... Haha. Ugh.

    It'll become like blinking soon. You won't even realize you're doing it. :D

    I hope so! Now I'm trying to figure out how to limit CC ranges on a knob value so that I can basically use it to automatically snap to a value when I touch it. The manual is so long and so deep, yet I feel like I'm missing so much!

  • @slicetwo said:

    @wim said:

    @slicetwo said:
    @wim @espiegel123 thanks! I didn't upload it... Haha. Ugh.

    It'll become like blinking soon. You won't even realize you're doing it. :D

    I hope so! Now I'm trying to figure out how to limit CC ranges on a knob value so that I can basically use it to automatically snap to a value when I touch it. The manual is so long and so deep, yet I feel like I'm missing so much!

    I am not quite sure what you mean. Can you give an example. I often find myself using the rounding functions and translatescale functions so that knobs have the range I want. You can also set knob values.

  • wimwim
    edited February 2021

    @slicetwo said:

    @wim said:

    @slicetwo said:
    @wim @espiegel123 thanks! I didn't upload it... Haha. Ugh.

    It'll become like blinking soon. You won't even realize you're doing it. :D

    I hope so! Now I'm trying to figure out how to limit CC ranges on a knob value so that I can basically use it to automatically snap to a value when I touch it. The manual is so long and so deep, yet I feel like I'm missing so much!

    The only "snap" available with knobs is double-tap, which sets it to 64.

    One way is to use TranslateScale to set the value you want to the middle of the range for the knob. TranslateScale uses three pieces of information for knobs: the current value of the knob, the range of the knob (always 0-127), and the range that you want output.

    So, if you wanted a knob that goes from 1 to 12, with 6 as the "double-tap" default value you'd have something like:

    @OnKnobChange
      knob = LastKnob
      value = GetKnobValue LastKnob
    
      x = Round ( TranslateScale, value, 0, 127, 1, 12 )
    @End
    

    Note that you also need to use Round to avoid decimals as the knobs put out high precision numbers.

  • edited February 2021

    @espiegel123 @wim

    Basically, the SNAPSPEED knob on Gauss only has 11 settings, so CC0 is -2x, CC1-14 triggers -1x, etc. I want to basically assign one knob to hover between 1-14, for example, as Gauss seems to need to the knob motion to trigger the speed change. Does that make sense?

    @wim

    Where would I insert your code in the following (this is sending the snap speed to all 8 Gauss instances at once). You can see I had tried to just send CC2, but that didn't work.

    if LastKnob = 5
    setting = GetKnobValue 5
    SendMIDICC 3, 101, 2
    SendMIDICC 3, 102, 2
    SendMIDICC 3, 103, 2
    SendMIDICC 3, 104, 2
    SendMIDICC 3, 105, 2
    SendMIDICC 3, 106, 2
    SendMIDICC 3, 107, 2
    SendMIDICC 3, 108, 2
    Endif

  • wimwim
    edited February 2021

    @brambos - If you ever open this one up again, I would really, really love to see an @OnKnobRelease event. So many times I do not want a food of cc messages going out while knobs are being moved. If there was detection of when the knob is let go, I could easily defer sending until all the movements are done. It's a challenge otherwise.

Sign In or Register to comment.