
    `j                         d dl mZ 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d Zd	 Zd
 Zd Zedk    r e             dS dS )    )Path)arrayNzO/data/video-pipeline/HaTramAudio/project/029-Chiec-O-De-Lai-O-Tram-Xe-Buyt-Cuoizrun-20260722T162951Z-87a939adLevyc                      t           j                             t           j        j                                                                      dd          S )Nz+00:00Z)datetimenowtimezoneutc	isoformatreplace     work/verify_tts.pyr	   r	      s<    "&&x'8'<==GGIIQQRZ[^__
_r   c                    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)fs   r   <lambda>zsha.<locals>.<lambda>
   s    qvvk** r   r   )hashlibsha256openiterupdate	hexdigest)phbr   s      @r   shar       s    
>ffTll <a****3//;;a;< < < < < < < < < < < < < < <	s   ,A##A'*A'c                     t          j        t          dz                                            } t          t
          t          d                                D ]0\  }}|                     |          |k    rt          d|z             1d S )Nz.ownership-lock.json)
project_idrun_idownerzownership mismatch )
jsonloadsROOT	read_textPIDRUNOWNERitemsgetRuntimeError)dkvs      r   guardr2      s~    :t**557788s599??AA = =SQqUU1XXq[[|$9!$;<<<[= =r   c                     t                       |                     d| j        z   dz             }|                    t	          j        |dd          dz              t          j        ||            d S )N.z.tmpF   )ensure_asciiindent
)r2   	with_namename
write_textr%   dumpsosr   )r   r/   ts      r   atomicr?      sk    1;;s16z&())!,,tz!QV^_7`7`7`ae7e*f*f*fgigqrstugvgvgvgvgvr   c                     t                       t          j        t          dz                                            } t          j        t          dz                                            }t          dz  }t          dz  }|                     d          dk    s|                     d          durt          d	          |d
         }g }d}|                     d          pi }| d         D ]}t          |d                   }	t          |d                   }
t          |	          |d         k    st          |
          |d         k    rt          d          |	                    |	
                                           |t          |d                   z  }d                    |          |
                                k    }t          dz  t          z  dz  }t          dz  t          z  dz  }dgd | d         D             z   }|                    d                    |          dz   d           |                    d           t!          j        ddd d!d"d#d$d%d&d't%          |          d(d)t%          |          g           t          |          }|                                 t          j        t!          j        d*d+d!d,d-d.d/t%          |          g                    }|d0         d1         }t          |d2         d3                   }t!          j        dd+d!d't%          |          d#d4d5gt           j        t           j        6          }t!          j        ddd7d't%          |          d8d9d#d4d5g
t           j        t           j        d:          }t-          t/          j        d;|j                            }d1}d1}t5          j        t%          |          d<          5 }|                                d=k    s0|                                d>k    s|                                d?k    rt          d@          |                    dA          x}rtA          dB          }|!                    |           tD          j#        dCk    r|$                                 |t-          |          z  }|tK          dD |D                       z  }|                    dA          x}d d d            n# 1 swxY w Y   |r||                    dE          k    oW|                    dF          dGk    o>|                    dH          dIk    o%|                    dJ          t          |          k    }|                    dK          d1k    }n|t          |          k    }d}d|                     dL          |k    o%|                     dM          t          |          k    |                     dN          t          |          k    ||||                    dO          dPk    |                    dQ          dRk    |                    dS          d?k    dT|cxk    odUk    nc tM          ||z
            dVk    |j'        d1k    |d1k    |d1k    dW}tQ          |)                                          sAt          dXdY                    dZ |*                                D                       z             i d[d?d\tV          d]t          dddddL|dMt          |          d^t%          |          d_t%          |          d`t          |          da|,                                j-        d|dbt-          | d                   dc|d2dPd>d?ddd|pd dedfd|||||dgdhdit]                      i}t_          t          djz  |           ta          t          j1        dd||d`         t-          |          dk                     d S )lNzscript/tts-manifest.jsonzscript/promotion-report.jsonzaudio/story-full.wavzstory/spoken-narration.txtstatus	completedverifiedTzTTS manifest not completedcanon_sha256g        technical_correctionsegments	text_path
