in Source/AmazonPollyMetaHuman/Private/SpeechComponent.cpp [92:107]
void USpeechComponent::PlayNextViseme() {
FScopeLock lock(&Mutex);
CurrentVisemeIndex++;
ClearTimer();
if (CurrentVisemeIndex == VisemeEventArray.Num() || VisemeEventArray.Num() == 0) {
bIsSpeaking = false;
return;
}
else {
CurrentViseme = VisemeEventArray[CurrentVisemeIndex].Viseme;
auto CurrentTimePoint = std::chrono::steady_clock::now();
float SecondsSinceStart = std::chrono::duration<float, std::milli>(CurrentTimePoint - StartTimePoint).count() / 1000.0f;
float CurrentVisemeDurationSeconds = fmaxf(VisemeEventArray[CurrentVisemeIndex].TimeMilliseconds / 1000.0f - SecondsSinceStart, 0);
SetTimer(CurrentVisemeDurationSeconds);
}
}