diff options
| author | historia <historiavg@proton.me> | 2026-08-25 16:49:36 -0400 |
|---|---|---|
| committer | historia <historiavg@proton.me> | 2026-08-25 16:49:36 -0400 |
| commit | 775b716d86f5e681807698522e56c3d0f861c5bf (patch) | |
| tree | 420b31c7b2f743ee83ad933bbc00073d5f6b9e2a /app/converter/converter.py | |
| parent | 867866f131b0b6c76c54272791e7f7dea01db990 (diff) | |
| download | tts-audiobook-generator-775b716d86f5e681807698522e56c3d0f861c5bf.tar.gz | |
feat: combine --speaker and --voice for clarity
Diffstat (limited to 'app/converter/converter.py')
| -rw-r--r-- | app/converter/converter.py | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/app/converter/converter.py b/app/converter/converter.py index 6e677c8..80411d3 100644 --- a/app/converter/converter.py +++ b/app/converter/converter.py @@ -185,7 +185,6 @@ class AudiobookConverter: instructions: Optional[str] = None, request_options: Optional[Dict[str, str]] = None, api_url: Optional[str] = None, - speaker: Optional[str] = None, progress: Optional[Callable[[dict], None]] = None, cancel=None): if speed <= 0: @@ -206,7 +205,6 @@ class AudiobookConverter: self.output_format = output_format self.backend = backend self.voice = voice - self.speaker = speaker self.debug = bool(debug) # Voice design / style instruction and free-form request options # (audio.cpp only): forwarded to AudioCppTTSClient, which validates @@ -219,18 +217,17 @@ class AudiobookConverter: # configured on the server, so no local reference audio is needed. self.tts = FasterTTSClient(voice=voice, api_url=api_url) elif backend == BACKEND_AUDIOCPP: - # Speaker mode (--speaker or no flag on a CustomVoice entry) uses - # a built-in speaker name; an explicit --voice selects a - # server-side preset (cloning). model_id overrides - # AUDIOCPP_MODEL_ID for multi-model servers; instructions describe - # or style the voice, request_options pass per-model controls - # through to the server. + # --voice picks the voice: a built-in speaker name on the + # CustomVoice entry, or a server-side preset (cloning) + # elsewhere. model_id overrides AUDIOCPP_MODEL_ID for + # multi-model servers; instructions describe or style the + # voice, request_options pass per-model controls through to + # the server. self.tts = AudioCppTTSClient(voice=voice, language=self.language, model_id=model_id, instructions=instructions, request_options=self.request_options, - api_url=api_url, - speaker=speaker) + api_url=api_url) else: self.tts = QwenTTSClient( voice_mode=voice_mode, @@ -294,14 +291,13 @@ class AudiobookConverter: """Narrator name used in output file names (see compute_narrator_tag).""" return self.compute_narrator_tag( self.backend, self.voice, self.voice_mode, - self.voice_clone_ref_audio, self.instructions, self.speaker) + self.voice_clone_ref_audio, self.instructions) @staticmethod def compute_narrator_tag(backend: str, voice: Optional[str], voice_mode: str, voice_clone_ref_audio: Optional[str], - instructions: Optional[str] = None, - speaker: Optional[str] = None) -> str: + instructions: Optional[str] = None) -> str: """Narrator name used in output file names, without a server connection. Custom voice mode uses the built-in speaker's display name; voice @@ -322,8 +318,6 @@ class AudiobookConverter: elif backend == BACKEND_AUDIOCPP: if voice: narrator = voice - elif speaker: - narrator = speaker elif instructions: # The voice comes from the instruction, not a speaker name. narrator = "designed" @@ -677,12 +671,12 @@ class AudiobookConverter: self._say(f"audio.cpp endpoint: {config.AUDIOCPP_API_URL}") self._say(f"Model id: {self.tts.model_id}") self._say(f"Model family: {getattr(self.tts, 'family', 'unknown')}") - if self.voice: + if getattr(self.tts, "preset_mode", False): self._say("Backend: audio.cpp (voice cloning, reference configured on server)") - self._say(f"Voice: {self.voice}") - elif self.speaker: + self._say(f"Voice: {self.tts.voice}") + elif getattr(self.tts, "speaker_mode", False): self._say("Backend: audio.cpp (custom voice, built-in speaker)") - self._say(f"Speaker: {self.speaker}") + self._say(f"Speaker: {self.tts.voice}") elif self.instructions: self._say("Backend: audio.cpp (voice from --instructions description)") self._say(f"Instruction: {self.instructions}") @@ -726,7 +720,6 @@ class AudiobookConverter: voice_clone_ref_audio: Optional[str], output_format: str, instructions: Optional[str] = None, - speaker: Optional[str] = None, confirm: Optional[Callable[[str, bool], bool]] = None, ) -> Tuple[List[Path], List[Tuple[Path, str]]]: """Discover books and ask every overwrite question up front. @@ -758,8 +751,7 @@ class AudiobookConverter: # starts, so the rest of the run is unattended. planned: List[Tuple[Path, str]] = [] narrator_tag = AudiobookConverter.compute_narrator_tag( - backend, voice, voice_mode, voice_clone_ref_audio, instructions, - speaker) + backend, voice, voice_mode, voice_clone_ref_audio, instructions) for book_file in book_files: output_name = book_file.stem if stem_counts[book_file.stem] > 1: @@ -795,7 +787,7 @@ class AudiobookConverter: book_files, planned = AudiobookConverter.preflight_overwrites( self.backend, self.voice, self.voice_mode, self.voice_clone_ref_audio, self.output_format, - self.instructions, self.speaker) + self.instructions) if not book_files: self._say(f"[INFO] No supported files found in {BOOKS_FOLDER}") |
