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: ARP with RI (Random Intelligence) - Melody evolver

edited September 2018 in App Tips and Tricks

Hi anyone.

A few weeks ago I saw a video where someone named Lanthan O'Ide used an Arduino board to trigger a blofeld (Waldorf Hardware Synth).

He described his Arduino logic as follows:

At first, a sequence is generated at random, with the following rules:
1. The sequence is 8 steps long.
2. Every step is set at random either to an A3, D4, E4, G4 or A4.
3. A step must not be set to the same note as the previous or next step.

Then the sequence is played two times.
Afterwards one of the 8 steps may be chosen at random and its note be changed.
Again, rule 2 and 3 have to be followed.
Then the sequence is again played two times, is changed again, and so on.

As I was searching for informations about a Waldorf blofeld - yes, I want one - i was fascinated by that idea.

A few days ago I was reminded of StreamByter and what it should be capable of and I thought this was a perfect test to give it a spin.
So i was heading into the App-Store and bought a copy - as I did not want an Arduino board beside my iPad :smile:

After running into some trouble with loops inside StreamByter (Thanks Nic for letting me access the beta - where this is solved!) I put this script together.

I mainly resembled the same logic:

#arp with random intelligence - loop 004

# user definable presets are G0, G1, G10
# G0 = amount of repetitions per generated notebatch
# G1 = amount of notes in the generated notearray (size of G40+)
# G9 has to be the size of the amount of notes in G10 (missing a real array function here)
# G10 contains the hex values that are the source of the note generation. these get randomly selected.
#
# written 201809 Frank Price, MrBlaschke
# Needs StreamByter latest beta-version - there is a loop error in the streambyter core-component in the actaual app-store version
# date: 11.09.2018

IF LOAD

  ASS G0 = 2 # amount of repetitions
  ASS G1 = 8 # amount of notes to be generated per batch

  # Quellarray
  ASS G9 = 5 # size of g10
  ASS G10 = 39, 3E, 40, 43, 45 # sourcenotes

  # --------------------------------------------
  #
  # DO NOT CHANGE VALUES FROM HERE - ONLY ABOVE
  # AB HIER KEINE WERTE MEHR VERÄNDERN
  #
  # --------------------------------------------

  # Zielarray
  ASS G40 = 00 00 00 00 00 00 00 00

  # correct counter values - because we begin at 0 (zero)
  MAT G1 = G1 - 1
  MAT G9 = G9 - 1

  ASS L0 = 0
  ASS L1 = 0
  ASS L2 = 1
  ASS L3 = 0
  ASS L8 = 0
  ASS L9 = 0

  ASS L4 = 0
  ASS L5 = 0
  ASS L6 = 0
  ASS L7 = 0

  ASS L90 = 0
  ASS L95 = 0
  ASS L96 = 0
  ASS L97 = 0

  ASS L98 = 0
  ASS L99 = 0

END

# force note on + velocity 0 to note off
9X XX 00 = 8X

IF L2 == 1
  ASS L2 = 0

  ASS L6 = 40
  ASS L5 = 0

  IF L5 <= G1 +L
    ASS L3 = RG9
    IF L3 != L7
      ASS L7 = L3
      MAT L3 = L3 + 10
      ASS GL6 = GL3

      MAT L6 = L6 + 1
      MAT L5 = L5 + 1
    END
  END
END

# Note ON
IF MT == 90
  IF L0 <= G0
    IF L1 <= G1
      MAT L99 = 40 + L1
      ASS M1 = GL99
      ASS L97 = GL99
      MAT L1 = L1 + 1
      IF L1 > G1
        ASS L1 = 0
        MAT L0 = L0 + 1
      END
    END

    IF L0 == G0
      ASS L0 = 0
      ASS L2 = 2
    END
  END
END
# Note ON - ENDE

IF L2 == 2
  ASS L8 = RG1
  ASS I01 = L8
  ASS L99 = 0

  IF L8 == 0
    IF L99 == 0
      MAT L8 = 40 + G1
      MAT L9 = 40 + 1
      ASS L99 = 1
    END
  END

  IF L8 == G1
    IF L99 == 0
      MAT L8 = 40 + G1
      MAT L8 = L8 - 1
      ASS L9 = 40
      ASS L99 = 1
    END
  END

  IF L99 == 0
    MAT L8 = I01 - 1
    MAT L8 = L8 + 40
    MAT L9 = I01 + 1
    MAT L9 = L9 + 40
    ASS L99 = 1
  END

  # l97 ist aktuelle note
  # l95 register for storing previous note in target container
  # l96 register for storing following note in target container
  ASS L95 = GL8
  ASS L96 = GL9
  ASS L99 = 0

  MAT L8 = 40 + I01
  IF L99 != 1 +L
    ASS L3 = RG9
    MAT L3 = L3 + 10
    ASS L97 = GL3

    IF L97 != L95
      IF L97 != L96
        IF L97 != GL8
          ASS GL8 = L97
          ASS L99 = 1
        END
      END
    END
  END
  ASS L2 = 0
END

There could be a few more checks for minimal number of notes given and stuff but software is never final :smile:

One additional check i will implement is this:
In the first randomly generated batch of notes it is possible that the first and last note of the target array are identical.
I will enhance that when I have a little more time.

All in all - if you feed logical numbers you'll get logical results and no crashes.

You just have to feed some permanent note stream into StreamByter and get an evolving melody of randomly selected and generated notes within your selected note-range.

I did a setup like this -
StreamByter is fed with the ever identical notes from StepPolyArp Unit and sends the generated notes to SynthMaster ONE:

and the melody-generation started.

To have a demonstration I made a small, non-fancy, song and hosted it on SoundCloud:

The "Bell-type" sound is initially randomly generated and evolves over time.
So every time I start AUM playing that song it is different and evolves differently :smile:

My own quote from SoundCloud:

Easy song, no fancy stuff. Just for testing my evolving random generator inside StreamByter (iOS).
Drums are hammered by ElasticDrums with 3 patterns in randomized order.
Voice is a youtube-sample from an interview with german politician Helmut Schmidt.
Bell-like sound is generated feeding only 1 repetitive note.
Evolves with a given pattern based on random selection of notes.

I hope you like it and get some use for it.
I am very happy with my first StreamByter project.

Thanks Nic for the loop-problem support, again :smile:

Danke für's Zuhören,
Frank

Comments

  • Don’t understand where the intelligence bit is ?

  • Interesting. I’m looking forward for the correction in StreamByter to fully run this script. It is however already generating some sequences...

  • Hi @cuscolima
    Yes, it runs. After an unpredictable amount of loops there is just some kind of internal overflow - then it locks up. Until then sometimes just one note is generated instead of all. Well this works fine in the beta. Just be a little more patient :)

  • @MrBlaschke Nice script, i am also waiting for the SB update.

    Changing all „G“ variables into „K“ (or „J“) variables allows to run several instances with different settings. The „G“ variables are globally shared between all instances of the AU.

  • edited September 2018

    Hey @_ki - Thank you :smile:
    I intentionally used some global variables as i wanted to try out reading and acting on these on a different instance of StreamByter. Still to be done - but generally you are right. In this state there is no need for global variables. But i am mainly developing for myself and that is why i used them globally. Thanks for taking the time to look into it :smile: Have fun using it.

    And the idea of letting several of these run separately might give some nice self generative music - have to try that :smile:

  • @BiancaNeve said:
    Don’t understand where the intelligence bit is ?

    In the design and implementation of the script/idea, no doubt. ;)
    I think it is in the fact that it checks for repeats and avoids them, instead of full-on randomness.

Sign In or Register to comment.