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.

Is there an iOS midi key remapping app that remaps each midi note to another midi note *AND* Channel

I need to remap every key of a midi controller to another midi note number as well as the channel. So low octave is remapped to C4 - C5 Ch1, next octave C4-C5 Ch2, etc.

I know of MIDI flow and some other tools, but none of them I've found allow remapping of channel and note.

Is there a good app for this task I'm missing? It's trivial on PC, but not finding that capability on iOS.

Help?

«1

Comments

  • There is a way to get this done but you'll need some help.

    Streambyter has a programming language that can re-map notes and channels easily. You'll just need a StreamByter App:

    StreamByter AUv3 MIDI App
    MidiFire - the complete MIDI programming debugging app

    Either will accept a custom StreamByter script and do the mappings you request.

    I asked for a custom StreamByter script and was offered one in about 4 hours here. Good luck.

    MidiFlow can probably do this as well and you might be able to do it the mapping yourself. There are 2 versions of it:

    MidiFlow FX Bundle
    MidiFlow Standalone

    I find that this developer is looking for revenue and the original MidiFlow Standalone seems like it was abandoned. I had a similar experience with "MIDI Pro"... still selling the App but no response regarding bugs.

    The StreamByter developer @Audeonic has a user forum and you can make the request there and probably see a script in a day or two max. Some Forum members have been digging in and might like the exercise to write something. @_Ki has already created some amazing (and very complicated) scripts shared on the Forum. He wrote one that takes the lowest note from chords and send it to another channel for mapping a better Bass Instrument for a Polyphonic sequencer's output.

    A StreamByter Scripting tutorial might exist to get started. The best thing about learning programming is it takes hours to learn and you won't buy more Apps you try and forget so it's a financial benefit as a time sink. It's also really fun when something works correctly. A lot like finishing a project only better to share so someone else can use the code to make a variation.

  • @McDtracy said:
    There is a way to get this done but you'll need some help.

    Streambyter has a programming language that can re-map notes and channels easily. You'll just need a StreamByter App:

    StreamByter AUv3 MIDI App
    MidiFire - the complete MIDI programming debugging app

    Either will accept a custom StreamByter script and do the mappings you request.

    I asked for a custom StreamByter script and was offered one in about 4 hours here. Good luck.

    MidiFlow can probably do this as well and you might be able to do it the mapping yourself. There are 2 versions of it:

    MidiFlow FX Bundle
    MidiFlow Standalone

    I find that this developer is looking for revenue and the original MidiFlow Standalone seems like it was abandoned. I had a similar experience with "MIDI Pro"... still selling the App but no response regarding bugs.

    The StreamByter developer @Audeonic has a user forum and you can make the request there and probably see a script in a day or two max. Some Forum members have been digging in and might like the exercise to write something. @_Ki has already created some amazing (and very complicated) scripts shared on the Forum. He wrote one that takes the lowest note from chords and send it to another channel for mapping a better Bass Instrument for a Polyphonic sequencer's output.

    A StreamByter Scripting tutorial might exist to get started. The best thing about learning programming is it takes hours to learn and you won't buy more Apps you try and forget so it's a financial benefit as a time sink. It's also really fun when something works correctly. A lot like finishing a project only better to share so someone else can use the code to make a variation.

    Yea, I'd forgotten about MIDIFire. I've never been able to wrap my head around the streambyter thing. Hex, etc. Ugh.

    But I think I can do it with the GUI in MIDIFire by using like 42 channel strips. Just REALLY tedious..

  • _ki_ki
    edited September 2018

    I did write a StreamByter script that remaps Rozeta XOX/Rythm to other channels. It takes a list of notes (up to 16) and a list of output notes. (And a third list of notes if the velocity is above a specified threshold, but one might use the same note as in the other remapping list) Not yet publish it - needs more documentation...

    @MonkeyDrummer If i understood you correctly you

    • want to remapp some note ranges (octaves) to channels
    • and also transform them so that all of these ‚splits‘ start at a given note
    • The splits do not overlapp (otherwise notes needed to be send to two channelsj

    So a sample user input to the script would be 3 variables

    • Array of splitpoint-notes: 0, C2, C3, C5 (first need to be 0)
    • Array of output-notes: C1, C3, C1, C5
    • Number of splits: 4

    The 4 splitpoints/output-notes would result in 4 split regions

    • C0-B1 send to channel 1 as C1-B2
    • C2-B2 send to channel 2 as C3-B3
    • C3-B4 send to channel 3 as C1-B1
    • C5+ send to channel 4 as C5+

    Each split can be remapped to different note range or stay the same has with split 4)

    If there is demand, i could easily do such a user-configurable streambyter script as it is quite simular to the one i already have.

  • Thanks @_ki ! What I need to do is remap every key/pad of the new Pearl MalletStation. So I'd need a translation of noteA.ChX -> noteB.ChY for every note/pad. No ranges, which makes it kind of a pain.

  • _ki_ki
    edited September 2018

    @MonkeyDrummer

    But your example contained ranges, low octave (12 consequtive notes) to C4-B4 on channel 1, next octave to C4-B4 channel 2 and so on. In my proposed script this would translate to

    • split: 0, C1, C2, C3...
    • out: C4,C4,C4,...

    You want to remap every octave of the MalletStation to a different midi channel and each of these groups should start at C4

    Or did i misread your postings ?

  • @_ki said:
    @MonkeyDrummer

    But your example contained ranges, low octave (12 consequtive notes) to C4-B4 on channel 1, next octave to C4-B4 channel 2 and so on. In my proposed script this would translate to

    • split: 0, C1, C2, C3...
    • out: C4,C4,C4,...

    You want to remap every octave of the MalletStation to a different midi channel and each of these groups should start at C4

    Or did i misread your postings ?

    No, potentially every note.

    So potentially:
    C1.Ch1->C4.C2
    C#1.Ch1->D4.C2
    D1.Ch1->E4.C2
    etc...

  • @RUST( i )K said:
    Genome?

    ??? I need live translation. how would a sequencer do that?

  • @MonkeyDrummer
    Hmm, so its a little bit more complicated... Should the outputs for the octaves be identical for all channels ? In your example you skipped C#4, should all #‘s be skipped in the output ?

    The MalletStation layout looks like a keyboard with black and white keys played with sticks.

    I still don’t understand what you want to archieve with you remapping - what do you do control with the MalletStation ? Several synth using the notes on the different channels ? But then why omit some notes ?

  • @_ki said:
    @MonkeyDrummer
    Hmm, so its a little bit more complicated... Should the outputs for the octaves be identical for all channels ? In your example you skipped C#4, should all #‘s be skipped in the output ?

    The MalletStation layout looks like a keyboard with black and white keys played with sticks.

    I still don’t understand what you want to archieve with you remapping - what do you do control with the MalletStation ? Several synth using the notes on the different channels ? But then why omit some notes ?

    I'm looking to control the 6 voices of a NordDrum via midi.

    My goal is to have essentially 6 "zones" that map to if not complete scales in CM then maj & min chords in CM. I'll then route midi output from this remapped input into @brambos 's Scaler to change, well... Scale.

    If you've looked at pics of the MalletStation, you see that there are pad where a normal keyboard doesn't have keys. So I'd use the included, simple/basic tool they provide to set those "extra" pads to be a midi note outside the normal range of the controller. Thus I can't just use a simple "range" remap as the "extra" accidental triggers/pads will not be continous with the notes before/after.

    That's why I said just assume that I need to remap every key/trigger/pad on the controller in a totally arbitrary/discreet manner as it's the most accurate use case for what I'm trying to do.

    And I can't say that output octave will always be the same...

    Like I said, I think I'll try MidiFire. It's going to be tedious to do 42 channel strips, but I think it will be easiest to modify/maintain once it's set up.

  • From your description, I believe MidiFlow standalone could do this. You’d need to set it up separately for each translation you wanted to do though.

    It could also be done with StreamByter. Here’s some code that does something similar. It takes GR-16’s output, which is on a separate channel per pad and lets you change both the channel and the note before passing it through. In the first table you put the note substitution. In the second, the channel substitution.

    What you want to be able to do is potentially more complicated, and would result in a more difficult script. This is why I recommend MidiFlow Standalone. But here it is in case it helps give an idea of what’s involved.

     # GR-16 pad to note converter
    
     # Enter the note substitution (in hex) for each pad in I0. 
     # 00 means no substitution. 
     # this one is for RuisMaker on pads 8-16
     ASS I0 = 00 00 00 00 00 00 00 00 31 33 36 38 3A 3D 3F 42
    
     # Enter the channel substitution (in hex) for each note in J0
     # Only 00 (no substitution) through 0F (channel 16) are accepted.
     ASS J0 = 00 00 00 00 00 00 00 00 09 09 09 09 09 09 09 09
    
     ASS L0 = MC
    
     IF IL0 != 00
        ASS M1 = IL0
     END
    
     IF JL0 != 00
       IF JL0 <= 0F
         MAT L1 = MT + JL0
         ASS M0 = L1
       END
     END
    
  • _ki_ki
    edited September 2018

    Here is the v3 of the StreamByter script that i came up with - it allows to remap specific notes to other notes/channels using a remap table.

    The main drawback is that it uses hex values for notes, so one need to look them up in the midi/hex table.

    For debuggging and step by step entry of the remap table, each keypress outputs its new note and channel or -N- for unassigned note and -C- for unassigned channel.
    .

    To download the script, use the attached zip file since Safari does not offer a ‚select all/copy‘ on text web-pages.

  • _ki_ki
    edited September 2018

    Oh i see, @wim was faster :)

    And you also uses a remap table. I suspect comenting and debugging output/ testing took some additional time.

    I just uploaded v2 of the script, which fixes some typos in the comments.

  • @wim said:
    From your description, I believe MidiFlow standalone could do this. You’d need to set it up separately for each translation you wanted to do though.

    It could also be done with StreamByter. Here’s some code that does something similar. It takes GR-16’s output, which is on a separate channel per pad and lets you change both the channel and the note before passing it through. In the first table you put the note substitution. In the second, the channel substitution.

    What you want to be able to do is potentially more complicated, and would result in a more difficult script. This is why I recommend MidiFlow Standalone. But here it is in case it helps give an idea of what’s involved.

     # GR-16 pad to note converter
     
     # Enter the note substitution (in hex) for each pad in I0. 
     # 00 means no substitution. 
     # this one is for RuisMaker on pads 8-16
     ASS I0 = 00 00 00 00 00 00 00 00 31 33 36 38 3A 3D 3F 42
     
     # Enter the channel substitution (in hex) for each note in J0
     # Only 00 (no substitution) through 0F (channel 16) are accepted.
     ASS J0 = 00 00 00 00 00 00 00 00 09 09 09 09 09 09 09 09
     
     ASS L0 = MC
     
     IF IL0 != 00
        ASS M1 = IL0
     END
      
     IF JL0 != 00
       IF JL0 <= 0F
         MAT L1 = MT + JL0
         ASS M0 = L1
       END
     END
    

    I don’t get how this script tells what the “from” note is in I0 array. It looks like you’re just sending the translate “to” values...

  • If you want GUI, you can use Beatmaker 3. Load a blank sample on every pad. On the sample overview page, there is a slot that says what note the sample should be. That’s the note setting 1-128. Then, each pad can be edited with a dropdown menu. In there is a setting for channel 1-16. Play in to BM3 to that bank, it will translate and play out to your note/channel per pad.

  • @_ki said:
    Here is the StreamByter script that i came up with - it allows to remap specific notes to other notes/channels using a remap table.

    The main drawback is that it uses hex values for notes, so one need to look them up in the midi/hex table.

    For debuggging and step by step entry of the remap table, each keypress outputs its new note and channel or -N- for unassigned note and -C- for unassigned channel.
    .

    To download the script, use the attached zip file since Safari does not offer a ‚select all/copy‘ on text web-pages.

    Thank you so much for your help and attention on this!

    I’ve spent the last hour or so figuring out how midifire works, streambyter basics, etc and I think this may work.

    However, can you tell me how I would block the converted note’s original value?

    I’d like any notes not in the conversion array to pass but anything that’s been converted should only pass the converted value. I tried a few things and all I did was break it! 😜

  • Add a “+B” to block any rule. Example n1 = xx +b. Any note on channel 2 gets blocked

  • wimwim
    edited September 2018

    @MonkeyDrummer said:

    @wim said:
    From your description, I believe MidiFlow standalone could do this. You’d need to set it up separately for each translation you wanted to do though.

    It could also be done with StreamByter. Here’s some code that does something similar. It takes GR-16’s output, which is on a separate channel per pad and lets you change both the channel and the note before passing it through. In the first table you put the note substitution. In the second, the channel substitution.

    What you want to be able to do is potentially more complicated, and would result in a more difficult script. This is why I recommend MidiFlow Standalone. But here it is in case it helps give an idea of what’s involved.

     # GR-16 pad to note converter
     
     # Enter the note substitution (in hex) for each pad in I0. 
     # 00 means no substitution. 
     # this one is for RuisMaker on pads 8-16
     ASS I0 = 00 00 00 00 00 00 00 00 31 33 36 38 3A 3D 3F 42
     
     # Enter the channel substitution (in hex) for each note in J0
     # Only 00 (no substitution) through 0F (channel 16) are accepted.
     ASS J0 = 00 00 00 00 00 00 00 00 09 09 09 09 09 09 09 09
     
     ASS L0 = MC
     
     IF IL0 != 00
        ASS M1 = IL0
     END
      
     IF JL0 != 00
       IF JL0 <= 0F
         MAT L1 = MT + JL0
         ASS M0 = L1
       END
     END
    

    I don’t get how this script tells what the “from” note is in I0 array. It looks like you’re just sending the translate “to” values...

    GR-16 sends on a different channel for each pad. So it’s looking at the pad it comes in from, not the note to do the lookup.

    ASS L0 = MC
    

    It then either passes it through unchanged, or changes any note from that pad to a specific note. While it’s at it, it also remaps the midi channel if wanted.

    That script is specific to GrooveRider, and was only meant as an example of the kind of thing that’s possible.

  • _ki_ki
    edited September 2018

    @MonkeyDrummer

    However, can you tell me how I would block the converted note’s original value?

    You are right, as @Zetagy already mentioned, i forgot to block the original notes - sorry for any inconveniences. I updated my original posting with version 3 link and new zip.

    In v3 i added the following line at the end of the script:

    NX = XX +B # // Block arriving NoteOff/NoteOff

  • @_ki said:
    @MonkeyDrummer

    However, can you tell me how I would block the converted note’s original value?

    You are right, as @Zetagy already mentioned, i forgot to block the original notes - sorry for any inconveniences. I updated my original posting with version 3 link and new zip.

    In v3 i added the following line at the end of the script:

    NX = XX +B # // Block arriving NoteOff/NoteOff

    Just awesome man! Thank you so much. This was like the last “hurdle” to be able to get off the PC and be more “immediate” by using the iPad for basic midi processing.

    I’ll have to write up the full translation table and try it out before I get my hope too far up, it is technology after all, and it always has a way to bite you! 🤪

  • edited September 2018

    That’s pretty clever tool usage @Zetagy !

  • When i read the opening post, i thought one could programm a clever loop working on some regular structure so that no or only minimal user setup is needed - but now you got a one to one translation with lots of user input.

    Setting up the table for 42 notes itself is quite some work and prone to lots of copy/paste or user error, misreading the hex tables etc - thats why i added the debugging labels for notes and channel and the little error message if something is undefined.

    My hope is that using the script is more light-weight than setting up 42 independand translations in MidiFlow , which is basically the same what the script does...)

  • edited October 2018

    Midiflow is unstable with that many lanes. Needs to be done in Streambyter.
    Somewhat tempted to post my project.
    Its a long read.

  • The real magic is in StepPolyArp, so there’s no harm in posting some syntax...

  • My head hurts from this thread.

  • This is the map done in BM3, you will see Xequence in its place. I’m using it for direct AB midi in.

  • edited October 2018

        # Alpha Matrix A—preArp**
        #——————————
        IF LOAD # initialize global variables
          ASS G00-G0E = 00
        END # end initialize global variables
        #——————————
        9X XX 00 = 8X # fix midi # note on vol 00 > note off
        #——————————
        IF M0 < A0 # if midi notes received
          #——————————
          # channel gates set G00-07
          #——————————
          IF M1 >= 00 # C-2 one, range low
            IF M1 <= 07 # G-1 eight, range high
              #——————————
              IF M0 == 80 # note off
                ASS GM1 = 00 # gate G00-07
                XX = XX +B # block pylon midi
              END # note off
              #——————————
              IF M0 == 90 # note on
                ASS GM1 = 01 # pass G00-07
                XX = XX +B # block pylon midi
              END # note on
              #——————————
            END # range high
          END # range low  # channel gates end
          #——————————
          # lead swaps set G08 & G09
          #——————————
          IF M1 >= 24 # C 1 thirty-seven, range low
            IF M1 <= 27 # D#1 forty, range high
              #——————————
              IF M0 == 80 # note off
                ASS G08 = 00 # lead swaps inactive
                XX = XX +B # block pylon midi
              END # note off
              #——————————
              IF M0 == 90 # note on
                ASS G08 = 01 # lead swaps active
                ASS G09 = M1 # swap type index
                XX = XX +B # block pylon midi
              END # note on
              #——————————
            END # range high
          END # range low  # lead swaps end
          #——————————
          # bass swaps set G0A & G0B
          #——————————
          IF M1 >= 20 # G#0 thirty-three, range low
            IF M1 <= 22 # A#0 thirty-five, range high
              #——————————
              IF M0 == 80 # note off
                ASS G0A = 00 # bass swaps inactive
                XX = XX +B # block pylon midi
              END # note off
              #——————————
              IF M0 == 90 # note on
                ASS G0A = 01 # bass swaps active
                ASS G0B = M1 # swap type index
                XX = XX +B # block pylon midi
                #——————————
              END # note on
            END # range high
          END # range low # bass swaps end
          #——————————
          # chord swap set G0C
          #——————————
          IF M1 == 23 # B 0 thirty-six range
            #——————————
            IF M0 == 80 # note off 
              ASS G0C = 00 # chord swap off
              XX = XX +B # block pylon midi
            END # note off
            #——————————
            IF M0 == 90 # note on
              ASS G0C = 01 # chord swap on
              XX = XX +B # block pylon midi
            END # note on
            #——————————
          END # range 23 # chord swap end
          #——————————
          # send spau pattern G0D (scalar transpose magic inside spau)
          #——————————
          IF M1 >= 10 # E-1 seventeen, range low
            IF M1 <= 1F # G 0 thirty-two, range high
              #——————————
              IF M0 == 80 # chord
                SND B0 14 07 # chord
                XX = XX +B # block pylon midi
              END # chord
              #——————————
              IF M0 == 90 # note on
                MAT G0D = M1 - 10 # sixteen offset # to pad layout
                SND B0 14 00 # arp
                SND B0 15 G0D # send spau pattern number
                XX = XX +B # block pylon midi
              END # arp
              #——————————
            END # range high
          END # range low # send spau pattern end
          #——————————
          # set key transpose G0E
          #——————————
          IF M1 >= 28 # E 1 forty-one, range low
            IF M1 <= 3F # D 3 sixty-four, range high
              #——————————
              IF M0 == 80 # note off
                ASS G0E = 00 # transpose zero
                XX = XX +B # block pylon midi
              END # note off
              #——————————
              IF M0 == 90 # note on
                MAT G0E = M1 - 27 # thirty-nine
                XX = XX +B # block pylon midi
              END # note on
              #——————————
            END # range high 
          END # range low # set key transpose end
          #——————————
          # send scale
          #——————————
          IF M1 >= 08 # G#-2 nine, range low
            IF M1 <= 0F # D#-1 sixteen, range high
              #——————————
              IF M1 == 08 # Major 
                SND M0 24 7F #37    C   +01
                SND M0 26 7F #39    D   +01
                SND M0 28 7F #41        E   +01
                SND M0 29 7F #42    F   +01
                SND M0 2B 7F #44    G   +01
                SND M0 2D 7F #46    A   +01
                SND M0 2F 7F #48    B   +01
                SND M0 30 7F #49    C   +02
                XX = XX +B # block pylon midi
              END #——————————
              IF M1 == 09 # Minor
                SND M0 24 #37       C   +01
                SND M0 26 #39       D   +01
                SND M0 27 #40       D#  +01 
                SND M0 29 #42       F   +01
                SND M0 2B #44       G   +01
                SND M0 2C #45       G#  +01
                SND M0 2E #47       A#  +01
                SND M0 30 #49       C   +02
                XX = XX +B # block pylon midi
              END #——————————
              IF M1 == 0A # Major Blues
                SND M0 24 #37       C   +01
                SND M0 26 #39       D   +01
                SND M0 27 #40       D#  +01
                SND M0 28 #41       E   +01 
                SND M0 2B #44       G   +01
                SND M0 2D #46       A   +01
                SND M0 30 #49       C   +02
                SND M0 32 #51       D   +02
                XX = XX +B # block pylon midi
              END #——————————
              IF M1 == 0B # Minor Blues
                SND M0 24 #37       C   +01
                SND M0 27 #40       D#  +01 
                SND M0 29 #42       F   +01
                SND M0 2A #43       F#  +01
                SND M0 2B #44       G   +01
                SND M0 2E #47       A#  +01
                SND M0 30 #49       C   +02
                SND M0 33 #52       D#  +02 
                XX = XX +B # block pylon midi
              END #——————————
              IF M1 == 0C # Major Penta
                SND M0 24 #37       C   +01
                SND M0 26 #39       D   +01
                SND M0 28 #41       E   +01 
                SND M0 2B #44       G   +01
                SND M0 2D #46       A   +01
                SND M0 30 #49       C   +02
                SND M0 32 #51       D   +02
                SND M0 34 #53       E   +02 
                XX = XX +B # block pylon midi
              END #——————————
              IF M01 == 0D # Minor Penta
                SND M0 24 #37       C   +01
                SND M0 27 #40       D#  +01
                SND M0 29 #42       F   +01
                SND M0 2B #44       G   +01
                SND M0 2E #47       A#  +01
                SND M0 30 #49       C   +02
                SND M0 33 #52       D#  +02 
                SND M0 35 #54       F   +02
                XX = XX +B # block pylon midi
              END #——————————
            END # range high
          END # range low # end send scale
          #—————————
        END # if midi notes
        # XX = XX +B # block pylon midi
        #——————————
        # end Alpha Matrix A
    
  • edited October 2018

    # Alpha Matrix B—postArp**
    #——————————
    9X XX 00 = 8X # fix midi # note on vol 00 > note off
    BX = BX +B # block cc, pass the note
    #——————————
    IF M0 < A0 # if midi notes received
      #——————————
      # key transpose action
      IF G0E > 00 # range non-zero
        IF G0E <= 3F # twenty-four semitones
          MAT M1 = M1 + G0E # transpose
        END # range non-zero
      END # key transpose
      #——————————
      # lead swaps 24, 25, 26, 27
      IF G08 == 01 # lead swap active
        #——————————
        IF G09 == 24 # swap 4>1, 1>4
          X0 = X8 # store ch1
          X3 = X0 # ch4>ch1
          X8 = X3 # ch1>ch4
        END # swap 24
        #——————————
        IF G09 == 25 # swap 4>3, 3>4
          X2 = X8 # store ch3
          X3 = X2 # ch4>ch3
          X8 = X3 # ch3>ch4
        END # swap 25
        #——————————
        IF G09 == 26 # swap 4>5, 5>4
          X4 = X8 # store ch5
          X3 = X4 # ch4>ch5
          X8 = X3 # ch5>ch4     
        END # swap 26
        #——————————
        IF G09 == 27 # swap 6>4, 4>6
          X5 = X8 # store ch6
          X3 = X5 # ch4>ch6
          X8 = X3 # ch6>ch4
        END # swap 27
        #——————————
      END # lead swaps
      #——————————
      # bass swaps 20, 21, 22
      IF G0A == 01 # bass swap active
        #——————————
        IF G0B == 20 # swap 2>1,>1/2
          #——————————
          IF G09 != 24 # not modified by lead swap 24
            X0 = X8 # store ch1
            X1 = X0 # ch2>ch1
            X8 = X1 # ch1>ch2
          END #  not modified 
          #——————————
          IF G09 == 24 # bass swap modified 2>4, 4>2
            IF G08 == 01 # yes lead swap
              X3 = X8 # store ch4
              X1 = X3 # ch2>ch4
              X8 = X1 # ch4>ch2
            END # modified by 24
          END # yes lead swap
        END # bass swap 20
        #——————————
        IF G0B == 21 # swap 2>3, 3>2
          #——————————
          IF G09 != 25 # not modified by lead swap 25
            X2 = X8 # store ch3
            X1 = X2 # ch2>ch3
            X8 = X1 # ch3>ch2
          END # not modified
          #——————————
          IF G09 == 25 # bass swap modified 2>4, 4>2
            IF G08 == 01 # yes lead swap
              X3 = X8 # store ch4
              X1 = X3 # ch2>ch4
              X8 = X1 # ch4>ch2
            END # modified by 25
          END # yes lead swap
        END # bass swap 21
        #——————————
        IF G0B == 22 # swap 2>4, 4>2
          #——————————
          IF G09 != 24 # not modified by lead swap 24
            X3 = X8 # store ch4
            X1 = X3 # ch2>ch4
            X8 = X1 # ch4>ch2
          END # not modified
          #——————————
          IF G09 == 24 # bass swap modified 2>1, 1>2
            IF G08 == 01 # yes lead swap
              X0 = X8 # store ch1
              X1 = X0 # ch2>ch1
              X8 = X1 # ch1>ch2
            END # modified by 24
          END # yes lead swap
        END # bass swap 22
        #——————————
      END # bass swaps
      #——————————
      # chord swap (5th chord channel to 7th chord channel)
      IF G0C == 01 # 3>1, 1>3
        X0 = X8 # store ch1
        X2 = X0 # ch3>ch1
        X8 = X2 # ch1>ch3
      END # chord swap
      #——————————
      # channel gates
      IF G00 != 01
        X0 = XX +B # gate ch1
      END
      IF G01 != 01
        X1 = XX +B # gate ch2
      END
      IF G02 != 01
        X2 = XX +B # gate ch3
      END
      IF G03 != 01
        X3 = XX +B # gate ch4
      END
      IF G04 != 01
        X4 = XX +B # gate ch5
      END
      IF G05 != 01
        X5 = XX +B # gate ch6
      END
      IF G06 != 01
        X6 = XX +B # gate ch7
      END
      IF G07 != 01
        X7 = XX +B # gate ch8
      END # channel gates
      #——————————
      X8 = XX +B # block storage channel
      #——————————
    END # if midi notes received
    #——————————
    # end Alpha Matrix B
    
  • edited October 2018

    Commands in, to secret arp magic, to multichannel harmony out.

    Sorry to bomb ur thread, I hope there’s some useful bits in there.

    Sincere THANK YOU to Nic Grant for creating Streambyter.

  • @Zetagy Holy f*ckballs! I don't run AB3, but man... That's pretty insane!

Sign In or Register to comment.