HISE Logo Forum
    • Categories
    • Register
    • Login
    1. HISE
    2. Simon
    3. Best
    • Profile
    • Following 0
    • Followers 2
    • Topics 32
    • Posts 211
    • Groups 0

    Posts

    Recent Best Controversial
    • My HISE choir

      I finally released Poeesia, this choir instrument I've been working on for years.

      It sings a poem in Estonian, has a bunch of fun Estonian vowels like Ü Ä and Õ, and polyphonic legato, all of which combined made it totally impossible to build in Kontakt. Thanks to Christoph for making this possible, and thanks to all you fine forum folk for the help!

      ivyaudio.com

      I removed all the swear words from the repo but there there's still lots of spaghetti, so don't look too closely please: https://codeberg.org/IvyAudio

      Your browser does not support the audio element.
      alt text

      If anyone wants a copy just send me a DM :)

      posted in General Questions
      SimonS
      Simon
    • RE: My HISE choir

      I finally finished the walkthrough if anyone's curious to see how the thing plays.

      posted in General Questions
      SimonS
      Simon
    • RE: Changing filmstrip via script

      @ustk Awesome, that looks like it'll work great, though I'm getting slight flashbacks to similar control-layering jankyness in Kontakt.

      For anyone reading this later, the solution is to script a panel to have mouse interaction slider behavior, or to use an invisible slider for mouse interaction and the panel only for drawing.

      You can change which image is loaded using ScriptPanel.loadImage, and update the drawing of the panel with Graphics.drawImage.

      David's tutorial covers a lot of relevant stuff here

      posted in General Questions
      SimonS
      Simon
    • RE: Expanded AudioPlayHead functionality

      @d-healey OnBeatChanged gives you the position in beats, Engine.getPlayHead().ppqPosition I think is the most accurate and probably the one you want (and works regardless of transport state)

      posted in Feature Requests
      SimonS
      Simon
    • RE: IPP Missing in Plugin Export

      I don't know what the situation is with IPP now in HISE, but the old dropbox link expired so here's an internetarchive link just in case: https://archive.org/details/intel-ipp

      posted in General Questions
      SimonS
      Simon
    • RE: Phaselocking 2025 and other sampler related discussions

      @Christoph-Hart Oh boy my favorite subject :)

      First off, automatically aligning the legatos to sustains is one of those coveted features that's impossible to do in Kontakt, at least without squashing your samples to a consistent pitch (and rendering them unlistenable in the process, which you then remedy by re-applying a pitch curve). What you are working on is beautiful and super exciting.

      RE: a few of your points.

      Sine waves

      This alignment will be most noticeable on solo instruments that are already closer to sine waves than to the chaos of an ensemble. I imagine testing with sine wavs is a totally suitable stand in, and aligning based on rising/falling zero crossings should already give very good results.

      Legato Parameters

      I would like to have access to:

      • Attack and release time, and curve, for source sustain, legato sample, target sustain.
      • Volume for each legato sample (I don't see any reason this would be removed but just in case. Maybe it's possible to include this in a "legato adjustment" ui?)

      Most of the time you will want the crossfades to be the same length on both sides, ie. sourceSustain > legato will have an xfade of ~180ms, and this value will be adjusted for both. This is what I eventually settled on for Poeesia. However, sometimes having the source sustain play a little longer can help preserve ambience, eg. sourceSustain.Release = 220ms, legato.Attack = 180ms.

      There might also be situations where you want release samples to have yet another setting, so targetSustain.release would change depending on whether you're playing to a new legato sample, or to a release sample.

      Whether it's worth exposing all the parameters separately depends on how annoying it is for you to implement.

      sourceSustain > legato, crossfadeTime
      sourceSustain > legato, crossfadeShape
      legato > targetSustain, crossfadeTime
      legato > targetSustain, crossfadeShape
      

      is probably sufficient, and in fact probably the nicest dev experience.

      Legato length

      What I loved about building Poeesia in HISE was I wasn't forced to choose a "best fit" setting for the legato sample length like you're forced to in Kontakt.

      I just got the length of the legato sample from the samplemap, and delayed playback of the target sustain by that amount. I was then free to set unique start end end points (and volume) for every legato sample in the library. This is the main reason the instrument sounds better than it ever could in Kontakt.

      Sustain offsest

      Legato sounds much more natural if you jump very far into the target sustain. I know this is tricky in HISE with the maximum offset being relatively small, I forget the name of the remedy you and David came up with.

      Phase locking sustains

      I do not pitch/phase lock my samples because it's never really been an option, and is only really beneficial on solo instruments with multiple dynamics. As usual, doing it in Kontakt is a pain, though I know some devs have done it.

      However, I assume using loris to flatten the pitch, and re-applying the extracted pitch curve from one dynamic layer to all dynamic layers using the sample editor envelope in HISE, would be an extremely pleasant workflow.

      Even on raw, non-phase-locked samples, aligning the phase of sustains to legatos is very noticeable, just like it is for loops.

      Polylegato

      You probably know this already, but just to recap. Two different conditions should trigger a legato sample:

      • key released, and another one pressed soon after (jump legato)
      • key pressed, and another one released soon after (overlap legato)

      Either one of these on their own is also technically polylegato, but it is much less playable for the enduser, to the point where I wouldn't include it in a library.

      The only parameter that needs to be exposed is the "legato window", which also represents the added latency. I experimented with different times for jump/overlap legato, but settled on adjusting them together and exposing that setting in the UI of the instrument.

      posted in General Questions
      SimonS
      Simon
    • RE: HISE seems to have butchered all of my loop points.

      @Elezeid HISE projects, including sample maps, are trackable in git. It's well worth using and has saved me repeating work several times.

      posted in Bug Reports
      SimonS
      Simon
    • Simple Panel Persistence Example

      Making a value persistent can still be very tricky to figure out in HISE as compared to Kontakt.

      For integers or booleans, you can use a knob or button, which have saveInPreset enabled by default, and use the setValue() and getValue() methods to store and retrieve the value.

      In some cases though you inevitably need to store text or an object.

      The trick is to create a panel, set storeInPreset to true, then store your object to the panel using setValue(), not panel.data. Only the former is persistent.

      Here is a stripped down snippet with a simple example:

      HiseSnippet 1233.3ocsVs0aiTCE1SaGXSfshUhmQVyKjVhZSBYaK6BhcaZKa.ZaDoag2V43wSGSmXOx1oYip5+Y9G.GamIYRZJKphcdHJ9b86bwmi6ojTlVKUnfpWLImgB97v9SDlzNoDt.08HTvlgmRzFlB6Ic3jbhVyhQAAq+SVBAU1.499qe7PRFQPYyIgPWJ4T1uxGxMyo16U+BOK6DRL6B9vRR29UcoRQGYlbDfm0CafxIzqIWwNiXEasPzaH5TTv1gwMa2L4.JYuCZ1tEk15f8a8c6SYjjD1dMe99sOHocBg1nEJ3SNNlajp9FhgoQAabnLdR+T4Xg2AWx07AYL6gln9fm8jOQlEaCQKUTmTdVbuhDkFAVo27z159z1WFdJOlOi97z2W3XfmqQ4DXvZKBu0W.dMKCuFkf2JfTPIHsgGROKrOUwyMy4XwymE1U.USH8vV.JdYQqsYXXGIHgvryPx0rSTvgYZTqUiF0wMazXqWVEjRKyX6PyXDUMf.T6zFbNQvxv+.tvHj33dVR0hbbhpiAKzXl3CFYLRwhxeniVsHOun5MpumUgpNCrilYpEoI2v5J5oXvon5F0HFHfW9UIPBISCRf2c2KRYE9jRxxF.MXXcpbTVLVJxlfS3JFdbJCXmwoWyhqVUwtBmyTZt1BvKIJ.sQQVi86fnDgAaR4Z7MDEm.EKrQhGvJoQ0R.yFkJYVmottlmy4hozgffKx3BFNYjfZ3.JWRhZT4vbo.LacviYPbea0JPXwduABHgPZrNWC8TrXKRbxTGqkXt4q03wJRdNvgKvDAVN3OYTS0J.v5UJ.AMpcqAr3KhdCKKSBwGCxJtef.UKGxvwDCI5N.u2U8dPdElaJTgbFXQH0LSXK3O2l3Akr9wCXrLwcvWwwuF.w34DlW4f.btd9z+NUqLqOorueYAcZJQbEKtlqcnCYjloe.Sa6Erw2L6sb0ywnbwa2cOjQslDWt+ykzrvDxjJa0XlSrdPCMd3LIIFz9LoA5eRI9PZIw1lj.WC2FDuqfCk+wobZJdHiHzKjAvWwLfQugoFq3FnFf4I3IxQfymTjw3FaKf2R2q9sXXsxNtkuO3X.o3hgB4Jt.tEZY5X8BbD9a..Xmgrfta4agl4aovlCNWTaqpfa.V3kYkjrRdSQaFSsR11MMp+MEqIFMb.SUDiEBBSSWbDc3COht7FDpebVIA8I6yyYhGZuBZ5LP637onBD03Fl+zhg41ZChCir+zPWcB4vKJ3qB+49me1sQ16sQP59Lo6Np6VazcHza6dDbrvzfW.OCUBC2FTAGwtA1S62aTI7Hl9ZiLGV41on1CA9GBHuGjIvtGeRweJeIvRyQ79lbyolzO22YymD5m6sjQ+9UXT+SJt21OXuqLdTFwr3xX6SVlx.J+KrAztkSn4lIkeRy+aan+uBwmE1ianoqFiqsBLBkzOFXb56ZdZ3wvipnl4.bivS9iONOhA8axQFt3pSIFE2V3Oazv9vaAoLv6BnEyd8KXMaOj+bih5eelH1c3uguoLaVzwYY1rfIZHgpjui5udYe4zSbT.LIbuxrB7bW3LtYwEq444gvC4dGktnotmhsdrJ9sOVEa+XU74OVE26wp39OVEO3Cqn8c1udjQNzesAgNs2wtYdAAGKrKFccqn+gNTucw
      

      ALSO: if the data you're trying to store contains any undefined values, it will appear to work correctly, but will restore to a value of 0.0.

      This should eventually be added to the documentation. Just need to find a place to put it.

      posted in Snippet Waiting Room
      SimonS
      Simon
    • RE: Snippet: Horizontal panel-based slider with hover fade in and out

      I started the slider as LaF but moved to a panel when I couldn't figure out an elegant way to do the animation, interesting that that's the one part not achievable with LaF.

      Coming from Kontakt, the ability to have smooth transitions and (gasp) actual hover states for all controls is a huge win. The average user probably can't articulate the difference, but I think in testing a UI with smoothed hover states would get more positive feedback. When trying to sell something new to a group of people who have been used to Kontakt for potentially decades, I'm convinced this kind of UI polish can help make a HISE library stand out as better in every way than what people have been used to.

      I believe I used a separate label so the text wouldn't be part of the hover target.

      posted in Snippet Waiting Room
      SimonS
      Simon
    • Snippet: Horizontal panel-based slider with hover fade in and out

      In context:
      0104f3f0-7c4e-4b88-8b0a-9e9e55755bac-slider.gif

      Easy to customize!
      13170984-ff47-41b5-a7ae-728b22825d26-image.png

      HiseSnippet 1890.3ocsXs0aaajEdnSTPk1Tfs.6S8oI5gcohYzMaqj.2z1DeYqQiSDhRylEKJJFSNRbfImgfbjsUKxh9ea+2rOs+C5dNyPJRJK4jZrqfgk3bt8clykYNbbpxmmkoRINsd6hDNw49MlrPpCOHjIjjSNj37YMFmxy3ZxKVjvxx3ADGm67WQpNMuKw74+7MufEwj97xkHj2oD97WJhE5xUG+seuHJ5XV.+sh3Jbu62dhuRdfJRMGPxcZzmjv7OmMi+JFx1VMHeGKKj37vF82aDm+3clFDv1YmfQiF8zm7zce5.1z96xNavnmt6vce7vm73oDm6cTfPqRmnYZdFnzWnBVLITcozZf2IxDmEwwGFPl.V1tL4fPQTv3hskLBw4tiK2jticS5O03TQfX45kaV+QCAZoDU2zb15lfzfeGPxoBjtqEReQiI9ohDcIEDO+gFmH07zoLH1TEJVdIa8uueiCT.GRc2X147iSgGVJg6t866QGrW+N62pkPFIjb5z4ResPIoAb+HVJeRjHfm5Jg3j2UdK7NWpNah3m4c9kVMiT9rHZlgC5ynEFhEDLlI4Q4BQeDsPHuEfkZZEna.Sy5VPADu3mqvAhp2FJ7OWBdMv1f8o85AAD4LN0fX8Rhg7T9RggLZ21gbwrPc6knl9P5P51T2Ma.fgNcPS774ZULSK.WLZAEzFMAcJpUk0MCWxf3JlY7RNKU11SmNmWwUMLkwtfehzVqsdN.Kot7.3+mAEGYs8ZePD.qLO52ot.1g+yzCSYylIjyZWWxSUyy3Exk6auVZVsNiigzX8aTy0fK6VDocm0g9KVdLzgm2+C0kCKlSulALqtZ.MDg5ykhXHT0Gnkx0ySk4II625CWOQqtoWlVsZbGByYqIfseA+XH9Mr.w75LWIqpjuimGEsj2JBtMc85FW8uIBzgEpdFWad1sCjc6NDxZpqVSFjUB0TPDNk4qmmqI5kveLolpUzfT1ksZVEauGrQceeaJTIFm39nUfNjGW.l2whlyAv7PpaIVA5qHgI4tiWeukL0olO92y2NJEYeDbyvb.ay6kVzs8YyrK0tCpjd8fjyKoQ7oZipZ0TL0Z+2S+5U2cZ0DzI55uDSDqSzytK3YATsuVtkzw.qd8dCVJZ2SgrH32PkJ.PoDpVzPKBCbphjsWM7+UOqL3tFXgRrL7lCdu0jBrpKTG686tmEw1cZdTjHIi+B0bY.l.9OrNbMOzqZZID1V84erbK2TwQmBm6VORY+Jq6kBc3oyizhjHAO34QIgrJQQglGa4bX6BWqdgrI7NqKZfirH2slGTDLLfAS0yoto7lRKVj477f.JC1rz5HNVTT1QGd.O1hJftu7TedBVDAAYnwrenwXgpTwOCG7jmA2JOBtVjtRVDrONn6PnTcyckx6h5xu.NXC6MgoRlG55i8l4A3h4w0KvhPHdlyPLJ4gvg+um1iV59WhIMVOuoY0rhxWaUtQKd8612aP29UXy2bjWfKtBf2JHA72YaFFW8+dqSw.do8sIfO3Yql7.GqTHd4h.vpH090XfAYa3IjpYo487gCIKQplkZOIxcvHSC1Aihyn+S5n9SSxJ3JkmfmjbRbLOP.WCKZQ9N1MDisJsH7dM.C24Xsth4Ttsgi45N.OoacBaX4qAE.alnFJ7DURtMQ49.Bulaz382rweDZ7c16lL9Wgr7IX7aXyaM6bUSVhERuX1UkmbC02IPv6TlNrKPrfMfkx6CXIxtxEYFUg0N858Rt9ujUb4SJSFPgpHSkN1Xe1CZAyQjoowKlTbsy5WTssMn11au9l+.8VvqsajTmphVdWlBZuVlSAuJbUApbNm2xNpgPOLSFHdPwJrWo81RAf7YtzHv2Ccw2n.CqXBnossUcwJo7.6IIF8XtQ30iKWycb8UwIJITv4YaLzoEDm.hYpHd2jT7RWseaHu3V7WpROO6Az1v4dGIgqZxw1F+PhFRXbw1AeX+k1RIekRyesz0nRH5QWkzzoqkVNzhvTv0PNO4byB5JmGeFOspCgLBSJUe7q68oM9kucrkJLpjmHE5Wmvye9XUT.NVE96qOrFIetGbrsbDBrpMCs84ECsgiNPDA3z11cZhA73Dx6X97u9FxObxgPsagZ.MBVAN0SKPmw4P9Ev711YAa13Pd14Pgrg27.LLL3G0nWQbZ37H.yKveLD9gcbFPk2694y0uxvLHiNvxUGeoXs5CrPb9xFaZhERQUDZoeC9fVpLyGWk7qjUVcHZGB429Ux0GGFFDWELOhoqOcN9dKxI.4L0FIFG6UlIzKp9dM9cLxd+abj8OUH9EMFKf6trdLt0ZvHjO7+CLl+hN97FGMcJ2WWBv61332eaeqFeDyam7bFz6OUfYhuZd7DHL6yww4gb0LLduEVQYetuM9SHS3x.yCXlSNwAEIgHwAEDIwL+T0O4aqCwWkxmYVAvjz7plZ13T7Y5fxBvh84XHk+m78qqpqI3vaqf6baEb2aqf6caEbzsUvGeaE7IebAwNREuTFnrgPNc7QlFlNNGYZYYxVI+WP3nMW1
      
      posted in Snippet Waiting Room added
      SimonS
      Simon
    • RE: Help getting plugin to load in FL Studio

      @graysan Have you tested loading the .vst in another DAW?

      posted in General Questions
      SimonS
      Simon
    • Drag and Drop MIDI on Linux?

      Dropping samples into a sampler works fine, but dropping MIDI into the HISE controller or a MIDI Player doesn't work.

      As a workaround I can right click the MIDI processor to open a file picker, select the file, then drag the file from the MIDI processor to the HISE controller.

      posted in General Questions
      SimonS
      Simon
    • RE: double notes get stuck

      @Morphoice The solution I used was to keep track of all note on events, then if you ever receive two note ons in a row on the same note you know you've received some illegal MIDI.

      It's pretty easy if on noteOn you check and store the event ID to an array (or MIDIlist I suppose) like

      onNoteOn {
      	if (events[Message.getNoteNumber()]){
      		Console.print(You've just received some illegal MIDI!);
      	} else {
      		events[Message.getNoteNumber()] = Message.getEventId();
      	}
      }
      
      onRelease {
      	events[Message.getNoteNumber()] = undefined;
      }
      
      

      How you handle the lawbreakers is up to you, but at a minimum it's best to stop everything on that note, as this situation breaks the assumption that every note on will have a corresponding note off.

      In my case I'm using artificial events, so stopping them all is easy. I don't actually know how you'd go about stopping the normal events.

      Give Synth.allNotesOff() a try, I know that doesn't affect notes with a timestamp in the future but I assume it works on stuck regular events.

      It would be nice if we got this built in similar to setfixnoteonafternoteoff

      posted in General Questions
      SimonS
      Simon
    • RE: Github Actions CLI builds?

      I'll add to the documentation eventually, but this might help anybody trying to set this up.

      HISE and Juce will segfault without an X11 server running, so just calling them from the command line over ssh will probably look like things are broken. You should run {HISE_BINARY} --help to check if things are working.

      This is my build.sh script, which I put in a Packaging folder in the HISE project directory:

      #!/bin/bash
      parent_path=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P ) #Makes it so you can call the script from anywhere
      cd "$parent_path"
      {HISE Binary} export ../XmlPresetBackups/ProjectName.xml -t:'instrument' -p:'VST' -a:'x64'
      cd "../Binaries"
      source ./batchCompileLinux.sh
      scp -r "$parent_path/../Binaries/Builds/LinuxMakefile/build/ProjectName.vst3/" simon@{laptop_ip}:/home/simon/.vst3/ #Copies the vst to my laptop
      
      posted in General Questions
      SimonS
      Simon
    • Is there a setting to open the custom workspace by default?

      Question can't be empty.

      posted in General Questions
      SimonS
      Simon
    • RE: Software for Animation Sprites....

      @Chazrox I use image magic in the terminal. With imagemagic installed, I just

      cd /path/to/folder/with/frames
      convert -append *.png spriteSheet.png
      
      posted in General Questions
      SimonS
      Simon
    • RE: Webkit2gtk-4.0 not found

      @Robert-Puza Any time you are compiling something on Linux and you get a "package not found" error or something of that sort, the first thing to do is check if your distro has a slightly different name for the package and install it. Some distros include "lib" at the start of library packages, some don't, sometimes there's a - in one distro but not in another. This is why instructions don't always include one line you can copy paste to install dependencies: each distro needs a slightly different list.

      As you're on Mint, you use apt. I would type "apt search webkit2gtk" and see what comes up. I believe Mint does have the package, but the correct name is actually "libwebkit2gtk-4.0-dev", which is why it didn't get installed when you copied the line from the readme.

      Either way, using David's fork is a good idea.

      posted in General Questions
      SimonS
      Simon
    • RE: Using external Text Editor

      I would really just prefer a way to use an external editor. After several weeks of intense scripting work using only the HISE editor, the low contrast color scheme, lack of syntax highlighting, lack of keyboard shortcuts, slower response time, and many other quirks make me far prefer the (sadly proprietary) Sublime text.

      I don't doubt that it will eventually be on par, but for the sake of getting work done I really need to be in Sublime at the moment. If the fastest way to reload the script is to load the xml I'll just keep doing that.

      posted in General Questions
      SimonS
      Simon
    • RE: Hise copy vs compiled

      @Robert-Puza You don't have to re-compile, you can just copy the "HISE Standalone" executable. You only need the source when exporting a plugin or compiling HISE itself.

      posted in General Questions
      SimonS
      Simon
    • RE: .ncw to .wav?

      @Robert-Puza I don't know of any third party software that works with ncw. You'll need to load the library in Kontakt, and go file > save as and uncheck "Compress Samples". The good news is Kontakt works well with WINE.

      posted in General Questions
      SimonS
      Simon