Forum
    • Categories
    • Register
    • Login

    Wavetable creation

    Scheduled Pinned Locked Moved General Questions
    59 Posts 4 Posters 1.0k 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.
    • dannytaurusD
      dannytaurus @DanSound
      last edited by dannytaurus

      @DanSound The next attempt actually worked!

      I load the concatenated file into the wavetable synth then change the LFO range according to which section of the wavetable you want to play. I set the LFO to 25%, so with the offset it goes from 0%-25%, 25%-50% 50%-75% and 75%-100%.

      Weirdly I had to use the Table Index Bipolar mod source with an LFO set to unipolar. But it works.

      Video here: https://share.cleanshot.com/SZHZH3Lp

      Updated project ZIP: https://wmd.d.pr/f/iVTorn

      So this is how we can use audio files as wavetables and allow instant switching between them - with no need to build wavetables beforehand

      Caveats: the plugin init will take longer because it’s doing calculations on the long concatenated file, and as you might notice in the video the waterfall flickers on a couple of the join points. Might just need to tweak the concatenated file.

      const ws = Synth.getChildSynth("Wavetable Synthesiser1");
      
      inline function loadWavetable(component, value) {
          local start = component.get("id").split("n")[1]; // 1-4
          start = (parseInt(start) - 1) * 0.25; // 0%, 25%, 50%, 75%
          ws.setAttribute(6, start);
      }
      
      for (b in Content.getAllComponents("Button")) b.setControlCallback(loadWavetable);
      
      

      Meat Beats: https://meatbeats.com
      Klippr Video: https://klippr.video

      1 Reply Last reply Reply Quote 0
      • dannytaurusD
        dannytaurus @DanSound
        last edited by dannytaurus

        @DanSound @Lindon I just found the recent saveAsHwt(). Makes creating HWT files trivial now. πŸŽ‰

        Just drop an audio file into a Wavetable Synthesiser, then run this code to save a precomputed HWT file.

        const wc = Synth.getWavetableController("Wavetable Synthesiser1");
        const dir = FileSystem.getFolder(FileSystem.AudioFiles);
        const out = dir.getChildFile("MyWavetable.hwt");
        wc.saveAsHwt(out);
        

        For simple wavetables, this seems like the way to go, rather than the whole wavetable creator popup thing.

        This totally removes any lag or pause from loading since the HWT is precomputed.

        Video here: https://share.cleanshot.com/tD1qGCsv

        Meat Beats: https://meatbeats.com
        Klippr Video: https://klippr.video

        D 1 Reply Last reply Reply Quote 2
        • dannytaurusD
          dannytaurus @Lindon
          last edited by dannytaurus

          @Lindon said in Wavetable creation:

          how does the wavetable player know we are using (say) 2048 samples as our cycle size and not (say) 1024 ???

          Short answer: it's clever.

          Longer answer: it guesses the cycle length based on the correlation of slices. It starts at 128 then goes up in powers of 2 to 2048. If it finds a very high correlation in the slices at any one of those slice lengths, it returns that as the cycle length.

          I suppose this only works on files that morph fairly slowly between waveforms. If your file has a cycle length of 2048 but each cycle is very different to the next, it won't find a suitable cycle length and will fall back to resynthesis.

          Also, if your file happens to have Loop Range metadata, it will use that first, before any guessing or resynthesis.

          Meat Beats: https://meatbeats.com
          Klippr Video: https://klippr.video

          LindonL 1 Reply Last reply Reply Quote 0
          • OrvillainO
            Orvillain
            last edited by

            @dannytaurus Do you know whether the mode used is resynthesis or resample?? Coz I tried the drag and drop thing, and the resulting wavetables did not sound great. Not as good as the ones I made in the resample mode inside Wavetable Creator.

            Musician - Instrument Designer - Sonic Architect - Creative Product Owner
            Crafting sound at every level. From strings to signal paths, samples to systems.

            dannytaurusD 1 Reply Last reply Reply Quote 0
            • dannytaurusD
              dannytaurus @Orvillain
              last edited by

              @Orvillain Looks like the full Wavetable Creator tries to find a cycle length from the root-note, but since the dropping an audio file into a wavetable synth doesn't have a root note it does it differently.

              Audio files uses [1] metadata Loop Range, then [2] guess cycle range from correlation, then finally [3] resynthesis.

              For simple 'traditional' wavetables, the audio file route is probably fine but for more complex ones the full Wavetable C reactor might be better, yeah.

              The only reason I went down this whole route of using audio files is because I opened the Wavetable Creator and thought 'Nope!' πŸ˜‚. So when I saw using audio files would work for my use case I wanted to learn how to do that.

              Meat Beats: https://meatbeats.com
              Klippr Video: https://klippr.video

              1 Reply Last reply Reply Quote 0
              • LindonL
                Lindon @dannytaurus
                last edited by

                @dannytaurus said in Wavetable creation:

                I suppose this only works on files that morph fairly slowly between waveforms. If your file has a cycle length of 2048 but each cycle is very different to the next, it won't find a suitable cycle length and will fall back to resynthesis.

                This is a bummer.....as I wanted to let the user drop in any wave file they liked, and including one that has no morphing between distinct 2048 long cycles.....

                damn, Ok I feel a feature request coming on - a param that tells the wavetable player what the length is of cycles in the current loaded wav file..... how hard can this be?

                HISE Development for hire.
                www.channelrobot.com

                dannytaurusD 1 Reply Last reply Reply Quote 0
                • dannytaurusD
                  dannytaurus @Lindon
                  last edited by

                  @Lindon How would you make sure the user's file has a cycle length of 2048?

                  Meat Beats: https://meatbeats.com
                  Klippr Video: https://klippr.video

                  LindonL 1 Reply Last reply Reply Quote 0
                  • LindonL
                    Lindon @dannytaurus
                    last edited by Lindon

                    @dannytaurus oh I wouldnt ... I would have a param that the user can select from :

                    512
                    1024
                    2048

                    • so if they build their own wavetable wav file they would know it needs to be one of these values...
                      and the UI would have a combo box allowing them to define the value they are using..

                    so the script call back would then include this new call:

                    WavetableController.setCycleLength(value)

                    HISE Development for hire.
                    www.channelrobot.com

                    LindonL dannytaurusD 2 Replies Last reply Reply Quote 0
                    • LindonL
                      Lindon @Lindon
                      last edited by

                      @Lindon whilst we are here....

                      what tool is everyone using to generate morphing wave files ?

                      so you have wav1 -> wav2 ->wav3 and you want to generate a bunch of morphs between these?

                      HISE Development for hire.
                      www.channelrobot.com

                      1 Reply Last reply Reply Quote 0
                      • dannytaurusD
                        dannytaurus @Lindon
                        last edited by dannytaurus

                        @Lindon said in Wavetable creation:

                        • so if they build their own wavetable wav file they would know it needs to be one of these values...

                        If they're building their own wavetables, just have them put Loop Range metadata in the file which sets the cycle length.

                        Then they won't need to choose it from a dropdown.

                        It makes their wavetables more portable too.

                        Meat Beats: https://meatbeats.com
                        Klippr Video: https://klippr.video

                        LindonL 1 Reply Last reply Reply Quote 0
                        • LindonL
                          Lindon @dannytaurus
                          last edited by

                          @dannytaurus said in Wavetable creation:

                          @Lindon said in Wavetable creation:

                          • so if they build their own wavetable wav file they would know it needs to be one of these values...

                          If they're building their own wavetables, just have them put Loop Range metadata in the file which sets the cycle length.

                          Then they won't need to choose it from a dropdown.

                          It makes their wavetables more portable too.

                          So how are they building their wavetables?

                          HISE Development for hire.
                          www.channelrobot.com

                          dannytaurusD 1 Reply Last reply Reply Quote 0
                          • dannytaurusD
                            dannytaurus @Lindon
                            last edited by

                            @Lindon said in Wavetable creation:

                            So how are they building their wavetables?

                            Personally, I'd either use Vital (free VTS/AU) or I'd write a script that takes in 3 audio files of 2048 samples, then interpolates between them with audio file 1 as frame 1, audio file 2 as frame 128 and audio file 3 as frame 3.

                            Meat Beats: https://meatbeats.com
                            Klippr Video: https://klippr.video

                            LindonL 1 Reply Last reply Reply Quote 0
                            • LindonL
                              Lindon @dannytaurus
                              last edited by Lindon

                              @dannytaurus said in Wavetable creation:

                              @Lindon said in Wavetable creation:

                              So how are they building their wavetables?

                              Personally, I'd either use Vital (free VTS/AU) or I'd write a script that takes in 3 audio files of 2048 samples, then interpolates between them with audio file 1 as frame 1, audio file 2 as frame 128 and audio file 3 as frame 3.

                              Well I assume you mean "audio file 2 as frame 2", but in any case..."interpolates" means what for a set of 2048 values(an array)?

                              if we work out the diff between any two value pairs and average the change over(say) 50 steps (essentially a cross fade) - this wont work as we will likely end with some zeroed value set at some point, and definately not a musical result..

                              hmm, interpolate here is tricky...

                              OK a bit of googleing gets me to:

                              https://www.sonicacademy.com/products/node

                              HISE Development for hire.
                              www.channelrobot.com

                              dannytaurusD 1 Reply Last reply Reply Quote 0
                              • dannytaurusD
                                dannytaurus @Lindon
                                last edited by dannytaurus

                                @Lindon said in Wavetable creation:

                                Well I assume you mean "audio file 2 as frame 2", but in any case..."interpolates" means what for a set of 2048 values(an array)?

                                Sorry, no. I mean:
                                Audio file 1 is frame 1
                                Audio file 2 is frame 128
                                Audio file 3 is frame 256

                                That will make a full 256-frame wavetable. That's 256 frames of 2048 samples each.

                                Interpolating as in morph each value of the 2048 cycle length to the next. Like, sine wave slowly becomes a saw wave, or whatever.

                                There are different methods of morphing between waves for a wavetable. Spectral is a different way. You'll have to read up and find the way that best suits your needs.

                                Personally, I'm only working with 'primitive' waves and morphing between them, so linear interpolation is fine for me.

                                Meat Beats: https://meatbeats.com
                                Klippr Video: https://klippr.video

                                LindonL 1 Reply Last reply Reply Quote 0
                                • LindonL
                                  Lindon @dannytaurus
                                  last edited by Lindon

                                  @dannytaurus Okay well thanks for your input, That approach is def. not going to work for me, still I think I have a product identified above that will do cough better, morphing...now just to find the time to learn it and build some wavetables....hello 2026 - Im looking at you...

                                  HISE Development for hire.
                                  www.channelrobot.com

                                  dannytaurusD 1 Reply Last reply Reply Quote 0
                                  • dannytaurusD
                                    dannytaurus @Lindon
                                    last edited by

                                    @Lindon Node looks cool. You could probably build that in HISE as a standalone app.

                                    Meat Beats: https://meatbeats.com
                                    Klippr Video: https://klippr.video

                                    LindonL 1 Reply Last reply Reply Quote 0
                                    • D
                                      DanSound @dannytaurus
                                      last edited by

                                      @dannytaurus That looks great, thank you! Will play with it on weekend.

                                      1 Reply Last reply Reply Quote 0
                                      • LindonL
                                        Lindon @dannytaurus
                                        last edited by

                                        @dannytaurus said in Wavetable creation:

                                        @Lindon Node looks cool. You could probably build that in HISE as a standalone app.

                                        Yes, but why wpuld I build somerhing that already exists and I can buy for leas than Β£17.00 ....

                                        HISE Development for hire.
                                        www.channelrobot.com

                                        dannytaurusD OrvillainO LindonL 3 Replies Last reply Reply Quote 0
                                        • dannytaurusD
                                          dannytaurus @Lindon
                                          last edited by

                                          @Lindon For the challenge and the learning experience.

                                          Meat Beats: https://meatbeats.com
                                          Klippr Video: https://klippr.video

                                          1 Reply Last reply Reply Quote 0
                                          • OrvillainO
                                            Orvillain @Lindon
                                            last edited by

                                            @Lindon For internet cool points of course!!

                                            Musician - Instrument Designer - Sonic Architect - Creative Product Owner
                                            Crafting sound at every level. From strings to signal paths, samples to systems.

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

                                            32

                                            Online

                                            2.1k

                                            Users

                                            13.2k

                                            Topics

                                            114.5k

                                            Posts