Hey Gregory, first of – well done that you uploaded a project file to test with. Its a lot easier to find a workaround this way!
I think it can be simplified, but a few things to clarify:
1. Essentially, what you need to achieve is for phrase to animate phrase in a constant speed. Depending on their chars count, animation will change in duration if its 1letter / 2 frames. Is this correct assumption?
2. If above is correct, keyframes has to go away completely from animate On slider. As now its the reason why animation duration is not constant for each letter. You are forcing it to fit within 20 frames, disregarding phrase length.
Based on above thoughts and with least changes to existing structure.
~ Remove keyframes from Animate On;
~ Set Animate On slider to setting, for characters animation count/frame. 1 will be 1char every frame, 2 stands for 1 char every 2 frames, etc.
~ Remove keyframes from Range Selector.
Apply below expression to achieve this, applied to yours Animator 2 Range Selector 1>Start.
var animSpeedPerChar = effect("Animate On")("Slider");
var numChars = effect("Character Count")("Slider");
var frameDur = thisComp.frameDuration
var animLength = animSpeedPerChar * numChars * frameDur;
var res = linear(time, 0, animLength, 0, numChars)
Math.round(res)
Social Media Profiles