Skip to content

Commit

Permalink
fix piper dialog when don't have any installed voice
Browse files Browse the repository at this point in the history
  • Loading branch information
metalalchemist committed Aug 28, 2024
1 parent 6bec1fc commit 2b79b38
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 46 deletions.
30 changes: 13 additions & 17 deletions VeTube.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
from utils.translator import TranslatorWrapper
from helpers.playroom_helper import PlayroomHelper
player = playsound()
reader=ReaderHandler()
yt=0
# revisar la configuración primero, ya que necesitamos determinar el sistema TTS a través de ella.
if not path.exists("data.json"): fajustes.escribirConfiguracion()
Expand All @@ -27,7 +26,7 @@
player.setdevice(config["dispositivo"])

def configurar_piper(carpeta_voces):
global config, lector
global config
onnx_models = detect_onnx_models(carpeta_voces)
if onnx_models is None:
sinvoces = wx.MessageDialog(None, _('Necesitas al menos una voz para poder usar el sintetizador Piper. ¿Quieres abrir nuestra carpeta de Drive para descargar algunos modelos? Si pulsas sí, se abrirá nuestra carpeta seguido de una ventana para instalar una una vez la descargues.'), _("No hay voces instaladas"), wx.YES_NO | wx.ICON_QUESTION)
Expand All @@ -36,11 +35,8 @@ def configurar_piper(carpeta_voces):
wx.LaunchDefaultBrowser("https://drive.google.com/drive/folders/1zFJRTI6CpVw9NkrTiNYOKGga0yn4JXzv?usp=drive_link")
config, reader._lector = install_piper_voice(config, reader._lector)
sinvoces.Destroy()
elif isinstance(onnx_models, str) or isinstance(onnx_models, list):
config['voz'] = 0

elif isinstance(onnx_models, str) or isinstance(onnx_models, list): config['voz'] = 0
carpeta_voces = path.join(getcwd(), "piper", "voices")

