Assigning a knob to arp rate (easy) while eliminating dotted and triplet options. Possible?

Edit: see second post for question.

I would like to assign a knob to the arp rate so I can sweep through them. I know the trigger pads are set up especially for this purpose and thats currently how I have it set but I would like to change that. I also know about assigning the trigger pad to a note and I’ve done this also.

By itself assigning the rate to a knob is very simple in that I can just right click + assign, however to complicate matters I don’t want the dotted or triplet notes.

Therefore, in my head I have the following solutions (neither of which I can work out how to implement):

  1. assign rate to a knob and somehow apply a filter to include/exclude only the rates I want
  2. assign the trigger pads to a knob so I can sweep through them
  3. assign an arp to C-2 that plays constantly and then assign a knob to the low/high key parameter to sweep up/down 8 notes thereby triggering the trigger pad.

Are any of the above possible? And/or am I dramatically overcomplicating things and the solution is right in front of me?

Actually quite the opposite makes sense:

  • Make a separate thread for every question.
  • Invest some thought and effort into creating a subject line that makes your question and any potential answers easy to find via the internal forum search engine and external search engines (Google, Bing, DuckDuck Go, and others).

p.s. I’m assuming you don’t mean it that way, but having a single thread dedicated to a series of questions just for you is in danger of coming across as asking for personal free tutoring, rather than helping to create the maximum valuable resource for others in addition to your own learning.

At least speaking for myself: I have little motivation in providing free personalized tutoring for individuals, but am much more motivated to contribute to a more widely useful resource.

If you agree with my line of thinking, maybe start a new thread with a well thought out subject and copy and paste your question in that new post?

1 Like

Ok yes that’s a different way to look at it and wasn’t my intention. I was just conscious of giving the impression of spamming the forum.

I’ll edit the post above accordingly.

Thanks for the advice.

1 Like

Caveat: I haven’t tried this myself, so my thoughts may not be entirely correct or complete:

  • What you’re trying to do might be possible via scripting. But that might only be worthwhile, if you intend to conquer scripting in your journey anyway.

  • Or might it be possible to use key switches (instead of knobs) for selecting the specific values you want?

Alternatively, you cold leave all of the possible values available in your HALion instrument, but do the filtering in the DAW. For example in Cubase, you could potentially

  • make and use Expression Maps that simply don’t refer to the unwanted values of the controls
  • or use the Input Transformer for a midi track to filter out the undesirable value ranges.

As a personal preference, I would do this at DAW level, so I don’t remove any functionality from my HALion instrument that might not interest me today, but maybe sometime in the future - or may be of interest to potentially other users, if I ever decide to share or sell my HALion instrument.

Hi Nico,

Thanks for this.

Scripting: I don’t mind being thrown into the deep end but this still seems like a step too far for now. That said, it will remain on the list should I not find an alternative.

Key switches: You may have missed it but I did mention I currently have it set up this way and whilst it is working, isn’t how I want it long-term.

DAW functionality: If I was only ever going to be the final user I’d be more than happy with this, however I am thinking big with the intent to distribute to a few friends as a self contained “idiot-proof” instrument usable in whatever DAW they have. I’m essentially aiming for plug n play for most of the features.

Try this slightly modified flexphraser template:
Tempo (12.5 KB)

1 Like

Oh wow, you my friend are amazing! Thanks so much for this :raised_hands:

Just one issue, how do I load it? I’ve tried various methods: dragging into the project, importing VST3 preset from the program menu, loading it as a multi-program, and the best it does is as per the attached (ie, same Alternate 1 as before albeit with the Lua Script underneath, although that appears to be empty).

I should also mention I have copied the preset into the FlexPhaser folder:
C:\Users\user\Documents\Steinberg\HALion\Sub Presets\MIDI\Effect\FlexPhraser

It’s just a vstpreset. Drag it into slot rack. If you want to import it you can just drop it into HALion MediaBay window. It will copy the file to:

Documents\VST3 Presets\Steinberg Media Technologies\HALion 6\Program

Then it should appear as your user preset.

To see the script just press the e button.
Once you click the Edit Script button you should see this:

local flex = this.parent:getMidiModule("FlexPhraser")

