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.
It doesn’t open the code as the current project, but if you go to the load button you should see the project available to load.
Rather than try to have each echo note be the same length as the original note, I decided to ensure that there were no overlapping note ons. This results in truncation of notes if they’re longer than the period between echos, but I felt that was better for a rhythmic delay.
For a mono synth, sending two note ons for the same note without a note off between them off will often not sound the second. For any synth it could be unpredictable. Also, I wanted to be as sure as possible there were never stuck notes. So, I decided that there would always be a note off before the next echo, and of course one after the last. With this approach, I didn’t need to keep track of note length. It also resulted in a more rhythmic sounding echo, which is what I was going for.
But it did get me to thinking “how would I do this if I needed to preserve the note length somehow.?”
I like that. It’s going to reduce the number of lines of code significantly.
What happens if I want to add some more cells to source? Back to for loops, or do you have something clever cooking?
Thanks! Nice and on point. I suspect some folks could benefit from some annotations explaining the way these Mozaic functions are used. This opened new doors for me. Bram does all the heavy lifting to make it as easy as possible to use the host’s clock and Pulses Per Quarter Note suddenly makes practical sense for the timing puzzles. The note happened N ticks after the last quarter note. Seems simple when you see the magic (and you have some experience with functions).
Maybe something for @j_liljedahl and AudioShare ?
Yeah.. this is the sort of stuff that ends up in the "Tutorials" folder. In fact I may polish this one a little bit and add it
I think it already automatically adds the array initializer to the index you specify...
source = [7,8,9,10] // add 4 numbers starting at index 6
CopyArray source, destination, 4
I haven't tested this yet, but it should work already in my code unless I actively block it. I'll test tonight
Some thoughts regarding UI customization: I’d love to have more options when it comes to layout, but I’m fully aware how big the risk of adding complexity is, especially after spending dozens of hours with KRFT some time ago. Interestingly, the main problem I had with it wasn’t that it was difficult or complicated (it isn’t) but the fact that I had to manually position all of the controls and make decisions at every step had quickly become a chore for me and took away all the fun.
Anyway, here’s an idea: how about splitting the space into halves or quarters and making it possible to assign different minilayouts to them separately? I think it could still be relatively simple, but I would be able to mix and match whatever fits my needs in a given situation, eg. I could have a row of pads in the upper half and set of knobs in the bottom. And to keep it simple and backwards compatible (also still easy to learn in the beginning) the original approach could still be available. I’m a big believer in “progressive disclosure of complexity” philosophy and I think this solution would fit into this model of “easy at first, optionally more and more complex when you need it”.
Yes, that would be the ideal way to go and not too difficult to do. The thing is the shift button isn’t exposed as an AU parameter so it can’t be automated. Pads aren’t exposed as AU parameters either, but there’s a way around that. I was planning to add AU automation for everything, including saving the snapshots.
But, while typing this, I think I figured out how to pull it off. When I finish the new project I’m working on (or need a break from it), I’ll come back to this one.
You beat me to it.
I was thinking of suggesting something like that too. Keeping the existing views, but adding one that divided into three or four panels, each configurable to be knobs, sliders, pads, or XY.
I’ve not been minding the current constraints, but I’m guessing it will be a thing requested over and over. Something like this might give enough configurability without over complicating things.
Yeah.. this one is on the back-burner, but certianly still burning nonetheless.
From the manual:
Another question @brambos:
Is there any way an AU plugin could retrieve the current parameter values from another AU, like a synth, for example?
If not, what would the host have to do in order to make it possible?
The idea is to support parameter feedback to hardware controllers with illuminated pads, LEDs, flying faders, LED rings, displays and so on.
I discussed this with Jonatan the other day, and at least with AUM it should now be possible (it wasn't when I was looking into sending Sysex into Phasemaker). So I can consider adding a "SendSysex" function at some point for those hosts which do support it. With the enormous caveat that it may not work in your (other) host of choice (I tend to avoid things that don't work everywhere, because those always lead to lots of support effort).
The host has to pass it, because plugins can't talk with each other's AU parameters. I'm not currently aware of any host that lets you do that, hence MIDI CC is now typically the way to pull it off.
If a host wanted to make this possible, it would have to let the user select a source AU Parameter in a plugin and a destination AU parameter in another plugin, and make sure that the format of the source is scaled/translated into the format of the destination. Whenever the source parameter is changed the host is notified. It would then have to notify the destination plugin in turn.
I too thought about trying to do controller feedback How do you plan to get around the single device limit ? I figured it wouldn't be simple as you cannot talk to both controller and synth without very careful channel management.
@brambos, is there a reason why AU parameters update knobs, but knobs don’t update their AU parameters? Can that be changed? It really needs to be bi-directional.
They should be bi-directional already. But I’ll check
Hi @brambos !
I just downloaded your pdf manual. Very well written! 👍
I’m interesting to find a way in your script language and I think your manual and tutorials will help me! I’m curious!
Thanks a lot for for it! 😊
DevHub for GitHub by Bruno Lemos, is free today, usually 7.99. Not sure if it’s any good, but it has good reviews.
Patchstorage is a good choice.
Thanks! I’ve put a lot of effort in it. I think that for this product the manual is one of the key factors for making it work. Also for myself: if I can’t explain something concisely, it’s not simple enough
Not sure if you’re planning any more UI element types, but the one I can think of that would make sense and not take up much screen real-estate, would be to have small two state (on/off) toggle switches. (either on/off buttons or sliding switches) For now I’m using the pos/neg extremes of a slider for the same.
The new share button is a big help. 👍
This one is nothing fancy but might be useful to someone.
MIDI CC Randomizer
Double-tap the Randomize knob or turn it to 50% or higher to randomize the values for each cc. You can also send a value of 64 or higher to the KNOB 0 AU parameter to trigger randomization. The last knob sets the outbound channel for the cc messages.
https://www.dropbox.com/s/e3ny0ui8mduanxz/MIDI CC Randomizer.mozaic?dl=0
Thank you, looks good!
@wim Not only are your creations useful but I learn so much by studying your coding. Top stuff 🙂
Definitely something I’m hoping for too
Is it possible to have as many unique pages as you want of the different layouts?
So you can flip between multiple sliders pages for example?
If it allowed full screen customisable UI, then it could be more suitable for coding unique controllers, a lot easier than plugins but the fixed guis makes this limited currently. Really hope personally it gets that one day. I bet it would sell loads more with that functionality too as I think many people would use it for that over plugin coding.
Yeah, I think the wish is clear, but I have a feeling this is an example case of "careful what you wish for".
Total freedom is very often not fun, and lots of work. Within the goals that I set out to achieve my current solution does what it needs to (fire one line of code and have a working GUI) and more complex setups will only get in the way of those objectives.
I have used Lemur enough to know that setting up the GUI and hooking up all the controls to make them accessible in script was a massively tedious task, even when using the desktop tools. So for now I'm staying away from such use cases.
(but never say never)
How about being able to hide/reveal controls using a dropdown list? That way you could release a super template with overlapping controls all over the shop and users could just activate the ones that they want to use in the positions that suit them.
These are AU plugins. You can have as many instances as you want. I don’t feel the need for increased number of controls in each instance is as important as people think.