Loopy Pro: Create music, your way.

What is Loopy Pro?Loopy Pro is a powerful, flexible, and intuitive live looper, sampler, clip launcher and DAW for iPhone and iPad. At its core, it allows you to record and layer sounds in real-time to create complex musical arrangements. But it doesn’t stop there—Loopy Pro offers advanced tools to customize your workflow, build dynamic performance setups, and create a seamless connection between instruments, effects, and external gear.

Use it for live looping, sequencing, arranging, mixing, and much more. Whether you're a live performer, a producer, or just experimenting with sound, Loopy Pro helps you take control of your creative process.

Download on the App Store

Loopy Pro is your all-in-one musical toolkit. Try it for free today.

StreamByter Script: Distribute polyphonic midi to N outgoing mono midi channels

_ki_ki
edited September 2018 in App Tips and Tricks

Hi,

i developped a script that distributes incomming polyphonic midi into N monophonic midi channels.

One use-case is to setup N instances of a monophonic synth using the same preset receiving on different midi channels from Stream Byter and play this set of mono-synth with a single polyphonic midi source.

Here i play 5 Ripplemaker mono synth as single polyphonic synth in AUM:

There is advanced logic for choosing the channel for new notes, including repetition on the same channel and note-hiding (temporary stealing) and unhiding in the opposite play order when releasing keys.

  • Note repetiion tries to use the identical output channel for better sounding retrigger.
  • Otherwise the script tries to use the channel that had the longest 'pause' so that the release phase of the previous played channel-note is not cut off.

Midi CCs, Aftertouch, Channelpressure and Pitchbend are send to all N channels. Polyphonic AT is changed into channel Aftertouch and send to the note’s channel.

I already did a lot of testing, but please report bugs or enhancements

Instructions

  • You find the quite lengthy source for StreamByter/StreamByter AU in the attached file or via the zip link.
  • Copy the content into StreamByter and save as preset : PolyToNMono
    .

  • Alternatively install the AB3 session which is wrapping AUM containing StreamByter AU, 4 Ripplemaker AUs and a Rosetta XY AU for parameter and pitchbend manipulation: Four Ripplemaker Poly-Synth AB3 Preset After loading the session, open StreamByter AU and save the preset using AUMs preset manager.

.

Example

Usage with 3 mono Ripplemaker in AUM

  • Setup one StreamByter AU instance with PolyToNMono preset
  • Configure I0F = 3 in the StreamByter source and press 'INSTALL'
  • Open 3 imstances of Ripplemaker and in each load an identical preset
  • Configure each synth to read midi from StreamByter AU on a single midi channel 1 to 3 using the channel filter
  • Configure StreamByter AU to read from the keyboard

If you press a triad chord, three synth will be playing. If you hold the chord and add a single note,
the first pressed key is replaced by the new note. If you now remove the 4. finger, the 'hidden' note
is playing again with its initial velocity.

.

Alternative Link to zipped version of the source file

«1

