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!

14344454749

Comments

  • This hands down is one of my all time favorite apps! I tried Chordulator yesterday, recorded a short melody and man! I drove home playing back the Chordulated results and wow!!! Never felt the commute 😍😳❤️

    Thank you all for all the amazing work and coding!❤️❤️❤️❤️🙏☝️

  • Worryingly quiet in here... I hope everyone is brewing new amazing Mozaic scripts :)

    I've been doing quite a lot of work on Flow lately and will soon release a new version.
    During development, I've realized that I'm holding back on building certain things because I'm kind of hoping Mozaic to change in a way that would benefit my code so much that the implementation would have to be rewritten once that maybe happens.

    Stuff I'm hoping for are things like

    • Constants
    • Bigger arrays
    • Colors on pads (or other indications of "state" apart from flash/text)
    • A few additional SHIFT-style buttons
    • Timing/"CurrentTimeMillis" for profiling loops
    • ...and more - most of it already mentioned before.

    @brambos - would it be possible for you to disclose some of the stuff planned for the future? A rough sketch of a roadmap or similar? It would help a lot in "planning" how/if to proceed along certain routes in my development. Information "won't happen" is also helpful, then I would know that any "workarounds" won't be void in a few weeks time...

    (eagerly awaiting the invite for 2025 Mozaic Developers Conference, btw :smiley:)

  • I came here to say how much I like Mozaic. It's a really great way to spice up my AUM sessions.
    So far I've written mostly one-off scripts. I always want to finish these script, make them configurable and upload them to patchstorage. However, I find it to tedious to build a nice configuration interface for more complex scripts (especially with multiple screens).

    I guess 10-20% of my code is for the actual logic, the other code is for getting knob values, scaling values, setting labels, scaling values back to re-set knob values. All tedious stuff that is no fun to write.

    I think it would really help if Mozaic would allow to bind a scaling to a knob. What do other Mozaic dev think?

    The API could look like:

    SetKnobScale <knob>, <outputmax>, <outputmin>
    SetKnobCurve <knob>, <curve>, <outputmax>, <outputmin>
    SetScaledKnobValue <knob>, <value>
    GetScaledKnobValue <knob>
    

    And a script to send all notes to a selected channel could look like:

    @OnLoad
      chanKnob = 0
      SetKnobScale chanKnob, 0, 15
    @End
    
    @OnKnobChange
        if LastKnob = chanKnob
            LabelKnob chanKnob, {Ch }, (GetScaledKnobValue chanKnob)+1
        endif
    @End
    
    @OnMidiNote
        SendMIDIOut (GetScaledKnobValue chanKnob), MIDIByte2, MIDIByte3
    @End
    

    I also second Peblins wish for additional shift/modifier buttons at the bottom and the wish for customizable background colors (mentioned somewhere else in this looooong thread).

  • I’ll start investigating some requested features shortly (such as extending the arrays and exact system time querying) and report back.

    As it looks now I consider Mozaic ~99% feature complete. So don’t expect huge fundamental changes or a ton of extra stuff on top of what it does now. Just small useful things and tweaks.

    With the current feature set everything I intended it to do is possible. Obviously I’m open to useful suggestions, as usual :)

  • @brambos: being able to set pad colors would be super helpful.

  • @brambos: as an untechy user of other people’s excellent Mozaic creations, I wonder if a few more default template options for the user ‘front panel’ interface might help ambitious devs who are having to work all sorts of magic with shift at the moment for their more complex creations? Like, maybe, some three or four way switches, 2 state rocker switches, maybe even sockets and virtual cables? Easy for me to say, because I’ll only be sitting back and seeing what cleverer people than me could make of them, even if it were possible to do, of course... But hey, a girl can dream, right?

    Slightly off topic - one thing which would be immediately useful to me would be if you could add DigiStix to your ‘keymaps & templates’ in Rozeta Rhythm. I think the way you implemented randomisation/mutation features in it is pure genius, and my favourite way to ‘grow’ a rhythm part organically. Those features married to the great kits, MIDI tweakability and sample import offered in DigiStix would be pure heaven :)

  • I'm pretty sure TouchOSC and mozaic would be best friends for anyone needing a more custom UI.

  • It seems I have been able to bump max array sizes to 1024 cells and the max number of user variables to 256 without breaking anything vital.

    You won't be able to load newer presets into older versions of Mozaic, but that should generally not be an issue.

  • _ki_ki
    edited September 21

    Cool, that simplifies some algorithms :)

    And the 256 vars are also welcome. I'm currently in the need to reduce from 217 to less than 200. 73 of them are constants just needed to simplify programming. Thats more than a third of the available vars ! Of these constants, only 4 are arrays (with less than 16 entries)

    .

    I can also offer an idea on how to integrate constants into the language without breaking current scripts:

    A DefineConst function with two parameters, first one is the name of the constant, second the value. Expression then need to lookup not only the variables-name-table, but also the constant-names-table.

    DefineConst use way less memory than variables, a maximum of 256 const names should be enough. Constants reduce the need to use the 'costly' variables. For the script programmer using const or a var to define a constant only differ in the definition ( RESET_KNOB = 2 versus DefineConst RESET_KNOB, 2 ) but not in the usage.

    The few cases, where const arrays are needed, one can use a variable with array initialization.

    .

    But don't worry, i'll finish my script with 199 vars and no need for the DefineConst function - i already made a list of which to combine and reuse :)

  • @burns_audio said:
    I'm pretty sure TouchOSC and mozaic would be best friends for anyone needing a more custom UI.

    True, although it's another workflow step and screen jump away from the immediacy of using the plugin gui directly.
    I'd love to see custom gui available in Mozaic since I'm skilled at designing rather than coding :)
    This is the main thing keeping me from using these great Mozaic scripts available like the sequencers regularly.

    But I can see the difficulty in programming that in and maybe it would be better suited to an all new (full screen gui) AU app with Mozaic engine built in :)

  • @Svetlovska said:
    @brambos: ...

    Slightly off topic - one thing which would be immediately useful to me would be if you could add DigiStix to your ‘keymaps & templates’ in Rozeta Rhythm. I think the way you implemented randomisation/mutation features in it is pure genius, and my favourite way to ‘grow’ a rhythm part organically. Those features married to the great kits, MIDI tweakability and sample import offered in DigiStix would be pure heaven :)

    In case you didn't find out already, @Svetlovska (and @brambos) , the keymapping in Rozeta XOX and Rozeta Rhythm for Digistix is:
    BD = 48, SD = 49, CP = 53, LT = 58, MT = 57, HT = 56, CH = 50, OH = 51.

  • @Harro said:

    @Svetlovska said:
    @brambos: ...

    Slightly off topic - one thing which would be immediately useful to me would be if you could add DigiStix to your ‘keymaps & templates’ in Rozeta Rhythm. I think the way you implemented randomisation/mutation features in it is pure genius, and my favourite way to ‘grow’ a rhythm part organically. Those features married to the great kits, MIDI tweakability and sample import offered in DigiStix would be pure heaven :)

    In case you didn't find out already, @Svetlovska (and @brambos) , the keymapping in Rozeta XOX and Rozeta Rhythm for Digistix is:
    BD = 48, SD = 49, CP = 53, LT = 58, MT = 57, HT = 56, CH = 50, OH = 51.

    Thanks! That’s helpful!

  • @_ki said:

    I can also offer an idea on how to integrate constants into the language without breaking current scripts:

    A DefineConst function with two parameters, first one is the name of the constant, second the value. Expression then need to lookup not only the variables-name-table, but also the constant-names-table.

    My suggestion would be to do constants as a pure pre-processing step and don’t use any runtime lookup tables at all. Define a constant syntax like $myConstant, have a @constants section that defines the constant mappings and then just do ”search/replace” before throwing the script at the int-code interpreter.

    @brambos thanks, 1024 and 256 sounds great.

  • _ki_ki
    edited September 23

    And Now for Something Completely Different:

    This package (instructions and download on patchstorage) enhances external code text editors with syntax highlighting, jump markers and full Mozaic language validation. It was developed for the commercial Textastic IOS code text editor, but since that needed a Sublime3 syntax definition it also works with Sublime 3 on Windows, OS X and Linux.

    OT Developer rant:

    The syntax highlighting and jump markers were ready on day one and took about 300-400 lines of code.

    But since highlighting came with some error detection, i got the crazy idea to try to develop a full syntax check using the simple sublime3 highlighting language (no variables or states at all, only recursive contexts switched, pushed or popped when regex match).

    It took around 170 hours and the current code is about 2000 lines. For testing i have setup a UnitTest script (>1200 lines) that tries to test all error conditions i could think of. And i also checked against around 40 of the patchstorage scripts.

    The parser now knows all Mozaic events, commands, functions and constants and for each of them how many and which type of parameters are allowed. Variables are checked including indexing. And expressions including parenthesis nesting and other variables with indexing using expressions themselves are fully validated and errors are highlighted.


    The only thing that bothers me a bit is that on IOS, the parser knows exactly what went wrong, but can only highlighted the existing chars to the end-user - you still have to gues what might be wrong.
    For Sublime3, i found out that Tools/Developer/ShowScopeName display the current parser scope and so i started adding syntax-error descriptions as fake-contexts allowing to comunicate error messages :)

    The journey was quite interesting, i now know regular expressions by heart and managed to trick two different 'error states' into a language without states B)

    I am fully aware that there is a possible user group of maybe 2-5 script authors (including myself) - i did it anyway.

  • McDMcD
    edited September 24

    @_ki said:
    I am fully aware that there is a possible user group of maybe 2-5 script authors (including myself) - i did it anyway.

    I am familiar with your programming skills from our collaborations on some StreamByter code. It doesn’t surprise me that you would do this work for your own benefit just to make
    Mozaic coding more efficient.

    You mention how you made a converter from an well structured Pseudo-code language into StreamByter syntax for your own sanity and speed of development.

    But going the extra “miles” for someone to join you is a great contribution. Anyone familiar with Open Source programmer's know that a lot of talented programmers share their work freely and this is a great example of that motivation.

    I’ll use this language highlighting on Sublime which I just installed to start digging into Mozaic as a programming exercise. Then I can just email or message the text over to my iPad and never have to write text on the iPad with any of the substandard keyboards that I own.

    The only thing more exciting for me would be a Mac OS X version of Mozaic or any OS X application that can accept Mozaic code to generate MIDI streams.

    Given @brambos’ history as a programmer it’s possible he could create versions for multiple platforms like OS X, Linux, Windows and Android. In that order of course! I paid would $25 for MidiFire on OS X and I'd be willing to pay more for an OS X Mozaic App and less for Linux.
    Windows and Android I don't need.

    Hopefully, @brambos will consider making Mozaic a universal language for "MIDI Programming". Mozaic is an excellent language to use to learn to program. Someone
    should create some instructional content and create a step-by-step set of videos to show how you can make MIDI FX in Mozaic.

  • The code definition made by _ki is some next-level Mozaic wizardry. If you ever felt hampered by the built-in editor of Mozaic, I really recommend you try this out.

    The syntax checking is amazing, and everything just looks amazingly structured.

    This is a monumental add on for Mozaic!

    :o

  • Respect @_ki!! 👊

  • Yes, the Mozaic language support for these texteditors is great! Thank you very much, @_ki ! I installed it in Sublime 3 on my Windows pc and working (analyzing, coding) with Mozaic-code is so much easier and more comfortable now.
    @brambos , is it possible to 'register' *.moz files in IOS, so we can use 'Copy to... Mozaic' and/or 'Open in... Mozaic' for these files from within Dropbox, Documents, Goodreader, the Files app, etc.??

  • @Harro said:
    @brambos , is it possible to 'register' *.moz files in IOS, so we can use 'Copy to... Mozaic' and/or 'Open in... Mozaic' for these files from within Dropbox, Documents, Goodreader, the Files app, etc.??

    It's a bit more involved than just adding the file extension. The filetype ".mozaic" is already recognized automatically, but these aren't plain textfiles (.e.g. they also contain the saved state, variable states, etc.). So I also need to add a mechanism for importing text files.

    Not super-complex rocket science, but (as with anything file related on iOS) a bit more difficult than it should be. I'll add it to the list because it's useful! :)

  • @brambos said:

    @Harro said:
    @brambos , is it possible to 'register' *.moz files in IOS, so we can use 'Copy to... Mozaic' and/or 'Open in... Mozaic' for these files from within Dropbox, Documents, Goodreader, the Files app, etc.??

    It's a bit more involved than just adding the file extension. The filetype ".mozaic" is already recognized automatically, but these aren't plain textfiles (.e.g. they also contain the saved state, variable states, etc.). So I also need to add a mechanism for importing text files.

    Not super-complex rocket science, but (as with anything file related on iOS) a bit more difficult than it should be. I'll add it to the list because it's useful! :)

    Ok, thank you.

  • Hoi @brambos , thanks to @_ki 's Mozaic's LS I find syntaxerrors in some (of my favourite) uploaded Mozaic-presets like The Chordulator and Clusters , that are NOT detected by Mozaic itself... How is that possible?
    F.i.:

    LabelKnob, knob, {cc }, knob + offset

    Notice the comma after 'knob': Not an error after uploading in Mozaic, but the syntax should be:

    LabelKnob knob, {cc }, knob + offset

    also:

    SetKnobValue rootknob, (TranslateScale, root, 0, 11, 0, 127)

    Notice the comma after 'TranslateScale': Not an error after uploading in Mozaic, but must be:

    SetKnobValue rootknob, (TranslateScale root, 0, 11, 0, 127)

    and:

    LabelKnobs, minSteps

    Idem no error in Mozaic, but must be:

    LabelKnobs minSteps

    Finally: Bryan Appel uses a var named 'div' (in Clusters), while that is a reserved word (an operator) in Mozaic (!): also not an error in Mozaic, but a big red spot in LS.

    It makes me wonder how 'liberal' syntax checking in Mozaic is (implemented), or are these maybe bugs?

  • _ki_ki
    edited September 24

    @Harro i also noticed several of these glitches several weeks ago and notified most of the script authors.

    And asked Bram why these aren't detected. Defining a syntax is one thing, but writing the parser to read and interpret that syntax is a lot more complicated. So Bram allowed some variation without throwing errors:

    • Regarding the comma problem: The interpreter skips empty , parameters if infront of expressions (not strings!). So you can write 'LabelKnob ,,,,,a,{Hello}' or 'LabelKnobs ,,,,a,,,,,b' or 'LabelKnob ,,,,a,{Knob}' without getting a syntax error.

    • Mozaic uses internal default parameters if something is missing. Therefor 'a = Random' (which officially requires two parameters) returns a value between 0 and 127, using min=0 and max=127 as defaults.

    • Mozaic allows to use keywords as variables - and these override their intended functionality. So if you ever assign 'LastKnob = 2' your OnKnobChange will always use the 2 of the variable and not the result of the LastKnob function. The 'div' variable example above 'kills' the div function name with 2 parameters.

    • Mozaic allows an 'array[ ] = [ ]' statement that assigns to the array with index offset 0 using array assignment with an empty array - doing nothing than declaring the variable array (and all its 1000 indices) with the default value zero. I checked this after finding a script using something like 'FillArray name[ ], 0, 16' and 'table[ ] = [1,2,3]'. I liked the empty brackets on the lvalue side, so the parser does not flag these - but it will flag empty array assignments on the right side.

    .

    My UnitTest.moz lists several of these edge cases where Mozaic does not throw an error in the 'Differences to Mozaic' section near the end. Both the 'div' example and comma stuff like 'TranslateScale, root, 0, 11, 0, 127' were directly taken from the working scripts on patchstorage :)

    I decided that the syntax parser should adher to the language definition in the Manual which i verified is the same as in Mozaic's buildin help. I also hinted Bram of a single missing optional parameter in the buildin manual :)

  • Mozaic is really liberal. Extraneous commas etc are removed during parsing and don't even make it into the virtual machine. Everything is optimized for speed (since this thing runs on the real time thread) and for music (i.e. it's better to keep stuff running during a performance than to halt playback with a syntax error). So that's the reason.

    Also, it sounds really fun to make a GCC-level robust compiler, but that would have kept me busy for at least another 4 years ;)

  • McDMcD
    edited September 24

    @_ki said:
    This package enhances external code text editors with syntax highlighting, jump markers and full Mozaic language validation. It was developed for the commercial Textastic IOS code text editor, but since that needed a Sublime3 syntax definition it also works with Sublime 3 on Windows, OS X and Linux.

    FYI. Sublime 3 licensing for windows, Linux and OS X is $80 (self-enforced).
    Textastic is $10 on IOS and (interesting) only $8 on OS X. Pro coders love
    MacBooks so they probably sell more OS X than IOS by far.

    Both Textastics (OS X and IOS) can share a folder on the iCloud for moving projects between platforms easily.

    FYI: To add @_Ki's syntax highlighting to the OS X Textastic you must copy these @_Ki's files to this Mac Application Specific Folder:

    /Users/{Your_Login}/Library/Containers/com.textasticapp.textastic-mac/Data/Library/Application\ Support/Textastic

    Monokai-Mozaic.tmTheme

    Mozaic (folder containing):
    SymClasses.tmPreferences
    SymHide.tmPreferences
    SymFunctions.tmPreferences
    mozaic.sublime-syntax

    I am fully aware that there is a possible user group of maybe 2-5 script authors (including myself) - i did it anyway.

    We could group that number to closer to 10 with some effort on tutorials to get more musicians to consider writing their own MIDI FX.

    I think "annotated" code examples is a good way to start recruiting more to experience the joy of making some code that does something musical. This is something that really should be in the Wiki so new terms/concepts could be links to more details for anyone needing more background.

  • _ki_ki
    edited September 24

    I didn't realize there is also a Textastic for OS X.

    Regarding the fact that my parser only works for 'paid' code text editors: I would have loved to do the syntax highlighting for a 'free' code text editor on IOS, but didn't find any where one could add own highlighting definitions.

    But on the other hand, if not using the complex Sublime3 syntax definition, i wouldn't have delved into the task of turning the syntax highlighting feature into a full language validator.

    .

    After finishing the parser, i had a short look at other syntax highlighting grammars - most of them just grab keywords, numbers, operators and parenthesis and style them - so they don't care if the statement 'a = + + b + + + c (d %)' is valid, they just colorize the elements. I hoped there is a 'standard' since there are so many online sites doing syntax highlighting of pasted code - but i suspect that each uses own grammars.
    And i ualso nsuccessfully tried to find other editors supporting sublime3 syntax :/

    .

    BTW:

    • I just found GoCoEdit (costing about the same as Textastic) that also allows user defined syntax highlighting. The grammar language only misses some of the features i needed to implement the validator. (Like pushing multiple contexts at once).
    • An there is a free vim also allowing highlighting grammars, but... (hey do i really have to elabotate why i prefer not to use vim to edit mozaic scripts ??)
    • Kodex and CodeAnywhere are free, but don't offer own grammars.
    • I think there was also one code text editor that for each update comes with all language definitions that are on the TextMate language definition git.
  • Excellent work, @_ki. I think the number of people who'll find it useful is slightly larger than your estimate:)

    Speaking of Textastic, does it actually integrate well with Github from the iPad? How is your experience? Sounds like Textastic might be a good Black Friday candidate for potential Mozaic dabblers.

  • _ki_ki
    edited September 24

    @bleep Hmm - i didn't try that yet. But looking at the menues and Textastic manual it seems that it integrates with the WorkingCopy app to access gits. Textastic offers sFTP, WebDAV, DropBox and GoogleDrive to access remote files, but no git.

    WorkingCopy comes in a free trail version and i managed to add its example git to Textastic and 'in place' edit the files of the git in Textastic (as shown on the Textastic site)

    The full version of WorkingCopy costs 17€, but there is a free 10 day 'full trail' IAP. The main IAP idea of WC is quite interesting, as i didn't see that kind in any music app:
    With the 17€ you only buy the features up to the current version (+ 12 month), there is a big list of paid features and when they were published.
    So if i understand that model correctly WC managed to do kind of paid updates which is good for the developers. Since the bought features are permanent, this clearly differs from yearly subscriptions (which i totally dislike). It seems that one could 'not buy' the update in one year, but buy the whole features a year later (if one really needs them) and still use the app with the bought features in that 'waiting' year, resulting in 'update ever other year' to keep the cost down. Or if one is happy with the current features, just don't buy the newer features...

    WorkingCopy comes with an own simpler editor including syntax highlighting for many language, but no user defined grammars.

  • @_ki said:
    @bleep Hmm - i didn't try that yet. But looking at the menues and Textastic manual it seems that it integrates with the WorkingCopy app to access gits. Textastic offers sFTP, WebDAV, DropBox and GoogleDrive to access remote files, but no git.

    WorkingCopy comes in a free trail version and i managed to add its example git to Textastic and 'in place' edit the files of the git in Textastic (as shown on the Textastic site)

    The full version of WorkingCopy costs 17€, but there is a free 10 day 'full trail' IAP. The main IAP idea of WC is quite interesting, as i didn't see that kind in any music app:
    With the 17€ you only buy the features up to the current version (+ 12 month), there is a big list of paid features and when they were published.
    So if i understand that model correctly WC managed to do kind of paid updates which is good for the developers. Since the bought features are permanent, this clearly differs from yearly subscriptions (which i totally dislike). It seems that one could 'not buy' the update in one year, but buy the whole features a year later (if one really needs them) and still use the app with the bought features in that 'waiting' year, resulting in 'update ever other year' to keep the cost down. Or if one is happy with the current features, just don't buy the newer features...

    WorkingCopy comes with an own simpler editor including syntax highlighting for many language, but no user defined grammars.

    You made a great tool for someone that lives in a text editor writing hundreds of lines of code.
    In other words, you will get the benefit of the effort and we'll get more great MIDI FX and Utilities
    from your surgical mind and fingers.

    $10 is a fair price for a decent IOS text editor if someone intends to write a lot of code. Maybe someone
    that hasn't written any code will find out how much fun programming is when something works.

Sign In or Register to comment.