
    Gu_j!                        d dl m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 ed          Zej        ZdZdZdZedz  Zedz  Zed	z  Zed
z  Zedz  ZddddZd Zd Zd Zd ZddZd Zd Zedk    r e             dS dS )    )PathNzN/data/video-pipeline/HaTramAudio/project/021-Ngay-Toi-Bi-Gach-Ten-Khoi-Gia-Phazrun-20260721T131911Z-ac5d64d1@bb80e97d9adcb0427ea3828449858445323db228cca38f37cdf0446fffefdd6fz0http://192.168.40.32:7861/voice/ngoc-huyen-clonezscript/spoken-narration.txtzaudio/chunkszwork/tts/hot-manifest.jsonzscript/tts-manifest.jsonzaudio/story-full.wav
doc_truyenz1.0true)stylespeeddenoisec                      t           j                            t           j        j                                                                      dd          S )Nz+00:00Z)dtdatetimenowtimezoneutc	isoformatreplace     work/tts/run_tts.pyr   r      s6    ;??2;?++5577??#NNNr   c                 &   t          j                    }t          | d          5 }|                    d          x}r,|                    |           |                    d          x},d d d            n# 1 swxY w Y   |                                S )Nrbi   )hashlibsha256openreadupdate	hexdigest)pathhfblocks       r   shar"      s    A	dD		 Qvvo...e 	HHUOOO vvo...e 	               ;;==s   AA44A8;A8c                     | j                             dd           |                     | j        dz             }|                    t          j        |dd          dz   d	           |                    |            d S )
NTparentsexist_okz.tmpF   )ensure_asciiindent
utf-8encoding)parentmkdirwith_suffixsuffix
write_textjsondumpsr   )r   valuetmps      r   atomic_jsonr7      s|    KdT222


4;/
0
0CNN4:e%BBBTIT[N\\\KKr   c                     t          j        t          dz                      d                    } | d         t          k    r| d         t
          k    sJ | d         dk    r| d         d	k    sJ t          t                    t          k    sJ t          j        t          d
z                      d                    }|d         r|d         t          k    sJ d S )Nz.ownership-lock.jsonr+   r,   
project_idrun_idownerzorostatusmain_session_pipelinezscript/story-manifest.jsonverifiedspoken_narration_sha256)	r3   loadsROOT	read_textPROJECTRUNr"   	NARRATIONCANON)lockstorys     r   guardrJ   %   s    :t44???QQRRD((T(^s-B-B-B-B=F""tH~9P'P'P'P'Py>>U""""J;;FFPWFXXYYEJ'@!AU!J!J!J!J!J!Jr   
  c                    d |                      d          D             }g }|D ]}t          |          |k    r|                    |           +t          j         d|          }d}|D ]]}t          |          |k    rt	          d          |s|n|dz   |z   }t          |          |k    r|                    |           |}[|}^|r|                    |           g d}}	|D ];}
|s|
n|dz   |
z   }t          |          |k    r|	                    |           |
}9|}<|r|	                    |           d                    d |	D                       t          j        dd|           k    sJ |	S )	Nc                 ^    g | ]*}|                                 |                                 +S r   )strip.0xs     r   
<listcomp>z split_chunks.<locals>.<listcomp>/   s-    EEE17799E!''))EEEr   z

u   (?<=[.!?…”])\s+ zsentence exceeds chunk limit c              3   B   K   | ]}t          j        d d|          V  dS )\s+rS   N)resubrO   s     r   	<genexpr>zsplit_chunks.<locals>.<genexpr>L   s0      99Q26&"a((999999r   rV   )splitlenappendrW   RuntimeErrorjoinrX   )textlimit
paragraphsunits	paragraph	sentencescurrentsentencetrialchunksunits              r   split_chunksrj   .   s   EETZZ%7%7EEEJE " "	y>>U""LL###H3Y??	! 	  	 H8}}u$$"#ABBB$+IHH31IE5zzE!!W%%%" 	"LL!!!"GF  #@6)9D)@u::MM'"""GGGG g7799&99999RVFBPT=U=UUUUUMr   c                 v   t          j        t          |           d          5 }|                                |                                |                                |                                f\  }}}}d d d            n# 1 swxY w Y   ||z  }|dk    r|dk    r|dk    r|dk    r|dk    sJ |||||dS )Nr   r   )sample_ratechannelssample_widthframesduration_seconds)waver   strgetframerategetnchannelsgetsampwidth
getnframes)r   wraterm   widthro   durations          r   	probe_wavr{   P   s   	3t99d	#	# mq()(8(8!..:J:JANNL\L\^_^j^j^l^l(l%hvm m m m m m m m m m m m m m m}H!881vzzhQRllllXuX^t|}}}s   ABB
Bc                     t                       t                              dd           t                              d          } t          |           }dt          t          ddt          t          t          t          t          |          g t                      d}t                                          rt          j        t                              d                    }|                    d	          t          k    r?|                    d
          t          |          k    r|                    dg           |d<   d |d         D             }t%          |d          D ]\  }t                       t          dddz  }t'          j        |                    d                                                    }|                              }|r|                    d          |k    r{|                                rgt/          |          }	|                    d          t1          |          k    r2t3          |                    dd          |	d         z
            dk     rdt          t          dt          t          t          |t          t5          |          t                      d}
