Here is another hotfix for this check index, but v, not v-1 this time:
# replace `if text_node.cleaner_text[v] == ".":` with this:
if v < text_node.clean_text.length() and text_node.cleaner_text[v] == ".":
It will avoid the error, although we are now using the pause duration for ‘.’ and not ‘…’, but v was incorrect anyway so there’s a deeper issue behind. All the characters are still displayed normally.