Need some help understanding Wavetables
-
How are they interpolated? I don't mean Linear vs Cubic, I'm talking specifically about the conversion process when using multiple velocities:
I have 8 RR's of the following guitar articulations (Palm Mute | Sustain | Harmonics) of a single note A2 spread across the velocity ranges:
- Palm Mutes: 1-8 (so RR1 is 1, RR2 is 2 etc)
- Sustain 9-17
- Harmonics 18-26
The goal is to convert these to a Wavetable, then use a ScriptProcessor to redirect incoming velocity to a specific Articulation (eg note has a Vel of 64, it would be converted to a Sustain with velocity 9-17)
The script redirects the velocity correctly, but the synth always plays the palm mute "articulation" / wavetable, should I be looking at the Table index with a Constant mod instead or something?
I'm just oblivious to how the samples get "mapped" to the wavetable, and where I should look to be able to switch between articulations on the fly
-
Okay so after a bit of experimenting, the solution for my particular use-case is:
- Organize Articulations from left to right in a DAW (Palm Mutes -> Sustains):
- Export this as a single audio file
- Convert to WT using Loris with Dynamic Phase & a low Transient Threshold (10%) to smooth everything out
- Use a combination of a Velocity (Table Mode) on the Table Index, and a Random Mod on the Bipolar Table Index with a lowish strength
- Finally use an Envelope to scrub through the WT
Now when I hit a noteOn, the WT Synth will basically pick a random spot, giving a pseudo Round-Robin effect
There's room for improvement, specifically programmatic or stepped Velocity to make sure it always starts at the beginning of one of the "samples", which ensures the Envelope won't scrub past the overlapping edges, adding random additional harmonics
These Wavetables are also much lighter, since I'm only using a small portion of the full recorded sample, the whole thing is about 5mb, versus the SampleMap conversion method which was over 100mb
-
Don't you lose the attack of each note?
-
@d-healey yes but for my use-case that's desirable, the WT synths play alongside the original transient samples (they have all tonal information removed with Loris so it's just the noisy part of the signal)
-
@iamlamprey Looking forward to hearing the end result!
-
Noice thatβs precisely what I would do too. What instrument is this?
-
@Christoph-Hart stereo metalcore guitars (the amp distortion hides my failures)
-
@iamlamprey Interesting. I've used more or less the exact same approach for clarinets about 10 years ago which sparked the entire development of HISE, so it's nice to see that it's finally being used for what it was intended for :)
-
@Christoph-Hart nice, i think there's a lot of potential for replacing traditional sample libraries, since you can "capture" different versions of the instrument (pickup positions, drum skins etc), then let the user swap between them in the final plugin, all while keeping the overall footprint absurdly small
-
welp found an even lazier method:
palm mutes & natural harmonics are effectively just lowpassed sustained notes, the discovery today is that the actual frequency response or "amount of lowpass" between palm mutes & natural harmonics are basically identical when all other factors (sustain, amplitude) are flattened
sooo instead of doing all this wavetable shenanigans, I can just record a single Sustained open string sample and use a polyphonic scriptFX to filter it using a combination of Velocity & Keyfollow to control the cutoff and voila: palm mutes and natural harmonics all from a single recording
since I want this to be robust enough to support other types of instruments, I can just disable the scriptFX for anything non-guitary
this still leaves the Table index open for modulation via an ADSR and Random mod for "round robin", and means I wont have to record a bunch of extra samples going forward
getting close now, I'll have an updated demo of it, and probably a more detailed writeup very soon
-
@iamlamprey said in Need some help understanding Wavetables:
polyphonic scriptFX to filter it using a combination of Velocity & Keyfollow to control the cutoff and voila: palm mutes and natural harmonics all from a single recording
Got a snippet? I'm working on a guitar right now and this could be useful for me
-
Here's the dsp network, the actual values still need some tweaking but you can adjust the curve response using the tables
EDIT: i should add this is specifically designed for the partial | noise setup i'm using, lowpassing the transients will sound bad
-
Here's an updated version with significantly better greybox DSP and some optimizations, palm mutes are < 64 and natural harmonics are 127
-
It looks very interesting.
So can we call an electric guitar plugin made with this wt method Physical Modeling?
Or is it sampling?What is the technical name of this method?
-
@harris-rosendahl
What is the technical name of this method?
i've just been calling it "hybrid" because it's a combination of a few different techniques (traditional sampling, residue sampling, waveguides)
it's also on the backburner for now, sustains still sound quite synthy and I haven't bothered to delve into it any deeper
-
@iamlamprey said in Need some help understanding Wavetables:
"Hybrid" is not bad. One last thing, you suggested saving it as a single audio file below. How do you slice that in HISE to use them as round robins?
Okay so after a bit of experimenting, the solution for my particular use-case is:
- Organize Articulations from left to right in a DAW (Palm Mutes -> Sustains):
- Export this as a single audio file
-
@harris-rosendahl I haven't opened the project for a while but I think I've changed it to just regular RR's with individual samples, see this thread:
https://forum.hise.audio/topic/9403/neatbrain-writeup?_=1727086798982
which has a bit more info about the full process
the main technique is calculating the length of a full cycle and using that as the parameters for Sample Looping, from there you can just make use of the Sampler as normal (RRs, groups etc) and don't have to think about all the experimental crap I was doing here