From 40035f76da1998b3388fd5168e2f2f47dbf1fee8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 17 Oct 2024 15:22:31 +0530 Subject: [PATCH] Read aloud: Piper backend: Fix not working with voices whose names have non-ASCII characters on Windows. --- src/calibre/gui2/tts/piper.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tts/piper.py b/src/calibre/gui2/tts/piper.py index 840e227877..d3cb9f46a8 100644 --- a/src/calibre/gui2/tts/piper.py +++ b/src/calibre/gui2/tts/piper.py @@ -36,6 +36,7 @@ from calibre.constants import cache_dir, is_debugging, iswindows, piper_cmdline from calibre.gui2 import error_dialog from calibre.gui2.tts.types import TTS_EMBEDED_CONFIG, EngineSpecificSettings, Quality, TTSBackend, Voice, widget_parent from calibre.spell.break_iterator import PARAGRAPH_SEPARATOR, split_into_sentences_for_tts +from calibre.utils.filenames import ascii_text from calibre.utils.localization import canonicalize_lang, get_lang from calibre.utils.resources import get_path as P @@ -103,7 +104,7 @@ def load_voice_metadata() -> tuple[dict[str, Voice], tuple[Voice, ...], dict[str q = Quality.from_piper_quality(qual) if best_qual is None or q.value < best_qual.value: best_qual = q - mf = f'{bcp_code}-{voice_name}-{qual}.onnx' + mf = f'{bcp_code}-{ascii_text(voice_name)}-{qual}.onnx' voice = Voice(bcp_code + ':' + voice_name, lang, country, human_name=voice_name, quality=q, engine_data={ 'model_url': e['model'], 'config_url': e['config'], 'model_filename': mf, 'is_downloaded': mf in downloaded,