
    $kiM                         S SK r S SKrS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
Jr  S SKJrJr  S SKJr  S SKJr  \" S5      c(  \" S	5        \" S
5        \" S5        \" S5        \" S5        SS jrS SKrS rS rg)    N)FileResponse)detect)remove_filesplit_text_by_languageget_sentiment_logicapply_smart_tashkeel)AudioSegmenteffects)which)detect_leading_silenceffmpegz3
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!zWARNING: ffmpeg NOT FOUND!z-pydub needs ffmpeg to merge audio seamlessly.z.Please install ffmpeg and add it to your PATH.z3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
c                 f    [        XS9n[        U R                  5       US9n[        U 5      nXXC-
   $ )z3Trim silence from start and end of an AudioSegment.)silence_threshold)r   reverselen)audio	threshold
start_trimend_trimdurations        @D:\Projects\GLMA\whisper_new\whisper_new\services\tts_service.pytrim_silencer      s5    'KJ%emmoSH5zHH-..    c                 p   #    [         R                  " XX#US9nUR                  U5      I Sh  vN   U$  N7f)z3Helper function to generate a single audio segment.ratepitchvolumeN)edge_ttsCommunicatesave)textvoicer   r   r   output_pathcommunicates          r   generate_segment_audior&      s9     &&tSYZK


;
''' (s   +646c                   #    [        [        R                  " 5       5      nSU S3n/ n	Sn
 US:w  a  US:w  a}  UnU(       a  [        U5      n[	        U5      n[        X5      u  pnUS:X  a  UOUnUS:X  a  UOUnUS:X  a  UOUn[        R                  " XUUUS9nUR                  U5      I S h  vN   GO([        U5      n[        U5      S::  a}  UnU(       a  [        U5      n[	        U5      n[        X5      u  pnUS:X  a  UOUnUS:X  a  UOUnUS:X  a  UOUn[        R                  " XUUUS9nUR                  U5      I S h  vN   GO/ n/ n[        U5       H  u  nu  nnUnUS:X  a  U(       a  [        U5      n[        UU5      u  pnUS:X  a  UOUnUS:X  a  UOUnUS:X  a  UOUnS	U S
U S3nU	R                  U5        UR                  [        UU
UUUU5      5        UR                  U5        M     [        R                  " U6 I S h  vN   S nU H  n[         R"                  R%                  U5      (       d  M)  [         R"                  R'                  U5      S:  d  MN  [(        R*                  " USS9n[-        U5      n[.        R0                  " U5      n Uc  U nM  UR                  U SS9nM     U(       a  [        U5      S:  a  UR3                  USS9  [         R"                  R%                  U5      (       a#  [         R"                  R'                  U5      S:X  a0  [        R                  " US5      nUR                  U5      I S h  vN   U R5                  [6        U5        U	 H  n!U R5                  [6        U!5        M     [9        USSS9$ !   Sn GND= f GN!   Sn GN= f GNf GN Na! [:         a  n"[         R"                  R%                  U5      (       a  [         R<                  " U5        U	 H?  n![         R"                  R%                  U!5      (       d  M)  [         R<                  " U!5        MA     S[        U"5      0s S n"A"$ S n"A"ff = f7f)Nspeech_z.mp3zen-US-AvaMultilingualNeuralAuto arr      temp__r   mp3)formatd   )	crossfadezar-EG-SalmaNeuralz
audio/mpegz
speech.mp3)path
media_typefilenameerror)struuiduuid4r   r   r   r   r    r!   r   r   	enumerateappendr&   asynciogatherosr3   existsgetsizer	   	from_filer   r
   	normalizeexportadd_taskr   r   	Exceptionremove)#background_tasksr"   r#   r   r   r   tashkeelfile_idr$   
temp_filesDEFAULT_MULTILINGUAL_VOICEprocessed_textlangs_rates_pitchs_volumef_ratef_pitchf_volumer%   segmentstaskssegment_dataiseg_textseg_langprocessed_segtemp_seg_pathcombined_audio	temp_pathsegment_audiotrimmed_segmentnormalized_segmentfes#                                      r   tts_servicerc   $   s    $**,GG9D)KJ!>X!F?u{!N!5d!;t )<D(G%FX#v~V4F!&&geG#)V#3xH"..~6Y`iqrK"";/// .d3H8}!!%%9$%?N"4LT,?,K)#'6>t%*f_'%'-'78V&22>djry  CK  L!&&{333 !/8/B+A+($,M4'H(<X(F0CHh0W-FX'+v~V4F).&geG+1V+;xH&+G9AaS$=M%%m4 LL!7Gacikrt|  L  "M  N ''6 0C$ nne,,, "&!-Iww~~i00RWW__Y5ORS5S(4(>(>yQV(W*6}*E-4->->-O*)1-?N-;-B-BCUad-B-eN ". "c.&9A&="))+e)Dww~~k**bggook.Ja.O"..t5HIK"";///!!+{;A%%k15  P\]]W  4D 0 $t 40 -( 0  !77>>+&&		+(>Aww~~a  "))A, Q  	!s   )Q N3 N AN3 .N/4N3 #N! .AN3 N+C	N3 N.-N3 !N3 &C)N3 N1AN3 QNN3 !N(%N3 .N3 1N3 3
Q=A!Q"&QQ	QQQ)g      T)r>   r8   r   fastapi.responsesr   
langdetectr   utilsr   r   r   r   pydubr	   r
   pydub.utilsr   pydub.silencer   printr   r<   r&   rc    r   r   <module>rl      so    	   *  ` ` '  0 	?	-	
&'	
9:	
:;	-/ ^!r   