
    vh                     H    S r SSKrSSKrSSKrSSKrSSKJr   " S S5      rg)zZ
OpenAI Text-to-Speech Service
Servicio para integrar las voces de alta calidad de OpenAI
    N)datetimec                   >    \ rS rSrSrS rS rS
S jrS rSS jr	Sr
g	)OpenAITTSService   u0   Servicio para síntesis de voz usando OpenAI TTSc           	         [         R                  R                  S5      U l        SU l        [         R
                  R                  [         R
                  R                  [         R
                  R                  [        5      5      SSSSSS5      U l
        [         R                  " U R                  SS	9  S
SS.U l        / SQU l        g )NOPENAI_API_KEYz&https://api.openai.com/v1/audio/speechz..frontendstaticassetsaudioT)exist_oknovaonyx)mujerhombre)alloyechofabler   r   shimmer)osenvirongetapi_keybase_urlpathjoindirnameabspath__file__	audio_dirmakedirsvoice_mappingavailable_voicesselfs    >D:\NESTOR\Documents\Tesis\auris\backend\services\openai_tts.py__init__OpenAITTSService.__init__   s    zz~~&67@bggoobggooh6O&PRVX\^hjrt|  F  G
DNNT2 
 !V    c                     U R                   SL$ )u)   Verificar si el servicio está disponibleN)r   r$   s    r&   is_availableOpenAITTSService.is_available   s    ||4''r)   c                 r   U R                  5       (       d  SSSS.$  U R                  R                  US5      n[        S[	        SU5      5      nSU R
                   3S	S
.nSUUUSS.n[        R                  " U R                  UUSS9nUR                  S:X  a  S[        R                  " 5       R                  SS  S[        [        R                  " 5       R!                  5       5       S3n["        R$                  R'                  U R(                  U5      n	[+        U	S5       n
U
R-                  UR.                  5        SSS5        SU 3nSUUSS.$ SUR                   3n UR1                  5       nUR                  S0 5      R                  SU5      nSUSS.$ ! , (       d  f       Nb= f!    N= f! [        R2                  R4                   a	    SSSS.s $ [        R2                  R6                   a  nSS[9        U5       3SS.s SnA$ SnAf[:         a  nSS[9        U5       3SS.s SnA$ SnAff = f)u  
Sintetizar texto a voz usando OpenAI TTS

Args:
    text (str): Texto a sintetizar
    voice_type (str): Tipo de voz ('mujer' o 'hombre')
    speed (float): Velocidad de reproducción (0.25 - 4.0)
    
Returns:
    dict: Resultado con la URL del archivo de audio o error
FzOpenAI API key no configuradaT)successerrorfallbackr         ?      @zBearer zapplication/json)AuthorizationzContent-Typetts-1-hdmp3)modelinputvoicespeedresponse_format   )headersjsontimeout   openai_tts_N   _.mp3wbz/static/assets/audio/)r.   	audio_url
voice_usedr6   zError de OpenAI API: r/   messageu"   Timeout en la conexión con OpenAIu   Error de conexión: zError inesperado: )r+   r"   r   maxminr   requestspostr   status_codeuuiduuid4hexintr   now	timestampr   r   r   r    openwritecontentr=   
exceptionsTimeoutRequestExceptionstr	Exception)r%   text
voice_typer9   r8   r<   dataresponsefilename	file_pathfrE   	error_msg
error_dataes                  r&   synthesize_speech"OpenAITTSService.synthesize_speech"   sO      "" 8  M	&&**:v>E c#uo.E $+4<<.!9 2G $#(D  }}	H ##s*()9)9"1)=(>aHLLND\D\D^@_?``deGGLLB	)T*aGGH,,- + 4H:>	  $!*"''	  4H4H4H3IJ	!)J *w ; ? ?	9 UI
  %& $ ) +*" ""** 	 =  
 ""33 	 /Ax8  
  	 -c!fX6  	sl   DF3 #F?F3 F3 #2F, F3 
F)%F3 ,F0.F3 3$H6H66HH6H6H1+H61H6c                 @    U R                   U R                  SS/SS/S.$ )u0   Obtener información sobre las voces disponiblesztts-1r4   r1   r2   )r#   r"   modelsspeed_range)r#   r"   r$   s    r&   get_voice_infoOpenAITTSService.get_voice_info   s/     !% 5 5!//
+ #;	
 	
r)   c                     SSK nUR                  5       nUS-  n[        R                  " U R                  5       H  nUR	                  S5      (       d  M  UR                  S5      (       d  M3  [        R                  R                  U R                  U5      nU[        R                  R                  U5      -
  nXt:  d  M  [        R                  " U5        [        SU 35        M     g! [         a  n[        SU 35         SnAgSnAff = f)z"Limpiar archivos de audio antiguosr   Ni  r@   rC   zArchivo eliminado: zError limpiando archivos: )timer   listdirr    
startswithendswithr   r   getctimeremoveprintrZ   )	r%   max_age_hoursrm   current_timemax_age_secondsr_   r`   file_agerd   s	            r&   cleanup_old_files"OpenAITTSService.cleanup_old_files   s    	499;L+d2OJJt~~6&&}55(:K:KF:S:S "T^^X FI+bgg.>.>y.IIH1		), 3H:>? 7  	4.qc233	4s+   AC* C* .AC* (C* *
D4DD)r   r    r#   r   r"   N)r   g      ?)   )__name__
__module____qualname____firstlineno____doc__r'   r+   re   rj   rx   __static_attributes__ r)   r&   r   r      s!    :V(`D
4r)   r   )r   r   rJ   tempfilerM   r   r   r   r)   r&   <module>r      s'   
 
    R4 R4r)   