t7          t8          dddz  |
           t:          j                            d|it                                        d          }t:          j         !                    t          |ddid          }|"                    d          }	 t:          j         #                    |d           5 }tI          |d!          5 }|j%        d"k    rtM          d#|j%                   |'                    d$          x}r,|(                    |           |'                    d$          x},d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   |)                                j*        dk    rtM          d%          |+                    |           t/          |          }	d&|t5          |          |)                                j*        t1          |          d'|	d         |	t                      d(
}fd)|d         D             |gz   |d<   |d         ,                    d* +           t                      |d,<   t7          t          |           |
-                    d&|d         |d         t                      d-           t7          t8          dddz  |
           # t\          $ r}|                                r|/                                 |-                    d.dta          |          j1        t5          |          t                      d/           t7          t          |           |
-                    d.ta          |          j1        t5          |          t                      d0           t7          t8          dddz  |
            d }~ww xY wte          |d         d1 +          }d2 |D             tg          ti          dt          |          dz                       k    sJ tk          ||          D ]\  }}tm          |d3                   }|d         t'          j        |                    d                                                    k    sJ |d         t1          |          k    sJ t/          |           t8          d4z  }|7                    d58                    d6 |D                       d           ts          j:        d7d8d9d:d;d<d=d>d?d@t5          |          dAdBdCdDdEdFt5          tv                    gdG           t/          tv                    }|-                    d&dt          |          t5          tv                    tv          )                                j*        |d         t1          tv                    |d't                      dH
           t7          t          |           t7          tx          |           t{          t          j>        d&dt          |          |d         tv          )                                j*        |dI         dJdK                     d S )LNTr$   r+   r,      runningF)schema_versionr9   r:   r=   r?   source_canon_sha256r@   endpointrequest_configchunk_countsegments
