
    ^j#                     .   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edz  Zedz  Zedz  Zedz  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script/tts-manifest.jsonzscript/project-manifest.jsonzaudio/story-full.wavzlog/tts.jsonz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   datatemps      r
   atomic_jsonr-      s|    KdT222DK'122DOODJt%BBBTIT[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 returned HTTP )urllibrequesturlopenBASEstatusRuntimeErrorr'   load)r   responses     r
   get_jsonr;   %   s    			tR		8	8 #H?c!Q&&LdLL8?LLMMM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   ,   sz    ^	D'?4JO  ^b  di  kq  sv  w{  s|  s|  	}	  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rows     r
   
<listcomp>zverify_wav.<locals>.<listcomp><   .    HHHSsww|'<'<'G'GS'G'G'Gr   c                 D    g | ]}|                     d           dk    |S )rO   videorQ   rS   s     r
   rV   zverify_wav.<locals>.<listcomp>=   rW   r   formatdurationr   r   zinvalid WAV streams/duration: )r   r   lenr8   rH   rR   float)r   rawinforM   rP   rY   r[   s          r
   
verify_wavr`   6   s   
))D//

r
"
"C
3xx2~~RaRG++s1R4yG/C/C777888;;Dhhy"%%GHHGHHHEHHGHHHETXXh++//
A>>??H
5zzQ%8q==BDBBCCC>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
   audio_signaturerj   D   s    	3t99d	#	# $v!!##$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ f.0@&/RRs   AAAc                 L   t           j                            | t          d                              d          }t           j                            t          dz   |ddid          }t           j                            |d	          5 }|j	        d
z  dk    rt          d|j	                   |                    d          5 }	 |                    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)rA   voicer   /ttszContent-Typez!application/x-www-form-urlencodedPOST)r+   headersmethod,  r0   r2   r   zPOST /tts returned HTTP wbTi   )r3   parse	urlencodeVOICEencoder4   Requestr6   r5   r7   r8   r   r   write)rA   	part_pathbodyr4   r:   r	   r   s          r
   
synthesizer{   K   s   <!!4%"@"@AAHHQQDn$$v!DE	 %  G 
				5	5 $?c!Q&&K(/KKLLL^^D!! 	$V$ k22 U###	$ 		$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$ 	$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s6   	;D0D5DD	DD		DD Dc            
         t          j        t                              d                    } t          j        t                              d                    }t
          |d         d         z  }|                                }t          j        |          	                                | d         k    rt          d          d                    d | d	         D                                           d          |k    rt          d
          t          d          }t          d                              d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 ]F}	t
          |	d         z  }
|
j                            dd           |	                    d          dk    r|
                                rvt'          |
          \  }}|	                    d          t          |
          k    r>|                    |           t+          |
          }|p|}||k    rt          d          |
                    |
j        dz             }|                                rO	 t'          |          \  }}t3          j        ||
           n(# t6          $ r |                                 d }Y nw xY wd }|	d }t;          dd          D ]}	 t=          |	d         |           t'          |          \  }}t3          j        ||
            n# t6          $ rQ}|}|                                r|                                 |dk     rt?          j         d |z             Y d }~d }~ww xY w|	!                    d!tE          |          j#        tI          |          d d"         d#           tK          t          |            |t+          |
          }|p|}||k    rt          d$          |	!                    dt          |
          |
&                                j'        ||d          |d%         d&           |                    |           d'| d<   tP          j(        )                    tP          j*        j+                  ,                                | d(<   tK          t          |            HtZ                              tZ          j        dz             }t]          j/        tI          |          d)          5 }ta          | d	                   D ]\  }}	t]          j/        tI          t
          |	d         z            d*          5 }|d%k    r(|1                    |2                                           n0t+          t
          |	d         z            |k    rt          d+          |3                    |4                    |5                                                     d d d            n# 1 swxY w Y   	 d d d            n# 1 swxY w Y   t'          |          \  }}t3          j        |tZ                     t          tZ                    }t'          tZ                    \  }}tm          |to          |          z
            tq          d,ts          |          d-z            k    rt          d.          tP          j(        )                    tP          j*        j+                  ,                                }| !                    ddtI          tZ          :                    t
                              |||d/           tK          t          |            i ddd0dd1d2d3tv          d4d5d6tx          d7|d8         d9| d         d:| d:         d;ts          | d	                   dtI          tZ          :                    t
                              d|d<tZ          &                                j'        d=|d>to          |          d?t{          |d@         d%         d?                   dA|d@         d%         dA         |||dB}tK          t|          |           d|dC         dD<   ddtI          t|          :                    t
                              ||ts          | d	                   |dE|dD<   ||dF<   ||d(<   tK          t          |           t          t          j@        dts          | d	                   ||dGdHI                     d S )JNr   r    active_pathsspoken_narrationinput_text_sha256znarration hash drift c              3   &   K   | ]}|d          V  dS )rA   N rS   s     r
   	<genexpr>zmain.<locals>.<genexpr>e   s&      77ss6{777777r   segmentsz-segmentation no longer reconstructs narrationz/healthz/voicesvoicesc              3   V   K   | ]$}|                     d           t          k     |V  %dS )idN)rR   ru   rS   s     r
   r   zmain.<locals>.<genexpr>j   s6      FFcswwt}}/E/Ec/E/E/E/EFFr   r7   okzTTS preflight failedmodel_existsTconfig_existsz"TTS voice model/config unavailableoutput_pathr   	completedartifact_sha256z)completed segment audio parameters differr   r   rK   rA      r   failedrq   )r7   error_classr>   zsegment audio parameters differr   )r7   r   artifact_bytesduration_secondssample_ratechannels	rendering
updated_atrr   r   zconcat parameter driftg?g{Gz?z+aggregate duration differs from segment sum)r7   verifiedaggregate_outputaggregate_sha256aggregate_duration_secondsr   r   providerzpiper-wrapperbase_urlendpointrm   rl   source_canon_sha256canon_sha256spoken_narration_sha256segmentation_plan_sha256segment_countr   r   segment_duration_sumr   rM   r   )rH   health_checked_at
created_atstepstts)r7   r   receiptr   r   r   completed_atstory_duration_seconds)r7   r   r   r   F)r   )Ar'   rE   MANIFEST_PATH	read_textPROJECT_MANIFESTROOT
read_bytesr   r   r   r8   joinrv   r;   rR   nextr"   r#   is_filer`   appendrj   r$   r%   existsr)   r*   	Exceptionunlinkranger{   timesleepr   type__name__rD   r-   statst_sizedatetimenowtimezoneutc	isoformatOUTPUTrb   r   	enumerate	setparamsrc   writeframes
readframes
getnframesabssummaxr\   relative_tor6   ru   intRECEIPTprintr(   )planproject	narrationnarration_byteshealthr   	voice_rowri   	durationsrU   outputr_   r[   currentpart
last_errorattemptexcr,   targetindexrh   aggregate_probeaggregate_durationaggregate_hashfinal_probefinal_durationr   r   s                                r
   mainr   ^   sM
   :m--w-??@@Dj)33W3EEFFGw~./ABBI**,,O~o&&0022d;N6OOO1222	ww77d:&677777>>wGG?ZZJKKKi  Fi  $$Xr22FFFVFFFMMIzz(t##9#1222}}^$$D00IMM/4R4RZ^4^4^?@@@FIJ 7) 7)M**D4888778++0@0@+'//ND(ww())VF^^;;  ***)&11*7f$$&'RSSS!!&-'"9::;;== 	 !+D!1!1h
4((((        HJ A;; ! !
1s6{D111%/%5%5ND(JtV,,,E  1 1 1!$J{{}} &{{
1<0001 

htJ?O?O?XcfgqcrcrswtwswcxyyzzzM4000  !&))"7f@AAA

!%f~~$kkmm3 ("1:

 
 	 	 	 	"""$X%.2283D3HIISSUU\M4((((fmg566D	3t99d	#	# Kv#D$455 	K 	KJE33tc-&88994@@ KFA::$$V%5%5%7%78888$TC,>%>??6II&'?@@@""6#4#4V5F5F5H5H#I#IJJJK K K K K K K K K K K K K K K	KK K K K K K K K K K K K K K K +5T*:*:'O'JtVF^^N",V"4"4K
>C	NN*++c#s9~~7L.M.MMMHIII



 1 5
6
6
@
@
B
BCKK;DcRXRdRdeiRjRjNkNk  BP  p~  NQ  R  R  S  S  St$$$+D 	O 	D	
 	F 	 	w~6 	"4(;#< 	#D)C$D 	T*-.. 	s6--d3344 	> 	&++--/ 	N 	I  	s;y1!4]CDD!" 	K	*1-j9#$  )  G, !!!)GGU +#gNaNabfNgNgJhJh  ~L  bp  CF  GK  LV  GW  CX  CX  jm  n  nGEN(6G$%GL '***	$*T*=M9N9Ndr  M  N  N  ]b  c  c  c  d  d  d  d  dsc   'K:: LL:=M99
OAOOAY(*BYY(YY(YY((Y,/Y,__main__)r   r   r'   r)   rB   r   urllib.parser3   urllib.requestrb   pathlibr   __file__resolver   r   r   r   r   r   r6   ru   r   r-   r;   rH   r`   rj   r{   r   r   r   r   r
   <module>r      sn      				                    tH~~'*1188 	&	&

"    # # #% % %  S S S$ $ $&|d |d |d~ zDFFFFF r   