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!

12425272930102

Comments

  • @espiegel123 said:

    @skiphunt said:

    @brambos said:

    @skiphunt said:
    Deleted and installed new Mozaic 1.0.5. Grabbed a half dozen scripts to play with. Using latest apeMatrix. iOS 12.3.1 on 10.5 Pro.

    Even just 1 instance of Mozaic is eating 90% CPU. Tried 3 different scripts. 2 instances of Mozaic kicks cpu to 160% and kills audio. Tried various scripts with same issue, but the last time was @brambos looper script using his Ruismaker on Chan 1 and Ruismaker FM on Chan 2. Was using another instance of Mozaic with midimarble script sent to DRC synth.

    I'll see if I can reproduce that on apeMatrix. I haven't seen such CPU loads on AUM! Thanks for the report :)

    It started out fine. Worked as expected for nearly half hour. Then it’s like it snowballed exponentially with the cpu use until it killed audio. Quit, relaunched and tried switching to your drum synths instead but it did the same thing. Like it grabs all the cpu and won’t let go.

    Have you tried rebooting your iPad? There is a weird MIDI bug in recent iOS version that requires rebooting.

    No, I’ll try later. Was just sitting down for a little play before I have to do some work. Haven’t noticed this before though, and I’ve been playing with Mozaic a lot in the last week. It seemed to come out of nowhere. Will reboot later and try again when I get a break.

  • @brambos , I hope you will also look at the presetmanager in Mozaic; see picture: after opening LOAD the presetbank is not selected (in this case User Patches) and the presets aren't sorted (it looks like alphabetically first and then the latest downloads....).

    ps. I asked this before, but I hope you'll consider making (renaming and deleting) new userbanks possible...

  • @skiphunt said:

    @espiegel123 said:

    @skiphunt said:

    @brambos said:

    @skiphunt said:
    Deleted and installed new Mozaic 1.0.5. Grabbed a half dozen scripts to play with. Using latest apeMatrix. iOS 12.3.1 on 10.5 Pro.

    Even just 1 instance of Mozaic is eating 90% CPU. Tried 3 different scripts. 2 instances of Mozaic kicks cpu to 160% and kills audio. Tried various scripts with same issue, but the last time was @brambos looper script using his Ruismaker on Chan 1 and Ruismaker FM on Chan 2. Was using another instance of Mozaic with midimarble script sent to DRC synth.

    I'll see if I can reproduce that on apeMatrix. I haven't seen such CPU loads on AUM! Thanks for the report :)

    It started out fine. Worked as expected for nearly half hour. Then it’s like it snowballed exponentially with the cpu use until it killed audio. Quit, relaunched and tried switching to your drum synths instead but it did the same thing. Like it grabs all the cpu and won’t let go.

    Have you tried rebooting your iPad? There is a weird MIDI bug in recent iOS version that requires rebooting.

    No, I’ll try later. Was just sitting down for a little play before I have to do some work. Haven’t noticed this before though, and I’ve been playing with Mozaic a lot in the last week. It seemed to come out of nowhere. Will reboot later and try again when I get a break.

    I think I may have found the issue. Seems to have snuck into the latest update indeed :)

  • 2.0 of my Chord Magic script now uploaded, along with deno/walkthrough:

    https://patchstorage.com/chord-magic/

    This is a major update, now allowing up to 16 sequenceable scenes, each with one chord sequence and 3 programmable patterns (following the chords). It now also takes advantage of the new pad labels, making it more intuitive than before (I hope)

  • @mbncp said:

    @brambos said:

    @mbncp said:
    @brambos It would be nice to pass an optional value to ResetNoteState

    This will be in the next update already.

    Thanks

    You could then add this as a catch all for CC, pitchbend, programchange, etc.

    @OnMidiInput
      SendMIDIThruExceptNotes
    @End
    

    And then a SendMIDIThruExceptCC, SendMIDIThruExceptNotesAndCC, ...

    I think it would be easier this way:

    If the user has a handler to catch note on, off, cc, allmidi , pass the event to it, otherwise Mozaic would take care of sending them as is
    Then if the user really wants to filter these events, although most of the time we don't want to do that, then we just add a

    ` @OnMidiInput`
    ` @End`
    

    So if there is no midi callback in the user script, then Mozaic should just act as a midithru

    Also if there is a onNote, onCC,.. function, then OnMidiInput shouldn't receive these events as this requires extra filtering, and I don't see any benefit of receiving twice the same event.

    IMO this would be less confusing and easier to deal with

    Or have a SendMIDIThruMask call that takes a bitmask as one of its arguments.
    That way you could predefine
    MIDINOTE = 1
    MIDICC = 2
    MIDIPB = 4
    MIDIPC = 8
    etc.

    Then to create a custom bitmask to specify what message types are passed through, the script writer could assign something like

    midithrubitmask = MIDICC | MIDIPB

    Anything not included is excluded.

  • wimwim
    edited June 2019

    Humm. > @Harro said:

    @brambos , I hope you will also look at the presetmanager in Mozaic; see picture: after opening LOAD the presetbank is not selected (in this case User Patches) and the presets aren't sorted (it looks like alphabetically first and then the latest downloads....).

    I think the issue here is the sort is case-sensitive and should not be.

  • @brambos said:

    @mbncp said:
    @brambos It would be nice to pass an optional value to ResetNoteState

    This will be in the next update already.

    I’m also thinking about adding a “SendMIDIThruExceptNotes” (or another name) which forwards all MiDI events except notes. This seems to be a really common use case, so that will save quite a few lines of code.

    You could then add this as a catch all for CC, pitchbend, programchange, etc.

    @OnMidiInput
      SendMIDIThruExceptNotes
    @End
    

    Thoughts?

    Not needed IMO. It only saves two lines:

    @OnMIDIInput
      if MIDICommand <> 0x80 and MIDICommand <> 0x90
        SendMIDIthru
      endif
    @End
    
  • @TheOriginalPaulB
    Thought about a mask filter but it adds new code that we don’t really need

    @wim
    Yes at least no new code, but if there is a note on/off handler these 2 lines should’t even be there imo

    My point is that a simple script with just a note on/off handler should still forward all other msg by default. I want my pitch bends, modulations,.. reach the destination synth, and if really I need to filter something I’ll add another plug that will take care off this.
    Otherwise I will have to look at the source code and change the plugs behavior, not fun when you are not in that mood.

  • wimwim
    edited June 2019

    @mbncp said:
    @TheOriginalPaulB
    Thought about a mask filter but it adds new code that we don’t really need

    @wim
    Yes at least no new code, but if there is a note on/off handler these 2 lines should’t even be there imo

    My point is that a simple script with just a note on/off handler should still forward all other msg by default. I want my pitch bends, modulations,.. reach the destination synth, and if really I need to filter something I’ll add another plug that will take care off this.
    Otherwise I will have to look at the source code and change the plugs behavior, not fun when you are not in that mood.

    While it’s true that inexperienced script makers aren’t necessarily going to think of things like specifically passing things through, I think Bram was wise to default to not pass anything unless specifically allowed. I think there’s more potential for screwup if beginners need to remember to block things that shouldn’t go through.

  • @wim said:

    @mbncp said:
    @TheOriginalPaulB
    Thought about a mask filter but it adds new code that we don’t really need

    @wim
    Yes at least no new code, but if there is a note on/off handler these 2 lines should’t even be there imo

    My point is that a simple script with just a note on/off handler should still forward all other msg by default. I want my pitch bends, modulations,.. reach the destination synth, and if really I need to filter something I’ll add another plug that will take care off this.
    Otherwise I will have to look at the source code and change the plugs behavior, not fun when you are not in that mood.

    While it’s true that inexperienced script makers aren’t necessarily going to think things like specifically passing things through, I think Bram was wise to default to not pass anything unless specifically allowed. I think there’s more potential for screwup if beginners need to remember to block things that shouldn’t go through.

    Yeah.. this was a conscious decision right from the start. There are basically two approaches: either you block implicitly (and have to forward manually) or you forward implicitly (and have to block/filter manually). I chose the first approach because that's also the way most of my Rozeta plugins work.

  • @brambos said:
    I chose the first approach because that's also the way most of my Rozeta plugins work.

    Hmm, there is a difference, as an au host doesn't know if you are dealing with the events, while your interpreter knows it.

    Anyway, no big deal for me as I only use @OnMidiInputso I'm not even concerned, just thinking about beginners. Less code is better ... lazy :)

    Btw, would a switch statement be so horrible to implement ?

  • @mbncp said:
    Btw, would a switch statement be so horrible to implement ?

    That would be sweet!

  • New version of the Scale Compendium up on patchstorage.com I’ve added two blues scales,by request, and, @Jumpercollins, now the version number in the description is correct. ;)

    @mbncp said:
    At @Bryan, you missed all the microtonal scales :D

    That’s a whole ‘nother universe of sound possibilities that I can’t claim to understand, in part because some of the math involved is above my pay grade. But it is something that interests me, so maybe at some point I’ll attempt something along those lines. For my own use, I can see myself using Just intonation or Pythagorean tuning. Apart from that I don’t know what i’m doing...the Audiokit synths have some nice microtonal stuff built in...that stuff’s open source, right? It might be possible to adapt that to Mozaic...just spitballing here....

    Now that pads have labels I would use them instead, using the pads label to show full text
    A knob for the banks, Upper pads for Scales and lower one for the Modes

    I like this idea a lot. In fact this is the way I would have done it but I didn’t want to have to type in the hundreds of lines of code to implement it. Now if @brambos would give us string variables, I could do this with just a few lines of code.

    And good practice when writing midi plugs would be to avoid overwriting the midi channel unless it's the purpose of the script.
    Also non used msg CC,PW,.. should be forwarded as is.

    Currently Mozaic is doing one weird thing, if you have a @OnMidiNote handler and a @OnMidiInput, both will receive the NoteOn message :s

    Actually the safest way is to use only @OnMidiInput and Rewrite your own routines

    @OnMidiInput
    if MidiCommand = 0x90 // note on
    Call @TransposeNoteOn // or whatever
    if NewNote <> -1 // tracking transpose overflow
    SendMidiOut MidiCommand+MidiChannel, NewNote, MIDIByte3
    SetNoteState MidiChannel, MIDINote, NewNote
    else
    SetNoteState MidiChannel, MIDINote, -1
    endif
    Exit
    endif

    if MidiCommand = 0x80 // note off
    Call @TransposeNoteOff // not needed in this case
    tmp = GetNoteState MidiChannel, MIDINote
    if tmp <> -1
    SendMidiOut MidiCommand+MidiChannel, tmp, MIDIByte3
    SetNoteState MidiChannel, MIDINote, -1
    endif
    Exit
    endif

    SendMidithru // send all other msg untouched
    @End

    It makes it also easier for others to see what the plug is doing, all in a single function

    my 2 cents

    @brambos It would be nice to pass an optional value to ResetNoteState

    Great stuff, thank you! I’ll be rewriting the midi handling stuff along these lines as soon as I get a chance.

    @mbncp said:

    @Bryan said:
    I just uploaded a new version of the Scale Compendium to https://patchstorage.com/platform/mozaic/. I added a new quantization style which uses a random coin toss to determine whether to quantize up or down. I also added a blurb to the description to prompt the user to scroll down.

    For live playing it would make it easier to map from scale to scale. Ex: C major to any other key/scale and in this case there would be no note guessing. Of course this would only work with 7 note scales. Playing mono on weird scales is one thing but figuring out chords is a bit tedious.

    Yeah, I hear what you’re saying. I guess I wouldn’t use this mode for live playing for just that reason. I mainly developed this script to use with generative processes where I want to make sure that the random notes generated fit within a given scale. In this use case the various quantitization “styles” I developed are intended to shape the incoming random data in different ways. Obviously if the incoming note happens to be in the scale, that’s great, but what to do with the out-of-scale notes? Each of the quantitization styles will sound slightly different being fed The same static sequence, or even if fed random notes with a constant probability distribution.

    Another cool trick would be to have two scales, ascending and descending, the script would switch automatically. But then it wouldn't be easy to find an appropriate descending scale just by name.
    Like this:
    https://youtube.com/watch?v=dEFHSnmdhrM
    6:24 minutes of fun :D

    This is a cool idea. I don’t think it would be too hard to implement ascending and descending scales. I might try that in the future.

  • @Bryan, yes lot's of fun stuff to create, and with Mozaic it's fairly quick and simple :)

    I'm wondering if the Audiokit guys will create a scripting au3 plug for audio, could be fun too.
    They made playgrounds for iOS, but it's a bit limited .. we'll see.

    I'm a bit lazy going deeper on swift and iOS/osx planet, but once Synth One is AU I will probably have a try with Xcode

    music on iOS is really getting more and more fun

  • edited June 2019

    @brambos
    I was wondering why you created your own interpreter, wasn't JavaScriptCore an option ?
    Now I'm not sure you can add your own libraries.

    That's what I did with mfxscript, just used the vbscript engine from windows, all I had to do was to implement the mfx midi functions, but the rest was already there, including string arrays and select case statement ;)

  • @NoonienS said:
    2.0 of my Chord Magic script now uploaded, along with deno/walkthrough:

    https://patchstorage.com/chord-magic/

    This is a major update, now allowing up to 16 sequenceable scenes, each with one chord sequence and 3 programmable patterns (following the chords). It now also takes advantage of the new pad labels, making it more intuitive than before (I hope)

    Holy crap! This is amazing! What you have packed into this script is just mind boggling. Great job.

  • edited June 2019

    @mbncp said:
    @brambos
    I was wondering why you created your own interpreter, wasn't JavaScriptCore an option ?

    But that's the fun part! And besides, all the other options I investigated were not realtime safe so couldn't run inside the render call. You can't do mallocs and vectors and hold locks and all the other convenient things when you run inside the realtime thread so rolling my own was also the safest bet :)

  • Is there any way of changing an ipad file association?
    With mozaic Files for me by default it says open in AudioLayer, so I have to scroll to Mozaic to open in that.
    Hopefully ipadOS will make these kinds of things easier in the future. :)

  • @brambos said:
    But that's the fun part!

    Sure and a lot of headaches :p , but probably less than depending on third party, especially from apple.

    I was wondering, can an AU plug host other AU plugs ? This is badly missing, my aum midi router looks like a spider’s web :o

  • edited June 2019

    Ah nice, was just going to post I was noticing some CPU spikes but I can see there's a fresh update already :)
    And it's made a big difference...

  • @Carnbot said:
    Ah nice, was just going to post I was noticing some CPU spikes but I can see there's a fresh update already :)
    And it's made a big difference...

    Should also load and initialize much faster now (and take around 8Mb per instance less)

  • It would be nice it at > @brambos said:

    @Carnbot said:
    Ah nice, was just going to post I was noticing some CPU spikes but I can see there's a fresh update already :)
    And it's made a big difference...

    Should also load and initialize much faster now (and take around 8Mb per instance less)

    Update solved my radical cpu spikes too. :)

  • @mbncp said:
    I was wondering, can an AU plug host other AU plugs ? This is badly missing, my aum midi router looks like a spider’s web :o

    Nope.

  • @wim said:

    @mbncp said:
    I was wondering, can an AU plug host other AU plugs ? This is badly missing, my aum midi router looks like a spider’s web :o

    Nope.

    Too bad, but I still would like to see sub Aum’s in Aum or more matrix in ape. I got apematrix thinking you could add as many matrix you wanted, didn’t think a single second it was limited, my bad :/

  • If I'm not mistaken it should in theory be possible to 're-create' an app such as Cality using Mozaic?!

  • @Samu said:
    If I'm not mistaken it should in theory be possible to 're-create' an app such as Cality using Mozaic?!

    In theory yes. I don't know the detailed functionality of Cality, but from what I know the general concept should be possible.

  • @Samu
    There are no limits !
    And if needed we can always record some incomming events, and then do some manipulation which is limited or impossible in realtime, like shortening notes, pitch shifting, sliding,.. to the next note, auto chord and scale detection, ...

  • Is my ipad cpu a little high ?

    log 0x0FFF7F7F
    log 268402559
    //both show 268402560
    Reaching some limits ?

  • This is a demo of a preset I’m currently working on. If people would like me to share my perspective on how to approach creating patches for Mozaic, let me know and I can do a series of videos on the process from someone who is not a natural programmer.

  • @InfoCheck said:

    This is a demo of a preset I’m currently working on. If people would like me to share my perspective on how to approach creating patches for Mozaic, let me know and I can do a series of videos on the process from someone who is not a natural programmer.

    That sounds cool. I'd be interested in those tutorials.

Sign In or Register to comment.