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.

midi auv3 for octave doubling/ overlapping transposition?

Hello!

Can anyone recommend an auv3 midi plug that allows for overlapping transposition of midi notes ie, overlap incoming notes with a clone of themselves transposed an octave higher or lower?

«1

Comments

  • I believe there is a Mozaic script for that, if not it would be very very easy to code one with only a few lines.

  • edited May 2020

    this is a simple transposer not sure if thats what u looking for
    https://apps.apple.com/se/app/midiflow-transposer-audiobus/id1175575102

  • edited May 2020

    Streambyter and Rozeta Scaler could do it too (just adapt midi routing):

  • @Janosax said:
    Streambyter and Rozeta Scaler could do it too (just adapt midi routing):

    Thank you for this~ but how would you go about producing the note doubling effect? With Rozeta scaler it’s just transposes the incoming notes but does not double them ontop of each other

  • edited May 2020

    Just use that kind of routing, your input device will go to both AU instrument and Scaler (which also go to AU instrument):


    Scaler is also interesting here for intervals different than octaves. Using specific key and scale on two scaler instances with different transposition settings, you will be able to play fourths or fifths for example in the same mode.

    For example:

  • edited May 2020

    The great and free (on iOS) Streambyter has the pretty "C+" cloning feature.

    Alternatively, this is from the audeonic forum:

    if MT < A0
    calc I0 = M1 + C # shift note (on/off) up by 12 semitones (C is hex for 12)
    send M0 I0 M2 # send new transposed note
    end

    Or, for more fun: Add 3 notes to each note, adjustable by the sliders N1..N3.

    set Q0 N1 -18 18
    set Q1 N2 -18 18
    set Q2 N3 -18 18
    if MT < A0
    calc I0 = M1 + Q0 # shift note (on/off) up by [slider value] semitones
    calc I1 = M1 + Q1
    calc I2 = M1 + Q2
    send M0 I0 M2 # send new transposed notes
    send M0 I1 M2
    send M0 I2 M2
    end

  • @Poppadocrock said:
    I believe there is a Mozaic script for that, if not it would be very very easy to code one with only a few lines.

    Thank you for this! Do you have any idea what the script is called? Have been looking but can’t seem to find

  • @annahahn it mite not exist but if you look at this thread (See below) the first post shows you how to make it yourself with like 5 lines of code. I know next to no code and I did it.

    https://forum.audiob.us/discussion/36604/learn-to-program-the-mozaic-workshop-to-create-midi-fx-and-controllers-you-could-learn-something/p1

  • I think this script would send out the midi note pressed as well as that same note 1octave higher and one octave lower, so 3 of the same notes on 3 different octaves. Just pop it in and load it up, and save.

    @OnMidiInput
    SendMIDIOut MIDIByte1, MIDIByte2, MIDIByte3, 0
    SendMIDIOut MIDIByte1, MIDIByte2+12, MIDIByte3, 0
    SendMIDIOut MIDIByte1, MIDIByte2-12, MIDIByte3, 0
    @End

  • wimwim
    edited May 2020

    I was in the mood to dust off my Mozaic coding memory so I did up a somewhat quick and dirty script. I didn't spend much time on it since I wasn't sure it's what you're after. There's no stuck-note prevention in this one, so you want to avoid making any knob changes when notes are playing. If it does what you need, then I might go the extra distance to polish it up...

    @Description
    Sends out transposed notes if knobs in the first row are set to something other than zero. Leave on "Chromatic" for no scale quantization. 
    
    WARNING: There is no stuck note prevention, so don't make knob changes while notes are playing.
    @End
    
    @OnLoad
      range = 36
    
      max_notes = 5
      root_knob = max_notes
      scale_knob = root_knob + 1
    
      if Unassigned init
        init = YES
        FillArray transpose,0,max_notes
    
        root = 0  // C
        scale = 0 // Chromatic
    
        for knob = 0 to 20
            if knob < max_notes
              SetKnobValue knob, TranslateScale (transpose[knob]+range),0,(range*2),0,127
            elseif knob = root_knob
              SetKnobValue knob, TranslateScale root,0,11,0,127
            elseif knob = scale_knob
              SetKnobValue knob, TranslateScale scale,0,24,0,127
            else
              SetKnobValue knob, 0
            endif
            Call @KnobLabels
          endfor
      endif
    @End
    
    @OnMidiNote
    
      // always send the first note as-is
      SendMIDIThru
    
      // send transposed notes for any knobs that aren't at zero
      for idx = 0 to max_notes - 1
    
        if transpose[idx] <> 0
    
          // Quantize to scale. Leave scale knob at Chromatic for no quantizing
          byte2 = Clip (ScaleQuantize (MIDIByte2 + transpose[idx])), 0, 127
    
          // Add a small random delay for hosts that don't handle simultaneous messages well.
          SendMIDIOut MIDIByte1, byte2, MIDIByte3, (Random 0,10)
    
        endif
    
      endfor
    @End
    
    
    @OnKnobChange
      knob = LastKnob
      value = GetKnobValue knob
    
      if knob < max_notes
        transpose[knob] = Round(TranslateScale value,0,127,0,(range*2)) - range
      elseif knob = root_knob
        root = Round (TranslateScale value,0,127,0,11)
        SetRootNote root
      elseif knob = scale_knob
        scale = Round (TranslateScale value,0,127,0,24)
        PresetScale scale 
      endif
    
      Call @KnobLabels 
    @End
    
    @KnobLabels
      if knob < max_notes
        LabelKnob knob,transpose[knob]
      elseif knob = root_knob
        LabelKnob knob, {Root: }, (NoteName root,NO)
      elseif knob = scale_knob
        LabelKnob knob, ScaleName scale
      else
        LabelKnob knob,{ }
      endif
    @End
    
  • @Poppadocrock @wim thank you so so much for these these are awesome!!

    @wim this is exactly what I was imagining but better thank you so so much🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌~ if you end up polishing this/adding stuck note termination features for live adjusting knobs I think this would be incredible and very useful to many users I would imagine!

  • OK, I'll give it a little spit 'n polish, and post it up to PatchStorage. I'm glad it's helpful.

  • @wim said:
    OK, I'll give it a little spit 'n polish, and post it up to PatchStorage. I'm glad it's helpful.

    🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌🙌 wonderful thank you so so much! Excited to work with it!!!

  • You’re welcome @annahahn I know very very little about coding glad @wim popped in to deliver us a new script. Awesomeness. Thanks @wim

  • Hi @annahahn ,
    OK, I think I have stuck note prevention working as well as I can get it. You may notice a pause in notes as knobs are moved. This is unfortunate, but the only sure way I know of to keep notes from hanging without resulting to brute-force note killing that often results in crackling sounds.

    If it seems like it's working for you then I'll finalize it and load it up to Patchstorage.com

    @Description
    OVERLAPPING NOTE TRANSPOSER - v0.9 (Beta)
    
    For each pitch knob not set to 0, an additional note will be added to incoming notes at the number of semitones above or below the note. You can also select a root note and scale to quantize the notes to. The default is "No Scale".
    
    To help prevent stuck notes, the script will attempt to kill any playing notes when knobs are changed. This may cause a noticeable interruption if there are a lot of notes, or long notes, playing at the time, but is better than leaving stuck notes hanging. 😬
    
    Script idea provided by @annahahn of the Audiobus Forum. 👏
    @End
    
    @OnLoad
      LabelKnobs {OVERLAPPING NOTE TRANSPOSER - v0.9 (Beta)}
      LabelPads { }
      LabelXY { }
      SetShortName {TRNSPZ}
    
      range = 36
      max_notes = 5
      root_knob = max_notes
      scale_knob = root_knob + 1
    
      FillArray channel_used,NO,16
      ResetNoteStates NO 
      knob_changed = NO
    
      if Unassigned init
        init = YES
        FillArray transpose,0,max_notes
        quantize = NO
    
        root = 0  // C
        scale = 0 // Chromatic
    
        for knob = 0 to 20
          LabelKnob knob,{ }
        endfor
        for knob = 0 to (max_notes-1)
            SetKnobValue knob, TranslateScale (transpose[knob]+range),0,(range*2),0,127
        endfor
        SetKnobValue root_knob,(TranslateScale root,0,11,0,127)
        SetKnobValue scale_knob, TranslateScale scale,-1,24,0,127
        Call @KnobLabels
      endif
    
    @End
    
    @OnMidiInput
      // Pass through non-note messages
      if MIDICommand <> 0x80 and MIDICommand <> 0x90
        SendMIDIThru 
      endif
    @End
    
    @OnSysex
      // Pass through sysex
      SendSysexThru
    @End
    
    @OnMidiNote
      if knob_changed = NO
    
        command = MIDICommand
        channel = MIDIChannel
        note = MIDINote
        byte2 = MIDINote
    
        // always pass the first note through
        SendMIDIThru
        Call @NoteTracker
    
        // send transposed notes for any knobs that aren't at zero
        for idx = 0 to max_notes - 1
          if transpose[idx] <> 0
    
            // check first if the resulting note is in range
            note_check = byte2 + transpose[idx]
            if quantize
              note_check = ScaleQuantize note_check
            endif
    
            if note_check >= 0 and note_check <= 127
    
              note = note_check
              SendMIDIOut MIDIByte1, note, MIDIByte3, (Random 1,10)
              Call @NoteTracker
    
            endif
    
          endif
        endfor
      endif
    @End
    
    @NoteTracker
      if command = 0x90
        SetNoteState channel, note, YES
      elseif command = 0x80
        SetNoteState channel, note, NO
      endif
      channel_used[channel] = YES
    @End
    
    @KillAllNotes
      for ch = 0 to 15
        if channel_used[ch]
          for n = 0 to 127
            //if GetNoteState ch,n = YES
              SendMIDIOut (0x80 + ch),n,0,(Random 5,25)
            //endif
          endfor
        endif
      endfor
      FillArray channel_used,NO,16
      ResetNoteStates NO 
    @End
    
    @OnKnobChange
    
      knob_changed = YES
      knob = LastKnob
      value = GetKnobValue knob
    
      if knob < max_notes
        transpose[knob] = Round(TranslateScale value,0,127,0,(range*2)) - range
      elseif knob = root_knob
        root = Round (TranslateScale value,0,127,0,11)
        SetRootNote root
      elseif knob = scale_knob
        scale = Round (TranslateScale value,0,127,-1,24)
        if scale = -1
          quantize = NO 
          knob = root_knob
          Call @KnobLabels
          knob = scale_knob
        else
          quantize = YES
          PresetScale scale 
        endif
      endif
      Call @KnobLabels 
      Call @KillAllNotes
      knob_changed = NO
    
    @End
    
    @KnobLabels
    
      for knob = 0 to (max_notes - 1)
        LabelKnob knob,transpose[knob]
      endfor
    
      if quantize = NO
        LabelKnob root_knob,{No Root}
        LabelKnob scale_knob,{No Scale}
      else
        LabelKnob root_knob,(NoteName root,NO)
        LabelKnob scale_knob,(ScaleName scale) 
      endif
    
    @End
    
  • Hi @wim ! Sorry this took me so long to test thoroughly~ it seems to work perfectly in all tests I’ve done during playback etc- thank you so much again for creating and sharing this hopefully others will find it useful🙌

  • @annahahn said:
    Hi @wim ! Sorry this took me so long to test thoroughly~ it seems to work perfectly in all tests I’ve done during playback etc- thank you so much again for creating and sharing this hopefully others will find it useful🙌

    Great, I'm glad it works. B)
    I'll post it up to patch storage.

  • Am I being daft or can’t the midi transpose module in Drambo do this?

  • wimwim
    edited June 2020

    What midi transpose module? I see some modules that could be used to do this, but nothing in the standard MIDI Modules.

    Anyway, while I'm sure you could do this with Drambo, not everyone wants to add Drambo to their arsenal and/or bother with it in other projects that aren't using Drambo. (yes, believe it or not, some people do still muddle by without it B) ).

    I can get to the mailbox on my skateboard, but walking works fine too. ;)

  • Uploaded to PatchStorage: https://patchstorage.com/overlapping-note-transposer/. There are no other changes to the script above other than the final version number, so no need to download that one @annahahn.

  • It's the last module in the midi section.

    Anyway, I found that the 'chord' module works well too, because it will preserve the original midi, and just add the desired interval on top, so + / - 12 for octave doubling.

    I wouldn't call it a skateboard in this case, just another pair of sneakers to go outside with :)

    @wim said:
    What midi transpose module? I see some modules that could be used to do this, but nothing in the standard MIDI Modules.

  • @Janosax said:
    Just use that kind of routing, your input device will go to both AU instrument and Scaler (which also go to AU instrument):


    Scaler is also interesting here for intervals different than octaves. Using specific key and scale on two scaler instances with different transposition settings, you will be able to play fourths or fifths for example in the same mode.

    For example:

    The power of Auv3.. Thanks..

  • wimwim
    edited June 2020

    Thanks @aleyas - turns out I didn't see it because the Drambo window wasn't maximized because of the keyboard in AUM and it was hidden below the window border.

    That one only goes up or down one octave, and also just transposes a single note, so you'd need to do some chaining and routing to get multiple notes and octaves, but yeh, you could do it. Thanks for pointing it out.

    [edit - nvm about the octaves. I didn't read the help]

  • 'Chord' module with interval set to + / - 12 will provide doubling while preserving the original midi, so no tricky routing.

    Also, placing transpose modules in series will produce 2, 3 octaves etc. But yeah, the transpose module alone would require a little routing to add to the original midi.

    Not that I prefer Drambo over Mozaic or anything, it's just the tool I use cause I don't know how to write scripts >< I should really start watching some Mozaic tutorials to get more out of it!

    @wim said:
    Thanks @aleyas - turns out I didn't see it because the Drambo window wasn't maximized because of the keyboard in AUM and it was hidden below the window border.

    That one only goes up or down one octave, and also just transposes a single note, so you'd need to do some chaining and routing to get multiple notes and octaves, but yeh, you could do it. Thanks for pointing it out.

  • Hey @wim !

    Hope you’re well! Thanks so much for the strummer tip🙌

    I hate to be the bearer of bad news but I just discovered that your overlapping notes mozaic gets stuck notes very often if it is receiving rapid note input- is there anything I can tweak in the existing settings to fix this or is the issue more structural to the current implementation?

  • wimwim
    edited June 2020

    @annahahn said:
    Hey @wim !

    Hope you’re well! Thanks so much for the strummer tip🙌

    I hate to be the bearer of bad news but I just discovered that your overlapping notes mozaic gets stuck notes very often if it is receiving rapid note input- is there anything I can tweak in the existing settings to fix this or is the issue more structural to the current implementation?

    It shouldn't have stuck notes problems at this point. If it still does then it's beyond my skills to fix. I've done all I know how to prevent them. Sorry.

  • This thing is a great, simple riff-writer-helper.. an octave lower + higher combined with the original.. whoa! look out.. on the right patch.. it get’s heavy.. in a very good way.. thanks for this mozaic patch @wim.. and for the original idea @annahahn.. 👍

  • Great. Hopefully stuck notes aren't a problem in normal use.

  • @wim said:
    Great. Hopefully stuck notes aren't a problem in normal

    Works fantastically under normal circumstances AND I figured out a fix if you need to run it in a chain receiving tons of rapid notes

    Insert an instance of mozaic note mugger after that to clip the length of the notes- if this is stopping you from doing looping ARP fx then stick an instance of rozetta arpeggiator at the top of the chain to drive the whole thing

    Huge stack of rapidly undulating notes + no stuck notes

  • @annahahn said:
    Works fantastically under normal circumstances AND I figured out a fix if you need to run it in a chain receiving tons of rapid notes

    Insert an instance of mozaic note mugger after that to clip the length of the notes- if this is stopping you from doing looping ARP fx then stick an instance of rozetta arpeggiator at the top of the chain to drive the whole thing

    Huge stack of rapidly undulating notes + no stuck notes

    Humm ... that's very interesting. I can't think why that would help, but maybe it's a clue toward why there's stuck notes in the first place. I may take a look at that some day (no promises).

Sign In or Register to comment.