local tempoScale = {
    {name = "1/128",    index = 0},
    {name = "1/64",     index = 3},
    {name = "1/32",     index = 6},
    {name = "1/16",     index = 9},
    {name = "1/8",      index = 12},
    {name = "1/4",      index = 15},
    {name = "1/2",      index = 18},
    {name = "3/4",      index = 21},
    {name = "4/4",      index = 22},

function getTempoScaleNames()
    tempoScaleNames = {}
    for i = 1, #tempoScale do
        tempoScaleNames[i] = tempoScale[i].name


function tempoScaleChanged(i)
    local parameter = "TempoScale"
    if i > 1 then
        parameter = "State"..(i - 1)..".TempoScale"
    flex:setParameter(parameter, tempoScale[_G["TempoScale"..i]].index)

for i = 1, 8 do
    defineParameter("TempoScale"..i, nil, 4, tempoScaleNames, function() tempoScaleChanged(i) end)

Sorry – I had read it, but misunderstood.

In that case, I’m curious, why would you want to remove the seemingly perfectly valid functionality of using dotted notes and triplets - which can be a vital requirement for a well grooving arpeggio/flex-phrase, depending on the musical feel of the project. Pretty much every better time sensitive plugin I’m aware of includes those kinds of timings. For example, look at some of the better delay plugins when you put them into host-sync mode.

I could understand it easier, if you removed functionality for yourself in the assumption that you would never want to use it even in the distant future. But the same assumption would seem increasingly flawed as the target audience becomes larger and larger (= thinking big and bigger :smiley: ).

p.s. I’m wondering that especially in light of the excellent script provided by @misohoza ?

Hi Misohoza,

I really feel as though I’m being quite thick so apologies if I’m asking stupid questions.

I do have it loaded and I can indeed see the script but as you will notice the FlexPhraser still looks unchanged, as opposed to your very minimal example. I notice yours says User so I switched to that also and no change from the default user view,

You are supposed to use the macro page.

There is no way to modify the flexphraser. The way it works is that the script creates a parameter with the options you want. This script parameter is connected to a knob on macro page. When you move the knob the script sets the flexphraser parameter.

It was never meant to change the flexphraser itself. This is just not possible.

1 Like

Hi Nico,

You make some great points so I think I should provide a little bit of background and explain what I’m ultimately trying to achieve.

The arp will not be used in the conventional sense, by which I mean triggering a pattern of notes for a melody. Instead it will be used to trigger sample start position messages (this part is already complete). To elaborate on that the user will enter a 1/1 note and HALion will generate a pattern of random noises from the loaded 8-bar sample, the timing of which will be set by the arp length (at most times set to 1/16). I should point out this is never going to sound musical but it isn’t meant to, instead it’s for random fills here and there.

To expand even further there will be 64 loops layered on each velocity from 0 to 63 with a random LFO assigned to velocity modulation depth. Therefore in addition to the random sample start the user can turn the modulation depth up to randomly increase the random options. Why only up to 63 you ask? 64 to 128 will be empty despite the range going all the way from 0 to 128. This will provide an element of probability, ie. if the knob is at 100% there will be a 50% chance of a note played, at 75% there will be a 66% chance of a note played, etc.

If you’re still with me :smiley: why no dotted and triplets? Essentially because in the style of music I make I, or any of my friends, have never used them to sequence such patterns and instead always use 1/16 or 1/8 with the occassional higher rate for a stutter effect.

1 Like


It was right there in front of me the whole time. Thanks so much misohoza :heart_eyes:
It’s absolutely perfect for what I was after!


Hi Mushy Mushy!
Thank you so much for humoring my curiosity! It sounds like you’re taking your HALion instrument into interesting off-the-beaten-path territory.

I’ve seen some of your kind of thinking applied in some other virtual instruments, maybe even some Kontakt libraries, but I think it’s great that you’re doing this in HALion!

A think in many ways HALion is a superior and more open platform compared to Kontakt - but just like Kontakt, it’s amazing feature richness and depth makes it non-trivial to conquer. – I’ve experimented just a little with making my own HALion instruments, but so far more in a traditional sampling way. I find your work on this inspiring and will follow your posts and questions here with great interest.

Thanks again!

Fantastic, thanks for your support Nico.

I’m certainly learning a lot by being thrown into the deep end and as far as I’m concerned there are no downsides. If the project never works as intended well then I’ve learned a lot about HALion in the process, and if it works well then the sky is the limit.

I’ll certainly post it up here once it’s complete.

1 Like