
    mi                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZ d dlmZmZ d dlmZ d dlmZ  ed          7 ed	            ed
            ed            ed            ed           ddZd dlZd ZddZdS )    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!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
      Tc                     t          | |          }t          |                                 |          }t          |           }| |||z
           S )z3Trim silence from start and end of an AudioSegment.)silence_threshold)r   reverselen)audio	threshold
start_trimend_trimdurations        0/var/www/html/speakWrite/services/tts_service.pytrim_silencer      sN    'KKKJ%emmooSSSH5zzHHX--..    c                 r   K   t          j        | ||||          }|                    |           d{V  |S )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'      sN      &tUUSYZZZK


;
'
''''''''r   Fc                   K   t          t          j                              }d| d}	g }
d}	 |dk    r|dk    r|}|rt          |          }t	          |          }n	#  d}Y nxY wt          ||          \  }}}|dk    r|n|}|dk    r|n|}|dk    r|n|}t          j        |||||          }|                    |	           d {V  nUt          |          }t          |          dk    r|}|rt          |          }t	          |          }n	#  d}Y nxY wt          ||          \  }}}|dk    r|n|}|dk    r|n|}|dk    r|n|}t          j        |||||          }|                    |	           d {V  ng }g }t          |          D ]\  }\  }}|}|dk    r|rt          |          }t          ||          \  }}}|dk    r|n|}|dk    r|n|}|dk    r|n|}d	| d
| d}|
                    |           |                    t          ||||||                     |                    |           t          j        |  d {V  d }|D ]}t           j                            |          rxt           j                            |          dk    rUt)          j        |d          }t-          |          } t/          j        |           }!||!}|                    |!d          }|r*t          |          dk    r|                    |	d           t           j                            |	          r#t           j                            |	          dk    r0t          j        |d          }|                    |	           d {V  |r|	|
fS |                     t6          |	           |
D ]}"|                     t6          |"           t9          |	dd          S # t:          $ r}#t           j                            |	          rt!          j        |	           |
D ]5}"t           j                            |"          rt!          j        |"           6|r|#dt          |#          icY d }#~#S d }#~#ww xY w)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osr4   existsgetsizer	   	from_filer   r
   	normalizeexportadd_taskr   r   	Exceptionremove)$background_tasksr#   r$   r   r   r   tashkeelreturn_path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_servicere   $   s     $*,,G)G)))KJ!>\!F??u{{!N <!5d!;!;t4DDD(;D$(G(G%FGX#v~~VV4F!&&ggeG#)V#3#3xxH".~u6Y`iqrrrK"";////////// .d33H8}}!!!% @%9$%?%?N"4LLTT#t,?d,K,K)#'6>>t%*f__''%'-'7'788V&2>C]djry  CK  L  L  L!&&{3333333333 !/8/B/B 7 7+A+($,M4''H'(<X(F(F0CHh0W0W-FGX'+v~~VV4F).&ggeG+1V+;+;xxH$=G$=$=a$=$=$=M%%m444 LL!7Gacikrt|  L  "M  "M  N  N  N ''6666 ne,,,,,,,, "&!- 	f 	fIw~~i00 fRW__Y5O5ORS5S5S(4(>yQV(W(W(W*6}*E*E-4->-O-O*)1-?NN-;-B-BCUad-B-e-eN! Ec.&9&9A&=&="))+e)DDDw~~k** 	0bgook.J.Ja.O.O".t5HIIK"";///////// 	+
**!!+{;;; 	6 	6A%%k15555P\]]]] ! ! !7>>+&&>	+(>(>(> 	/ 	/Aw~~a  .")A,,,aQ       !sW   O( A O( A#!B"O( D O( DJO( AO( (
Q<2A?Q71Q<7Q<)r   )F)r?   r9   r    fastapi.responsesr   
langdetectr   utilsr   r   r   r   pydubr	   r
   pydub.utilsr   pydub.silencer   printr   r=   r'   re    r   r   <module>rn      sY   				   * * * * * *       ` ` ` ` ` ` ` ` ` ` ` ` ' ' ' ' ' ' ' '       0 0 0 0 0 0 	5??	E-	E
&'''	E
9:::	E
:;;;	E-/ / / /   b! b! b! b! b! b!r   