
    Qp_ji/                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Zd dl
Z
d dlmZ  ee                                          j        d         ZdZdZd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zedk    r e             dS dS )    N)Path   zhttp://192.168.40.33:7862zngoc-huyen-vbeec                    t          j                    }|                     d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )Nrbc                  .                          d          S )Ni   )read)handles   script/run-tts.py<lambda>zsha256.<locals>.<lambda>   s    &++o">">     r   )hashlibsha256openiterupdate	hexdigest)pathdigestblockr	   s      @r
   r   r      s    ^F	4 !F>>>>DD 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   ,A##A'*A'c                     | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz   d	           t          j        ||            d S )
NTparentsexist_ok.partF   )ensure_asciiindent
utf-8encoding)	parentmkdirwith_suffixsuffix
write_textjsondumpsosreplace)r   valueparts      r
   atomic_jsonr-      s|    KdT222DK'122DOODJu5CCCdJU\O]]]JtTr   c                     t           j                            t          | z   d          5 }|j        dz  dk    rt          d|  d|j                   t          j        |          cd d d            S # 1 swxY w Y   d S )N   timeoutd   r   zGET z HTTP )urllibrequesturlopenBASEstatusRuntimeErrorr'   load)r   responses     r
   get_jsonr;   "   s    			tR		8	8 #H?c!Q&&CdCC(/CCDDDy""# # # # # # # # # # # # # # # # # #s   <A33A7:A7c                     t          j        dddddddddt          |           g
d	d	d	
          }t          j        |j                  S )Nffprobez-verrorz-show_entrieszformat=duration,sizezBstream=index,codec_type,codec_name,sample_rate,channels,sample_fmtz-ofr'   T)checkcapture_outputtext)
subprocessrunstrr'   loadsstdout)r   results     r
   proberH   )   sx    ^	D'?4JO  ^b  di  kq  sv  w{  s|  s|  	}4d  F :fm$$$r   c                    |                      d                              d          }t          |          dk    s|d d         dk    s|dd         dk    rt          d|            t	          |           }|                    dg           }d	 |D             }d
 |D             }t          |                    di                               dd                    }t          |          dk    s|s|dk    rt          d|            ||fS )Nr         s   RIFF   s   WAVEzinvalid RIFF/WAVE: streamsc                 D    g | ]}|                     d           dk    |S )
codec_typeaudioget.0xs     r
   
