What's the easiest way to do *simple* sample glide/legato?

  • There's a built in script called Legato with Retrigger, does that allow for gliding of sample pitches when the user is holding down notes?

  • No. I've written a script and posted it in the snippets section that does this and more, there are some things I would like to add to it to do with timing but it works pretty well. The script is GPL so can only be incorporated in GPL libraries.


  • Not sure "No" is the answer I was hoping for. I think this should be built into HISE. A simple glide ability for monophonic synths/samples is a feature you will find on just about every audio plugin, software, and hardware synth /sampler ever created. A built in script would be fine for this.

  • Or someone could explain the functions and HISE modules I should be looking at.

  • It's actually pretty easy to write this using scripting (and I was asked to do this several times) so maybe I just do it 🙂

  • If you can't wait, Synth.addPitchFade is your friend here...

  • I can wait for now. I'll check out Synth.addPitchFade needed.

    Maybe I can provide my arpeggiator script for free in return for help received. The arpeggiator script will be highly portable, customizable, and easy to integrate, I made it so you only have to put in one or two lines of code per callback to have it running. Then you just build an interface around the arp "set" functions.

  • Yeah, sounds great. a nice arpeggiator always comes in handy.

    Here is a simple monophonic glide:

    HiseSnippet 1545.3oc6Xs0aaTDEd13rp0tjRKMBUdaHBjrEIo1IgKsQUYat3Rn4hacTJUHTYxtyFOp6NiY2YSqaUeDI9Kz2feIzG3Ed.IP8O.7Hpuvu.f4r22DmT6BMsfvxwYmu4bl46bly4Lyrs7DlTeegGR6Ta0qKEo8Z5s6wkcVpCgwQqtLR6z5qS7kTObDzh85R78oVHMsRWE.zJOJJ7yuuvhDGB2jlAgPaKXlz0XtLYFZKiqwbbZRrnawbyI8bFqZJ3KIbDAJ9TRuNpKw7NjcoaP.wFQGsGidWejVc8YmYZu6zXm6eko22m41dQE1tEwQlAddTtbak5HMcs+T8QSeEKlT30VRjT0XpunvpW6Nh6xgotAZalOaGGZTi1JNEwnlBGKv3gmWkqbK1DSZpZ0Qnk5vbrZk3V8QpQtUlStTjSdb80YVrT7Lm8YB6.moQd2s1HEo7nGNkq2WJ2nOzCkiciFwNEIDVANDYQlAq1wcvDECD.OA2mI6kOZ3kJcOqdKlzrS+46H8gupEpWz7MdweL8UrsolxLxNpdyO84ck9vBN6SfnVqCjseB8koNjdgrH447DIDAxRWiZmKC9LFocbC1tcx0yIMZRoV6nxayogwry9jERvyqPXGqItaK0D1zi9koiyW+DiOlc.TzxFqytWht+58+9E1h51UnJXYVHvqTQuWoAy60mEuaHBjL9tqSjdv7puQfaaUwISpZsiyoNPcCsQPfpgsqCsARzlxspmTpItyFPas3NajzY9.jyFsnbJ8aR1iFVFNbgY7v11BOW7UobpGDoeD0g+oAsN7WLv0g2zTpXvVdDteWgOsQ9Qde8MS99VlJC3oh+MO5Q+v2EAUPJv5ZprtF4CiR.mIOXKBOmP25wp145+V4hNTe9kCDHLf03KVnKm7Oi7qWFE5eNS+iKcdV81ldrtxrd.t8VpBpbQ2NBNyDeUGlEEGIVARFCMxSKoOVEO5tXAGeYb84GqRTSG0oFV0JFJAXCgjFCUQEi4Kw6Q7hlCHFT00RBn1rbZhk003hcpNQZmSLItt5as4qbgKf+rOo8lajo3mWIQOeJXMcodRFUU8P3BBVbTdvXUv3IbY7ItDtQ8IiZQtWXqjlBKpp8DQZDBoNCT21r6CvMhQBrsYfZSfc8mXrJOLlZWXebyNfaBQRJODX+axqVqxCpTlYWM1G81JORswpTVQrxkcDlDGrE0QRTtiTm1T30UqPpCCM8tzPDUsncndUqMOnTY3mvJFfiKbqOHuNdBlLiLf1aSbBnUqMIdpvYIzmVP+sENAtzAY.TNrHcg+RHnZIXIAwymFkqWMbVhDKmHPVV0ot3EqMOV4zfQBeGU4HeLShuTsCwdx4CVYO0x8pV.M5O4pejF1PMRQCSkxOT8O02bQxGwhRZBP+lp4q7vJ6Otv1NMvHhwvfF31xiB4bWi1yuZM7kKDqjkioHWwgDRH7DNN.cfQsXufM12NhUqJOzRlTkepbBIxg1eE0JCVkIynjybBJ3qxYxM6RiO2bRpwAPrsSf.kxLp7BFZL4AhEKCpO6sGWv.JLFKtRTYXYwSGWVrMDM3gXVvdxogFnPWR59LOdKiiuyPWZvNS5yn5+IR3XalaWG5J78nNpRlwGbdYpMIvQlh9LI4UjR045xPF23FTGJwO2QJdGi0XbJwSY6zmS6qwfaeG0Zv40inKNb+l+abelR++8YNYDWdC8VBmdQGcoIyQc+7PBctbv3X7C+.zHDbqi.J2L0e93+3GMtdlDiZTLP97FWOf3jy+i+1ey3etX6QFvfj2TOk3unhr+6ccSc80ZtYHUec3IbpMbjbD+UO8mW3.KIHzTFvN4qx2+cIfaJEMeYl3ZzcUySdj9b0Q0UybEBYG0U9JdinwMVJvWJbSFcj16pOyb66UOs2lpereO3wKtTXazweHv4B8qodPvC+JdksHFWHv8U9ZwP8h+8r2AbWy68J.cONdaJGGygKwzSbaynCMBImmLDQY27vWTcY80g13FImTD7Mtpq6eaSSXywoTdm9qwLCsFyNzZL2Pqw6OzZ7ACsFe3PqwGcDZ.uakqDnJXGEuiP+kZRsJQ

  • Ah, I forgot to make them artificial, that's why the console is complaining:

    reg on = 0;
    reg lastId = 0;
    reg lastNote = 0;
    const var GlideTime = Content.addKnob("GlideTime", 0, 0);
    // [JSON GlideTime]
    Content.setPropertiesFromJSON("GlideTime", {
      "min": 10,
      "max": 100,
      "mode": "Time",
      "stepSize": 1,
      "suffix": " ms"
    // [/JSON GlideTime]
    function onNoteOn()
            // This is necessary because the volume fade kills the note
            // (= adds a artificial note off after the fade)
    	if(lastId != 0)
    		local delta = lastNote - Message.getNoteNumber();
    		Synth.addPitchFade(lastId, GlideTime.getValue(), -delta, 0);
    		Synth.addVolumeFade(lastId, GlideTime.getValue(), -100);
    		Message.setGain(-99); // -100 kills it :)
    		Synth.addPitchFade(Message.getEventId(), GlideTime.getValue(), 0, 0);
    		Synth.addVolumeFade(Message.getEventId(), GlideTime.getValue(), 0);
    	lastNote = Message.getNoteNumber();
    	lastId = Message.getEventId();
    function onNoteOff()
    	if(Synth.getNumPressedKeys() == 0)
    		lastId = 0;
    function onController()
    function onTimer()
    function onControl(number, value)

  • Need this soo bad. Without it, you can't do any solo instruments, lead synths, solo strings, or any synth soloing stuff at all....I literally have four products with graphics all done in Hise, but can't release without a decent Legato/Portamento/Glide script. @d-healey Seems like he did an amazing job, especially with the added formant functions, which makes it sound so realistic. Unfortunately, all of my apps are paid so the GPL license messes that up.

    I would be willing to pay for this definitely!

  • This post is deleted!

  • Can't you use this script as starting point? For synths you don't need the advanced script from David (I think its purpose is to make sampled instrument glides more realistic).

  • @Christoph-Hart said in What's the easiest way to do *simple* sample glide/legato?:

    What would be a way to make this script work as is but with Legato + Retrigger? Kind of like merging this script with the hardcoded one in HISE. I've managed to dig out the Legato Hardcoded script from the HISE master files, but don't really know which bits I'd need to try and put together from each script!

Log in to reply