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*

15052545556

Comments

  • edited June 2022

    @hes said:

    @McD said:
    That app has a very rich User Interface and Mozaic provides 5 fixed User Interface layouts:

    Notice that none of them provide a keyboard layout like this app which has 2 keyboards to interact with.
    Some scripts force the 16 Pad layout into a keyboard design to get around this limitation.

    This app would be better cloned using a more sophisticated programming tool like Swift or the Xcode environment with a C language and a complex set of graphics libraries. But there are ideas demo’ed that

    Might stimulate someone to make a cool Mozaic script for playing melodies or bass lines over chords.

    It looks to me like the two one-octave keyboards on Chordism are mostly just for informational purposes. Would not be hard to replicate that information in slightly different form, and use an external physical controller or software keyboard to actually play notes.

    I agree, yes, this could lead to interesting Mozaic setup to enable a new way of playing melodies over chords.

    There are definitely ways to implement similar functionality in Mozaic without an identical UI. Potentially even integrating some actual chord generating app with its own interface that already has rich functionality (like Tonality, Navichord, etc.) and using Mozaic mostly just to set the scale and offset of the keyboard being used for the melody.

    Thanks for your response @McD , @TheOriginalPaulB and @hes
    When I posted this my intention was not to have a similar UI via Mozaic but to achieve similar functionality (sorry if my question was not clear).
    As @hes said, I can connect an external midi keyboard (or any other midi on-screen KB app) to input the actual chord using my left hand (or one finger chord using some other Mozaic script). Then what I need is - for the rest of the notes on my right hand to be melodically mapped with only chord notes (that I have given input with my left hand).
    I figured out this functionality is available in scaler 2 ( keylock > Chord Notes option). So that solves my purpose for the time being.

  • wimwim
    edited June 2022

    @sujoybose77 said:
    As @hes said, I can connect an external midi keyboard (or any other midi on-screen KB app) to input the actual chord using my left hand (or one finger chord using some other Mozaic script). Then what I need is - for the rest of the notes on my right hand to be melodically mapped with only chord notes (that I have given input with my left hand).

    Based on this more limited description of what you need, the Dynamic Scale Quantize script seems like one that could be easily modified to fit your purpose. That one does what you want, but based on moving knobs to tell it when to learn the chord and when to filter. I think all that would be needed is to replace the current logic with logic that looks at the keyboard range the notes would be played in.

    That video shows a lot more advanced features and options, which would take more effort.

    Anyone who's interested should feel free to modify that script however they like. I don't have the time myself right now.

    I figured out this functionality is available in scaler 2 ( keylock > Chord Notes option). So that solves my purpose for the time being.

    That's great. 👍🏼

  • I think more developers should survey Mozaic scripts to get ideas for useful IOS apps.
    Bryan Appel's "Clusters" script would make an excellent IOS App and would be pretty easy
    to analyze and port. I'm not aware of any IOS Apps that create "Clusters/Swarms" like it does. But I'd love to be wrong... Bryan describes it as a "Particles" generator (as I recall).

    Many of us create Mozaic scripts based on IOS apps just for the challenge of figuring out
    how to make it work in the somewhat limited environment of the Moziac GUI and Event driven Interpreter.

  • Would love something like Vermona Perfourmer playmodes script

  • @Punct said:
    Would love something like Vermona Perfourmer playmodes script

    I'm not sure I understand. That looks like it deals with combining audio channels, not midi. Mozaic only deals with midi. I could well be missing something as I only quickly googled and found the product description.

  • Is it possible to write a Mozaic script that could fix the “sample offset” issue on midi apps that haven’t implemented that feature ?

  • wimwim
    edited June 2022

    @Poppadocrock said:
    Is it possible to write a Mozaic script that could fix the “sample offset” issue on midi apps that haven’t implemented that feature ?

    No.

    That happens at too low a level for another app to affect. Even if Mozaic could know when a midi message was delayed because it missed a buffer, it is already late and would still have to be received and acted on by Mozaic, adding even more delay. Mozaic can't sent that message back in time, so ...

  • @wim said:

    @Punct said:
    Would love something like Vermona Perfourmer playmodes script

    I'm not sure I understand. That looks like it deals with combining audio channels, not midi. Mozaic only deals with midi. I could well be missing something as I only quickly googled and found the product description.

    It's definitely dealing with midi
    Have a look on the Perfourmer manual from page 25 to 28

  • wimwim
    edited June 2022

    @Punct said:

    @wim said:

    @Punct said:
    Would love something like Vermona Perfourmer playmodes script

    I'm not sure I understand. That looks like it deals with combining audio channels, not midi. Mozaic only deals with midi. I could well be missing something as I only quickly googled and found the product description.

    It's definitely dealing with midi
    Have a look on the Perfourmer manual from page 25 to 28

    Ah. I see now.

    Looks doable from what I can tell, though you would have to route all that midi output in ways that are useful for it to do anything.

    It's not something I can take up, but maybe someone else will become interested.

  • I’m wondering if there is a way, perhaps a Mozaic script that exists or could be created, that can replicate the Patterning 1 & 2 feature of having the steps move position each time the sequence plays through? I love that feature, it creates some really interesting polyrhythms and evolving drum sounds just by moving the steps around each rotation in +/- set amount. Maybe a simple 2 lane drum sequencer with 8 steps on top and 8 on the bottom, with the ability to move the steps, a set amount on each pass? I could never create this, but maybe one of you Mozaic masters could chime in. Thanks.

  • wimwim
    edited June 2022

    That's a really cool idea @poppadocrock. I'm fooling around with it just for fun.

    However, miRack's Gate-Seq-64 already has this and more. A little bit of learning curve, but once set up and saved as a preset, it can be a piece of cake.

    I'm thinking 4Pockets Euclidean can be a good one for this too. Probably others?

  • wimwim
    edited June 2022

    Here's an AUM session with gate-64 set up for Ruismaker. To change the length and playback mode of the pattern use the LEN/MODE button and the Knob to the left of the numeric output.

    The drawback to this setup is all the sequences share the same pattern length and direction. If you wanted sequences with independent Length, you'd need one Gate-Seq-64 for each. It's easy to duplicate modules (double tap the module title, then Manage > Duplicate), but you do have to connect the cables for each.

    If setting up this patch from a screenshot, there are some important settings in the background:

    • Double-tap the host sync module title and set CLOCK Rate to Beat / 8
    • Double-tap the Clocked module title and set Momentary RUN input to checked.
    • Tap the Clocked module MODE+ button until the display says P8.

  • @wim said:
    That's a really cool idea @poppadocrock. I'm fooling around with it just for fun.

    However, miRack's Gate-Seq-64 already has this and more. A little bit of learning curve, but once set up and saved as a preset, it can be a piece of cake.

    I'm thinking 4Pockets Euclidean can be a good one for this too. Probably others?

    Thanks. Euclidean by 4P has that? Yea it’s called auto-rotate in the Patterning apps. I’d love to be able to use that auto rotate feature with other drum apps.

  • edited June 2022

    @wim thanks but unfortunately I don’t have miRack, or Euclidean, might consider one for that feature though….

  • I’ve been thinking about that auto rotate feature for awhile but kept forgetting to ask about it when in the forum.

  • wimwim
    edited June 2022

    @Poppadocrock said:
    I’ve been thinking about that auto rotate feature for awhile but kept forgetting to ask about it when in the forum.

    I'm definitely going to make a Mozaic script for this for fun. It may not be great and I can't say when I'll finish it, but something will happen eventually.

  • @wim A while back you wrote a handy script that listens for four specific notes and when it hears those notes, delays the note off for a specified period of time. It works fabulously and I still use it pretty much daily. (I use it with MIDI Guitar 2 to trigger sequences/loops of a specific length just using my guitar.) I recently came upon a use case in which I don’t want to retrigger the note or start playing a new note before the first delay ends. That is, I play C3 and it delayed the note off for 2 seconds even if I play C3 again (or any of the other specified notes). Which part of the original script would need to be edited to do this?

    @Description
    The script checks for certain notes then looks up a note to translate it to. It then sends a note-ON for that note, and schedules a note-OFF after a configurable delay. If another note-ON for another one of the notes is received before the delay time then the note-OFF is sent immediately, a new note-ON is sent, and a new note-OFF is scheduled.

    ▫️ Configure the note-OFF delay with the first knob.
    ▫️ Edit variables in the @Settings section to change the notes to listen for, notes to translate to, the channel to listen on, and other settings. See the comments for details and ...be careful.😬
    @End

    @Settings
    // The midi channel to check for and send notes
    channel = 9

    // NotesIn holds the notes to check for.
    // NotesOut holds the notes to translate to
    // sendTime must only hold zeros

    // Make sure all these arrays have the same number of cells!

    notesIn = [44, 36, 11, 11]
    notesOut = [84, 86, 22, 22]
    sendTime = [0, 0, 0, 0]

    // If you change the number of notes in the arrays above,
    // set "lastNote" to 1 less than the number of notes!
    lastNote = 3

    // set this to NO if you want to block other MIDI
    thru = YES

    // this is the delay in milliseconds on a new script load. Adjust to taste.
    default_delay = 5000

    @End

    @OnLoad
    Call @Settings

    // these are just some constants to make code more readable
    noteON = 0x90
    noteOFF = 0x80

    // this stuff happens only on a new load of the script
    if Unassigned init
    init = YES

    for knob = 0 to 21
      SetKnobValue knob,0
      LabelKnob knob,{ }
    endfor
    
    delay = default_delay
    SetKnobValue 0, (TranslateScale delay,0,10000,0,127)
    tmp = Div delay, 1000
    Call @RoundTime
    

    endif

    SetTimerInterval 10
    StartTimer

    LabelKnobs {Settings}
    ShowLayout 4
    @End

    @OnMidiInput
    if MIDICommand <> noteON and MIDICommand <> noteOFF
    if thru = YES
    SendMidiThru
    endif

    else
    onTime = SystemTime
    Call @CheckNote

    // noteIndex will be -1 if the note isn't in the noteIn array
    if (noteIndex = -1) and (thru = YES)
      SendMIDIThru 
    
    elseif (noteIndex <> -1) and (MIDICommand = noteON)
      // cancel any scheduled note-off
      for idx = 0 to lastNote
        if sendTime[idx] <> 0
          SendMidiNoteOff channel, notesOut[idx], 0
          sendTime[idx] = 0
        endif
      endfor
    
      // send the note-on with a tiny delay in case the host has 
      // problems processing simultaneous events
      SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
    
      // schedule the new note-off
      sendTime[noteIndex] = onTime + delay
    endif
    

    endif
    @End

    @CheckNote
    noteIndex = -1

    if MIDIChannel = channel
    idx = 0
    while (noteIndex = -1) and (idx < lastNote+1)
    if MIDINote = notesIn[idx]
    noteIndex = idx
    else
    Inc idx
    endif
    endwhile
    endif

    // if no note match was found then noteIndex will still be -1
    @End

    @OnTimer
    time = SystemTime

    for sendIndex = 0 to LastNote
    if sendTime[sendIndex] > 0 and sendTime[sendIndex] <= time

      SendMidiNoteOff channel, notesOut[sendIndex], 0
      sendTime[sendIndex] = 0
    
    endif
    

    endfor
    @End

    ///////////////////////////////////////////
    // GUI Stuff //
    ///////////////////////////////////////////

    @OnKnobChange
    knob = LastKnob
    value = GetKnobValue knob

    if LastKnob = 0
    tmp = TranslateScale value,0,127,1,10
    Call @RoundTime
    endif

    @End

    @RoundTime
    seconds = RoundDown tmp
    // round to nearest 0.5 seconds
    decimal = 5 * (Div ((tmp - seconds) * 10), 5)
    // convert delay to milliseconds
    delay = 1000 * (seconds + (decimal/10))
    // label the knob this way to avoid zeros after the decimal
    LabelKnob 0, seconds, {.}, decimal, { sec.}
    @End

  • @wim said:

    @Poppadocrock said:
    I’ve been thinking about that auto rotate feature for awhile but kept forgetting to ask about it when in the forum.

    I'm definitely going to make a Mozaic script for this for fun. It may not be great and I can't say when I'll finish it, but something will happen eventually.

    Hey I appreciate anything that comes out of this. Cheers mate.

  • edited June 2022

    Thanks @lukesleepwalker hopefully that gives him A good starting point. Cheers.

  • Or maybe it’s a midi fx and not a sequencer, I don’t know just throwing that out there…

  • @lukesleepwalker said:
    @wim A while back you wrote a handy script that listens for four specific notes and when it hears those notes, delays the note off for a specified period of time. It works fabulously and I still use it pretty much daily. (I use it with MIDI Guitar 2 to trigger sequences/loops of a specific length just using my guitar.) I recently came upon a use case in which I don’t want to retrigger the note or start playing a new note before the first delay ends. That is, I play C3 and it delayed the note off for 2 seconds even if I play C3 again (or any of the other specified notes). Which part of the original script would need to be edited to do this?

    What happens if you play a C3 again before the scheduled note off? Nothing?

  • @Punct said:
    Would love something like Vermona Perfourmer playmodes script

    Not sure.

    16.00 onwards. Lfo are just modulating lfo which were already given to parameters? Is there step sequencing before the chord sequencing? What it means to be in C. Is that scale? Playing chords 3 times etc. Is that random or can euclidean dial rotation via midi, send sequence to chord apps or all be made with Drambo as a host with modules and/or apps?

    Why do you think you would need a mozaic script?

    Apps could be mela's with similar vermona Ui? Or any synths with midi controller?

    Euclidean rotation dials via midi? Either Drambo or 4 pockets. Chord apps? Polybud?

    Someone here would likely understand if they watch video.

  • Although Im just guessing and for mainly screen use.

    3 melas. With a polybud in drambo. The step sequencing will probably be better than octatrack. If cc from polybud can be used for cross lfo modulation. Just how to setup a chord takeover ( probably a drambo module ) and then use cc from polybud or midi to a euclidan or probabilty of chords on the same audio tracks of the melas.

  • @wim said:

    @lukesleepwalker said:
    @wim A while back you wrote a handy script that listens for four specific notes and when it hears those notes, delays the note off for a specified period of time. It works fabulously and I still use it pretty much daily. (I use it with MIDI Guitar 2 to trigger sequences/loops of a specific length just using my guitar.) I recently came upon a use case in which I don’t want to retrigger the note or start playing a new note before the first delay ends. That is, I play C3 and it delayed the note off for 2 seconds even if I play C3 again (or any of the other specified notes). Which part of the original script would need to be edited to do this?

    What happens if you play a C3 again before the scheduled note off? Nothing?

    Yup, nothing should happen if C3 is pressed, or any other note. It should become deaf while the gate is held open.

  • wimwim
    edited June 2022

    @lukesleepwalker said:

    @wim said:

    @lukesleepwalker said:
    @wim A while back you wrote a handy script that listens for four specific notes and when it hears those notes, delays the note off for a specified period of time. It works fabulously and I still use it pretty much daily. (I use it with MIDI Guitar 2 to trigger sequences/loops of a specific length just using my guitar.) I recently came upon a use case in which I don’t want to retrigger the note or start playing a new note before the first delay ends. That is, I play C3 and it delayed the note off for 2 seconds even if I play C3 again (or any of the other specified notes). Which part of the original script would need to be edited to do this?

    What happens if you play a C3 again before the scheduled note off? Nothing?

    Yup, nothing should happen if C3 is pressed, or any other note. It should become deaf while the gate is held open.

    The place to focus on is the @OnMidiInput section. It's easier for me to show the changes than to fully explain them. To make the changes clearer, and to make it easier to switch between modes, I broke the sending part out into two separate custom events that can be called depending on the behavior you want.

    @OnMidiInput changed from:

    @OnMidiInput
      if MIDICommand <> noteON and MIDICommand <> noteOFF
        if thru = YES
        SendMidiThru 
        endif
        
        else
        onTime = SystemTime
        Call @CheckNote
        
        // noteIndex will be -1 if the note isn't in the noteIn array
        if (noteIndex = -1) and (thru = YES)
          SendMIDIThru 
        
        elseif (noteIndex <> -1) and (MIDICommand = noteON)
          // cancel any scheduled note-off
          for idx = 0 to lastNote
            if sendTime[idx] <> 0
              SendMidiNoteOff channel, notesOut[idx], 0
              sendTime[idx] = 0
            endif
          endfor
        
          // send the note-on with a tiny delay in case the host has 
          // problems processing simultaneous events
          SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
        
          // schedule the new note-off
          sendTime[noteIndex] = onTime + delay
        endif
      endif
    @End
    

    to (Note the changes starting at elseif (noteIndex <> -1) and (MIDICommand = noteON)

    @OnMidiInput
      if MIDICommand <> noteON and MIDICommand <> noteOFF
        if thru = YES
          SendMidiThru 
        endif
        
      else
        onTime = SystemTime
        Call @CheckNote
        
        // noteIndex will be -1 if the note isn't in the noteIn array
        if (noteIndex = -1) and (thru = YES)
          SendMIDIThru 
          
        elseif (noteIndex <> -1) and (MIDICommand = noteON)
          // Uncomment the behavior you need.
    
          // Call @CancelAndSend
          Call @SkipIfPlaying
        endif
    
      endif
    @End
    
    @CancelAndSend
      // cancel any scheduled note-off
      for idx = 0 to lastNote
        if sendTime[idx] <> 0
          SendMidiNoteOff channel, notesOut[idx], 0
          sendTime[idx] = 0
        endif
      endfor
      
      // send the note-on with a tiny delay in case the host has 
      // problems processing simultaneous events
      SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
      
      // schedule the new note-off
      sendTime[noteIndex] = onTime + delay
    @End
    
    @SkipIfPlaying
      for idx = 0 to lastNote
        if MIDINote = notesIn[idx] and sendTime[idx] = 0
          SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
          sendTime[noteIndex] = onTime + delay
        endif
      endfor  
    @End
    

    I suggest adding a knob to set a variable to tell which behavior to use, then checking that variable to decide which routine to call, rather than simply commenting / un-commenting lines of code buried in the script.

    P.S. To avoid all those formatting problems when you post the code, place three back-ticks (```) on a line by themselves above and below the code. This avoids big-time editing needed for someone cutting and pasting your code from their browser.

  • edited June 2022

    @wim said:

    @lukesleepwalker said:

    @wim said:

    @lukesleepwalker said:
    @wim A while back you wrote a handy script that listens for four specific notes and when it hears those notes, delays the note off for a specified period of time. It works fabulously and I still use it pretty much daily. (I use it with MIDI Guitar 2 to trigger sequences/loops of a specific length just using my guitar.) I recently came upon a use case in which I don’t want to retrigger the note or start playing a new note before the first delay ends. That is, I play C3 and it delayed the note off for 2 seconds even if I play C3 again (or any of the other specified notes). Which part of the original script would need to be edited to do this?

    What happens if you play a C3 again before the scheduled note off? Nothing?

    Yup, nothing should happen if C3 is pressed, or any other note. It should become deaf while the gate is held open.

    The place to focus on is the @OnMidiInput section. It's easier for me to show the changes than to fully explain them. To make the changes clearer, and to make it easier to switch between modes, I broke the sending part out into two separate custom events that can be called depending on the behavior you want.

    @OnMidiInput changed from:

    @OnMidiInput
      if MIDICommand <> noteON and MIDICommand <> noteOFF
        if thru = YES
        SendMidiThru 
        endif
        
        else
        onTime = SystemTime
        Call @CheckNote
        
        // noteIndex will be -1 if the note isn't in the noteIn array
        if (noteIndex = -1) and (thru = YES)
          SendMIDIThru 
        
        elseif (noteIndex <> -1) and (MIDICommand = noteON)
          // cancel any scheduled note-off
          for idx = 0 to lastNote
            if sendTime[idx] <> 0
              SendMidiNoteOff channel, notesOut[idx], 0
              sendTime[idx] = 0
            endif
          endfor
        
          // send the note-on with a tiny delay in case the host has 
          // problems processing simultaneous events
          SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
        
          // schedule the new note-off
          sendTime[noteIndex] = onTime + delay
        endif
      endif
    @End
    

    to (Note the changes starting at elseif (noteIndex <> -1) and (MIDICommand = noteON)

    @OnMidiInput
      if MIDICommand <> noteON and MIDICommand <> noteOFF
        if thru = YES
          SendMidiThru 
        endif
        
      else
        onTime = SystemTime
        Call @CheckNote
        
        // noteIndex will be -1 if the note isn't in the noteIn array
        if (noteIndex = -1) and (thru = YES)
          SendMIDIThru 
          
        elseif (noteIndex <> -1) and (MIDICommand = noteON)
          // Uncomment the behavior you need.
    
          // Call @CancelAndSend
          Call @SkipIfPlaying
        endif
    
      endif
    @End
    
    @CancelAndSend
      // cancel any scheduled note-off
      for idx = 0 to lastNote
        if sendTime[idx] <> 0
          SendMidiNoteOff channel, notesOut[idx], 0
          sendTime[idx] = 0
        endif
      endfor
      
      // send the note-on with a tiny delay in case the host has 
      // problems processing simultaneous events
      SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
      
      // schedule the new note-off
      sendTime[noteIndex] = onTime + delay
    @End
    
    @SkipIfPlaying
      for idx = 0 to lastNote
        if MIDINote = notesIn[idx] and sendTime[idx] = 0
          SendMIDINoteOn channel, notesOut[noteIndex], MIDIVelocity, 2
          sendTime[noteIndex] = onTime + delay
        endif
      endfor  
    @End
    

    I suggest adding a knob to set a variable to tell which behavior to use, then checking that variable to decide which routine to call, rather than simply commenting / un-commenting lines of code buried in the script.

    P.S. To avoid all those formatting problems when you post the code, place three back-ticks (```) on a line by themselves above and below the code. This avoids big-time editing needed for someone cutting and pasting your code from their browser.

    OK, cool, thank you for the tips! I had no idea about the three back ticks….

    edit: The script works perfectly for my use case and I follow the logic of the script enough to tweak as needed. Thanks again!

  • I'm sure there must be a Mozaic script for this already, maybe someone could point me towards it. When using, say 4Pockets Progressions I would like to control the range of notes coming through. Eg I might want to start only letting lower notes come through then gradually allow higher ones to come through. I just now tried using Audio Veek Midi Key Zone, but found I got audio drop outs when adjusting the zone. Maybe I just don't know how to use it properly. Whatever the solution would be, it would have to be seamlessly tweakable. Any recommendations?

  • A Linnstrument Based request
    Backstory- learning songs on Linnstrument by sending various Midi melodies or chord changes to Linnstrument, lighting up LEDs to show notes on fingerboard. An incredibly effective way to learn for the short attention span.
    Anyhow when sending midi in Linnstrument will show every pitch simultaneously, so if Note is whichever octave all C leds light. It’s not the worst thing as if helps to learn whole fingerboard.
    However I’d like to isolate the LEDs to just show single pitches or chords in one octave or really just a single range on Linnstrument.
    I know this is possible thru CCs and this info form The creator of Linnstrument—

    Script would need to take into account the leds originally set on Linnstrument and what color and then set and reset based on midi in and default.
    Is this making sense to the Mozaic wizards?

    I’m certain it would be a used tool to many a Linnstrument user.
    Please let me know if this is possible/easy or if there’s any other questions
    Thanks Wizards!
    Sincerely
    Put

  • @tput73 im not sure if this helps but I came across this Linnstrument script.

    https://patchstorage.com/linnstrulights-101/

Sign In or Register to comment.