mirror of
https://github.com/denizsafak/abogen.git
synced 2026-07-18 13:40:27 +02:00
fix: review cleanup — imports, _FakeToken, use_spacy_segmentation
- Move pronunciation imports from inside run() to top-level imports - Extract _FakeToken to module level (was redefined every loop iteration) - use_spacy_segmentation now mirrors PyQt logic: pass the flag, let process_subtitle_tokens filter by language internally
This commit is contained in:
@@ -39,6 +39,11 @@ from abogen.domain.subtitle_generation import process_subtitle_tokens
|
||||
from abogen.domain.voice_loader import load_voice_cached
|
||||
from abogen.domain.progress import calc_etr_str
|
||||
from abogen.domain.normalization import prepare_text_for_tts
|
||||
from abogen.domain.pronunciation import (
|
||||
compile_pronunciation_rules,
|
||||
compile_heteronym_sentence_rules,
|
||||
merge_pronunciation_overrides,
|
||||
)
|
||||
from abogen.domain.metadata_extraction import (
|
||||
extract_metadata_and_build_args,
|
||||
read_text_for_metadata,
|
||||
@@ -537,11 +542,6 @@ class ConversionThread(QThread):
|
||||
)
|
||||
|
||||
# --- Compile normalization rules (heteronym + pronunciation) ---
|
||||
from abogen.domain.pronunciation import (
|
||||
compile_pronunciation_rules,
|
||||
compile_heteronym_sentence_rules,
|
||||
merge_pronunciation_overrides,
|
||||
)
|
||||
pronunciation_overrides = merge_pronunciation_overrides(
|
||||
getattr(self, "pronunciation_overrides", None),
|
||||
getattr(self, "manual_overrides", None),
|
||||
|
||||
@@ -135,6 +135,16 @@ SPLIT_PATTERN = r"\n+" # Kept for backward compatibility; prefer get_split_patt
|
||||
SAMPLE_RATE = 24000
|
||||
|
||||
|
||||
class _FakeToken:
|
||||
"""Minimal token stub for languages without per-word token support."""
|
||||
|
||||
def __init__(self, text: str, start: float, end: float):
|
||||
self.text = text
|
||||
self.start_ts = start
|
||||
self.end_ts = end
|
||||
self.whitespace = ""
|
||||
|
||||
|
||||
class _JobCancelled(Exception):
|
||||
"""Raised internally to abort a conversion when the client cancels."""
|
||||
|
||||
@@ -534,12 +544,6 @@ def run_conversion_job(job: Job) -> None:
|
||||
|
||||
# Fallback for languages without token support: create a single token
|
||||
if not tokens_list and graphemes:
|
||||
class _FakeToken:
|
||||
def __init__(self, text, start, end):
|
||||
self.text = text
|
||||
self.start_ts = start
|
||||
self.end_ts = end
|
||||
self.whitespace = ""
|
||||
tokens_list = [_FakeToken(graphemes, 0, duration)]
|
||||
|
||||
for tok in tokens_list:
|
||||
@@ -555,6 +559,7 @@ def run_conversion_job(job: Job) -> None:
|
||||
|
||||
# Flush accumulated tokens through process_subtitle_tokens
|
||||
if subtitle_writer and audio_sink and accumulated_tokens:
|
||||
_use_spacy = job.subtitle_mode not in ("Disabled", "Line")
|
||||
new_entries: List[tuple] = []
|
||||
process_subtitle_tokens(
|
||||
accumulated_tokens,
|
||||
@@ -562,7 +567,7 @@ def run_conversion_job(job: Job) -> None:
|
||||
job.max_subtitle_words,
|
||||
job.subtitle_mode,
|
||||
job.language,
|
||||
use_spacy_segmentation=False,
|
||||
use_spacy_segmentation=_use_spacy,
|
||||
fallback_end_time=current_time,
|
||||
)
|
||||
for start, end, text in new_entries:
|
||||
|
||||
Reference in New Issue
Block a user