Forum
    • Categories
    • Register
    • Login

    Time Stretching

    Scheduled Pinned Locked Moved Feature Requests
    36 Posts 6 Posters 8.2k 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 @David Healey
      last edited by

      @d-healey Third party node should be able to do it, IIRC it has a single .h file that has the entire library inside it for easy importing, I couldn't get it working but I really only tried for about 5 minutes before my goldfish brain kicked in

      David HealeyD 1 Reply Last reply Reply Quote 0
      • David HealeyD
        David Healey @A Former User
        last edited by

        @iamlamprey said in Time Stretching:

        @d-healey Third party node should be able to do it, IIRC it has a single .h file that has the entire library inside it for easy importing, I couldn't get it working but I really only tried for about 5 minutes before my goldfish brain kicked in

        Oh interesting, I might have to give it a go.

        Free HISE Bootcamp Full Course for beginners.
        YouTube Channel - Public HISE tutorials
        My Patreon - HISE tutorials

        1 Reply Last reply Reply Quote 0
        • David HealeyD
          David Healey
          last edited by

          Baby steps. Any idea about this?

          d695b988-fe61-4edf-9814-37e96eed7dcf-image.png

          Free HISE Bootcamp Full Course for beginners.
          YouTube Channel - Public HISE tutorials
          My Patreon - HISE tutorials

          1 Reply Last reply Reply Quote 0
          • David HealeyD
            David Healey
            last edited by

            Ah I think I'm getting a bit further, I forgot about the node template generator!

            Free HISE Bootcamp Full Course for beginners.
            YouTube Channel - Public HISE tutorials
            My Patreon - HISE tutorials

            1 Reply Last reply Reply Quote 0
            • David HealeyD
              David Healey
              last edited by

              I think for now this is beyond my C++ level. I'll come back to it again at some point unless someone else implements it first (pleeeeaaaassseeee!!!) :D

              Free HISE Bootcamp Full Course for beginners.
              YouTube Channel - Public HISE tutorials
              My Patreon - HISE tutorials

              A 1 Reply Last reply Reply Quote 1
              • A
                andioak @David Healey
                last edited by andioak

                @d-healey said in Time Stretching:

                I think for now this is beyond my C++ level. I'll come back to it again at some point unless someone else implements it first (pleeeeaaaassseeee!!!) :D

                Thanks for giving this a go, David! This is indeed an attractive feature for hise! Can't wait for this to work. My C++ is much worse than yours, but perhaps not this guys:

                The Audio Programmer - "Implementing a TimeStretching Library (RubberBand)":

                https://youtu.be/XhmM8HZj7aU?t=1721

                (It's a live stream, so watch in 1.5x speed :) , not sure it gives you more insight than you got cause it's for JUCE. Perhaps the Hise part is more difficult)

                David HealeyD 1 Reply Last reply Reply Quote 1
                • David HealeyD
                  David Healey @andioak
                  last edited by

                  @andioak Ah thanks, I'll check it out!

                  Free HISE Bootcamp Full Course for beginners.
                  YouTube Channel - Public HISE tutorials
                  My Patreon - HISE tutorials

                  Christoph HartC 1 Reply Last reply Reply Quote 1
                  • Christoph HartC
                    Christoph Hart @David Healey
                    last edited by

                    @d-healey I know somebody is working on it and has already implemented a node with rubberband so yes itโ€˜s definitely possible and not too difficult to pull off.

                    1 Reply Last reply Reply Quote 4
                    • David HealeyD
                      David Healey
                      last edited by David Healey

                      I think I'm making some progress with this, thanks to the video @andioak posted.

                      However inside HISE, after I've successfully compiled my node, I'm not able to see it in the scriptnode workspace or in the Hardcoded Master FX. It tells me it can't find the dll. Any ideas?

                      8ea21f83-cff0-4de7-b7a4-c0a5ce36c689-image.png

                      Edit: If I remove this std::unique_ptr<RubberBandStretcher> rb; from my node it will show up in HISE. I don't know why though, or what to use instead.

                      Free HISE Bootcamp Full Course for beginners.
                      YouTube Channel - Public HISE tutorials
                      My Patreon - HISE tutorials

                      1 Reply Last reply Reply Quote 1
                      • David HealeyD
                        David Healey
                        last edited by

                        @Christoph-Hart What data is in data and how do I access it?

                        template <typename T> void processFrame(T& data)
                        {
                        }
                        

                        Free HISE Bootcamp Full Course for beginners.
                        YouTube Channel - Public HISE tutorials
                        My Patreon - HISE tutorials

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

                          @d-healey

                          //processFrame is the audiobuffer 1 sample at a time:
                          
                          template <typename T> void processFrame(T& data)
                          		{
                          			for (auto& sample: data)
                          			{
                          				sample *= .5; // Volume @ 50% 
                          				// do other stuff
                          			}								
                          		}
                          
                          
                          //you can also do it this way (the method directly above processFrame):
                          
                          		template <typename T> void process(T& data)
                          		{
                          			static constexpr int NumChannels = getFixChannelAmount();
                          			// Cast the dynamic channel data to a fixed channel amount
                          			auto& fixData = data.template as<ProcessData<NumChannels>>();
                          			int numSamples = data.getNumSamples();	//data also has some of its own methods you can call, like getNumSamples()
                          
                          			for (auto ch : data)
                          			{
                          				dyn<float> channel = data.toChannelData(ch);
                          
                          				for (auto& sample : channel) //For each sample, same as processFrame
                          				{
                          					sample *= .5; // 50% volume					
                          				}
                          			}
                          
                          			//now we don't really need this stuff, since we did it manually:
                          
                          			/*
                          
                          			// Create a FrameProcessor object 
                          			auto fd = fixData.toFrameData();			
                          
                          			while (fd.next())
                          			{
                          				// Forward to frame processing
                          				processFrame(fd.toSpan());
                          			}
                          			*/
                          		}
                          
                          David HealeyD 1 Reply Last reply Reply Quote 2
                          • David HealeyD
                            David Healey @A Former User
                            last edited by

                            @iamlamprey Thanks! How did you figure it out? Any idea why my node won't show up in HISE?

                            Free HISE Bootcamp Full Course for beginners.
                            YouTube Channel - Public HISE tutorials
                            My Patreon - HISE tutorials

                            ? 2 Replies Last reply Reply Quote 0
                            • C
                              clevername27 @Christoph Hart
                              last edited by

                              @Christoph-Hart If you're really interested, I could arrange something with zPlane.

                              David HealeyD 1 Reply Last reply Reply Quote 4
                              • David HealeyD
                                David Healey @clevername27
                                last edited by

                                @clevername27 Elastique would be a good addition! We'd still need Rubberband as a baseline because the other algorithms don't have compatible licenses.

                                Free HISE Bootcamp Full Course for beginners.
                                YouTube Channel - Public HISE tutorials
                                My Patreon - HISE tutorials

                                C 1 Reply Last reply Reply Quote 1
                                • C
                                  clevername27 @David Healey
                                  last edited by

                                  @d-healey Hit me up if you want to discuss further. That goes for any other commercial music software company, as well. It appears I'll be using HISE here, so I'm now invested. ๐ŸŒˆ

                                  David HealeyD 1 Reply Last reply Reply Quote 2
                                  • David HealeyD
                                    David Healey @clevername27
                                    last edited by

                                    @clevername27 said in Time Stretching:

                                    I'll be using HISE here

                                    Good choice!

                                    Free HISE Bootcamp Full Course for beginners.
                                    YouTube Channel - Public HISE tutorials
                                    My Patreon - HISE tutorials

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

                                      @d-healey said in Time Stretching:

                                      @iamlamprey How did you figure it out?

                                      Christoph told me lol

                                      David HealeyD 1 Reply Last reply Reply Quote 0
                                      • ?
                                        A Former User @David Healey
                                        last edited by

                                        @d-healey said in Time Stretching:

                                        @iamlamprey Any idea why my node won't show up in HISE?

                                        If it compiles okay, and doesn't show up in HISE it means there's an error in the code somewhere that the compiler didn't pick up, or you haven't linked the library(s) properly

                                        1 Reply Last reply Reply Quote 0
                                        • David HealeyD
                                          David Healey @A Former User
                                          last edited by

                                          @iamlamprey Now I don't feel so bad :p I'm trying to copy what the audio programmer does in the video but he's working directly with JUCE audio buffers. Do we have any access to them within the process function?

                                          Free HISE Bootcamp Full Course for beginners.
                                          YouTube Channel - Public HISE tutorials
                                          My Patreon - HISE tutorials

                                          ? 1 Reply Last reply Reply Quote 1
                                          • ?
                                            A Former User @David Healey
                                            last edited by

                                            @d-healey check out this thread:

                                            https://forum.hise.audio/topic/6585/block-based-processing-in-third-party-node/

                                            David HealeyD 1 Reply Last reply Reply Quote 1
                                            • First post
                                              Last post

                                            32

                                            Online

                                            2.1k

                                            Users

                                            13.0k

                                            Topics

                                            113.0k

                                            Posts