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: a sneak-peek at my new project

12357

Comments

  • Am intrigued to know what type of things we’ll be able to make with this!

  • @brambos have you seen this VST? Might give you some added ideas? https://www.osar.fr/protoplug/

  • edited April 2019

    Having fun with LFOs...

    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

  • edited April 2019

    @brambos said:
    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

    I can't imagine a scenario where I would need 10 LFOs. I'd rather have less but a low-resource, low-latency app.
    BTW, what max. LFO frequency and resolution (CC? Pitch bend? NRPN?) do you have in mind?
    Maybe both high-res and low-res LFOs would make sense. MIDI is a weird guy.

  • edited April 2019

    @rs2000 said:

    @brambos said:
    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

    I can't imagine a scenario where I would need 10 LFOs. I'd rather have less but a low-resource, low-latency app.
    BTW, what max. LFO frequency and resolution (CC? Pitch bend? NRPN?) do you have in mind?
    Maybe both high-res and low-res LFOs would make sense. MIDI is a weird guy.

    The resolution of the LFO is sample-accuracy, but they're only updated when you need them. The practical resolution is: as accurate as you need them to be at any moment in time :)

    Also, frequencies are up to you - it's all parametric anyway. If you want an LFO to take a day to go up and down you can do that... just set the frequency to 0.000000001 Hz or something :D

  • edited April 2019

    I guess the first 'thing' I would build with this is 'step value table' that sends the values at preset intervals.
    Like a 'Custom LFO Wave'. Or maybe there's a built-in 'value table module' in there already :D

    Too many synths focus on 'LFOs' when they could in practice be replaced with value-tables/step-sequencers with optional step interpolation and value quantisation. (Think running an LFO waveform thru sample-rate & bit reduction).

  • @brambos can you LFO the LFOs?

    A few hundred should be plenty :)

  • @Samu said:
    I guess the first 'thing' I would build with this is 'step value table' that sends the values at preset intervals.
    Like a 'Custom LFO Wave'. Or maybe there's a built-in 'value table module' in there already :D

    Yeah.. I suppose that wouldn't be too hard to put together using an array with values. Interpolation makes it a bit trickier, but still not overly tricky.

  • @Jocphone said:
    @brambos can you LFO the LFOs?

    A few hundred should be plenty :)

    I suppose so. You can multiply the outputs of a chain of LFOs to create some kind of monster amplitude modulation effect. Or you can use the output of an LFO to set the phase of the next LFO for slow frequency modulation :)

  • @brambos said:

    @rs2000 said:

    @brambos said:
    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

    I can't imagine a scenario where I would need 10 LFOs. I'd rather have less but a low-resource, low-latency app.
    BTW, what max. LFO frequency and resolution (CC? Pitch bend? NRPN?) do you have in mind?
    Maybe both high-res and low-res LFOs would make sense. MIDI is a weird guy.

    The resolution of the LFO is sample-accuracy, but they're only updated when you need them. The practical resolution is: as accurate as you need them to be at any moment in time :)

    Aaah, timers :)
    But what resources do unused LFOs use up then?

    Also, frequencies are up to you - it's all parametric anyway. If you want an LFO to take a day to go up and down you can do that... just set the frequency to 0.000000001 Hz or something :D

    I suppose the LFO output value is floating point and I can scale it to any range I want, be it 0..127 for CC or 0..16383 for pitch bend?

  • @rs2000 said:

    @brambos said:

    @rs2000 said:

    @brambos said:
    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

    I can't imagine a scenario where I would need 10 LFOs. I'd rather have less but a low-resource, low-latency app.
    BTW, what max. LFO frequency and resolution (CC? Pitch bend? NRPN?) do you have in mind?
    Maybe both high-res and low-res LFOs would make sense. MIDI is a weird guy.

    The resolution of the LFO is sample-accuracy, but they're only updated when you need them. The practical resolution is: as accurate as you need them to be at any moment in time :)

    Aaah, timers :)
    But what resources do unused LFOs use up then?

    Before any event call I update the phase of all LFOs, which is a handful of divisions and multiplications and a bit of memory. Nothing you'll notice on any device capable of running MIDI AU, unless you have thousands of LFOs. But I know it's there and I'm really anal about my optimizations. :#

    Also, frequencies are up to you - it's all parametric anyway. If you want an LFO to take a day to go up and down you can do that... just set the frequency to 0.000000001 Hz or something :D

    I suppose the LFO output value is floating point and I can scale it to any range I want, be it 0..127 for CC or 0..16383 for pitch bend?

    Correct! :)

    When you set up an LFO, you specify the minimum and maximum values you want to get out, so its output is already scaled for you:

    StartLFO <lfo>, <minimum value>, <maximum value>, <sync to tempo?>, <frequency>

  • @brambos said:

    @rs2000 said:

    @brambos said:

    @rs2000 said:

    @brambos said:
    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

    I can't imagine a scenario where I would need 10 LFOs. I'd rather have less but a low-resource, low-latency app.
    BTW, what max. LFO frequency and resolution (CC? Pitch bend? NRPN?) do you have in mind?
    Maybe both high-res and low-res LFOs would make sense. MIDI is a weird guy.

    The resolution of the LFO is sample-accuracy, but they're only updated when you need them. The practical resolution is: as accurate as you need them to be at any moment in time :)

    Aaah, timers :)
    But what resources do unused LFOs use up then?

    Before any event call I update the phase of all LFOs, which is a handful of divisions and multiplications and a bit of memory. Nothing you'll notice on any device capable of running MIDI AU, unless you have thousands of LFOs. But I know it's there and I'm really anal about my optimizations. :#

    Also, frequencies are up to you - it's all parametric anyway. If you want an LFO to take a day to go up and down you can do that... just set the frequency to 0.000000001 Hz or something :D

    I suppose the LFO output value is floating point and I can scale it to any range I want, be it 0..127 for CC or 0..16383 for pitch bend?

    Correct! :)

    When you set up an LFO, you specify the minimum and maximum values you want to get out, so its output is already scaled for you:

    StartLFO <lfo>, <minimum value>, <maximum value>, <sync to tempo?>, <frequency>

    Looks convenient. Very nice. That's how a coding language should look like! :+1:
    Tempo sync answers my first question already.
    Dumb question: What about LFO waveforms? (Triangle, rising SAW, falling SAW, SQR etc)

  • @rs2000 said:

    @brambos said:

    @rs2000 said:

    @brambos said:

    @rs2000 said:

    @brambos said:
    Currently there are 10 simultaneous LFOs available.. how many would make sense (keeping in mind that each LFO requires a bit of resources, even when not in use)?

    I can't imagine a scenario where I would need 10 LFOs. I'd rather have less but a low-resource, low-latency app.
    BTW, what max. LFO frequency and resolution (CC? Pitch bend? NRPN?) do you have in mind?
    Maybe both high-res and low-res LFOs would make sense. MIDI is a weird guy.

    The resolution of the LFO is sample-accuracy, but they're only updated when you need them. The practical resolution is: as accurate as you need them to be at any moment in time :)

    Aaah, timers :)
    But what resources do unused LFOs use up then?

    Before any event call I update the phase of all LFOs, which is a handful of divisions and multiplications and a bit of memory. Nothing you'll notice on any device capable of running MIDI AU, unless you have thousands of LFOs. But I know it's there and I'm really anal about my optimizations. :#

    Also, frequencies are up to you - it's all parametric anyway. If you want an LFO to take a day to go up and down you can do that... just set the frequency to 0.000000001 Hz or something :D

    I suppose the LFO output value is floating point and I can scale it to any range I want, be it 0..127 for CC or 0..16383 for pitch bend?

    Correct! :)

    When you set up an LFO, you specify the minimum and maximum values you want to get out, so its output is already scaled for you:

    StartLFO <lfo>, <minimum value>, <maximum value>, <sync to tempo?>, <frequency>

    Looks convenient. Very nice. That's how a coding language should look like! :+1:
    Tempo sync answers my first question already.
    Dumb question: What about LFO waveforms? (Triangle, rising SAW, falling SAW, SQR etc)

    Right now I have Sine, Cosine, Ramp Up, Ramp Down, Triangle, Square and S&H

  • You are a genius. Most innovative ios developer for sure.

  • edited April 2019

    @brambos
    What programmable visual feedback features will there be? (latch state indicators, etc...).

  • McDMcD
    edited April 2019

    It's a genius move to publicly get @Samu's input before shipping the App. It saves a lot of storage on the Forum. :)

    Oh wait... we're using that storage now: Zero Sum Game. But more App's will be sold since he won't highlight the things it can't do "day one". Just kidding... he'll find something.

  • @brambos Just curious if you have a sense of when this might be coming? Not going to hold you to it, but do you think end-of-Spring? End-of-Summer? End-of-the-year?

  • This looks intruiging as hell. Good job @brambos. I do hope you remember me when you go into testing phase :) have quite a few ideas I'd like to test out....

  • edited April 2019
    The user and all related content has been deleted.
  • @brambos
    In terms of benchmarking the range of modulation control that folk may be looking for within their LFO's, Envelopes etc, I think U-He Zebra2 is a very good place to look. Much as U-He's virtual analogues get all the limelight, Zebra is their crowning glory. What I'm talking about here is the manner in which U-He goes beyond the usual expectations regarding the types of options that should be included within its modulation tools. And Zebra2 was built to be super CPU efficient, so those extra bells and whistles they provide in their modulation tools don't end up as costly luxuries. They're simply options that move beyond analogue emulation and celebrate the digital nature of the tools.

    Definitely worth a trawl through the modulation section of the Zebra2 manual.

    Zebra2-user-guide.pdf

  • edited April 2019

    @aplourde said:
    @brambos Just curious if you have a sense of when this might be coming? Not going to hold you to it, but do you think end-of-Spring? End-of-Summer? End-of-the-year?

    Probably a month or two, beta can probably start a fair bit earlier. But making examples, fixing the mass of unexpected bugs and writing a solid programming guide will take up a lot of time I think.

    This is by far the most complex app I've ever made, and because it can do so many things testing is going to be very important.

    Today I'm beginning with the most challenging part: teaching my interpreter recursion and the dreaded rules of mathematical precedence.

    So it will be able to correctly interpret monstrosities like...

    var0 = 2 + HostBeat * HostBar / HostTempo - (Random var1, var2)

    :s

    I'm not taking shortcuts or taking the easy way out with my interpreter. I want the code to be flexible and easy to read, so this kind of stuff is crucial for the usability of the language.

  • I would be very interested in beta testing this @brambos. I write code to do this kind of thing quite a lot (generative stuff in SuperCollider and LISP - midi filtering using some custom software I wrote), and I feel I could probably find some edge cases for you.

  • edited April 2019

    Ok.. my complex parser now correctly calculates

    2 + ( ( 5 % 2 ) * HostTempo ) - 3 / ( HostBar - LastKnob ) + ( VAR0 * VAR1[64] )

    I also have compound logical statements working, so you can do

    if ( HostTempo < 100 ) or ( ( MidiNote > 10 ) and ( MidiNote < 117 ) )
       MidiThru
    else 
      Log {Note was too high or too low!}
    endif
    

    Or

    if  MIDISustainPedalDown or ShiftPressed
      Log {Nope!}
    else 
      MidiThru
    endif
    

    :)

  • I volunteer as well for beta testing... in the lame duck test group. I don't write code, which I believe makes me a perfect candidate. Just to see how us mortals cope with the challenge.
    :smiley: :smiley:

  • @brambos said:

    if  MIDISustainPedalDown or ShiftPressed
      Log {Nope!}
    else 
      MidiThru
    endif
    

    :)

    Curious about the choices for strings, any particular reason you didn't go with quotes and is there a method to allow variables in strings? Templating, concatenation?

    Also, having functions called with this syntax makes it difficult later to be able reference those functions for functional style programming i.e. working with function references.

    I do understand that you may not want this complexity in your language so feel free to ignore if that is the case.

  • edited April 2019

    @Jocphone said:

    @brambos said:

    if  MIDISustainPedalDown or ShiftPressed
      Log {Nope!}
    else 
      MidiThru
    endif
    

    :)

    Curious about the choices for strings, any particular reason you didn't go with quotes and is there a method to allow variables in strings? Templating, concatenation?

    That has been a very conscious choice:

    Strings have very limited application in Mozaic: just for labels and log messages. In typical languages you'd need to use ugly escape characters if you want to put quotes in your actual text (to avoid the parser barfing up its breakfast).

    However, you're actually quite likely to want to put quotes in your labels and messages, and I didn't want to force people to learn how to use escape characters. Accolades are nice, because they have a distinct "open" and "close" version, allowing the parser to decide where a string starts and ends without the need for weird workarounds.

    In this case I figured the typical needs of users weighed heavier than convention.

    If you want to log variables in your messages the Log function has you covered:

    Log {Some string}, VAR0, {Another string "WITH QUOTES!"}, Var1[0], Var2[3], {etc.}

    Also, having functions called with this syntax makes it difficult later to be able reference those functions for functional style programming i.e. working with function references.

    I do understand that you may not want this complexity in your language so feel free to ignore if that is the case.

    Yep. Out of scope for now - and for the near future :D

  • Boy am I glad to see compound conditions. Multi-Layer If / Then / Else statements get bewildering fast without them. ;)

  • @wim said:
    Boy am I glad to see compound conditions. Multi-Layer If / Then / Else statements get bewildering fast without them. ;)

    I know. That's why I put special focus on them. There's full if ... elseif ... elseif ... else ... endif support, and you can nest as many as you can handle.

Sign In or Register to comment.