Comments

  • Wow, that's great thanks so much. Must be the deepest script so far :)
    You've just opened up Ripplemaker to a lot of people with your patches and now this.

  • The user and all related content has been deleted.
  • Click the link to open it. Then copy the text from it and paste it in a new file and save it. Or paste it directly into StreamByter.

  • Great job on this script. I am thoroughly blown away. :)

  • Amazing ! Thanks so much

  • <3 :) Ever since I started iOS in 2015 I’ve been dreaming of the day that I could do this with it!!! Now that I can, I’m not actually sure what I want to do with it... Maybe I’ll string together some of my real life monosynths for some funky Frankenstein poly. Or try with two Model 15s for 8 voices if it doesn’t crackle too much. I think I should be able to open it in MIDIFire, I never got StreamByter AU. Thank you so much @_ki !!!

  • _ki_ki
    edited September 2018

    @tja said:
    I hate iOS, I cannot download this.

    You are right - with Safari or Chrome the text content is shown, but you can only select words and not ‚select all‘ and ‚copy‘ :/

    I tried again with a souce-copy on my google drive, but the shown download page behaves the same in Safari and Chrome...

    Enlarging the ‚word selection‘ to the full text is a PITA because the souce is soo long. I also posted the souce as text on the Audeonic StreamByter Forum, but one also has to use word-selection.

    If one uses ‚Share‘ on the text, you only copy the link, not the text itself...
    .

    In the end i managed download the text with the Documents app, open it in Documents and do a select all/copy in the Documents text editor.

    It could have been so simple if Safari allowed „select all/copy“ on a pure text webpage.

  • With a few tweaks this could possibly be an MPE converter for synths that don’t support it. It would need to distribute CCs according to note value and convert poly aftertouch to channel pressure while doing so.

  • edited September 2018

    @_ki Looking for I0f = 3 in the StreamByter source to configure it. Cant see where that line is in the code?

    Can you save this as a AB 3 preset so it saves?

  • @TheOriginalPaulB said:
    With a few tweaks this could possibly be an MPE converter for synths that don’t support it. It would need to distribute CCs according to note value and convert poly aftertouch to channel pressure while doing so.

    You can easily do this in a host like AUM already. It’s pretty simple to setup really. StreamByter could possibly make it a much smoother operation though and not need to use the desktop editor for the Seaboard consequently breaking it for apps like Volt until you reset to default...

  • I don’t think AUM converts poly aftertouch to channel aftertouch and sends it out on the midi channel that the note it affects is on.

  • This is pretty rad! Poly-Ripplemaker is a monster :o

  • _ki_ki
    edited September 2018

    @TheOriginalPaulB said:
    With a few tweaks this could possibly be an MPE converter for synths that don’t support it. It would need to distribute CCs according to note value and convert poly aftertouch to channel pressure while doing so.

    Poly-aftertouch is converted to channel aftertouch by the current script.

    .

    I already used Geoshred to play the virtual Poly-Ripplemaker. Worked quite well except the per note pitchbend.

    If i enhance the script with MPE, i could distribute the incomming per-channel pitch-bend and modwheel etc to the different synth channels. For the „note hiding/unhiding“ feature one has to store all the MPE information so that one can restore the sound when unhiding a hidden note. complicated because i already use so many variables... maybe i need to change the whole memory layout - so this not a „simple tweak“ to the existing script.

    .

    I am currently on holiday (away from the PC environment where i developed/tested the algorythms with an own simulator environment) so i can not start development - but this is a really interesting idea that i will fiddle around with :)

  • @TheOriginalPaulB said:
    I don’t think AUM converts poly aftertouch to channel aftertouch and sends it out on the midi channel that the note it affects is on.

    Right I was thinking more of MPE pitchbend as that is the single most important aspect for me. I had the Seaboard Block working in AUM with Zeeon and Zeeon doesn’t support polyaftertouch only channel pressure. I didn’t need to configure anything extra for that. That makes me think the Seaboard is sending channel pressure all along. I suppose the problem with MPE controllers is some do it differently.

  • edited September 2018

    Lol , I recently made with PureData , a non GUI (still working for setting complex parameters) patch in MobMuPlat, exactly doing this :)
    Still I have to route the appropriate midi CC. (Edit opened other thread ) This is where seaboard users may help:

    What’s the list of the CCs the seaboard sends per Note and are there global CCs?

    @_ki My main problem was routing Note-Off events to the appropriate channel. Example
    First finger note C1 on ,channel 1
    Second finger note D1 on, channel 2

    Releasing first finger should send C1 off ,on channel 1 . If you need help I can share the algorithm (used 2 arrays) ;)

  • @Jumpercollins said:
    @_ki Looking for I0f = 3 in the StreamByter source to configure it. Cant see where that line is in the code?

    The I0F variable assignment is right at the top of the source-code:

    # =============================
    # User Setup of polyphony distribution:   .   # Number of output midi channels/mono synth instances

    ASS I0F = 4

    # BEWARE - this number is specified in hex, so use 0A for 10 dec, 0B for 11,
    # 0C for 12, 0D for 13, 0E for 14, 0F for 15. And 10 for 16 dec is the
    # maximum of supported midi channels. The minimum is 2.

    .
    Just change the 4 into a 3 and press INSTALL. You can then save this to a ‚PolyTo3Mono“ preset using the AUM preset manager at left of the window bar.

    I tend to setup more instances than the max number of keys i press simultaneously to avoid note-stealing/hiding and propper playing of the synths release sound.

    .

    Can you save this as a AB 3 preset so it saves?

    Very good idea, i will build/upload an AB3 session showcasing the setting - and spares you the trouble of configuration.

  • edited September 2018

    Thinking of buying StreamByter to try this out. What happens if you set 3 channels as output and you hold down more than 3 notes, do the notes get assigned to used channels and the already used notes remain on? I want to connect to say 3 synths that have 3 paraphonic voices each.

  • _ki_ki
    edited September 2018

    @zeroeseight

    The script is for up to 16 monophonic synths in the output channels.

    .

    Okay, here an example:

    Configure three channels. An now think of five notes named A,B,C,D,E,F for the sake of simplicity.

    • Pressing and holding A, then B, then C will use all three channels.
    • Now pressing D will steal/hide the ‚oldest’ note, in our case A and play D on this channel - but the script will remember that A is still hold and also its original velocity.

    • If one releases D there is one free channel that is used to play the younges ‚hidden‘ note - so A is played again on that channel with its old velocity. We are back to A B C.

    • Still holding A B C, additionally press and hold E and F. This will steal A again and also B, the second oldest note, thee channels will play C E F, A and B are hidden.

    • Releasing B (which is currently hidden) will remove it from the hidden set.

    • Release C and the youngestbonly hidden note A will return, playing A E F.

  • Here is an AB3 preset hosting AUM including four Ripplemakers plus Streambyter plus Rosetta XY for CC/Pitchbend manipulation:

    Four Ripplemaker Poly-Synth AB3 Preset

    Open the AUM keyboard and Rosetta XY and play along :)

  • Thanks for the reply, so it sounds like if 3 channels are set, only 3 notes can ever be played simultaneously?

    So if I play notes A, B and C on channels on 1,2 and 3.

    Holding down those notes whilst playing D, it will now be playing D, B and C on channels 1,2 and 3 and not (A, D), B and C on 1, 2 and 3?

  • edited September 2018
    The user and all related content has been deleted.
  • Correct, in a 3 channel config only max 3 notes are playing/send to the synth

  • Or open the URL in the browser of Readdle Documents, you can both "select all" and/or save the page.

    This script will be loved by owners of modulars and monophonic hardware synths.
    Thanks @_ki

  • The user and all related content has been deleted.
  • @Korakios If you have a look at my script, you will see that i store a lot more stuff - in addition to the channel id the note is send to also the note-on velocity, the note-press history of held notes and a channel usage history to optimize the channel assignment and re-enabling of previously „stolen notes“.

  • @_ki said:

    @Jumpercollins said:
    @_ki Looking for I0f = 3 in the StreamByter source to configure it. Cant see where that line is in the code?

    The I0F variable assignment is right at the top of the source-code:

    # =============================
    # User Setup of polyphony distribution:   .   # Number of output midi channels/mono synth instances

    ASS I0F = 4

    # BEWARE - this number is specified in hex, so use 0A for 10 dec, 0B for 11,
    # 0C for 12, 0D for 13, 0E for 14, 0F for 15. And 10 for 16 dec is the
    # maximum of supported midi channels. The minimum is 2.

    .
    Just change the 4 into a 3 and press INSTALL. You can then save this to a ‚PolyTo3Mono“ preset using the AUM preset manager at left of the window bar.

    I tend to setup more instances than the max number of keys i press simultaneously to avoid note-stealing/hiding and propper playing of the synths release sound.

    .

    Can you save this as a AB 3 preset so it saves?

    Very good idea, i will build/upload an AB3 session showcasing the setting - and spares you the trouble of configuration.

    Thanks for that and the AB3 preset, was trying to do one myself but was missing the piece in the script, good stuff cheers.

  • @_ki said:
    @Korakios If you have a look at my script, you will see that i store a lot more stuff - in addition to the channel id the note is send to also the note-on velocity, the note-press history of held notes and a channel usage history to optimize the channel assignment and re-enabling of previously „stolen notes“.

    Thanks! I missed that it’s on txt human readable form .
    Great work btw :)

  • The user and all related content has been deleted.
  • @tja said:
    Many thanks, this was I could get it!

    Let us know how it's goes in practice. I think a lot of StreamByter techniques will be disclosed by studing this script. Learning a "computer language" is usual taught with code examples and StreamByter doesn't have enough examples to study, IMHO. So, this is a huge contribution to the Forum for that alone.

    One good script can help set 10 more coders free to make new tools. Its a lot easier to learn to code StreamByter than it is to learn Swift or Objective-C.

Sign In or Register to comment.