From bd99ee1ba1377fa072f4ce172c870eeddde454a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Deniz=20=C5=9Eafak?= Date: Thu, 23 Jul 2026 03:15:21 +0300 Subject: [PATCH] fix: subtitle FakeToken split, missing run_tts_segment_loop import - subtitle_generation: split multi-sentence FakeToken into separate entries - conversion.py: add missing run_tts_segment_loop import No changes to spacy_utils or Language enum. --- abogen/domain/subtitle_generation.py | 18 +++++++++++++++--- abogen/pyqt/conversion.py | 2 +- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/abogen/domain/subtitle_generation.py b/abogen/domain/subtitle_generation.py index 1428f71..214aade 100644 --- a/abogen/domain/subtitle_generation.py +++ b/abogen/domain/subtitle_generation.py @@ -280,16 +280,28 @@ def _process_regex_sentences( current_sentence = [] word_count = 0 - # Add any remaining tokens as a sentence + # Add any remaining tokens as a sentence (split multi-sentence FakeToken) if current_sentence: start_time = current_sentence[0]["start"] end_time = current_sentence[-1]["end"] - # Simplified text joining logic sentence_text = "" for t in current_sentence: sentence_text += t["text"] + (t.get("whitespace") or "") - subtitle_entries.append((start_time, end_time, sentence_text.strip())) + sentence_text = sentence_text.strip() + + if len(current_sentence) == 1: + parts = re.split(rf"(?<={separator})\s+", sentence_text) + if len(parts) > 1: + d = end_time - start_time + for i, p in enumerate(parts): + e = end_time if i == len(parts) - 1 else start_time + d * len(p) / len(sentence_text) + subtitle_entries.append((start_time, e, p.strip())) + start_time = e + current_sentence = [] + + if current_sentence: + subtitle_entries.append((start_time, end_time, sentence_text)) # Fallback for last entry _apply_fallback_end_time(subtitle_entries, fallback_end_time) diff --git a/abogen/pyqt/conversion.py b/abogen/pyqt/conversion.py index 6b3af4f..72e545d 100644 --- a/abogen/pyqt/conversion.py +++ b/abogen/pyqt/conversion.py @@ -36,7 +36,7 @@ from abogen.domain.output_paths import ( ) from abogen.domain.audio_helpers import build_ffmpeg_command, to_float32 from abogen.domain.audio_sink import AudioSink, open_audio_sink -from abogen.domain.conversion_engine import synthesize_text, SynthParams, SegmentStats, SegmentInfo +from abogen.domain.conversion_engine import run_tts_segment_loop, synthesize_text, SynthParams, SegmentStats, SegmentInfo from abogen.domain.intro_outro import resolve_intro, resolve_outro from abogen.domain.audio_buffer import ( create_silence,