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!

13233353738102

Comments

  • wimwim
    edited July 2019

    @pejman said:

    @wim said:

    @pejman said:
    Hello wim
    Did you see my latest post ?

    Sorry, I guess I overlooked your post.

    The problems with doing those things with incoming chords vs. single notes are mainly:

    • Detecting what is a chord since you can’t guarantee all notes will arrive at one time, and that there won’t be any overlapping notes from other chords.
    • Tracking each note on and note off to know the duration of those notes. Again with the complications of possible overlapping notes.
    • Failure to do this virtually perfectly is a recipe for stuck notes.

    Sorry, I’m just not sure I’m up for that challenge.

    But those chords crate through one arpeggiator that have chord mode and can quantize my chords ( start and length ) . Without overlapping.
    I'm not supposed to enter those chords directly into mosaic .

    I'm sorry, but I don't want to make something that depends on the chords coming in with all notes triggered simultaneously and with no overlapping notes. There's no guarantee that it would be used only that way by others. If I could see a path to success, I'd consider it, but I don't.

  • I just had a nice first discussion in the mozaic group on the patchstorage discord server about midi-learn of the UI elements of Mozaic.

    I told Razmataz that this feature probably won‘t happen, as it would interfere with the midi fed into the script and would pose new problems if either that UI midi is fed or supressed to the scripts itself. And that there is already the possibility to midi learn AU parameters in the AU hosts to achieve external control.

    Another alternative is to extend the scripts with additional code to react to special midi CCs/notes and duplicate the functionality that pads and knobs do

    .

    But (and that why i’m posting :) ) for all scripts to be fully controllable by external hardware, we would need the pads and shift button to be exposed as AU params. IIRC pads as AU params were already requested.

  • Is there a quick wy of remaping midi notes?? I just need to remap 8 or 9 notes from the original pitch to different ones, ideally using knobs for quick changing the destination notes....

    Thanks!

  • That shouldn’t be hard, but I’m currently camping in Norway and mostly off the grid, so I can’t do an example right now B)

  • @brambos said:
    That shouldn’t be hard, but I’m currently camping in Norway and mostly off the grid, so I can’t do an example right now B)

    enjoy!!!

  • wimwim
    edited July 2019

    @Synthi said:
    Is there a quick wy of remaping midi notes?? I just need to remap 8 or 9 notes from the original pitch to different ones, ideally using knobs for quick changing the destination notes....

    Thanks!

    This should work. The only thing is it’s a bit fiddly to set the notes with the full range of midi notes available. If it’s unworkable, I could limit the range of notes to fewer octaves.

    @Description
    Basic Note Remapper v1.0
    
    Set an input note, then set the outbound note to map on the knob below it. The first match found will remap the note.
    
    Hold SHIFT while turning an in or out knob to erase the mapping.
    @End
    
    @OnLoad
      if Unassigned init
        init = YES
        FillArray in, -1, 11
        FillArray out, -1, 11
        for a = 0 to 10
          LabelKnob a, {In}
          LabelKnob (a + 11), {Out}
        endfor
      endif
      ShowLayout 1
    @End
    
    @OnMidiInput
      //Pass Thru anything but notes
      if (MIDICommand <> 0x80) and (MIDICommand <> 0x90)
        SendMIDIThru
      endif
    @End 
    
    @OnMidiNote
      a = 0
      match = NO
      while (match = NO) and (a <= 10)
        if (MIDINote = in[a]) and (out[a] <> -1)
          SendMIDIOut MIDIByte1, out[a], MIDIByte3
          match = YES
        endif
        Inc a
      endwhile 
      if match = NO
        SendMIDIThru
      endif
    @End
    
    @OnKnobChange
      knob = LastKnob
      value = GetKnobValue knob
    
      if NOT ShiftPressed
        if knob <= 10
          in[knob] = Round value 
          LabelKnob knob, {In }, (NoteName in[knob], YES)
        elseif (knob >= 11) and (knob <= 21)
          out[knob - 11] = Round value
          LabelKnob knob, {Out }, (NoteName out[knob - 11], YES) 
        endif
      else
        if knob <= 10
          in[knob] = -1
          SetKnobValue knob, 64
          LabelKnob knob, {In}
          out[knob] = -1
          SetKnobValue (knob + 11), 64
          LabelKnob (knob + 11), {Out}
        else if (knob >= 11) and (knob <= 21)
          out[knob] = -1
          SetKnobValue knob, 64
          LabelKnob knob, {Out}
          in[knob - 11] = -1
          SetKnobValue (knob - 11), 64
          LabelKnob (knob - 11), {In}
        endif
      endif 
    @End
    
  • @wim said:

    @Synthi said:
    Is there a quick wy of remaping midi notes?? I just need to remap 8 or 9 notes from the original pitch to different ones, ideally using knobs for quick changing the destination notes....

    Thanks!

    This should work. The only thing is it’s a bit fiddly to set the notes with the full range of midi notes available. If it’s unworkable, I could limit the range of notes to fewer octaves.

    ```

    Thanks!!!
    For my own use its ok to have from C2 to G4

  • @Synthi said:

    @wim said:

    @Synthi said:
    Is there a quick wy of remaping midi notes?? I just need to remap 8 or 9 notes from the original pitch to different ones, ideally using knobs for quick changing the destination notes....

    Thanks!

    This should work. The only thing is it’s a bit fiddly to set the notes with the full range of midi notes available. If it’s unworkable, I could limit the range of notes to fewer octaves.

    ```

    Thanks!!!
    For my own use its ok to have from C2 to G4

    Here’s a version limited to range C2 to B4. It makes the knobs less sensitive and easier to set.

    @Description
    Basic Note Remapper v1.1
    (v1.1 range limit is C2 - B4)
    
    Set an input note, then set the outbound note to map on the knob below it. The first match found will remap the note.
    
    Hold SHIFT while turning an in or out knob to erase the mapping.
    @End
    
    @OnLoad
      if Unassigned init
        init = YES
        FillArray in, -1, 11
        FillArray out, -1, 11
        for a = 0 to 10
          LabelKnob a, {In}
          LabelKnob (a + 11), {Out}
        endfor
      endif
      ShowLayout 1
    @End
    
    @OnMidiInput
      //Pass Thru anything but notes
      if (MIDICommand <> 0x80) and (MIDICommand <> 0x90)
        SendMIDIThru
      endif
    @End 
    
    @OnMidiNote
      a = 0
      match = NO
      while (match = NO) and (a <= 10)
        if (MIDINote = in[a]) and (out[a] <> -1)
          SendMIDIOut MIDIByte1, out[a], MIDIByte3
          match = YES
        endif
        Inc a
      endwhile 
      if match = NO
        SendMIDIThru
      endif
    @End
    
    @OnKnobChange
      knob = LastKnob
      value = GetKnobValue knob
    
      if NOT ShiftPressed
        if knob <= 10
          in[knob] = Round (TranslateScale value, 0, 127, 36, 71)
          LabelKnob knob, {In }, (NoteName in[knob], YES)
        elseif (knob >= 11) and (knob <= 21)
          out[knob - 11] = Round (TranslateScale value, 0, 127, 36, 71)
          LabelKnob knob, {Out }, (NoteName out[knob - 11], YES) 
        endif
      else
        if knob <= 10
          in[knob] = -1
          SetKnobValue knob, 64
          LabelKnob knob, {In}
          out[knob] = -1
          SetKnobValue (knob + 11), 64
          LabelKnob (knob + 11), {Out}
        else if (knob >= 11) and (knob <= 21)
          out[knob] = -1
          SetKnobValue knob, 64
          LabelKnob knob, {Out}
          in[knob - 11] = -1
          SetKnobValue (knob - 11), 64
          LabelKnob (knob - 11), {In}
        endif
      endif 
    @End
    
  • Is it possible to create a midi mapping like this Max for Live device? https://sonicbloom.net/en/value-blocker-free-max-for-live-midi-effect-to-prevent-unwanted-parameter-values/

    Essentially, it skips certain values from being used when mapped to a parameter. It gives an example of arp skipping certain time divisions: 1/3, 1/6, etc.

    My use case would blocking certain values in Autony so only notes from specific time divisions are generated when it mapped to a midi controller.

  • I just posted my first preset Complex LFO XY for Mozaic on PatchBay. It’s like a much more elaborate version of the @brambos factory Complex LFO preset and I think it’d be useful for people into ambient or generative music who want to add that extra special wiggle to their controls.

  • edited July 2019

    @wim said:

    I think if you add these lines into the code it’ll do what you want, with bassline on channel 2. Change the channel in the if statement to the channel you want to use, minus 1.

    @OnMidiNote
      //Custom mod for separate bassline pass thru on Channel 2.
      if MIDIChannel = 1
        SendMIDIThru
      endif
    @End
    

    Not tested.

    Since I roped you in with my weird request, that bit allowed for the second input to play through the bass channel. It also makes alot of weird things happen which are also cool, I’ll be digging through to complete the rest of the functionality I had in mind and also learn to make things in the process.

    Thanks again for taking the time to give me that bit of code and for making the chordulator to begin with.

  • edited July 2019

    @wim said:

    But those chords crate through one arpeggiator that have chord mode and can quantize my chords ( start and length ) . Without overlapping.
    I'm not supposed to enter those chords directly into mosaic .

    I'm sorry, but I don't want to make something that depends on the chords coming in with all notes triggered simultaneously and with no overlapping notes. There's no guarantee that it would be used only that way by others. If I could see a path to success, I'd consider it, but I don't.

    Thanks wim for replay. I mean exactly that . Which I hope will be of interest to you too .

    With such a mozaic patch, we can make a difference in the sound with a very interesting voice on the left and right channels.

  • @brambos True or False: You can’t set or test your own alphabetic variables like “major”, {minor}, etc. I see labels enclosed in brackets like in the statement “LabelKnob 0, {Volume} “, but my statements “myscale = {major}” or “if myscale = {major}” fail.

  • wimwim
    edited July 2019

    @motmeister said:
    @brambos True or False: You can’t set or test your own alphabetic variables like “major”, {minor}, etc. I see labels enclosed in brackets like in the statement “LabelKnob 0, {Volume} “, but my statements “myscale = {major}” or “if myscale = {major}” fail.

    No, there are no string variables. Variable are numeric only (or arrays of numbers). There are a few functions like Log, Label, and Preset Scale that accept strings as arguments, as you’ve seen.

  • wimwim
    edited July 2019

    I’ve uploaded a simple scale filter script.

    Simple Scaler is a scale filter that allows customizing the notes of the scale. Its options are inspired by one of the early Audiobus MIDI filter apps that doesn’t look like will be updated to AUv3 MIDI.

    https://patchstorage.com/simple-scaler/

    This is meant to be a quick and simple tool. (For an amazing full-featured scale script, check out Scale Compendium by Bryan Appel)


    Simple Scaler v1.0

    Set a root note and scale. The pads will light to reflect which notes are in the scale. You can add or disable notes by tapping the pads. Changing the root note will keep the same pattern but change the scale notes so you can transpose easily.

    In Nearest mode, the closest scale tone will be played for notes not in the scale. Filter plays nothing if notes aren't in the scale. Chromatic mode (not scale) plays the root of the scale on C and then up the scale for each successive key. If there are fewer than 12 notes the higher keys do nothing. White Keys is the same, but only responds to the seven white keys. If there are more than seven notes in the scale, the top notes will not play. PassThru allows all notes through.

    To avoid stuck notes, only make scale changes when notes are not playing.


  • @wim said:

    @motmeister said:
    @brambos True or False: You can’t set or test your own alphabetic variables like “major”, {minor}, etc. I see labels enclosed in brackets like in the statement “LabelKnob 0, {Volume} “, but my statements “myscale = {major}” or “if myscale = {major}” fail.

    No, there are no string variables. Variable are numeric only (or arrays of numbers). There are a few functions like Log, Label, and Preset Scale that accept strings as arguments, as you’ve seen.

    Ah well.... i don’t need them... I can just assign numbers to a descriptive variable name for the same effect. Thx!

  • @wim you are generous with your time and expertise. Thank you.

  • @lukesleepwalker said:
    @wim you are generous with your time and expertise. Thank you.

    Nah. My brain just won’t let me alone until some of these ideas get realized. I do it for my own sanity. :D

  • I've got a teensy tiny bug report for mozaic.

    for i = 1 to 20
      do something
    endif
    

    expected outcome: interpreter error
    actual outcome: for loop gets treated like an if statement and only runs the first iteration

    it's an edge case, but can make for hard-to-catch bugs :)

    Loving Mozaic! It's simple enough that I can make dedicated scripts for ideas the same way that I would otherwise patch a $5000 modular, but I never run out of cables or just need one more $400 module.

  • Curious about the types of scripts you're making @burns_audio?

  • Hoping @wim or one of the other mosaic geniuses could think creatively about how to create a Senode like script. I realize that part of Senode's charm is the UI that makes it fun to set up the sequences. I'm more interested in a simple way to set up the nodes and note variations of the "emitters". My first design sketch used knobs to dial in the nodes and the note lengths for the emitters--wondering if there's a better way.

  • Big update for Metroplex with new user-requested features and bug fixes.

    • Added a whole new page called SETTINGS. To access the SETTINGS page, go to the CONTROLS page (long press on SHIFT) and then press-and-hold UNDO and while holding, press SHIFT. On the SETTINGS page there are controls for setting the CC # output by MODULATION 1 & 2 and the output MIDI Channel. In addition, there is now control for RANDOMIZATION MODE. This mode controls exactly what gets randomized. “Randomize All,” “Randomize Pitch Only,” and “Randomize All Except Pitch” are self-explainatory. Randomization Modes 1-12 randomize only the following:

    1) Articulation
    2) Rhythm
    3) Modulation
    4) Articulation, Rhythm
    5) Rhythm, Modulation
    6) Articulation, Modulation
    7) Pitch, Articulation
    8) Pitch, Rhythm
    9) Pitch, Modulation
    10) Pitch, Articulation, Rhythm
    11) Pitch, Rhythm, Modulation
    12) Pitch, Articulation, Modulation

    “ARTICULATION” refers to GATE LENGTH, VELOCITY, and PORTAMENTO. “RHYTHM” refers to REPEAT COUNT, GATE MODE, RATCHETING, and STAGES. Finally, the instruction manual is viewable on the settings page.

    • Added MIDI and AU control for KEY, CLOCK, and OCTAVE. KEY and OCTAVE respond to MIDI Note On messages, so you can transpose sequences using an external keyboard controller or another sequencer. Alternately, Metroplex now responds to CC and AU Parameter control. CCs #13, 15, 17 and AU User 1, 2, and 3, now control KEY, CLOCK, and OCTAVE respectively.
    • Changed UNDO behavior. Now UNDO always plays the previously playing sequence.
    • Added detailed logging.
    • Bug fixes and optimizations
  • @nondes said:
    Curious about the types of scripts you're making @burns_audio?

    • I've got that one sequencer on patchstorage.
    • one that replicates how the 4ms Spectral Multiband Resonator (and my Braids Renaissance firmware) makes chords, by choosing a scale and then picking every Nth note out of the scale. Makes big tones! Not releasing it yet cuz I want to try to make some music based around it
    • one that ingests the last 1 or many notes from MIDI input and then replays it rhythmically over 16th notes based on the pattern you place on the pads. So like, MIDI gate sequencer?
    • next I want to make one based on this https://reverbmachine.com/blog/deconstructing-brian-eno-music-for-airports that just loops a long, sparse MIDI input and does not sync with host whatsoever

    I'd release more of them but I don't have the time right now to polish them enough.. gotta work on Spectrum! :)

  • One ‚trick‘ regarding patch storage:

    • For user convenience, add the version number to the scripts presetname. When users download the preset, they immediately can see if they got the up-to-date the version number in the Mozaic preset browser. Downloading a new version then adds a new preset file and the user is free to delete the old one with a left swipe.

    • For a new script to be uploaded to patch storage, i use the scripts name without version number as ‚patch name‘ even though the uploaded file contains a version number. This will generate a patch-storage page without version number. Editing this page allows to add the version number to the patch name title without changing the url (determined by the initial patch name). This shows the version number in patch storage’s overview without having it fixed forever in the url itself.

      • Example: „Split&Remap Rozeta X0X/Rhythm v1.1“ is found on the page with the url „https://patchstorage.com/split-remap-rozeta-x0x-rhythm/“ since i initially created it with the name „Split&Remap Rozeta X0X/Rhythm“ and then edited its name to include the v1.0 of the initial release.

      • When i then uploaded the v1.1 i also changed the title to include the v1.1 - the url stays the same.

  • wimwim
    edited July 2019

    @Bryan said:
    Big update for Metroplex with new user-requested features and bug fixes.

    • Added a whole new page called SETTINGS. To access the SETTINGS page, go to the CONTROLS page (long press on SHIFT) and then press-and-hold UNDO and while holding, press SHIFT. On the SETTINGS page there are controls for setting the CC # output by MODULATION 1 & 2 and the output MIDI Channel. In addition, there is now control for RANDOMIZATION MODE. This mode controls exactly what gets randomized. “Randomize All,” “Randomize Pitch Only,” and “Randomize All Except Pitch” are self-explainatory. Randomization Modes 1-12 randomize only the following:

    1) Articulation
    2) Rhythm
    3) Modulation
    4) Articulation, Rhythm
    5) Rhythm, Modulation
    6) Articulation, Modulation
    7) Pitch, Articulation
    8) Pitch, Rhythm
    9) Pitch, Modulation
    10) Pitch, Articulation, Rhythm
    11) Pitch, Rhythm, Modulation
    12) Pitch, Articulation, Modulation

    “ARTICULATION” refers to GATE LENGTH, VELOCITY, and PORTAMENTO. “RHYTHM” refers to REPEAT COUNT, GATE MODE, RATCHETING, and STAGES. Finally, the instruction manual is viewable on the settings page.

    • Added MIDI and AU control for KEY, CLOCK, and OCTAVE. KEY and OCTAVE respond to MIDI Note On messages, so you can transpose sequences using an external keyboard controller or another sequencer. Alternately, Metroplex now responds to CC and AU Parameter control. CCs #13, 15, 17 and AU User 1, 2, and 3, now control KEY, CLOCK, and OCTAVE respectively.
    • Changed UNDO behavior. Now UNDO always plays the previously playing sequence.
    • Added detailed logging.
    • Bug fixes and optimizations

    What a monster patch! Makes my head spin just reading the feature list. I’m almost afraid to take a peek at the code. 🗯 Awesome work!

  • What the heck is Metroplex?🤪😳

  • @_ki said:
    One ‚trick‘ regarding patch storage:

    • For user convenience, add the version number to the scripts presetname.

    +1,000,000!!

    This will make updating a patch so less annoying that it is now

  • I’ve got both @OnMetroPulse and @OnMIDINoteOn coded into a script. If a midi note on event occurs while i’m doing Some work in @OnMetroPulse, what will happen? Will the work complete in @OnMetroPulse? It seems like @OnMetroPulse is not finishing in this situation.

  • @Bryan said:
    Another release from me now up on patchstorage.com. This one is METROPLEX: an 8 stage MIDI step sequencer inspired by the Intellijel Metropolis.

    Includes control of repeats per step, portamento/slide, ratcheting, randomization, step sequencing of MIDI CCs, and more!

    Perfect for funky 16th note jams à la Kraftwek or Detroit techno, or ambient Kosmische Musik.

    This is dope as it gets!

  • @yowza said:

    @_ki said:
    One ‚trick‘ regarding patch storage:

    • For user convenience, add the version number to the scripts presetname.

    +1,000,000!!

    This will make updating a patch so less annoying that it is now

    Have you had any luck importing more than one script into the app?

    I don't think these best practices are used yet, so I end up deleting all the presets and scripts that I have, downloading all the presets in scripts that exist on patch storage, and then importing them each one by one back into the application. This has to be the wrong way, right?

Sign In or Register to comment.