updated_atr   r   r   c                 R    i | ]$}|                     d           dk    |d         |%S )r=   	completedindexgetrO   s     r   
<dictcomp>zmain.<locals>.<dictcomp>d   s3    ___1hS^@^@^7Q@^@^@^r   zsegment-04dz.wavtext_sha256audio_sha256rp   r   gMbP?creating)r   r9   r:   r=   candidate_sha256r   r@   r   r   r   output_path
created_atzlog/tts-attempt-z.jsonr_   zContent-Typez!application/x-www-form-urlencodedPOST)dataheadersmethodz	.wav.parti  )timeoutwb   zHTTP i   zempty WAV responser   sha256_stream_8MiB)
r   r=   r   r   
size_bytesr   hash_methodrp   probecompleted_atc                 F    g | ]}|                     d           k    |S r   r   )rP   rQ   r   s     r   rR   zmain.<locals>.<listcomp>   s.    #_#_#_!quuW~~Y^G^G^AG^G^G^r   c                     | d         S Nr   r   rQ   s    r   <lambda>zmain.<locals>.<lambda>   s
    AgJ r   )keyr   )r=   r   rp   r   failed)r=   r?   failed_segment_indexfailure_typefailurer   )r=   r   r   	failed_atc                     | d         S r   r   r   s    r   r   zmain.<locals>.<lambda>   s
    !G* r   c                     g | ]
}|d          S r   r   rO   s     r   rR   zmain.<locals>.<listcomp>   s    )))1AgJ)))r   r   zwork/tts/concat.txtrS   c              3      K   | ]@}d t          t          |d                                                 dd          z   dz   V  AdS )zfile 'r   'z'\''z'
N)rr   r   r   rO   s     r   rY   zmain.<locals>.<genexpr>   sT      uughhT!M2B-C-C)D)D)L)LSRY)Z)ZZ]bbuuuuuur   ffmpegz-hide_bannerz	-loglevelerrorz-yz-fconcatz-safe0z-iz-ac1z-ar48000z-c:a	pcm_s16le)check)
r=   r?   segment_countoutputoutput_size_bytesoutput_durationoutput_sha256output_prober   r   r   )r=   r?   r   rp   bytesr   )r(   )?rJ   OUTDIRr/   rF   rC   rj   rD   rE   rG   ENDPOINTCONFIGr[   r   HOTexistsr3   rA   r   	enumerater   r   encoder   r{   r"   absrr   r7   rB   urllibparse	urlencoderequestRequestr0   urlopenr   r=   r]   r   writestatst_sizer   sortr   	Exceptionunlinktype__name__sortedlistrangezipr   r2   r^   
subprocessrunFULLFINALprintr4   )r_   rh   manifestoldr   chunkout	text_hashpriorr   attemptr   r   tempresponser    r!   segmentexcr   itemr   
full_prober   s                          @r   mainr   X   s@	   	GGG
LLL---00D$F"#7cU^lq',\d"(VRTdgdidik kH zz|| ;j889977())U22sww}7M7MQTU[Q\Q\7\7\#&77:r#:#:HZ __(<___I!&!,, , ,u1%11111N5<<#8#899CCEE	e$$ 	UYY}--::szz||:cNNEyy((CHH44UYYGY[\=]=]`efx`y=y9z9z  ~C  :C  :C%&gXb',Ugl!)v"%c((#%%A A 	D>e>>>>>HHH|%%vu&?&?@@GGPP.((~WzF{  EK(  L  L{++	'''== #4PTVZK[K[ #_`?c))&'@x'@'@AAA'}}[999e #GGENNN  (}}[999e ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 yy{{"a''"#7888LLcNNE %Ygjkngogo%(XXZZ%7Sbv+01C+Dufifkfkm mG $`#_#_#_x
/C#_#_#_cjbk#kHZ Z %%*>*>%???%(UUH\"X&&&NNk7>CZpw  yK  qL  ^a  ^c  ^c  d  d  e  e  eB%BBBBBGLLLL 	 	 	{{}} OOxU\a-1#YY-?CPSHHdgdidik k l l lX&&&NNhS		@R_bcf_g_gvyv{v{||}}}B%BBBBBGLLL	 hz*0D0DEEEH)))))T%3v;;?2K2K-L-LLLLL8V,,  e4&''M"gnU\\'5J5J&K&K&U&U&W&WWWWWN#s3xx////#))F
bgguultuuuuu  AH  I  I  INHnk7D$PXZacfhlnqrxnyny3wSYYPW[] ] ] ]4JOO{sS[}}hklphqhq*.))++*=R\]oRp&)$ii\p  CF  CH  CHI I J J J Xx   	$*3x==*45G*HSWS\S\S^S^Sf ( 9; ;INP P P Q Q Q Q Qsc   !U'P8A&O*P*O..P1O.2P5UP	UP		EU
Y%C'YY__main__)rK   ) pathlibr   r   r   r   r3   rW   r   urllib.parser   urllib.requestrq   rB   namerD   rE   rG   r   rF   r   r   r   r   r   r   r"   r7   rJ   rj   r{   r   r   r   r   r   <module>r      s         X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Xt\]]
)%J=00			
))))$$%F	C	CO O O    K K K   D~ ~ ~MQ MQ MQ^ zDFFFFF r   