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.

Request new Mozaic Scripts *HERE*

1212224262762

Comments

  • @wim said:
    Someone here has said he's no longer involved in music app development, but I don't know if that's reliable intel or not.

    If true, that’s sad.

  • OK, can anyone give me a hand with the script noted above? I've looked over Bram's manual and some example scripts from patch storage (ki's Active Notes Tracker gave me some insights into arrays) but am still lost with the finer details around Mozaic scripting.

  • heshes
    edited August 2020

    @lukesleepwalker said:

    OK, can anyone give me a hand with the script noted above? I've looked over Bram's manual and some example scripts from patch storage (ki's Active Notes Tracker gave me some insights into arrays) but am still lost with the finer details around Mozaic scripting.

    If you're only tracking those four notes (D1, F1, G2, F2), then you don't gain much by using arrays. Try forgetting about arrays and just writing the code to do what you want. I'm not exactly sure what you're trying to do, but sounds like you want to manually send SendMidiNoteOff for any one of those notes that's on before you do a note-on for the next one. (Once you have that solution, you could always modify your code to use arrays (and it will be clearer how and why to do so), which would likely make it much easier to add notes to that list of four, or to change the notes you want to use.)

    You're not going to have much luck coding a solution unless you can describe exactly the behavior you want in non-code language. You have to be very specific about what you want to happen at each step. Then you can translate it into code.

    E.g, not sure what you want, but this is to give an idea of description you want. Something like this would be a start:

    1. If mozaic receives any midi command regarding a note other than those four (d1, f1, g2, f2), I want to have it processed normally with no change.
    2. if mozaic receives a note-on command for one of those four, i want to check each of those four to see if any are already on.
    3. if one of those four is already on, I want to turn it off before the new note-on is processed.
    4. if all four of those notes are off, then I want to process the new note-on for one of those four.
  • @hes I somehow forget how to be a product manager in my personal life. I'll refrain from writing AC for this ticket:

    1. Mozaic receives four notes (D1, F1, G2, F2) for processing, all other notes should be ignored (or processed with no change).
    2. Upon receiving the note-on for each of these four notes, Mozaic should delay the note-off by a specific length of time between 1 second and 10 seconds. Ideally, the user can set the length of the delay using a knob or slider, ideally with the ability to set time lengths in half second increments.
    3. While the gate is open (ie, the delayed note-off event hasn't occurred), if Mozaic receives a new note-on from one of the four notes, a note-off for the "preceding" note is first inserted. Then the note-on for the ensuing note plays with delayed note-off event scheduled (see step 2).
      I think that's it. I will note that I plan to use MFXConvert to map the four notes to "the right key" right after this Mozaic script--that is, for instance, D1 will be converted to C3 using MFXConvert. I don't think it impacts the upstream impact, but I note it here in case someone hear disagrees.
  • @lukesleepwalker That's getting more clear. Not sure how it affects things, but I'm also wondering: (1) For those four notes is each NoteOn that's received also going to have a NoteOff command coming from a controller that needs to be ignored (and instead the use the manual delay or ensuing note to determine when to send note off)? (2) Also, in your midi routing are you filtering notes before they get to mozaic, so mozaic is supposed to be receiving only those four? Or is all the midi traffic going through mozaic?

  • @lukesleepwalker said:
    @hes I somehow forget how to be a product manager in my personal life. I'll refrain from writing AC for this ticket:

    1. Mozaic receives four notes (D1, F1, G2, F2) for processing, all other notes should be ignored (or processed with no change).
    2. Upon receiving the note-on for each of these four notes, Mozaic should delay the note-off by a specific length of time between 1 second and 10 seconds. Ideally, the user can set the length of the delay using a knob or slider, ideally with the ability to set time lengths in half second increments.
    3. While the gate is open (ie, the delayed note-off event hasn't occurred), if Mozaic receives a new note-on from one of the four notes, a note-off for the "preceding" note is first inserted. Then the note-on for the ensuing note plays with delayed note-off event scheduled (see step 2).
      I think that's it. I will note that I plan to use MFXConvert to map the four notes to "the right key" right after this Mozaic script--that is, for instance, D1 will be converted to C3 using MFXConvert. I don't think it impacts the upstream impact, but I note it here in case someone hear disagrees.

    This would be just a few lines of code because of Mozaic's handy ability to delay sending midi messages, but is complicated by the need to "take back" the note on that was scheduled. That means that we can't just do a SendMIDINoteOff <chan>, <note>, <velocity> [,<delay_in_milliseconds>]. So there needs to be a timer and scheduled notes need to be cancelled if there's an interruption.

    I did this for MIDI Channel Phase Mixer, only using channels instead of notes. So it shouldn't be hard for me to simplify and adapt for your use case.

    mfxConvert could easily be eliminated since you can change the notes being sent right in the script if desired.

    I wouldn't mid writing this for you. Shouldn't be too hard.

  • @hes said:
    @lukesleepwalker That's getting more clear. Not sure how it affects things, but I'm also wondering: (1) For those four notes is each NoteOn that's received also going to have a NoteOff command coming from a controller that needs to be ignored (and instead the use the manual delay or ensuing note to determine when to send note off)? (2) Also, in your midi routing are you filtering notes before they get to mozaic, so mozaic is supposed to be receiving only those four? Or is all the midi traffic going through mozaic?

    No, there won't be an additional note off coming from the controller (just the delayed one). The controller only plays those four notes, so no need to filter prior to Mozaic.

  • @wim thanks for taking it on. I had thought about wrapping the MFXConvert note change in the script but I didn't want to further complicate the script given that I already have a solution. That said, it would be optimal to set the note conversions right in the script for "one stop shopping".

  • @lukesleepwalker said:
    @wim thanks for taking it on. I had thought about wrapping the MFXConvert note change in the script but I didn't want to further complicate the script given that I already have a solution. That said, it would be optimal to set the note conversions right in the script for "one stop shopping".

    Try this out and see if it works the way you expect: https://www.dropbox.com/s/2efqb7f9y5xltrc/Luke Sleeper v0.1.mozaic?dl=0

    Right now there's no translation, but the capability is built-in. There are two arrays: one for the notes to act on, and one for the notes to translate them to. Just edit the notesOut array to change the notes. Or leave it alone and use mfxConvert if you like.

    I could have made more things settable by the GUI, but that would complicate the code and I thought it would be more understandable if I kept it shorter.

  • @wim said:

    @lukesleepwalker said:
    @wim thanks for taking it on. I had thought about wrapping the MFXConvert note change in the script but I didn't want to further complicate the script given that I already have a solution. That said, it would be optimal to set the note conversions right in the script for "one stop shopping".

    Try this out and see if it works the way you expect: https://www.dropbox.com/s/2efqb7f9y5xltrc/Luke Sleeper v0.1.mozaic?dl=0

    Right now there's no translation, but the capability is built-in. There are two arrays: one for the notes to act on, and one for the notes to translate them to. Just edit the notesOut array to change the notes. Or leave it alone and use mfxConvert if you like.

    I could have made more things settable by the GUI, but that would complicate the code and I thought it would be more understandable if I kept it shorter.

    Hmmmmm. No dice. The delayed note off is not working. I set up a midi monitor and the note off follows s as quickly as when I’m hooked up directly to the controllers. The first pair is through the script and the second pair is direct from the controller:

  • The commenting in the script is awesome, btw. Learning a ton following along.

  • wimwim
    edited August 2020

    @lukesleepwalker - The notes are coming in on channel 10. Change the channel to 9 in the @Settings section: channel = 9. (Note Mozaic counts channels from 0).

    You'll probably need to edit the noteIn and noteOut arrays. It looks like the "D1" you're sending isn't the same as the "D1" that AUM's keyboard sends. This is a typical MIDI issue due to there not being an octave numbering standard for MIDI.

    Increase all the numbers by 12:

    @notesIn = [38, 41, 55, 53]
    @notesOut = [38, 41, 55, 53]
    

    Be sure to press "Upload" after making the changes, then save the script.

  • edited August 2020

    I don’t think Mozaic is best suited for this.

  • wimwim
    edited August 2020

    @TheOriginalPaulB said:
    I don’t think Mozaic is best suited for this.

    Why not? Seems fine to me. It took like 20 minutes to write. What is better suited?

  • @wim said:
    @lukesleepwalker - The notes are coming in on channel 10. Change the channel to 9 in the @Settings section: channel = 9. (Note Mozaic counts channels from 0).

    You'll probably need to edit the noteIn and noteOut arrays. It looks like the "D1" you're sending isn't the same as the "D1" that AUM's keyboard sends. This is a typical MIDI issue due to there not being an octave numbering standard for MIDI.

    Increase all the numbers by 12:

    @notesIn = [38, 41, 55, 53]
    @notesOut = [38, 41, 55, 53]
    

    Be sure to press "Upload" after making the changes, then save the script.

    Works! Thanks for your help!

  • @TheOriginalPaulB said:
    I don’t think Mozaic is best suited for this.

    It's interesting that you might think this... can you share your thoughts?
    No judgement from me just curiosity. There are many things Mozaic is not best suited for.
    This could make a great discussion for anyone consider Mozaic as a purchase.

  • @lukesleepwalker - you might want to make one tiny change that somehow didn’t make it into the script. Changing SetTimerInterval 100 to SetTimerInterval 10 will increase accuracy, and doesn’t seem to affect performance.

  • @wim made the suggested change and I perceive no difference in terms of performance. The only thing that doesn’t work is when I play a second note it doesn’t cut off the first note. Cutting off the first note with the same note works fine. A different note does not cut off however.

  • wimwim
    edited August 2020

    @lukesleepwalker said:
    @wim made the suggested change and I perceive no difference in terms of performance. The only thing that doesn’t work is when I play a second note it doesn’t cut off the first note. Cutting off the first note with the same note works fine. A different note does not cut off however.

    Oh, I overlooked that in your spec:

    1. While the gate is open (ie, the delayed note-off event hasn't occurred), if Mozaic receives a new note-on from one of the four notes, a note-off for the "preceding" note is first inserted.

    I’ll give you a fixed version in a few minutes.

  • Hey @lukesleepwalker Please try this one out. I kinda rushed, but hopefully didn't screw anything up.
    https://www.dropbox.com/s/1d2ab82y0lrsog6/Luke Sleeper v0.2.mozaic?dl=0

  • @wim said:
    Hey @lukesleepwalker Please try this one out. I kinda rushed, but hopefully didn't screw anything up.
    https://www.dropbox.com/s/1d2ab82y0lrsog6/Luke Sleeper v0.2.mozaic?dl=0

    Works perfectly! Thanks for your help here and I do appreciate the extra time you spent commenting out the script. I can see better how it works and can make tweaks on my own. I'll make a video to show how I use it when I can. It's very cool!

  • Great, I'm glad it worked out.

    That one could be a good starting point for practicing coding by adding extensions, for instance adding knobs to set the midi out notes, or displaying feedback of which note is playing on the pads.

  • @wim said:
    Great, I'm glad it worked out.

    That one could be a good starting point for practicing coding by adding extensions, for instance adding knobs to set the midi out notes, or displaying feedback of which note is playing on the pads.

    Yessir. I started thinking through setting the midi out notes with a knob this morning but then got buried by work. Someday!

  • Hello!

    I am hoping someone could help me with a mozaic script that allows for transposition of incoming notes according the the modulation of an LFO where it allows you to set the range of transposition that can be modulated by the lfo

    Ideally, I would like it if this LFO had a random function as well as typical wave functions

    My goal is to use this in cubasis which is why I am not simply automating a knob within rozeta scaler (midi fx automation does not work in cubasis) OR attaching rozeta LFO to another midi transposer (no midi learn in cubasis)

    The idea is that this would allow a continuous stream of notes to be transposed according to the modulation of the LFO- as simple example of what this would enable would be:

    if you have many identical notes placed close together
    C3 C3 C3 C3 C3 C3 C3 C3........ etc

    And then modulate their transposition with a sine wave, suddenly your note sequence is doing sweeps like going up and down pitch scales on a harp

    Would anybody be up for taking a stab at this? I think the whole thing is pretty easy and the biggest challenge would be making sure notes don't get stuck mid-transposition but I know others have already conquered that concept such as @wim 's implementation of an overlapping note transposer here https://patchstorage.com/overlapping-note-transposer/

  • The user and all related content has been deleted.
  • @Owgill said:
    Hi, could this be possible with Mozaic? If so could someone please help in developing this. Many thanks :)

    Take a 10 note chord and split it across 10 selectable midi channels. With probability and randomness settings for each. Also each channel would have a note range selector.

    Detecting chords is impractical in Mozaic, IMO. There have been long discussions about this. The short version is:

    • In order to decide what a "chord" is requires knowing that the notes will all arrive at exactly the same time, or waiting some period of time before deciding that all the notes constituting a chord have arrived. This means there has to be a lag between when the chord is played and when the notes are sent out and that doesn't work out well for timing.
    • The second problem is overlapping notes. One would need to assume that all notes of every chord will never overlap another or it's impossible to manage.

    Distributing incoming notes round-robin across channels is easy enough, there could even be a script already for that, I forget. A better solution might be Polythemus AU though.

  • @annahahn said:
    Hello!

    I am hoping someone could help me with a mozaic script that allows for transposition of incoming notes according the the modulation of an LFO where it allows you to set the range of transposition that can be modulated by the lfo

    Ideally, I would like it if this LFO had a random function as well as typical wave functions

    My goal is to use this in cubasis which is why I am not simply automating a knob within rozeta scaler (midi fx automation does not work in cubasis) OR attaching rozeta LFO to another midi transposer (no midi learn in cubasis)

    The idea is that this would allow a continuous stream of notes to be transposed according to the modulation of the LFO- as simple example of what this would enable would be:

    if you have many identical notes placed close together
    C3 C3 C3 C3 C3 C3 C3 C3........ etc

    And then modulate their transposition with a sine wave, suddenly your note sequence is doing sweeps like going up and down pitch scales on a harp

    Would anybody be up for taking a stab at this? I think the whole thing is pretty easy and the biggest challenge would be making sure notes don't get stuck mid-transposition but I know others have already conquered that concept such as @wim 's implementation of an overlapping note transposer here https://patchstorage.com/overlapping-note-transposer/

    It seems to me that a chain of Rozeta LFO > mfxConvert > the synth would work. mfxConvert would change the incoming CC into notes and send them to whatever synth you want to play.

  • edited September 2020

    Hi @wim!

    That wouldn’t work for incoming notes though right?

    The example I gave with all the c3 c3 is just an example , my first real implementation is much more complex, I have a melody that is being piped into Cality and blurred into this granular cloud of notes-

    I would then like to pipe that signal (or place the effect I’m proposing before cality, doesn’t really matter at which stage the transposition occurs ,and would probably be less confusing for the LFO transposed to be inserted before the onslaught of notes output by cality) and transpose that huge cloud of stuttering notes up and down within a range and modulate the transposition using an lfo, but I would like it as a midi effect for incoming notes so that it does not disrupt the rhythm of the incoming Polyphonic melody...

    In your example I believe it would just create an undulating stream of notes according to a static clock division right?

    I’m more hoping to find something that can transpose any incoming midi note sequence within a defined range of modulation (ie -24 ~ +36) and do so according to an LFO with wave + random options and speed options- unfortunately Cubasis has no way to connect rozeta LFO to a parameter in a midi effect so it would need to be one patch I believe

    Does that make sense?

  • edited September 2020
    The user and all related content has been deleted.
  • @wim ACTUALLY- I spoke too soon with half of my statement

    Rozeta LFO CAN control parameters in Cubasis IF they are hard-set to have midi mapping internal to the plugin- since Cubasis does not have midi learn architecture I can’t assign the connection manually

    Are you aware of any note transposition AUV3s that have a pre-defined cc that can be targeted for the transposition value?

    If not, would you or anyone else here be interested in creating a Mozaic script that can do the job? I’m imagining that the anti-stuck-note mechanism in your overlapping note transposer script could be implemented here and just do simple transposition rather than overlapping transposition?

Sign In or Register to comment.