<listcomp>zverify_wav.<locals>.<listcomp>7   .    BBB1155#6#6'#A#AQ#A#A#Ar   c                 D    g | ]}|                     d           dk    |S )rO   videorQ   rS   s     r
   rV   zverify_wav.<locals>.<listcomp>8   rW   r   formatdurationr   r   zinvalid WAV stream/duration: )r   r   lenr8   rH   rR   float)r   rawinforM   rP   rY   r[   s          r
   
verify_wavr`   1   s   
))D//

r
"
"C
3xx2~~RaRG++s1R4yG/C/C777888;;Dhhy"%%GBBBBBEBBBBBETXXh++//
A>>??H
5zzQ%8q==A4AABBB>r   c                     t          j        t          |           d          5 }|                                }d d d            n# 1 swxY w Y   |j        |j        |j        |j        fS )Nr   )waver   rD   	getparams	nchannels	sampwidth	frameratecomptype)r   sourceparamss      r
   	signaturerj   ?   s    	3t99d	#	# $v!!##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $V-v/?PPs   AAAc                 v    t           j                            | t          d                              d          S )N)rA   voicer   )r3   parse	urlencodeVOICEencode)rA   s    r
   request_bodyrq   E   s.    <!!4%"@"@AAHHQQQr   c                 T   t          |           }t          j                            t          dz   |ddid          }t          j                            |d          5 }|                    d          5 }|j        d	z  d
k    rt          d|j                   |j	        
                                }|dvrt          d|           	 |                    d          }|sn|                    |           .	 d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )N/ttszContent-Type!application/x-www-form-urlencodedPOST)dataheadersmethodih  r0   wbr2   r   zPOST /tts HTTP >   	audio/wav
audio/waveaudio/x-wavapplication/octet-streamzunexpected TTS content type: Ti   )rq   r3   r4   Requestr6   r5   r   r7   r8   rw   get_content_typer   write)rA   r,   bodyr4   r:   r	   content_typer   s           r
   
synthesizer   I   s   Dn$$TF]X{G|  FL$  M  MG					5	5 
 499T?? 
 V\?c!Q&&BBBCCC'88::eeeM|MMNNN	 MM+..E LL		  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 s7   D4BD9DD			DD		DD!$D!c                  2   t           dz  } t          j        |                     d                    }|d         }t           |d         z  }t          j        |                    d                    }t           |d         z  }t           |d         z  }t           |d         z  }t           |d	         z  }t           |d
         z  }	t           |d         z  }
t          j        |                    d                    }|                                }t          j        |                                          |d         k    rt          d          d	                    d |d         D                       
                    d          |k    rt          d          |d         t          |          t          |          t          |          d}|                                D ]0\  }}|                    |          |k    rt          d|           1|                    d          dus|                    d          |d         k    rt          d          |	                                s|
                                rt          d          t          d          }t          d          }|                    dt          |t                     r|ng           }t#          d |D             d           }|                    d          dk    s|st          d           |                    d!          d"u s|                    d#          d"u rt          d$          d }g }|d         D ]}t!          |                    d%g                     }t          j        t%          |d&                                                             }|                    d'          t          j        |d&         
                    d                                                    k    rt          d(          |                    d)          |k    rt          d*          |                    d+          t&          d,z   k    s7|                    d-          t(          k    s|                    d.          d/k    rt          d0          t           |d1         z  }|j                            dd2           |                    d          d3k    r|                                r|                    d4          t          |          k    rj|                    d5          |k    rQt1          |          \  }}t3          |          }|p|}||k    rt          d6          |                    |           <|                    |j        d7z             }d }|                                ri	 t1          |          \  }}t;          j        ||           |                    d8d9d:           n(# t>          $ r |                     d;           d }Y nw xY w|!d }tC          d<d=          D ]o}	 tE          |d&         |           t1          |          \  }}t;          j        ||           |                    |d3d:            n# tF          j$        j%        $ r} |                    |d>tM          |           j'        | j(        d?           | }|                     d;           d@| j(        cxk    rdAk     r	n nY d } ~  n|dBk     rtS          j*        dC|z             Y d } ~ d } ~ wt>          $ rk} |                    |d>tM          |           j'        dD           | }|                     d;           |dBk     rtS          j*        dC|z             Y d } ~ id } ~ ww xY w||+                    d>||tM          |          j'        tY          |          d dE         dF           d>|d<   tZ          j-        .                    tZ          j/        j0                  1                                |dG<   te          ||           |t3          |          }|p|}||k    rt          dH          |+                    d3||t          |          |3                                j4        ||dC         |d8         dI           |                    |           dJ|d<   tZ          j-        .                    tZ          j/        j0                  1                                |dG<   te          ||           |
                    |
j        d7z             }!tk          j6        tY          |!          dK          5 }"to          |d                   D ]\  }#}t           |d1         z  }tk          j6        tY          |          dL          5 }$|#d8k    r(|"8                    |$9                                           n"t3          |          |k    rt          dM          |":                    |$;                    |$<                                                     d d d            n# 1 swxY w Y   	 d d d            n# 1 swxY w Y   t1          |!          \  }%}&t{          |&t}          |          z
            t          dNt          |          dOz            k    r%|!                     d;           t          dP          t;          j        |!|
           tZ          j-        .                    tZ          j/        j0                  1                                }'t          |
          }(|+                    d3d|d         |(|&|'dQ           te          ||           i dd3dddRdSdTt&          d+d,d-t(          dUd&d-gdVd/d|d         dW|dW         d|d         dX|d	         dY|dY         dZ|dZ         d[|d[         d\t          |d                   d1|d         |(|
3                                j4        |&t}          |          t          |%d]         d8         d^                   |%d]         d8         d_         |%|'|'d`	})te          |	|)           d3|da         db<   d3d|d
         |(|&t          |d                   |'dc|db<   |&|dd<   |'|dG<   te          | |           t          t          jC        d3t          |d                   |&|(ded"f                     d S )gNzscript/project-manifest.jsonr   r    active_pathstts_manifestspoken_narrationspoken_narration_sourcetts_pronunciation_lexicontts_pronunciation_receipttts_receipt	tts_audioinput_text_sha256znarration hash drift c              3   &   K   | ]}|d          V  dS )rA   N rS   s     r
   	<genexpr>zmain.<locals>.<genexpr>j   s&      33Qqy333333r   segmentsz6segmentation does not reconstruct normalized narrationsource_canon_sha256)r   spoken_narration_source_sha256lexicon_sha256 tts_pronunciation_receipt_sha256zTTS plan lineage drift: verifiedTspoken_narration_sha256z,pronunciation gate not terminal on TTS inputz'aggregate output/receipt must be virginz/healthz/voicesvoicesc              3   V   K   | ]$}|                     d           t          k     |V  %dS )idN)rR   ro   rS   s     r
   r   zmain.<locals>.<genexpr>}   s6      @@A155;;%+?+?a+?+?+?+?@@r   r7   okzTTS preflight failedmodel_existsFconfig_existsz"TTS voice model/config unavailableattemptsrA   text_sha256zsegment text hash driftpayload_sha256zsegment payload hash driftendpointrs   rl   r   rt   zsegment request contract driftoutput_pathr   	completedartifact_sha256terminal_payload_sha256zcompleted segment format driftr   r   recovered_part)attemptr7   )