audio_pathtext_sha256audio_sha256zsegment hash driftduration_secondsr   zwork/ttszverify-pre-correction.ffconcatz.verify-pre-correction.tmp.wavzffconcat version 1.0c           	          g | ]>}d t          t          |d                                                 dd          z   dz   ?S )zfile 'rH   'z'\'')strr   r   ).0segs     r   
<listcomp>zmain.<locals>.<listcomp>   sJ     { { {dg#d3|3D.E.E*F*F*N*NsSZ*[*[![\_!_ { { {r   r8   zutf-8)encoding)
missing_okffmpegz-hide_bannerz	-loglevelerrorz-yz-fconcatz-safe0z-iz-ccopyffprobez-vz-show_entrieszKformat=duration,size:stream=codec_name,sample_rate,channels,bits_per_samplez-ofr%   streamsr   formatdurationnull-)stdoutstderrz-nostatsz-afzsilencedetect=noise=-50dB:d=2)r_   r`   textzsilence_start:r   r5   i     z*unexpected WAV format during clipping scani S r   littlec              3   "   K   | ]
}|d v dV  dS ))i i  rb   Nr   )rO   values     r   	<genexpr>zmain.<locals>.<genexpr>(   s-      2e2eUVdMdMd1MdMdMdMd2e2er   pre_correction_sha256typeuniform_gainfilterzvolume=-1dBpost_correction_sha256post_correction_clipped_samplessource_canon_sha256spoken_narration_sha256output_sha256
codec_name	pcm_s16lesample_rate48000channelsi`	  i  g?)manifest_completed_verifiedcanon_bindingoutput_hash#chunk_reconstruction_byte_identicalsource_segment_concat_lineagetechnical_correction_contractcodec_pcm_s16lesample_rate_48000monoduration_40_to_60_minutessegment_duration_sum_matchesfull_decodeno_silence_2s_or_longerno_clippingztechnical audio QA failed: ,c              3   $   K   | ]\  }}||V  d S )Nr   )rO   r0   r1   s      r   rf   zmain.<locals>.<genexpr>0   s0      V|V|]`]^_`z{V|WXV|V|V|V|V|V|r   schema_versionr"   r#   outputartifact_pathartifact_sha256artifact_bytessegment_countsegment_duration_total)codecrr   rt   technical_audio_qapassedztext reconstruction + source-segment concat lineage + optional uniform-gain correction lineage + ffprobe + full decode + silence scan + direct PCM16 clipping count; no listening, ASR, evaluator, Voice Test or Listening Test)rA   rC   checks#pre_correction_reconstructed_sha256silence_hits_ge_2ssample_countclipped_samplesmethodcompleted_atzlog/tts.json)rA   rC   rK   r   r   )2r2   r%   r&   r'   r(   r-   r.   r   r    append
read_bytesfloatjoinr*   r;   unlink
subprocess
check_callrN   check_outputrunPIPElenrefindallr`   waver   getsampwidthgetframerategetnchannels
readframesr   	frombytessys	byteorderbyteswapsumabs
returncodeallvaluesr,   r)   statst_sizer	   r?   printr<   )manpromooutnarrcanonparts	dur_total
correctionrP   tpapreconstructionrV   prelinespre_hashprobesr\   decodesilencesilence_hitsr   r   wavraw_samplessamples
lineage_okcorrection_contractr   r/   s                                  r   mainr      st   TZ88CCEEFFTZY]^|Y|  YH  YH  YJ  YJ  NK  NKu  PT  Uk  Pk  LO  qu  vR  qR  lpGGH{""cggj&9&9&E&ELYuLvLvFv^2UiswwG]?^?^?dbdJ
O J JS	#k
"tC$566BWWc-   CGGS-@$@$@|ThGiGiAi,,r}}	55G1H+I+I I		!2!22Z<<jQTATUuAuS { {knoykz { { {{499U##D(':::3::QU:;V;V;VGDhW^_bcghklrhshstxy  AD  EH  AI  AI  J  K  K  K
c((3::<<<dj1H)TXY`ap  r  @E  FL  MP  QT  MU  MU  JV  2W  2W  'X  'X  [`  aj  [k  lm  [n  YZ  x}  ~C  DL  ~M  NX  ~Y  xZ  xZ  owgd3s88DLT^Tckukz{{{	.DS%Poptu{|  A  IS  IX  `j  `o  uy  
z  
z  
z"*.w~>>??PQ_`R^
iC f#c..00%773;K;K;M;Mq;P;PWc  eQ  XR  XR  RR^^H--- f::7g''444	mXg..000W<os2e2e'2e2e2e/e/eeo ^^H--- ff f f f f f f f f f f f f f f  z~~&=>>>  M:>>RXCYCY[iCi  Mnxn|n|  ~F  oG  oG  IV  oV  M  [e  [i  [i  jB  [C  [C  EH  IL  EM  EM  [M* nn%FGGJs3xx*'+CGGDY<Z<Z\a<a  =Tfifmfm  oH  gI  gI  KN  OS  KT  KT  gT  cf  cj  cj  kz  c{  c{  }@  AD  }E  }E  cE  lz  [e  FY  lm  lq  lq  r~  l  l  AL  lL  ab  af  af  gt  au  au  w~  a~  FG  FK  FK  LV  FW  FW  YZ  FZ  w{  }E  wK  wK  wK  wK  GK  wK  wK  wK  wK  kn  ow  xA	  oA	  kB	  kB	  D	G	  kG	  V	\	  V	g	  i	j	  V	j	  E
Q
  S
T
  E
T
  c
r
  t
u
  c
u
  	v
  	v
FMMOO}<0MchhV|V|djdpdpdrdrV|V|V|N|N|0|#}#}} kQ  k|C  k  kXk  k*UY  kZopu  k  wP  QT  UY  QZ  QZ  k  [c  dg  hk  dl  dl  k  m|  }@  AD  }E  }E  k  FW  X[  \_  X`  X`  k  aq  ru  rz  rz  r|  r|  rD  k  EW  X`  k  ap  qt  ux  yC  uD  qE  qE  k  F^  _h  k  iq  {F  UZ  fg  rh  rh  k  i  @J  @R  NR  k  Sg  rz  FJ  TZ  A	I	  _	k	  {	G
  Z
i
  s
T  hU  hU  k  Vd  eh  ej  ej  k  k  lr  sw  xF  sF  GH  lI  lI  lI  JO  PT  PZ  ep  |@  T\  fg  hy  fz  DG  HN  DO  DO  [P  [P  PQ  PQ  JR  JR  JR  JR  JRs   C<SS#&S#__main__)pathlibr   r   r   r   r%   r=   r   r   r   r   r'   r:   r)   r*   r+   r	   r    r2   r?   r   __name__r   r   r   <module>r      s'               6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6	T
[\\aeaj]`  pOkn  V\  PU _ _ _  
= = =w w wR R R@ Zr   