a
    #hP                     @   sB   d Z ddlZddlZddlZddlZddlmZ G dd dZdS )uK   
Edge TTS Service
Servicio para síntesis de voz usando Microsoft Edge TTS
    N)datetimec                   @   s<   e Zd ZdZdd Zdd Zddd	Zd
d ZdddZdS )EdgeTTSServiceu.   Servicio para síntesis de voz usando Edge TTSc              	   C   s^   t jt jt jtdddddd| _t j| jdd dd	d
| _g dg dd
| _	d S )Nz..frontendstaticZassetsZaudioT)exist_okes-ES-ElviraNeuralzes-ES-AlvaroNeural)mujerhombre)zes-MX-DaliaNeuralzes-AR-ElenaNeuralzes-CO-SalomeNeural)zes-MX-JorgeNeuralzes-AR-TomasNeuralzes-CO-GonzaloNeural)
ospathjoindirnameabspath__file__	audio_dirmakedirsvoice_mappingalternative_voicesself r   +/var/www/auris/backend/services/edge_tts.py__init__   s    *zEdgeTTSService.__init__c                 C   s   dS )u)   Verificar si el servicio está disponibleTr   r   r   r   r   is_available   s    zEdgeTTSService.is_availabler         ?c              
      s  z| j |d}t|d d }|dkr6d| d}n|dk rJ| d}nd}dt jd	d
  dtt   d}t	j
| j|}tj|||d}	|	|I d	H  d| }
d|
||ddW S  ty  } z"ddt| ddW  Y d	}~S d	}~0 0 d	S )u]  
        Sintetizar texto a voz usando Edge TTS
        
        Args:
            text (str): Texto a sintetizar
            voice_type (str): Tipo de voz ('mujer' o 'hombre')
            speed (float): Velocidad de reproducción (0.5 - 2.0)
            
        Returns:
            dict: Resultado con la URL del archivo de audio o error
        r      d   r   +%z+0%	edge_tts_N   _.mp3)ratez/static/assets/audio/Tzedge-tts)success	audio_url	file_path
voice_usedproviderFzError en Edge TTS: )r$   errorfallback)r   getintuuiduuid4hexr   now	timestampr
   r   r   r   edge_ttsZCommunicatesave	Exceptionstr)r   text
voice_typespeedZvoiceZspeed_percentr#   filenamer&   communicater%   er   r   r   synthesize_speech#   s0    ,
z EdgeTTSService.synthesize_speechc                 C   s4   t | j dd | j D  | j| jddgdS )u0   Obtener información sobre las voces disponiblesc                 S   s   g | ]}|D ]}|qqS r   r   ).0Zvoicesvr   r   r   
<listcomp>\       z1EdgeTTSService.get_voice_info.<locals>.<listcomp>g      ?g       @)Zavailable_voicesr   r   speed_range)listr   valuesr   r   r   r   r   get_voice_infoX   s    zEdgeTTSService.get_voice_info   c           	   
   C   s   zddl }|  }|d }t| jD ]X}|dr&|dr&tj| j|}|tj| }||kr&t	| t
d|  q&W n2 ty } zt
d|  W Y d}~n
d}~0 0 dS )z"Limpiar archivos de audio antiguosr   Ni  r   r"   zArchivo eliminado: zError limpiando archivos: )timer
   listdirr   
startswithendswithr   r   getctimeremoveprintr4   )	r   max_age_hoursrF   Zcurrent_timeZmax_age_secondsr9   r&   Zfile_ager;   r   r   r   cleanup_old_filesb   s    
z EdgeTTSService.cleanup_old_filesN)r   r   )rE   )	__name__
__module____qualname____doc__r   r   r<   rD   rN   r   r   r   r   r      s   
5
r   )rR   r
   r-   asyncior2   r   r   r   r   r   r   <module>   s   