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.

MOZAIC - Create your own AU MIDI plugins - OUT NOW!

16768707273102

Comments

  • Inspired by another thread, I was thinking that I could use my BT-106 Airturn as a Bluetooth sustain pedal. And I thought about Mozaic!

    Do you guys think it’s possible to create a plugin that converts "QWERTY’ keystrokes to MIDI messages?

  • @Keyb said:
    Inspired by another thread, I was thinking that I could use my BT-106 Airturn as a Bluetooth sustain pedal. And I thought about Mozaic!

    Very easy to convert one specific MIdi event in to another going out button done and up to sustain on and off.

    Do you guys think it’s possible to create a plugin that converts "QWERTY’ keystrokes to MIDI messages?

    We can’t find an app that converts keyboard events into midi events. Dev’s need to make an AUv3 for us.

  • wimwim
    edited March 2020

    @McD said:

    @Keyb said:
    Inspired by another thread, I was thinking that I could use my BT-106 Airturn as a Bluetooth sustain pedal. And I thought about Mozaic!

    Very easy to convert one specific MIdi event in to another going out button done and up to sustain on and off.

    Or just use mfxConvert and not need to do any programming.

    Do you guys think it’s possible to create a plugin that converts "QWERTY’ keystrokes to MIDI messages?

    No, that's not possible with Mozaic.

    We can’t find an app that converts keyboard events into midi events. Dev’s need to make an AUv3 for us.

    Sidecar MIDI Controller by Secret Base Design can do that in a somewhat limited fashion.

  • @lukesleepwalker said:
    What is the fastest way to reset the round robin script when a new key is struck? So hit C and it plays three round robin notes. Hit D and I want it to start on D and play three notes (not the interval it last played when striking C). Thoughts?

    Anyone?

  • McDMcD
    edited March 2020

    @ three said:

    @lukesleepwalker said:
    What is the fastest way to reset the round robin script when a new is struck? So hit C and it plays round robin notes. Hit D and I want it to start on D and play three three (not the interval it last played when striking C). Thoughts?

    Round robin implies some application behavior. Mozaic accepts MIDI in and has no precise concepts for Round Robin. So it’s hard to assist you.

    To change script behavior have it do something when a unique event comes in to request a change back to some state.

    Remember Mozaic manages 1 event at a time and we get clever to make it all feel linear but it’s really a State Machine that has memory by changing and evaluating variables.

    So for a reset send midi note 127 or something you’d never hear and code the “reset” of variables to change behaviors.

  • wimwim
    edited March 2020

    @lukesleepwalker said:

    @lukesleepwalker said:
    What is the fastest way to reset the round robin script when a new key is struck? So hit C and it plays three round robin notes. Hit D and I want it to start on D and play three notes (not the interval it last played when striking C). Thoughts?

    Anyone?

    That script doesn’t have a reset function. Here’s a modified version that adds a reset knob. Double-tap it, turn it past 12 o’clock, or set the AU parameter Knob 2 to 64 or greater to reset the round-robin to the base note.

    (Note, for others - the base script was posted by @Brambos on patchstorage: https://patchstorage.com/round-robin/)

    @OnLoad
      // state saved or initialise now?
      if Unassigned numnotes
        numnotes = 3
        roundrobin = YES
        pointer = 0
        SetKnobValue 2,0
      endif 
    
      // set up UI
      ShowLayout 2
      Call @MyKnobLabels
      //LabelKnob 2, { }
      LabelKnob 3, { } 
      LabelKnobs {Mode} 
      LabelPads { }
    @End
    
    
    // Handle MIDI input
    
    @OnMidiNoteOn
      if roundrobin = NO
        pointer = Random 0, numnotes-1 
      endif
    
      newnote = MIDINote + pointer
      SetNoteState MIDIChannel, MIDINote, newnote // remember what we did
      SendMIDINoteOn MIDIChannel, newnote, MIDIVelocity
    
      FlashPad pointer
    
      Inc pointer
      if pointer >= numnotes
        pointer = 0
      endif
    @End
    
    
    @OnMidiNoteOff
      newnote = GetNoteState MIDIChannel, MIDINote
      SendMIDINoteOff MIDIChannel, newnote, MIDIVelocity
    @End
    
    
    @OnMidiInput
      // if MIDI input is not a note on/off then send thru unchanged...
      if MIDICommand <> 0x90 and MIDICommand <> 0x80
        SendMIDIThru
      endif
    @End
    
    
    // GUI Stuff
    
    @OnKnobChange
      value = GetKnobValue LastKnob
      if LastKnob = 0
        numnotes = Round (TranslateScale value, 0, 127, 1, 16)
      elseif LastKnob = 1
        roundrobin = (value < 64)
      elseif LastKnob = 2
      // Add a round-robin reset knob
        if value >= 64
          pointer = 0
          //reset the knob position so that double-tap will trigger it
          SetKnobValue 2,0
        endif
      endif
    
      Call @MyKnobLabels
    @End
    
    
    
    @MyKnobLabels
      LabelKnob 0, {Notes:}, numnotes
      if roundrobin
        LabelKnob 1, {Round}
      else
        LabelKnob 1, {Random}
      endif
      // Add a round-robin reset knob
      LabelKnob 2, {Reset}
    @End
    
    
    @Description
    (Modified version to include a round-robin reset. Double-tap, turn past 12-o'clock, or set AU-Parameter Knob 2 to 64 or above to reset. @wim)
    
    This script applies a round-robin or random-robin algorithm to incoming notes. 
    E.g. when the number of notes is set to 3 and you repeatedly trigger C3, this script will play C3, C#3, D3, C3, C#3, ... instead. 
    When you send C4 it will send C4, C#4, D4, etc. So you only need to trigger the base notes.
    
    When random-robin is selected it will do the same but randomly pick notes from the range instead.
    @End
    
  • It seems to me like the round-robin should reset automatically when a new note is triggered. Wouldn’t that make more sense?

  • @wim thanks. I didn’t see the context for the question. But didn’t see anyone taking up the request either.

  • edited March 2020

    @wim said:
    It seems to me like the round-robin should reset automatically when a new note is triggered. Wouldn’t that make more sense?

    That's exactly my point! Your revised script above adds a knob to do the reset (thanks for that!), but I'm suggesting that it is reset on the fly when a new note is played.

  • @lukesleepwalker said:

    @wim said:
    It seems to me like the round-robin should reset automatically when a new note is triggered. Wouldn’t that make more sense?

    That's exactly my point! Your revised script above adds a knob to do the reset (thanks for that!), but I'm suggesting that it is reset on the fly when a new note is played.

    Ahh, ok, that makes more sense. Try this ...

    @OnLoad
      // state saved or initialise now?
      if Unassigned numnotes
        numnotes = 3
        roundrobin = YES
        autoReset = YES
        pointer = 0
      endif 
    
      // set up UI
      ShowLayout 2
      Call @MyKnobLabels
      // LabelKnob 2, { } 
      LabelKnob 3, { } 
      LabelKnobs {Mode} 
      LabelPads { }
    @End
    
    
    // Handle MIDI input
    
    @OnMidiNoteOn
      if roundrobin = NO
        pointer = Random 0, numnotes-1 
      endif
    
      if Unassigned lastNote
        lastNote = MIDINote
      endif
      if MIDINote <> lastNote
        if autoReset
          pointer = 0
        endif
        lastNote = MIDINote
      endif
    
      newnote = MIDINote + pointer
      SetNoteState MIDIChannel, MIDINote, newnote // remember what we did
      SendMIDINoteOn MIDIChannel, newnote, MIDIVelocity
    
      FlashPad pointer
    
      Inc pointer
    
      if pointer >= numnotes
        pointer = 0
      endif
    @End
    
    
    @OnMidiNoteOff
      newnote = GetNoteState MIDIChannel, MIDINote
      SendMIDINoteOff MIDIChannel, newnote, MIDIVelocity
    @End
    
    
    @OnMidiInput
      // if MIDI input is not a note on/off then send thru unchanged...
      if MIDICommand <> 0x90 and MIDICommand <> 0x80
        SendMIDIThru
      endif
    @End
    
    
    // GUI Stuff
    
    @OnKnobChange
      value = GetKnobValue LastKnob
      if LastKnob = 0
        numnotes = Round (TranslateScale value, 0, 127, 1, 16)
      elseif LastKnob = 1
        roundrobin = (value < 64)
      elseif LastKnob = 2
        autoReset = (value >= 64)
      endif
    
      Call @MyKnobLabels
    @End
    
    
    
    @MyKnobLabels
      LabelKnob 0, {Notes:}, numnotes
      if roundrobin
        LabelKnob 1, {Round}
      else
        LabelKnob 1, {Random}
      endif
    
      // add knob to to turn auto-reset on or off
      if autoReset
        Labelknob 2, {Auto Reset}
      else
        LabelKnob 2, {No Reset}
      endif
    @End
    
    
    @Description
    (Added option to auto-reset round robin on new note. Can be returned to original function by turning the new knob left of 12 o'clock. - @wim / @number37)
    
    This script applies a round-robin or random-robin algorithm to incoming notes. 
    E.g. when the number of notes is set to 3 and you repeatedly trigger C3, this script will play C3, C#3, D3, C3, C#3, ... instead. 
    When you send C4 it will send C4, C#4, D4, etc. So you only need to trigger the base notes.
    
    When random-robin is selected it will do the same but randomly pick notes from the range instead.
    @End
    
  • edited March 2020

    It works perfectly! And I used your new code to better understand Mozaic so win/win. Thanks a bunch, @wim.

    Would be cool to get a "branch" to Bram's original for those who come seeking the resettable version.

  • Yeh, I’m not sure the cleanest way to approach that. I wouldn’t want to post it myself really. I’ll just leave it as is and if leave it up to Bram if he wants to incorporate the change or to implement it differently.

  • edited March 2020

    @Artefact2001 said:
    I just remembered this software that Ólafur Arnalds commissioned:

    https://www.npr.org/2018/07/19/630111211/one-key-many-notes-lafur-arnalds-piano-rig-fuses-technology-and-musicality?t=1559571517241

    similar to things people have been making with Mozaic already

    if someone fancies creating something similar?! original input on one channel and generative on another 😎

    Finally released as a Spitfire Audio plugin, Stratus.

    https://www.spitfireaudio.com/shop/a-z/olafur-arnalds-stratus/

    https://www.youtube.com/watch?time_continue=2&v=uhxAvweQ_tU&feature=emb_title

  • @SpookyZoo does it have MIDI out though? Seems to be a VSTi only, not a MIDI processor, is that correct?

  • @Artefact2001 said:
    @SpookyZoo does it have MIDI out though? Seems to be a VSTi only, not a MIDI processor, is that correct?

    Yeah I think you're right. However Ólafur does go into a fair amount of detail about what is going on with the different machines, so theres more info for anyone wanting to make a Mozaic midi version. :)

  • heshes
    edited March 2020

    I've started using Mozaic recently, and while it's great, the script editing process is not. Yes, you can do select/copy/switch-to-editor/paste then do your editing, and when done reverse the process back. But this is not developer-friendly. It should strike any developer as quite odd to have text mixed with binary data in the .mozaic project files

    -- It discourages use of a separate editor app.
    -- It strongly discourages use of a separate editor for minor tweaks.
    -- It strongly discourages use of a good editor for a (very common kind of) development process where you're continually making small changes, then running code to test how it works.
    -- It makes it quite difficult to use git or other version control on the text.
    -- Strongly discourages any kind of efficient collaboration between people working on the same script.

    It seems like it wouldn't be very hard to add functionality to make text editing in a separate app more seamless. I'm no expert on iOS programming, which I know has odd security-related restrictions on an app's access to folders. But it seems like this scenario would be pretty easy to add, and would have big benefits:

    1. If someone wants to develop with separate text files, then they can create folder in Files app, name it 'MozaicScripts', e.g..
    2. Then within Mozaic they can authorize Mozaic to access this folder. I believe Mozaic can save a URL so they don't need to re-authorize each time Mozaic is started up.
    3. Then Mozaic can start to:
      a. Upon save, Mozaic saves script to a text file in the user's designated folder (if any), and also saves (as it does now) the text in the .mozaic file.
      b. Upon 'Load' check for whether text file with later timestamp than the .mozaic file exists in user's designated folder. For example, if 'myproject.txt' in the user's designated mozaictxt folder was modified today, and user loads a .mozaic project that was last modified yesterday, then Mozaic automatically loads the script in the text file in place of script in the .mozaic file. This will seamlessly load the text file that was changed in separate text editor.

    I haven't thought this fully through. But this, or something like this, would seem to be quite easy to add to Mozaic. It also seems like this would greatly increase ease of editing Mozaic scripts, allow easy use of github (with Working Copy app, for example), and make it much, much easier for people to collaborate on the same script. Someone might reply that people don't really collaborate on Mozaic scripts, so it's not really that useful. To this I would say, duh, there's not much collaboration because it's so damn hard right now! Make it easier and I can't help but think that it would help grow use of Mozaic by a lot.

  • wimwim
    edited March 2020

    The .mozaic files include the state of knobs and variables at the time of save. That's the binary portion you see there. Your proposed mechanism would need to handle that in some way.

  • heshes
    edited March 2020

    @wim said:
    The .mozaic files include the state of knobs and variables at the time of save. That's the binary portion you see there. Your proposed mechanism would need to handle that in some way.

    No, that would stay the same as it is. Saving of .mozaic project file would be the same as now. Just adding a step that, if user has designated a mozaictxt folder, then the text is also saved to separate file in that folder.

  • @hes said:

    @wim said:
    The .mozaic files include the state of knobs and variables at the time of save. That's the binary portion you see there. Your proposed mechanism would need to handle that in some way.

    No, that would stay the same as it is. Saving of .mozaic project file would be the same as now. Just adding a step that, if user has designated a mozaictxt folder, then the text is also saved to separate file in that folder.

    Ahh, I see.

  • When running Mozaic in Standalone mode does any MIDI flow out of it?

  • wimwim
    edited March 2020

    @McD said:
    When running Mozaic in Standalone mode does any MIDI flow out of it?

    No.

  • @wim said:

    @McD said:
    When running Mozaic in Standalone mode does any MIDI flow out of it?

    No.

    Thanks. I was hoping it might send the MIDI outs. I can see events being logged.

  • @McD said:

    @wim said:

    @McD said:
    When running Mozaic in Standalone mode does any MIDI flow out of it?

    No.

    Thanks. I was hoping it might send the MIDI outs. I can see events being logged.

    Got me all excited then, I’ve been trying to figure out how to drive touchviz (CoreMIDI only) from AUM so I can use mozaic scripts and suddenly thought you’d solved it (and removed another app from the chain)

    Alas no :)

  • @Krupa said:

    @McD said:

    @wim said:

    @McD said:
    When running Mozaic in Standalone mode does any MIDI flow out of it?

    No.

    Thanks. I was hoping it might send the MIDI outs. I can see events being logged.

    Got me all excited then, I’ve been trying to figure out how to drive touchviz (CoreMIDI only) from AUM so I can use mozaic scripts and suddenly thought you’d solved it (and removed another app from the chain)

    Alas no :)

    So, touchviz doesn't show up as a routing destination in AUM? Is it one of those apps that doesn't show a virtual port and will only let you connect to an app that does show one (AUM doesn't)?

    If so, then there are some ways around this. One is to use Audiobus as an intermediary. Basically, you sen the midi out from AUM to Audiobus, then from Audiobus' virtual out to touchviz. Another is to do something similar with MidiFlow.

    Sorry, I'm just guessing here since I don't own touchviz, but that's the general drill for situations like this. Maybe someone who owns the app can help out.

  • Ah cheers @wim no it doesn’t show in aum, nor does aum show in touchviz as an input, though weirdly it does as an output... I only have ab2 but this could be the trigger that gets me into the ab3 gang if it works...

    I did get it going with FreEWI acting in between but that setup was a bit flaky and I had a couple of crashes and constant high latency so I wasn’t keen to pursue any more paid for solutions until I knew they’d be solid...

  • @Krupa said:
    Ah cheers @wim no it doesn’t show in aum, nor does aum show in touchviz as an input, though weirdly it does as an output... I only have ab2 but this could be the trigger that gets me into the ab3 gang if it works...

    I did get it going with FreEWI acting in between but that setup was a bit flaky and I had a couple of crashes and constant high latency so I wasn’t keen to pursue any more paid for solutions until I knew they’d be solid...

    MidiFlow and MidiFire are solid alternatives, but AB3 is worth having for many, many reasons. I can't guarantee any of these will actually fix the issue for you though, since I don't have touchviz.

  • Absolutely understand, I’m talking with the touchviz devs about it as well, and I know that ab3 is probably good for me but I’m really happy with aum right now, use ab2 just for hosting stuff that won’t otherwise link up but that starts feeling complicated for my liking

    Thanks @wim

  • @Krupa said:
    Absolutely understand, I’m talking with the touchviz devs about it as well, and I know that ab3 is probably good for me but I’m really happy with aum right now, use ab2 just for hosting stuff that won’t otherwise link up but that starts feeling complicated for my liking

    Thanks @wim

    You can stay with an AUM centric workflow and just use AB3 for this one bit of routing if you want. It's just acting as an intermediary to pass the midi along.

    It would be very nice if @j_liljedahl exposed a virtual output port for AUM for apps like this that need it.

  • @Krupa said:
    Absolutely understand, I’m talking with the touchviz devs about it as well, and I know that ab3 is probably good for me but I’m really happy with aum right now, use ab2 just for hosting stuff that won’t otherwise link up but that starts feeling complicated for my liking

    Thanks @wim

    FWIW, AB3 is also very useful for integrating apps that support midi clock and not ableton link.

  • @espiegel123 said:

    @Krupa said:
    Absolutely understand, I’m talking with the touchviz devs about it as well, and I know that ab3 is probably good for me but I’m really happy with aum right now, use ab2 just for hosting stuff that won’t otherwise link up but that starts feeling complicated for my liking

    Thanks @wim

    FWIW, AB3 is also very useful for integrating apps that support midi clock and not ableton link.

    good point. it also solves the issue of apps that have Link, but not Link Start/Stop.

Sign In or Register to comment.