missing_okr   rK   failed)r   r7   error_classhttp_statusi  i     r   )r   r7   r   i,  )r7   r   r   r   r>   
updated_atzsegment audio format differs)r7   r   r   r   artifact_bytesduration_secondssample_ratechannels	renderingry   r   zconcat format driftg?g{Gz?zaggregate duration mismatch)r7   r   aggregate_outputaggregate_sha256aggregate_duration_secondsr   providerzpiper-wrapperbase_urlrequest_fieldsrequest_content_typer   tts_pronunciation_receipt_pathr   r   segmentation_plan_sha256segment_countrM   r   r   )	r   r   r   segment_duration_sumr   r   rH   health_checked_at
created_atstepstts)r7   r   receiptr   r   r   completed_atstory_duration_seconds)r7   r   r   r   )r   )DROOTr'   rE   	read_text
read_bytesr   r   r   r8   joinrp   itemsrR   existsr;   
isinstancelistnextrq   r6   ro   r"   r#   is_filer`   rj   appendr$   r%   r)   r*   	Exceptionunlinkranger   r3   r>   	HTTPErrortype__name__codetimesleepr   rD   datetimenowtimezoneutc	isoformatr-   statst_sizerb   r   	enumerate	setparamsrc   writeframes
readframes
getnframesabssummaxr\   intprintr(   )*manifest_pathmanifestpaths	plan_pathplan	narrationrh   lexiconpronunciation_pathreceipt_pathoutputpronunciationnarration_bytescheckskeyr+   healthvoices_payloadr   	voice_rowfmt	durationsrowr   expected_payload_shasegment_r[   currentr,   r>   r   exctemptargetindex
source_wavaggregate_probeaggregate_durationr   artifact_shar   s*                                             r
   mainr  Y   sB   99Mz-1171CCDDH^$Eu^,,I:i))7);;<<Du/00IE344FU677G&A BB%..LE+&&FJ1;;W;MMNNM**,,O~o&&0022d;N6OOO1222	ww33$z"233333::7CCVVSTTT,-BC*0.. //,23E,F,F	 F llnn A A
U88C==E!!?#??@@@ "$$D00M4E4EF_4`4`dhi|d}4}4}IJJJ F FDEEEi  Fi((NJ~W[<\<\*d..bdeeF@@@@@$GGIzz(t##9#1222}}^$$--1O1OSX1X1X?@@@
CIJ B% B%
B//00&~l3v;.G.GHHRRTT77=!!W^CK4F4Fw4O4O%P%P%Z%Z%\%\\\899977#$$(<<<;<<<77:$-//37773C3Cu3L3LPSPWPWXfPgPg  lO  QO  QO?@@@]++TD999778++0A0A+cggN_F`F`djkrdsdsFsFsx{xx  AZ  y[  y[  _s  ys  ys$W--KAx((G.C#~~"#CDDDX&&&""7>G#;<<;;== 	  (..8
4)))A9I J JKKKK      t,,,  E A;; 1 11s6{D111",T"2"2KAxJtW---OO;$O$OPPPE|- 1 1 1OO8\`ad\e\e\n  @C  @H  %I  %I  J  J  JEKK4K000ch,,,,,,,,,{{
1<000  1 1 1OO8\`ad\e\e\n$o$opppEKK4K000{{
1<0001 

hK_mu  GK  LQ  GR  GR  G[  fi  jo  fp  fp  qu  ru  qu  fv  w  w  x  x  x!)X%-%6%:%:8;L;P%Q%Q%[%[%]%]\"It,,,G$$nWc>>=>>>

kFZhp  FL  MT  FU  FU  ip  iu  iu  iw  iw  i  U]  nu  vw  nx  FM  NO  FP  Q  Q  	R  	R  	R"""$X%.2283D3HIISSUU\It$$$$fmg566D	3t99d	#	# Sv#D$455 	S 	SJE3S//G3w<<.. S*A::$$Z%9%9%;%;<<<<w''3..&'<==="":#8#89N9N9P9P#Q#QRRRS S S S S S S S S S S S S S S	SS S S S S S S S S S S S S S S +5T*:*:'O'
I.//#c3y>>D;P2Q2QQQt$$$8999JtV



 1 5
6
6
@
@
B
BC&>>LKK;DeT_N`  wC  cu  EH  I  I  J  J  J	4   +)4O%/7A6KRTY 	67+ 	 C	
 	t$9: 	)$/O*P 	"4(;#< 	)%0K*L 	+D1S,T 	$/0 	#D)C$D 	T*-.. 	u[) ?K^d^i^i^k^k^s.I?95a8GHHVefoVpqrVst~V s#!  G$ g&&&*HWe!,$5Q^K_  uA  Wi  |  @D  EO  @P  |Q  |Q  cf  g  gHUO);H%& H\x(((	$*T*=M9N9Ndv  CO  P  P  _d  e  e  e  f  f  f  f  fsw   ?X"X;:X;AZ//_A]	']		_A ^<<_AjBi*j*i..j1i.2jj
j__main__)r   r   r'   r)   rB   r   urllib.parser3   urllib.errorurllib.requestrb   pathlibr   __file__resolver   r   r6   ro   r   r-   r;   rH   r`   rj   rq   r   r  r   r   r   r
   <module>r     s`      				                        tH~~'*"    # # #% % %  Q Q QR R R      [f [f [f| zDFFFFF r   