Timestretch Artifacts
-
Hey, I'm building a guitar rhythm loop based plugin and I cannot seem to get the timestretching to sound good. Even with 1-2% stretch it sounds smeared and in some cases at 0% it still sounds smeared with TempoSynced mode activated.
I tried setting NumQuarters (16 for a 4 bar loop at 140 BPM) and SourceBPM via getTimestretchOptions/setTimestretchOptions and it doesn't seem to make any audible difference.
My setup:
HISE 4.1.0 (commit a29ff452)
4 bar loop at 140 BPM, 4 bars
TempoSynced mode
NumQuarters = 16, SourceBPM = 140
Tested at both 44.1k and 48k sample rates — same artifacts at bothHere is my current script:
javascriptonInit
{
const var Sampler1 = Synth.getSampler("RTM_1_140");
const var obj = Sampler1.getTimestretchOptions();
obj.SourceBPM = 140;
obj.NumQuarters = 16;
Sampler1.setTimestretchOptions(obj);
}A few specific questions:
Is the smearing at 0% stretch a known issue or am I doing something wrong in my setup?
Are there any TimestretchOptions properties beyond what's documented that might help for rhythmic/percussive material like guitar chugs and rhythm loops?
Is there a recommended approach for loop players specifically, or is the sampler module not the right tool for this use case?
Has anyone successfully integrated Elastique or Rubber Band v3 into HISE and is there any existing code or PR for this?
I really just need clean stretch of about 10 BPM up and down from the source tempo. Any help appreciated, thanks!
-
@dannycouture Are you using the latest develop branch that incorporates this PR?
Edit: I just saw you included the commit hash, so you should have those changes. It allows you to set the BPM directly without messing around with Num Quarters.
-
@David-Healey thanks!
Okay so num quarters is out of the picture now.My question is how does HISE know what the BPM of the sample inside the sampler is? I know how to set the internal BPM for testing:
Engine.setHostBpm(120.0);
But do I need to tell HISE what the actual .wav BPM is, and if so where is that set?
Also, are there any settings to optimize to reduce artifacts? Even at a 5 BPM difference it sounds really smeared, and my recordings are high quality. I know HISE uses Signalsmith for timestretching, and on their demo it sounds clean compared to what I'm getting in HISE so I'm thinking it's a settings issue on my end.
-
@dannycouture Yes with that PR you still set the time stretch options, but instead of using NumQuarters, you use SourceBPM and set it to the BPM of your samples. The only settings I'm aware of are those available through the time stretch options.
-
You can try to use the signalsmith CLI tool (or whatever they ship as a binary) to check your exact audio material. AFAIK I've not changed the internals of that engine too much instead of just wiring in IPP / VDSP and a few other small performance additions.
You can't expect parity with the sound quality of Elastique though. Rubberband sounds worse in my experience than signalsmith - v2 as well as v3.
There is also another timestretch library on the block - Bungee which has a pro version that claims to be on par with Elastique et al, so maybe that would be a contender.