HISE Logo Forum
    • Categories
    • Register
    • Login

    Haha the easter bunny has delivered.

    Scheduled Pinned Locked Moved General Questions
    loris
    99 Posts 10 Posters 7.4k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • ?
      A Former User
      last edited by

      I've written a temporary method for the Save button, for those of you just as impatient as me :) :

      const var SuffixLabel = Content.getComponent("SuffixLabel");
      
      inline function onSaveButtonControl(component, value)
      {
      	if (value)
      	{
      		//Grab suffix
      
      		local suffix = SuffixLabel.get("text");
      		local fileName = LorisProcessor.CURRENT_FILE.toString(1);
      		local audioFilesDirectory = FileSystem.getFolder(FileSystem.AudioFiles);
      
      		//Write buffer to audio
      
      		local bufferToWrite = LorisProcessor.ooo;
      
      		local fileToExport = audioFilesDirectory.getChildFile(fileName + "_" + suffix + ".wav");
      
      		local isMultiChannel = isDefined(bufferToWrite[0].length);
      
      		if (!isMultiChannel)
      			fileToExport.writeAudioFile([bufferToWrite], Engine.getSampleRate(), 16);
      		else
      			fileToExport.writeAudioFile(bufferToWrite, Engine.getSampleRate(), 16);
      	}
      };
      
      Content.getComponent("SaveButton").setControlCallback(onSaveButtonControl);
      
      
      
      Christoph HartC 1 Reply Last reply Reply Quote 3
      • Christoph HartC
        Christoph Hart @A Former User
        last edited by

        @iamlamprey yeah, go open source! Now do a realtime synthesizer next.

        ? 1 Reply Last reply Reply Quote 0
        • d.healeyD
          d.healey
          last edited by

          @iamlamprey Thanks for that!

          @Christoph-Hart This is amazing. I've just been playing with the pitch lock and my dynamic layers crossfade perfectly without any noticeable chorusing. I didn't even make much of an attempt to line them up, I just auto-trimmed the starts and dropped in some loop points.

          Libre Wave - Freedom respecting instruments and effects
          My Patreon - HISE tutorials
          YouTube Channel - Public HISE tutorials

          1 Reply Last reply Reply Quote 0
          • ?
            A Former User @Christoph Hart
            last edited by

            @Christoph-Hart said in Haha the easter bunny has delivered.:

            Now do a realtime synthesizer next.

            Any suggestions on optimizing the number of partials? I don't think I can do 2000 lol

            b97359a4-b12f-4c03-9025-70ccd8efecc2-image.png

            LindonL 1 Reply Last reply Reply Quote 0
            • LindonL
              Lindon @A Former User
              last edited by

              @iamlamprey

              @hisefilo is our additive synthesis expert I think - last time I looked at his published stuff he was using only about 8 partials to get something viable, so you could "optimise" down to this, build an additive synthesis engine to utilise these, and then keep adding partials until you are happy.

              Of course "build an additive synthesis engine" is a 5-word description of a HUGE job...

              HISE Development for hire.
              www.channelrobot.com

              hisefiloH 1 Reply Last reply Reply Quote 0
              • hisefiloH
                hisefilo @Lindon
                last edited by hisefilo

                @Lindon @iamlamprey LOL, not that expert but spend a lot of time dealing with partials. I think 128 harmonic partials + residual noise can create almost any sound in a credible way. (lower registries from C2 and below will need up to 256 partials but you can optimize that for each octave)

                I haven't checked the Loris integration yet. But I guess many of the 1930 partial you have is noise turned into partials. Have you checked how many partials you see on Spear for this sound??

                1 Reply Last reply Reply Quote 0
                • ?
                  A Former User
                  last edited by

                  I actually have some semi-working additive nodes I made in SNEX a while back, they just didn't have working envelopes. IIRC they utilized about 40 (?) sines and waveshaping to add overtones without a noticeable CPU hit

                  The 1930 partials seem to be the Loris algo being overly sensitive, a lot of the extracted partials are extremely close in frequency to each other:

                  6d935e42-0ff6-4613-8b42-d1ac71672b6d-image.png

                  These are sorted by loudness, you can see there's multiple 552.x partials, there's probably some parameter for filtering these but I'm dumb :)

                  d.healeyD 1 Reply Last reply Reply Quote 0
                  • d.healeyD
                    d.healey @A Former User
                    last edited by d.healey

                    @iamlamprey

                    The 1930 partials seem to be the Loris algo being overly sensitive,

                    I assume that's why the resynthesis sounds so good. But for an additive synth it's probably overkill.

                    This is probably what you need: http://www.cerlsoundgroup.org/Loris/docs/utils.html

                    collate : collate the Partials to reduce their number without assuming any harmonic structure (cannot distill later!).

                    Libre Wave - Freedom respecting instruments and effects
                    My Patreon - HISE tutorials
                    YouTube Channel - Public HISE tutorials

                    ? 1 Reply Last reply Reply Quote 0
                    • ?
                      A Former User @d.healey
                      last edited by A Former User

                      @d-healey Yeh I noticed that command, not sure how to use it in the HISE implementation, I tried

                      lorisManager.process(CURRENT_FILE, "collate", ???);
                      

                      No idea what to use for the third parameter, or if the collate string is even viable there lol

                      I currently have a hacky solution by just rounding the values before pushing them to the array, then using pushIfNotAlreadyThere to remove the duplicates, it works for now

                      Christoph HartC 1 Reply Last reply Reply Quote 0
                      • Christoph HartC
                        Christoph Hart @A Former User
                        last edited by

                        @iamlamprey I'm currently extending the Loris API to include the more advanced functions like collate, distill and sift (love the names), they do address the problem of having too many partials, but as David said, if you reduce them to a common denominator the sound gets a bit more static.

                        d.healeyD ? 2 Replies Last reply Reply Quote 1
                        • d.healeyD
                          d.healey @Christoph Hart
                          last edited by d.healey

                          @Christoph-Hart

                          I'm currently extending the Loris API to include the more advanced functions like collate, distill and sift

                          Which commands are currently available for the process function? I had a look through the source but didn't see a list.

                          I see I can play back a buffer using Engine.playBuffer() but is there a way I can stop playback? What I want to do is allow the user to load a sample and hit a button which will resynthesise it at different pitches which are mapped to the keyboard and then they can play it back like a regular instrument.

                          Also, can I load a buffer into a loop player or must it be saved as a real file first?

                          Libre Wave - Freedom respecting instruments and effects
                          My Patreon - HISE tutorials
                          YouTube Channel - Public HISE tutorials

                          ? 1 Reply Last reply Reply Quote 0
                          • ?
                            A Former User @d.healey
                            last edited by

                            @d-healey said in Haha the easter bunny has delivered.:

                            Which commands are currently available for the process function? I had a look through the source but didn't see a list.

                            I don't think there is one, you can make your own functions with processCustom but I'm "patiently" waiting for Christoph to implement the official partial filtering methods cause my hacky ones keep crashing HISE lol

                            I see I can play back a buffer using Engine.playBuffer() but is there a way I can stop playback?

                            The mouseUp event in the top panel has a "stop" button by playing an empty buffer (fix by @ustk above):

                            Engine.playBuffer([], "", 0.0);
                            
                            d.healeyD 2 Replies Last reply Reply Quote 0
                            • d.healeyD
                              d.healey @A Former User
                              last edited by

                              @iamlamprey

                              I don't think there is one,

                              Well we have dilate, I only know because it's used in the toolkit, but I haven't seen it in the code specifically.

                              The mouseUp event in the top panel has a "stop" button by playing an empty buffer

                              Ah that's clever.

                              Libre Wave - Freedom respecting instruments and effects
                              My Patreon - HISE tutorials
                              YouTube Channel - Public HISE tutorials

                              ? 1 Reply Last reply Reply Quote 0
                              • ?
                                A Former User @d.healey
                                last edited by

                                @d-healey said in Haha the easter bunny has delivered.:

                                Well we have dilate, I only know because it's used in the toolkit, but I haven't seen it in the code specifically.

                                Hopefully the easter bunny visits twice this year 🤠

                                1 Reply Last reply Reply Quote 1
                                • d.healeyD
                                  d.healey @A Former User
                                  last edited by

                                  @iamlamprey said in Haha the easter bunny has delivered.:

                                  The mouseUp event in the top panel has a "stop" button by playing an empty buffer (fix by @ustk above):

                                  Engine.playBuffer([], "", 0.0);
                                  

                                  Hmm this isn't working for me, the file just plays until the end.

                                  Libre Wave - Freedom respecting instruments and effects
                                  My Patreon - HISE tutorials
                                  YouTube Channel - Public HISE tutorials

                                  ? 1 Reply Last reply Reply Quote 0
                                  • ?
                                    A Former User @d.healey
                                    last edited by

                                    @d-healey

                                    I'm not actually sure how that code works, since the docs only ask for 2 params, you could try different combinations of the [], "" and 0.0 lol

                                    Engine.playBuffer(var bufferData, var callback)
                                    

                                    If that doesn't work there's a few bits in the source referencing stopping the buffer, specifically

                                    void MainController::stopBufferToPlay()
                                    

                                    which is called when destructing a buffer object, but there isn't a wrapper for it, and I'm not sure how safe it would be using that intentionally

                                    d.healeyD 1 Reply Last reply Reply Quote 0
                                    • d.healeyD
                                      d.healey @A Former User
                                      last edited by

                                      @iamlamprey said in Haha the easter bunny has delivered.:

                                      @d-healey

                                      I'm not actually sure how that code works, since the docs only ask for 2 params, you could try different combinations of the [], "" and 0.0 lol

                                      Engine.playBuffer(var bufferData, var callback)
                                      

                                      Does it work for you?

                                      Docs show 3 parameters for me

                                      d03bced0-f574-47d9-9e8f-212f2d8fc024-image.png

                                      Libre Wave - Freedom respecting instruments and effects
                                      My Patreon - HISE tutorials
                                      YouTube Channel - Public HISE tutorials

                                      ? 1 Reply Last reply Reply Quote 0
                                      • ?
                                        A Former User @d.healey
                                        last edited by

                                        @d-healey said in Haha the easter bunny has delivered.:

                                        Does it work for you?

                                        ustk's code above works for me in the context of the Loris Toolkit's preview waveform panel, it was crashing on mouse up, now it fades out the audio/stops playback on mouseup.

                                        Docs show 3 parameters for me

                                        Ah I always refer to https://docs.hise.audio/scripting/scripting-api/engine/index.html#playbuffer , the HISE api has 3

                                        I'm not sure why the buffer isn't stopping for you, I think this might be turning into a @Christoph-Hart problem..

                                        d.healeyD 1 Reply Last reply Reply Quote 0
                                        • d.healeyD
                                          d.healey @A Former User
                                          last edited by

                                          @iamlamprey Probably a Linux thing. I'll see if I can spot anything in the debugger.

                                          Libre Wave - Freedom respecting instruments and effects
                                          My Patreon - HISE tutorials
                                          YouTube Channel - Public HISE tutorials

                                          1 Reply Last reply Reply Quote 0
                                          • ?
                                            A Former User @Christoph Hart
                                            last edited by

                                            @Christoph-Hart said in Haha the easter bunny has delivered.:

                                            @iamlamprey I'm currently extending the Loris API to include the more advanced functions like collate, distill and sift (love the names), they do address the problem of having too many partials, but as David said, if you reduce them to a common denominator the sound gets a bit more static.

                                            Would these extra functions be hard for me to implement? I know you're busy with the MIR stuff atm

                                            hisefiloH 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            57

                                            Online

                                            1.7k

                                            Users

                                            11.7k

                                            Topics

                                            101.9k

                                            Posts