mirror of
https://github.com/denizsafak/abogen.git
synced 2026-07-18 13:40:27 +02:00
- Add compatibility functions to tts_plugin/compat.py: - get_metadata(): returns TTSBackendMetadata with voices - is_registered_backend(): checks if plugin is loaded - resolve_backend_for_voice(): resolves backend for voice spec - get_default_voice(): gets default voice for backend - Update tts_plugin/__init__.py to export new functions - Migrate all consumers from old tts_backend_registry: - WebUI: conversion_runner, debug_tts_runner, routes/api, routes/utils/* - PyQt UI: gui, predownload_gui, voice_formula_gui - Voice utilities: voice_cache, voice_formulas, voice_profiles - Other: subtitle_utils, utils, predownload_gui (root) - Update tests to use new plugin architecture Old architecture remains intact as fallback.
53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
from types import SimpleNamespace
|
|
from typing import cast
|
|
|
|
from abogen.tts_plugin.compat import get_metadata
|
|
from abogen.webui.conversion_runner import (
|
|
_chapter_voice_spec,
|
|
_chunk_voice_spec,
|
|
_collect_required_voice_ids,
|
|
)
|
|
from abogen.webui.service import Job
|
|
|
|
|
|
def _sample_job(formula: str) -> Job:
|
|
return cast(
|
|
Job,
|
|
SimpleNamespace(
|
|
voice="__custom_mix",
|
|
speakers={
|
|
"narrator": {
|
|
"resolved_voice": formula,
|
|
}
|
|
},
|
|
chapters=[],
|
|
chunks=[{}],
|
|
),
|
|
)
|
|
|
|
|
|
def test_chapter_voice_spec_uses_resolved_formula():
|
|
formula = "af_nova*0.7+am_liam*0.3"
|
|
job = _sample_job(formula)
|
|
|
|
assert _chapter_voice_spec(job, None) == formula
|
|
|
|
|
|
def test_chunk_voice_fallback_uses_resolved_formula():
|
|
formula = "af_nova*0.7+am_liam*0.3"
|
|
job = _sample_job(formula)
|
|
|
|
result = _chunk_voice_spec(job, {}, "")
|
|
|
|
assert result == formula
|
|
|
|
|
|
def test_voice_collection_includes_formula_components():
|
|
formula = "af_nova*0.7+am_liam*0.3"
|
|
job = _sample_job(formula)
|
|
|
|
voices = _collect_required_voice_ids(job)
|
|
|
|
assert {"af_nova", "am_liam"}.issubset(voices)
|
|
assert voices.issuperset(get_metadata("kokoro").voices)
|