I think I have figured out how this works.
Let’s keep in mind a few well known things.
- Every sample is always 120 sample units long regardless of its length in seconds.
- The wave we are using in the LFO is half a saw up, half a 0 value, so we just want to use the first half of it.
- LFO depth values can only be set from -64.0 to + 63.0.
Also, notice that from the first point, it’s easy to see that the shorter the sample in seconds the faster we have to increment the position in sample units. If sample A is half the length in seconds that a sample B, the speed of the LFO should be twice (inverse proportion).
For perfectly trimmed samples (120 sample units corresponds to an exact amount of bars) we want to modulate the sample start from 0 to 120 so LFO depth should be set to 120 but it is not possible to use such a value. But in this particular case, both speed and depth affect the sample position so let’s use 60.0 for now.
At this point we need to set the total speed, which is the product of the speed control and the multiplier. What I usually do is to set the speed value to 8.0 and set the multiplier to adjust the total speed.
For a 4 bar loop, the speed should be set to 16; for a 2 bar loop, the speed should be set to 32; and for a 1 bar loop, the speed should be set to 64. I guess, the reason why a 4 bar loop works with 16 is because we need to multiply the depth by 2 but as we need to use only half the way we can just leave it as it is.
This will provide perfect timing if the sample is perfectly trimmed. If not, set LFO depth to half the sample length you want to use and adjust the multiplier as explained above.
I’ve noticed that a fine adjustment of the LFO depth might be needed if the sample is not the perfect size and the timestretching effect is extreme.