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!

191012141573

Comments

  • @recccp said:
    Not sure if it's a bug or expected behavior...
    I've got a set of instructions @onknobchange which works fine when tweaking the knob, but when I setknobvalue via pad release only the ui updated.
    Can I "ping" @onknobchange from script?

    Right now this is expected behavior. But see my post above about user defined functions ;)

  • @brambos said:

    @Harro said:
    Hello @brambos , I found a small bug in Mosaic:
    when I use the code editor in maximized CODE view, change some code and UPLOAD, the LOG screen opens automatically (also maximized); then when I return to CODE view and press my finger to put the cursor anywhere to where I want it, the GUI pops up! And I have to press MAXIMIZE again to return to the maximized CODE view. I don't think this behaviour should 'by design'. Do you?

    Weird, I can not reproduce this behavior. Which host and what sort of device does this happen on? Thanks!

    It happens within all hosts (apeMatrix, AUM, etc.) and standalone too. But I understand it better now, because I use a bluetooth (qwerty) keyboard with my iPad Pro 10.5. Thus instead of Mozaic showing iPad's 'build in' keyboard after I press a finger to place the cursor, Mozaic shows the GUI... You can reproduce this behaviour without using a bluetooth keyboard like this: Maximize Mosaic's CODE view, press finger to place the cursor, then the (internal) keyboard pops up, then close the keyboard via the keyboard-icon bottom right: then automatically the GUI pops up, while maybe I'd like to stay in maximized CODE view...

  • @Harro said:

    @brambos said:

    @Harro said:
    Hello @brambos , I found a small bug in Mosaic:
    when I use the code editor in maximized CODE view, change some code and UPLOAD, the LOG screen opens automatically (also maximized); then when I return to CODE view and press my finger to put the cursor anywhere to where I want it, the GUI pops up! And I have to press MAXIMIZE again to return to the maximized CODE view. I don't think this behaviour should 'by design'. Do you?

    Weird, I can not reproduce this behavior. Which host and what sort of device does this happen on? Thanks!

    It happens within all hosts (apeMatrix, AUM, etc.) and standalone too. But I understand it better now, because I use a bluetooth (qwerty) keyboard with my iPad Pro 10.5. Thus instead of Mozaic showing iPad's 'build in' keyboard after I press a finger to place the cursor, Mozaic shows the GUI... You can reproduce this behaviour without using a bluetooth keyboard like this: Maximize Mosaic's CODE view, press finger to place the cursor, then the (internal) keyboard pops up, then close the keyboard via the keyboard-icon bottom right: then automatically the GUI pops up, while maybe I'd like to stay in maximized CODE view...

    Ah! Thanks for clarifying, I didn't try it with a BT keyboard.

  • @Jocphone

    User defined functions?

    I have a feeling this language draws its inspiration too far back in the dark ages of programming for me.

    I think Mozaic drew inspiration from Pascal IIRC.

    Pascal had user defined functions back in the dark ages too. :-) it’s a fundamental part of the language.

    In my day Pascal was the first proper language you were taught as it is quite elegant and handles the basic premises of programming concepts well. Once you know pascal you have a foot in the door for more advanced languages with ugly notation and too many symbols. ;-)

  • What ever happened to line numbers?

  • @BiancaNeve said:
    What ever happened to line numbers?

    They were considered for a few minutes.

    And then quickly dismissed :D

  • @wim said:
    Here’s a kind of work in progress. Only lightly tested, so could be buggy...

    There are knobs to control eight cc values. Pressing one of the four pads stores a snapshot of the knob values. The pad lights up when a snapshot is stored in it. Touching a lit pad removes the snapshot.

    The XY pad can be used to morph between the snapshots. The outside corner of each quadrant sets the knobs to 100% of the snapshot value.

    The cc’s assigned to each knob can be changed by holding down the shift button while turning the knob. The bottom-right button changes the midi out channel.

    Except for storing the snapshots, this can be run via hardware controller or apps such as Rozeta LFO using AU parameters and MIDI learn.

    Like I said, it’s a work in progress. It could probably use some refinement.

    https://www.dropbox.com/s/y0njcxn6nvi4lcw/Midi CC Morph Pad.mozaic?dl=0

    This is awesome - really top stuff.

  • @brambos , for a future update, I hope you will consider a more 'elaborate' presetmanager for Mozaic. So we can make our own banks and rename banks/presets.
    A seperate button for "Show preset-description" (which shows that description in a messagebox) would also be nice, and the name of the loaded preset in Mozaic's 'titlebar' (Ruismaker's icon right aligned, presetname in the middle?).
    And lastly, I always hope (expect) a "Are you shure? Yes/No" dialog after pressing Delete (preset (and maybe later Bank)!

  • @brambos said:

    @aplourde said:

    @wim said:
    Dynamic Scale Quantizer. This one was prompted by a post some months back from someone looking for an app that would listen to midi note input, and build a scale filter from it. For instance, play a chord, then have any input forced to only the notes of the chord. if anyone locates that thread, please let me know. I’d be interested to know if this works the way the poster had in mind.

    Dropbox download link:
    https://www.dropbox.com/s/gh96ndo12a3cbk0/Dynamic Scale Quantize.mozaic?dl=0

    I was asking about a dynamic scale quantizer. This is very cool, thank you!

    However, unless I'm not quite understanding how to use it, I don't think it's quite what I was talking about.

    I believe this works by switching to a sampling mode where it learns the notes and then when you switch back it restricts playback to those notes. So, a two step process.

    I was envisioning a completely seamless, simultaneous process:
    You would feed the plugin two channels of notes; one is the stream of notes to be filtered and the second are the notes that define the filter.

    The impetus for this is that I often find random generators too random. Just because the notes are in the scale I'm in typically isn't enough for me - sometimes I want a way to rein them in. With this tool, I could play chords and conform the incoming stream of generated notes to my needs.

    Actually, the learning capabilities of your script are cool. I can envision how learning from a different sequence of notes could be useful (e.g. sequentially instead of sustained chords). In addition to a way to clear that buffer manually, having it reset every measure (or two or...) could be very cool to build up this second, aleatoric part based on another sequence and its harmonic progression.

    Also, while I did call it a quantizer, I would probably use it more as a filter (i.e. kill any non-chord notes, not transpose them to be in the chord), however I could see the use of both (or even have a probability setting for transpose or kill...)

    Would this remember “valid notes” for the entire duration of the session, or forget them after a cooldown period?

    The initial idea was just an immediate thing; notes pass through only when the "control" chords are playing.

    Wim's programmer got me thinking that a way to memorize the notes of a mono baseline could be useful, but I'm not sure of the best approach here.

    I know that you would want a way to reset. I think ideally you would have both a way to manually reset and also a way to reset according to musically relevant time divisions (1-16 measures). This way you could have the filter become more "permissive" and therefore the output more random and chaotic over a period of time and then periodically clamp down to something more restrictive.

  • @NoonienS said:

    I’m right there with you brother... I’ve been jonsing for this as well... Think of it as like an Arpeggiator.... one midi channel is the chord (I.e. CEG)... another midi channel in is the input note stream. Regardless of the note stream input, it only poops out notes that are turned “on” by the chord...

    From what I’ve read of the manual, it seems that you could use the customscale command... the input chord set the scale notes via some kind of loop... or somethin’

    @aplourde , @MonkeyDrummer , the Chord Magic script can somewhat do what you are asking for. You can see this in the video I posted, where the chord sequence transforms input from Rozeta collider to only use the chord notes. To use two input channels, one to transform and the other one defining the chord you must at the moment use two instances of the plugin (I believe that could easily be fixed) though.

    Great, thank you! I'll take a look...

  • @wim said:

    @aplourde said:

    @wim said:
    Dynamic Scale Quantizer. This one was prompted by a post some months back from someone looking for an app that would listen to midi note input, and build a scale filter from it. For instance, play a chord, then have any input forced to only the notes of the chord. if anyone locates that thread, please let me know. I’d be interested to know if this works the way the poster had in mind.

    Dropbox download link:
    https://www.dropbox.com/s/gh96ndo12a3cbk0/Dynamic Scale Quantize.mozaic?dl=0

    I was asking about a dynamic scale quantizer. This is very cool, thank you!

    However, unless I'm not quite understanding how to use it, I don't think it's quite what I was talking about.

    I believe this works by switching to a sampling mode where it learns the notes and then when you switch back it restricts playback to those notes. So, a two step process.

    I was envisioning a completely seamless, simultaneous process:
    You would feed the plugin two channels of notes; one is the stream of notes to be filtered and the second are the notes that define the filter.

    The impetus for this is that I often find random generators too random. Just because the notes are in the scale I'm in typically isn't enough for me - sometimes I want a way to rein them in. With this tool, I could play chords and conform the incoming stream of generated notes to my needs.

    Actually, the learning capabilities of your script are cool. I can envision how learning from a different sequence of notes could be useful (e.g. sequentially instead of sustained chords). In addition to a way to clear that buffer manually, having it reset every measure (or two or...) could be very cool to build up this second, aleatoric part based on another sequence and its harmonic progression.

    Also, while I did call it a quantizer, I would probably use it more as a filter (i.e. kill any non-chord notes, not transpose them to be in the chord), however I could see the use of both (or even have a probability setting for transpose or kill...)

    I can easily make a different version that works with two channels. I thought that might have been what you wanted, but thought I remembered mention of the learn on/off method. I was also considering that not everyone has controllers that send on more than one channel.

    Anyway, very easy to do the dual channel mod.

    I also had the idea to use the pads to store and recall scale snapshots. That’s also easy to add.

    All of this would be amazing. Thank you!

  • @brambos Two, hopefully, minor requests:
    When using a Bluetooth keyboard and moving the cursor off the top or bottom of the edit area, would it be possible to have the display scroll with the cursor? Right now the cursor goes off the screen (and you can edit what you can't see) and you have to scroll the window by touching the screen, taking your hands off the keyboard.

    Also, TAB works for indenting, would it be possible to have SHIFT-TAB un-indent? Would make formatting much quicker!

    Thanks!

  • @aplourde said:
    @brambos Two, hopefully, minor requests:
    When using a Bluetooth keyboard and moving the cursor off the top or bottom of the edit area, would it be possible to have the display scroll with the cursor? Right now the cursor goes off the screen (and you can edit what you can't see) and you have to scroll the window by touching the screen, taking your hands off the keyboard.

    Also, TAB works for indenting, would it be possible to have SHIFT-TAB un-indent? Would make formatting much quicker!

    Bluetooth keyboards are new territory for me, but I’ll see what I can find. It sounds simple and useful :)

  • @brambos said:

    @BiancaNeve said:
    What ever happened to line numbers?

    They were considered for a few minutes.

    And then quickly dismissed :D

    Yea! Where's my GOTO!!!!!

  • edited May 2019

    It’s on 20 ....

    10 print “hello world”
    20 goto 10

  • wimwim
    edited May 2019

    @brambos, I’m thinking it would reduce the lines of code a ton if there was a way to optionally trigger the @OnKnobChange event when setting a knob from outside the event. Right now, for instance, if I change a knob by pressing a pad, I need to duplicate all the code in the OnKnobChange event for that knob in the OnPadDownEvent. I find myself spending quite a bit of time keeping the actions in each synchronized. This applies to knob changes from all the other events too.

    Maybe an additional optional parameter: SetKnob knobnum, value, optionalupdate? I haven’t thought through whether having optionalupdate callable within the OnKnobChange event would lead to disaster or be powerful for recursion. Probably safer to only have it work outside the event.

    I could easily reduce the code in most of my scripts by up at least 1/3 with this one addition.

  • Where are we sharing all the scripts!?

  • @wim said:
    @brambos, I’m thinking it would reduce the lines of code a ton if there was a way to optionally trigger the @OnKnobChange event when setting a knob from outside the event. Right now, for instance, if I change a knob by pressing a pad, I need to duplicate all the code in the OnKnobChange event for that knob in the OnPadDownEvent. I find myself spending quite a bit of time keeping the actions in each synchronized. This applies to knob changes from all the other events too.

    Maybe an additional optional parameter: SetKnob knobnum, value, optionalupdate? I haven’t thought through whether having optionalupdate callable within the OnKnobChange event would lead to disaster or be powerful for recursion. Probably safer to only have it work outside the event.

    I could easily reduce the code in most of my scripts by up at least 1/3 with this one addition.

    I am working on a solution for this. :)

  • Ok just wrote my first script which I think will be useful for NanoStudio users. Need to clean it up before sharing, but a useful midi filter.

    What’s the easiest way to share scripts?

  • Going to look into creating a scene sequencer next. What sequencers other than StepBud support scenes?

  • @cian said:
    Ok just wrote my first script which I think will be useful for NanoStudio users. Need to clean it up before sharing, but a useful midi filter.

    What’s the easiest way to share scripts?

    I’m not sure the easiest, but here are some options:

    • Upload to Dropbox, or other sharing service, and post a link.
    • Zip up the script and upload it as an attachment to a forum post
    • Copy/paste the text in a forum post, then place code marks (```) on a line before and after the code to enclose it in a code box.
    • Share it on the Wiki at https://wiki.audiob.us/mozaic_midi_plugin using similar methods (see details on the page).

    To get the script files:

    • In the files app go to On My iPad (or Phone) > Mozaic > Export. I think you need to run the standalone app to get them to appear there, if I’m not mistaken.
    • Safer way according to Brambos: Run the standalone app, export the presets, then open the resulting zip file to locate the individual scripts.
  • Has anyone mentioned or thought about sharing scripts on github?

    The site is set up for sharing code and content and has lots of other stuff to help manage code effectively.

  • +1 -- would be great if their were some location (the wiki?) where folks could post their scripts.

  • edited May 2019

    I’ve never taken the dive into scripting, much less programming (other than barely touching the surface of Apple 2 Basic back in the day) ., but I’ve been intrigued by Max, PD and all these other audio/midi toolsets lately, been wanting to eventually dive in an have a go at it.

    Mozaic seems like an ideal entry point to learn some fundamentals that I imagine will help if I ever jump on one of the more in depth environments. So far it’s been a joy just to read the very beginner-friendly manual and make some small tweaks to presets.

    My first pet project will be to see how far I can extend the Noir drum recorder script. would love to add multiple (4-8) seperate selectable patterns with up to twice the current length, perhaps allow for chaining (song mode) - with ability to record filter/grit movements via X-Y controller, preferably at 32nd or 64th resolution (2-4 movements) per 16th beat step if that’s doable.

    I could get lost for days just dreaming up ideas I’d love to implement with this godtool. (Though confronting the math behind some of the more advanced tricks will probably bring me back down to earth in a hurry ;)

  • @inakarmacoma said:
    +1 -- would be great if their were some location (the wiki?) where folks could post their scripts.

    https://wiki.audiob.us/mozaic_plugin_engine

    At least until there’s a better repository.

  • I have set up a Github.

    https://github.com/Ruismaker/Mozaic

    I'm a complete Github noob, so I probably need to do some additional configuration and add a descriptive blurb, but I think this should now be open to all.

  • @brambos said:
    I have set up a Github.

    https://github.com/Ruismaker/Mozaic

    I'm a complete Github noob, so I probably need to do some additional configuration and add a descriptive blurb, but I think this should now be open to all.

    Excellent! If you add a file README.md that will appear as the main introductory page, written using markdown.

    It's also usual to add a license so that people don't run into sharing issues. MIT is fairly popular.

  • @Jocphone said:

    @brambos said:
    I have set up a Github.

    https://github.com/Ruismaker/Mozaic

    I'm a complete Github noob, so I probably need to do some additional configuration and add a descriptive blurb, but I think this should now be open to all.

    Excellent! If you add a file README.md that will appear as the main introductory page, written using markdown.

    It's also usual to add a license so that people don't run into sharing issues. MIT is fairly popular.

    Thanks, I’m learning as I go here! :)

  • @brambos said:

    @Jocphone said:

    @brambos said:
    I have set up a Github.

    https://github.com/Ruismaker/Mozaic

    I'm a complete Github noob, so I probably need to do some additional configuration and add a descriptive blurb, but I think this should now be open to all.

    Excellent! If you add a file README.md that will appear as the main introductory page, written using markdown.

    It's also usual to add a license so that people don't run into sharing issues. MIT is fairly popular.

    Thanks, I’m learning as I go here! :)

    No worries. I'm no expert but have used Github for a few years. It's a great sharing platform and allows a lot in the way of collaboration.

  • wimwim
    edited May 2019

    I tried to upload a file. Got

    Uploads are disabled.
    File uploads require push access to this repository.

    I know nothing about Github, so it could be user error. Or maybe users need to be authorized. I’m wim-number37 on github.

    [edit] Nvm. I guess I needed to be in a fork. I tried create a file, and that made the fork. I can upload scripts to the fork. I’ve no idea it that’s the right way or not.

Sign In or Register to comment.