Audiobus: Your virtual music studio.

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.

MIDI buffer - does this app exist?

What I am interested in is an app that would take in note input, store them in a buffer, and after some threshold or trigger, release all notes from buffer.

Easy use case: app waits for midi input. after any 4 notes reach the input, they are released from the buffer as a chord.

Or!

The notes build up in the buffer. When a CC LFO triggers the buffer to release, the notes then release in quick succession, ie. 1/32nd notes.

I've been playing around with the probability setting on Cality, setting it low, and playing with note streams from other MIDI Au sequencers. This would be another cool tool in the MIDI AU toolbox to pipe these note streams in to.

Is there anything currently that does this?

Maybe it could be coded in Bram Bos's coming app? But I bet a developer who wanted to run with this idea could come up with a great UI and implementation to allow for a number of different possibilities.

Comments

I don’t recall any app like that. But it could be done with a StreamByter script. I bet if you asked over on the Audionic StreamByter forum, someone would code one, or point you to one if it already exists.

It can be advanced, or simple, depending on what you want to do. What you want to do is definitely advanced. However, I bet you’d get someone writing a script for you within a few days without any effort on your part if you asked.

I’m totally looking forward to Mozaic too! Your idea would be a fun test/learning case that I’d probably try just for fun.

Cool. And I’m assuming you could set the number of notes before trigger variable to a knob. And do all sorts of nice things like create a variable and control for the note off delay, insert a variable for wait time in ms between triggers, etc.. I can see I’m gonna have a blast with Mozaic.

@wim said:
Cool. And I’m assuming you could set the number of notes before trigger variable to a knob. And do all sorts of nice things like create a variable and control for the note off delay, insert a variable for wait time in ms between triggers, etc.. I can see I’m gonna have a blast with Mozaic.

Yes to all of those.

I'm currently working on the programming manual. I'll upload as soon as I have a first draft to give an idea of the bandwidth of things you can do.

Watched over that @brambos example the last minutes.
I like the logical structure. I frequently used StreamByter but never got around that language.
It is usable - no questions asked - but at least for me not „easily logical“ all the time - and i do code for my living for > 20 years. The Mozaic version looks fine to me.
So, i am here to beta test it
Happily trying to convert my StreamByter scripts to whatever you name your language.

You can’t name your own variables. To speed up the interpreter (make it predictable to identify variables in a certain format) the naming of vars is numbered like this.

But everything can be parametrized, including for-loops... you can do this:

for var99 = 0 to var4

Or this

for var99 = 0 to (Random 1, 50)

Re: waiting. Don’t think of it as waiting. It’s more like a to-do-list you can scribble midi instructions onto. Mozaic will make sure your messages are sent out in time while you’re doing other things. Any midi message can have an (optional) delay parameter added to itself (which is indeed zero if not specified), so there is no asymmetry.

We can schedule midi events for tomorrow if we like. Wouldn’t want the audio-thread to wait until that happens, would we?

And don't worry about the exact syntax of all functions... the IDE has code-completion so it will remind you what parameters are needed.

For completeness and to address the OP's request, here is a StreamByter script that will work with the current App Store version. You can use slider 1 to set the length of the outgoing notes and slider 2 to set the number of notes in the buffer dynamically. The left block label shows how many notes are currently buffered as you play them in.

@audeonic said:
For completeness and to address the OP's request, here is a StreamByter script that will work with the current App Store version. You can use slider 1 to set the length of the outgoing notes and slider 2 to set the number of notes in the buffer dynamically. The left block label shows how many notes are currently buffered as you play them in.

Thanks Nic. But it seems that this is playing only the last Notenheft went into the buffer - even if your commented code says „send buffered notes with loop“.

Maybe I have misunderstood the original request. The notes you play do not play in a loop, they just get buffered until you play the final note at which point all 3 (or whatever slider 2 is set to) are played simultaneously. The 'loop' comment means that the code runs through the buffered notes with a programming loop.

@audeonic said:
Maybe I have misunderstood the original request. The notes you play do not play in a loop, they just get buffered until you play the final note at which point all 3 (or whatever slider 2 is set to) are played simultaneously. The 'loop' comment means that the code runs through the buffered notes with a programming loop.

StreamByter doesn't (currently) know about the host tempo, but I have tweaked the script above to add a 3rd slider with a variable called 'DELAY' which lets you set the inter-note delay in ms when the buffer is triggered. I suppose I could have made this BPM - I'll leave that one as an exercise.

I see this useful for rhythmic playing - e.g. play any four notes at any time & 4th will then strum them back with a tempo division of the host tempo.

Add to that AU Parameter exposure for automation...

Happy to throw my hat in the ring here with an AU to do this?

If you think it is worth making an AU for this, that's up to you. Seems like a fairly minor feature to code a whole AU around but maybe this could be just a germ of inspiration for your next one?

@audeonic Nic, opening up Streambyter to include transport info from the render buffer would greatly improve its usefulness imo.
Every AU app I write has this to access, along with AU Parameters feed through the midi event buffer.
I’m guessing Mosaic will have these too?
might be worth considering if there is enough interest?