
    ,h                     D    d dl Z d dlZd dlmZ d dlZ G d d          ZdS )    N)gTTSc                   .    e Zd ZdZddZddZd Zd	 Zd
S )TextToSpeechu0   Clase para manejar la conversión de texto a vozesc                 j   || _         t          j                    | _        | j                            dd           | j                            d          }|D ][}d|j                                        v sd|j                                        v r#| j                            d|j                    dS \dS )u   
        Inicializa el sintetizador de voz
        
        Args:
            default_language (str): Idioma predeterminado para la síntesis de voz
        rate   voicesspanishu   españolvoiceN)	default_languagepyttsx3initenginesetPropertygetPropertynamelowerid)selfr   r
   r   s       PD:\NESTOR\Documents\Tesis\Asistente inteligente\backend\models\text_to_speech.py__init__zTextToSpeech.__init__	   s     !1lnn,,, ((22 	 	EEJ,,....*
@P@P@R@R2R2R''::: 3S	 	    default      ?Fc                    t           j                            t           j                            t           j                            t
                              ddddd          }t          j        |d           t          j        dd|	          }|j	        }|
                                 	 |r-t          || j        d
          }|                    |           nt          | j                            d          |z            }	| j                            d|	           |dk    rn| j                            d          }
|
D ]Q}|                                |j	                                        v r"| j                            d|j                    nR| j                            ||           | j                                         t           j                            ddt           j                            |                    }|S # t.          $ rJ}t           j                            |          rt          j        |           t/          d|           d}~ww xY w)u  
        Sintetiza texto a voz y devuelve la ruta al archivo
        
        Args:
            text (str): Texto a sintetizar
            voice_type (str): Tipo de voz a utilizar
            speed (float): Velocidad de reproducción (0.5 a 2.0)
            use_gtts (bool): Si usar gTTS (online) o pyttsx3 (offline)
            
        Returns:
            str: Ruta al archivo de audio generado
            
        Raises:
            Exception: Si ocurre un error durante la síntesis
        z..frontendassetsaudioT)exist_okFz.mp3)deletesuffixdir)textlangslowr   r   r
   r   z!Error al sintetizar texto a voz: N)ospathjoindirnameabspath__file__makedirstempfileNamedTemporaryFiler   closer   r   saveintr   r   r   r   r   save_to_file
runAndWaitbasename	Exceptionexistsunlink)r   r$   
voice_typespeeduse_gtts
output_dir	temp_fileoutput_pathttsr   r
   r   relative_pathes                 r   
synthesizezTextToSpeech.synthesize   s5   " W\\"'//"'//(2K2K"L"LdTXZdfnpwxx

J.... /uVQ[\\\	n	E )4+@uMMM%%%% 4;226::UBCC''555 **![44X>>F!' " "%++--1A1A1C1CCC K33GUXFFF!E D
 (({;;;&&((( GLL7BG<L<L[<Y<YZZM   	E 	E 	Ew~~k** '	+&&&CCCDDD		Es   -EH	 	
IAIIc                 N    | j                             d          }d |D             S )z
        Obtiene una lista de las voces disponibles
        
        Returns:
            list: Lista de nombres de voces disponibles
        r
   c                     g | ]	}|j         
S  )r   ).0r   s     r   
<listcomp>z5TextToSpeech.get_available_voices.<locals>.<listcomp>^   s    ///u
///r   )r   r   )r   r
   s     r   get_available_voicesz!TextToSpeech.get_available_voicesV   s-     ((22//////r   c                     || _         dS )uv   
        Cambia el idioma predeterminado
        
        Args:
            language (str): Código de idioma
        N)r   )r   languages     r   set_languagezTextToSpeech.set_language`   s     !)r   N)r   )r   r   F)__name__
__module____qualname____doc__r   rB   rH   rK   rE   r   r   r   r      se        ::   &8E 8E 8E 8Et0 0 0) ) ) ) )r   r   )r'   r.   gttsr   r   r   rE   r   r   <module>rQ      sn    				        a) a) a) a) a) a) a) a) a) a)r   