#!/usr/bin/env python3 """Pone la voz de Piper: castellano de España, grave. flatpak run --command=python3 io.github.qwersyk.Newelle//master \ ~/COFRE/CODERS/JARVIS/config/set_voz_piper.py Por que no Kokoro: no tiene ni una voz de España. Sus dos masculinas en español, em_alex y em_santa, suenan latinoamericanas. Piper si las tiene, es libre (MIT, voces con licencias abiertas) y corre local. Medido con la misma frase: em_alex (Kokoro, latino) 129 Hz es_ES-carlfm-x_low 118 Hz calidad baja, 16 kHz es_ES-sharvard-medium 127 Hz es_ES-davefx-medium 128 Hz es_ES-sharvard-medium + tono 106 Hz <- elegida 106 Hz cae de lleno en el rango de voz masculina grave (85-110). Se llega ahi con rubberband en el envoltorio, no con la cadena de la app: alli el descenso usa asetrate, que depende de la frecuencia de muestreo y esta calculado para los 24 kHz de Kokoro, no para los 22050 de Piper. Se apaga por tanto la bajada de tono de la app, para no aplicarla dos veces. El resto del tratamiento (paso alto, ecualizador, compresor, eco) se queda: es independiente de la frecuencia y es lo que da el aire de "voz en la sala". """ import json import os import sys from gi.repository import Gio SCHEMA = "io.github.qwersyk.Newelle" ENVOLTORIO = os.path.expanduser( "~/COFRE/CODERS/JARVIS/config/jarvis-piper.sh") def main(): if not os.path.exists(ENVOLTORIO): print(f"FALLO: no esta {ENVOLTORIO}") return 1 settings = Gio.Settings.new(SCHEMA) try: voces = json.loads(settings.get_string("tts-voice") or "{}") except json.JSONDecodeError: voces = {} # {0} es el fichero y {1} el texto; el handler los entrecomilla, asi que # aqui van sin comillas alrededor voces["custom_command"] = {"command": f"{ENVOLTORIO} {{0}} {{1}}"} settings.set_string("tts-voice", json.dumps(voces)) settings.set_string("tts", "custom_command") Gio.Settings.sync() motor = settings.get_string("tts") orden = json.loads(settings.get_string("tts-voice")).get( "custom_command", {}).get("command", "") print(f"motor de voz: {motor}") print(f"orden: {orden}") ok = motor == "custom_command" and ENVOLTORIO in orden print("verificado" if ok else "FALLO: no quedo como se pidio") if ok: print("\nrecuerda apagar la bajada de tono de la app, que ya la hace el envoltorio:") print(" flatpak override --user --env=JARVIS_TTS_GRAVEDAD=1.0 io.github.qwersyk.Newelle") return 0 if ok else 1 if __name__ == "__main__": sys.exit(main())