Video Tutorials

  • Neat! I don't have actual internet right now and no flatrate on my mobile phone so a youtube video is a bit too much for my precious traffic, but I'll watch it as soon as the ISP fixed the problem - it's been like this since monday...

  • haven't watched these yet, but wanted to say thank you for this effort, i am holding out to watch them all in on go a 100 times when you get to UIs and compiling plugins and so on.
    very much appreciated 🙂

  • A quick thank you present (I think you have requested this a few times, but I forgot to add it): I just implemented support for loading scripts from a global location:


    The wildcard GLOBAL_SCRIPT_FOLDER will be resolved to the scripts subfolder of the AppData directory, (which I changed from "Hart Instruments" to "HISE" in the last commits BTW). So on Windows, just put your global scripts here:


    and on OS X:

    ~/Library/Application Support/HISE/scripts/

    Compiled plugins will embed these scripts just as they if they were in the project folder.

  • Awesome, thanks!

  • Tutorial 3: Using Multiple Dynamic Layers - Velocity mapping, Round Robin, and CC Crossfading

  • Excellent! You really got a profound understanding of the HISE concept over the time 🙂

    I have only a few remarks:

    1:27: use Velocity Spread and Custom to map them automatically
    2:51: you can use the auto select feature (the mouse arrow icon on the sample editor) to select the currently played sample. I am using this feature to tune the samples (it actually feels like tuning a real instrument this way)

    Also, there is another solution to both having dynamic XF as well as Round Robins which doesn't involve using multiple samplers: You can use the velocity layers as dummy RR groups:

    /** Velocity 2 Round Robin script
    *   Cycle through velocity layers in case you can't use RR logic
    reg rrIndex = 0;
    reg rrVelocityValues = [10, 60, 100];
    function onNoteOn()
        rrIndex = (rrIndex + 1) % rrVelocityValues.length;
    function onNoteOff() {}
    function onController() {}
    function onTimer() {}
    function onControl(number, value) {}

    In most scenarios you are not using the velocity information for dynamic crossfades so this might work (Although if you need it for something else like modulation the sample start you'll have to hack around a bit by eg. putting the real velocity into an array modulator before changing it).

    Also I was thinking about optimizing the XFade performance by checking if the Fade value is zero each buffer and skipping rendering of the silent channel to save CPU cycles (it still has seek & stream the samples to stay in sync)

  • BTW, would you agree if I put up these videos on the main website (under something like Video Tutorials)? You'll get credited of course, but I think these videos will help people learn HISE much more easily.

  • Oh yeah that would be great 🙂

  • There you go:

    Thanks again for doing this!

  • Dave, let me add my thanks too. Well done.

  • BTW before you tackle multimic handling, I would like to improve the workflow of merging as the current one is a little bit too hacky (and fails pretty quickly if the file name scheme isn't perfect). If you have any suggestions, let me know - I think you used that feature more often than me by now 🙂

  • I've not yet found any problems with the multi-mic handling, except for the ones you already helped me solve, I think it's quite straightforward. The only related area where I've found limitations is with some of the effects not being multi-channel too.

  • Just a quick update. I've been busy for the past few months with decorating a house, building Kontakt libraries and doing other bits and bobs and haven't had chance to make any more videos. However I'm finishing off my first major HISE project and will be finished decorating next week so should have some free time. I have a lot of tutorial videos planned...

  • Awesome. Do you have an idea what topic you'll cover next?

  • Probably some scripting basics, like callbacks.

  • Great idea. If you do this, make sure that you recommend the new control callback way with passing inline functions in setCustomControlCallback because this is really a better programming style than the old big switch statement in the onControl callback (it will stick around but can be considered a bit deprecated).

  • I do like the on control callback because it keeps everything in one place but I can see the new system being useful for larger scripts. I shall include both in the video 🙂

  • A quick little video showing how editing the user preset xml files in a text editor can be a time saver.

Log in to reply