def escribirTeclas():
with open('keys.txt', 'w+') as arch: arch.write("""{
"control+p": reader._leer.silence,
Expand Down Expand Up @@ -68,21 +64,13 @@ def leerTeclas():
pos=[]
favorite=funciones.leerJsonLista('favoritos.json')
mensajes_destacados=funciones.leerJsonLista('mensajes_destacados.json')
favs=funciones.convertirLista(favorite,'titulo','url')
msjs=funciones.convertirLista(mensajes_destacados,'mensaje','titulo')
dispositivos = player.devicenames
reader._leer.set_rate(config['speed'])
reader._leer.set_pitch(config['tono'])
reader._leer.set_voice(reader._leer.list_voices()[0])
reader._leer.set_volume(config['volume'])
favs=funciones.convertirLista(favorite,'titulo','url')
msjs=funciones.convertirLista(mensajes_destacados,'mensaje','titulo')
dispositivos = player.devicenames
# establecer la voz del lector en piper:
if config['sistemaTTS'] == "piper":
reader._lector=reader._lector.piperSpeak(f"piper/voices/voice-{ajustes.lista_voces_piper[config['voz']][:-5]}/{ajustes.lista_voces_piper[config['voz']]}")
lector_Salidas = reader._lector.get_devices()
salida_actual = reader._lector.find_device_id(dispositivos[config["dispositivo"]-1])
reader._lector.set_device(salida_actual)
else:
lector_Salidas = None
# establecer idiomas:
languageHandler.setLanguage(config['idioma'])
idiomas = languageHandler.getAvailableLanguages()
Expand All @@ -92,6 +80,14 @@ def leerTeclas():
[codes.append(i[0]) for i in idiomas]
codes.reverse()
langs.reverse()
# establecer la voz del lector en piper:
if config['sistemaTTS'] == "piper":
if detect_onnx_models(carpeta_voces) is not None:
reader._lector=reader._lector.piperSpeak(f"piper/voices/voice-{ajustes.lista_voces_piper[config['voz']][:-5]}/{ajustes.lista_voces_piper[config['voz']]}")
lector_Salidas = reader._lector.get_devices()
salida_actual = reader._lector.find_device_id(dispositivos[config["dispositivo"]-1])
reader._lector.set_device(salida_actual)
else: lector_Salidas = None
mensaje_teclas=[
_('Silencia la voz sapy'),
_('Mensaje anterior.'),
Expand Down
53 changes: 26 additions & 27 deletions ajustes.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,18 @@
from google_currency import CODES
from utils.translator import TranslatorWrapper
from accessible_output2.outputs import sapi5
from TTS.lector import configurar_tts, detect_onnx_models
from TTS.lector import detect_onnx_models
from TTS.list_voices import piper_list_voices, install_piper_voice
from TTS.Piper import Piper, speaker
from os import path
from helpers.sound_helper import playsound
from helpers.reader_handler import ReaderHandler
player = playsound()
if not path.exists("data.json"): fajustes.escribirConfiguracion()
config=fajustes.leerConfiguracion()
player.setdevice(int(config["dispositivo"]))
prueba=configurar_tts("sapi5")
prueba_piper=configurar_tts("piper")
prueba=ReaderHandler("piper")
dispositivos_piper = None
lista_voces=prueba.list_voices()
lista_voces=prueba._leer.list_voices()
lista_voces_piper = piper_list_voices()
rutasonidos=[
"sounds/chat.mp3",
Expand All @@ -35,7 +34,7 @@

class configuracionDialog(wx.Dialog):
def __init__(self, parent):
global config, lista_voces, prueba_piper, dispositivos_piper
global config, lista_voces, dispositivos_piper
# idioma:
translator = TranslatorWrapper()
languageHandler.setLanguage(config['idioma'])
Expand Down Expand Up @@ -159,8 +158,8 @@ def __init__(self, parent):
boxSizer_2 .Add(self.choice_2)
if config['sistemaTTS'] == "piper":
if len(lista_voces) == 1:
prueba_piper = speaker.piperSpeak(f"piper/voices/voice-{lista_voces[0][:-5]}/{lista_voces[0]}")
dispositivos_piper = prueba_piper.get_devices()
prueba._lector=prueba._lector.piperSpeak(f"piper/voices/voice-{lista_voces[0][:-5]}/{lista_voces[0]}")
dispositivos_piper = prueba._lector.get_devices()
config['voz'] = 0
self.instala_voces = wx.Button(self.treeItem_2, wx.ID_ANY, label=_("Instalar un paquete de voz..."))
self.instala_voces.Bind(wx.EVT_BUTTON, self.instalar_voz_piper)
Expand Down Expand Up @@ -262,16 +261,16 @@ def __init__(self, parent):
self.Center()

def alternar_dispositivo(self, event):
global prueba_piper, dispositivos_piper
global dispositivos_piper
valor = (self.lista_dispositivos.GetSelection() +1)
valor_str = self.lista_dispositivos.GetStringSelection()
config['dispositivo']=valor
player.setdevice(config["dispositivo"])
player.playsound("sounds/cambiardispositivo.wav")
if config['sistemaTTS'] == "piper" and dispositivos_piper is not None:
salida_piper = prueba_piper.find_device_id(valor_str)
prueba_piper.set_device(salida_piper)
prueba_piper.speak(_("Hablaré a través de este dispositivo."))
salida_piper = prueba._lector.find_device_id(valor_str)
prueba._lector.set_device(salida_piper)
prueba.leer_auto(_("Hablaré a través de este dispositivo."))

def cambiar_sintetizador(self, event):
global lista_voces
Expand All @@ -283,40 +282,40 @@ def cambiar_sintetizador(self, event):
lista_voces = [_("No hay voces instaladas")]
self.instala_voces.Enable()
else:
lista_voces = prueba.list_voices()
lista_voces = prueba.leer.list_voices()
self.instala_voces.Disable()
self.choice_2.Clear()
self.choice_2.AppendItems(lista_voces)
def instalar_voz_piper(self, event):
global config, prueba_piper, lista_voces
config, prueba_piper = install_piper_voice(config, prueba_piper)
global config, lista_voces
config, prueba._lector= install_piper_voice(config, prueba._lector)
lista_voces = piper_list_voices()
if lista_voces:
self.choice_2.Clear()
self.choice_2.AppendItems(lista_voces)
def reproducirPrueva(self, event):
if not ".onnx" in self.choice_2.GetStringSelection():
prueba.silence()
prueba.speak(_("Hola, soy la voz que te acompañará de ahora en adelante a leer los mensajes de tus canales favoritos."))
prueba._leer.silence()
prueba.leer_sapi(_("Hola, soy la voz que te acompañará de ahora en adelante a leer los mensajes de tus canales favoritos."))
else:
prueba_piper.speak(_("Hola, soy la voz que te acompañará de ahora en adelante a leer los mensajes de tus canales favoritos."))
prueba.leer_auto(_("Hola, soy la voz que te acompañará de ahora en adelante a leer los mensajes de tus canales favoritos."))
def porcentaje_a_escala(self, porcentaje):
scale = 2.00 + (1 - ((porcentaje - -10) / (10 - -10))) * (0.50 - 2.00)
return scale

def cambiarVelocidad(self, event):
value=self.slider_3.GetValue()-10
if not ".onnx" in lista_voces[self.choice_2.GetSelection()]:
prueba.set_rate(value)
prueba._leer.set_rate(value)
else:
prueba_piper.set_rate(self.porcentaje_a_escala(value))
prueba._lector.set_rate(self.porcentaje_a_escala(value))
config['speed']=value
def cambiarTono(self, event):
value=self.slider_1.GetValue()-10
prueba.set_pitch(value)
prueba._leer.set_pitch(value)
config['tono']=value
def cambiarVolumen(self, event):
prueba.set_volume(self.slider_2.GetValue())
prueba._leer.set_volume(self.slider_2.GetValue())
config['volume']=self.slider_2.GetValue()
def mostrarSonidos(self,event):
if event.IsChecked():
Expand All @@ -333,13 +332,13 @@ def checar_sapi(self, event):
self.seleccionar_TTS.Enable(not event.IsChecked())

def cambiarVoz(self, event):
global prueba_piper, lista_voces, dispositivos_piper
global lista_voces, dispositivos_piper
config['voz']=self.choice_2.GetSelection()
if config['sistemaTTS'] == "piper":
prueba_piper = speaker.piperSpeak(f"piper/voices/voice-{lista_voces[config['voz']][:-4]}/{lista_voces[config['voz']]}")
prueba._lector = prueba._lector.piperSpeak(f"piper/voices/voice-{lista_voces[config['voz']][:-5]}/{lista_voces[config['voz']]}")
dispositivos_piper = prueba_piper.get_devices()
# Establecer dispositivo desde la configuración:
salida_piper = prueba_piper.find_device_id(self.dispositivos[config["dispositivo"]-1])
prueba_piper.set_device(salida_piper)
salida_piper = prueba._lector.find_device_id(self.dispositivos[config["dispositivo"]-1])
prueba_lector.set_device(salida_piper)
else:
prueba.set_voice(lista_voces[config['voz']])
prueba._leer.set_voice(lista_voces[config['voz']])
6 changes: 4 additions & 2 deletions helpers/reader_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@
from TTS.lector import configurar_tts
class ReaderHandler:
def __init__(self,lector=None):
self.__config=fajustes.leerConfiguracion()
if lector is None: self.__config=fajustes.leerConfiguracion()
self._lector=configurar_tts(self.__config['sistemaTTS'] if lector is None else lector)
self._leer=configurar_tts("sapi5")
def leer_mensaje(self, mensaje):
if self.__config['sapi']: self.leer_sapi(mensaje)
if hasattr(self, 'config'):
if self.__config['sapi']: self.leer_sapi(mensaje)
else: self.leer_auto(mensaje)
else: self.leer_auto(mensaje)
def leer_sapi(self, mensaje): self._leer.speak(mensaje)
def leer_auto(self,mensaje): self._lector.speak(mensaje)

0 comments on commit 2b79b38

Please sign in to comment.