Need Legato So bad....



  • I so desperately need a Legato/Portamento script for Hise. Without it, you can't do any synth leads, flutes, solo strings, or any solo instrument at all with Hise.

    Thanks to the other user @d-healey that created, what looks to be, a great one. Unfortunately it's GPL licensed and I can't use it on my paid apps.

    Need one bad



  • Perhaps the Unisono Script from Kontakt can be converted to be used



  • Do you need it to be polyphonic?



  • @d-healey Polyphonic legato would be almost darn near impossible if not a CPU drain. As for Polyphonic, all I need would be Polyphonic Portamento, but gliding between notes Polyphonically would not be needed.



  • I've put together a little script that imitates the basic functionality of the unisono-portamento script in Kontakt but with much simpler controls. If you set the time knob to 0 you get the basic mono legato functionality and anything greater than 0 will give you the same as Kontakt's auto-portamento mode. It's only a simple script so I'm making it public domain 🙂 should be a good starting point if you need to expand it further.

    /**
     * Title: Synth Legato/Portamento v1.0.0.js
     * Author: David Healey
     * Date: 02/07/2017
     * Modified: 02/07/2017
     * License: Public Domain
    */
    
    Content.setHeight(50);
    
    reg lastNote = -1;
    reg eventId;
    reg tuning;
    
    //GUI
    const var bypass = Content.addButton("Bypass", 0, 10);
    const var time = Content.addKnob("Time", 150, 0);
    time.setRange(0, 2000, 0.01);
    
    function onNoteOn()
    {
    	if (bypass.getValue() == 0)
    	{
    		if (lastNote == -1)
    		{	
    			lastNote = Message.getNoteNumber();
    			eventId = Message.getEventId();
    		}
    		else 
    		{
    			Message.ignoreEvent(true);
    			Synth.addPitchFade(eventId, time.getValue(), Message.getNoteNumber()-lastNote, 0);	
    		}
    	}	
    }
    
    function onNoteOff()
    {
    	if (bypass.getValue() == 0)
    	{
    		Message.ignoreEvent(true);
    
    		if (!Synth.getNumPressedKeys() && eventId != -1)
    		{
    			lastNote = -1;
    			eventId = -1;
    			Engine.allNotesOff();
    		}
    	}
    }
    
    function onController()
    {
    	
    }
    
    function onTimer()
    {
    	
    }
    
    function onControl(number, value)
    {
    }
    


  • @Christoph-Hart We think that we have made some segway on how to get a good legato, but @Hasan-Tata needs some documentation and source code on how to manipulate and control the following:

    1. Group Settings
    2. Playback Position, Settings
    3. Sample Start
    4. Playback positions

    In order to really do a good legato, we need to glide one note into the other at the second note's playback position some time into the the sample and not retrigger the attack portion.

    Any code snippets would be appreciated.



  • That's a lot more complex than Kontakt's script which just used retuning. If Hasan takes a look at my more complex legato script in the snippets section it should have all the info he needs. To change the playback offset you need to use a sample offset modulator and add some start mod time to the samples.



  • That sounds good. Would you share your HISE snippet with me?



  • Here is an example of what the Legato should sound like. I've heard very few keyboard manufacturers or sample libraries make samples with such glide.



  • It's just in the snippets section of the forum under Synthetic Legato - easy to find 🙂

    The porta in that video just sounds like it's retuning like the script I posted above, it doesn't sound like it's using every sample in between but I could be wrong. The retuning/pitch bending method is the usual technique for synths I believe while the in-between sample method is more common for simulating glides on real instruments which was my intended purpose with that script.



  • Thanks, but I already saw and read it.
    It has only script code, and what I want is the whole HISE snippet.
    I am going to make my own script codes to customize legato and so I want to know how to manage sampler with group settings and sample start points on HISE.



  • @d-healey We are still new to Hise, so we don't quite understand completely how to apply everything to apply the scripts to Keygroups, Groups, Sampler, Offsets, SampleStarts...etc..



  • Ah I see, that's a fair bit more in depth and something I hope to cover in some future tutorial videos. But all the info is available on this site - that's how I did it. If you ask me specific questions I should be able to fill in the gaps for you 🙂

    Sample start points is handled in the wave editor just like in Kontakt and you use the setModulatorAttribute function (if I remember correctly) to adjust the value of a sample start modulator - I think I used a constant modulator but I can't remember at the moment.

    What group settings do you need to adjust?



  • We are struggling to find documentation on these specific things. We have the math and the algorithm part, but need to know how to apply the math to stuff like

    • SampleStart
    • Playback position
    • Groups
    • Playback
      etc....Stuff needed to apply the math to.


  • Something you might find helpful for educational purposes is the hardcoded scripts - https://github.com/christophhart/HISE/blob/master/hi_scripting/scripting/HardcodedScriptProcessor.h - these are all written in C++, I translated the release trigger one to javascript as a starting point for my own release trigger script. It was also an excellent way to learn HISE script. The built in API documentation has all the commands that you should need. What in particular do you want to know about Groups?


 

1
Online

353
Users

1.1k
Topics

7.5k
Posts