
    ri!                         S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  SSK
Jr  SSKJr  SSKJrJr  SSKJr  \" \5      r\R*                  " \R,                  5      rSS	 jr\S
:X  a  \" 5         gg)zPiper main script.    N)Iterable)Path)sanitize_filename   )
PiperVoiceSynthesisConfig)AudioPlayerc            	      .  ^^^^^^^ [         R                  " 5       n U R                  SSSSS9  U R                  SSSS	9  U R                  S
SSSSS9  U R                  SSSSS	9  U R                  SSSSS	9  U R                  SSSSS9  U R                  SSSS S9  U R                  S!S"[        S#S$9  U R                  S%S&[        S'S$9  U R                  S(S)[        S*S$9  U R                  S+S,S-S.[        S/S$9  U R                  S0SS1S9  U R                  S2S3[        S4S5S69  U R                  S7[        S8S9S69  U R                  S:SS;S9  U R                  S<S=S[        [        R                  " 5       5      /S>S?9  U R                  S@SSAS9  U R                  5       u  mn[        R                  " TR                  (       a  [        R                  O[        R                  SB9  [        R                  T5        TR                  (       a  SC[         [
           4U4SD jjmO?U(       a  SER#                  U5      /mO[$        R&                  mSC[         [
           4U4SF jjm[        TR(                  5      nUR+                  5       (       d_  TR(                  nTR,                   HC  n[        U5      U SG3-  n[        R                  SHU5        UR+                  5       (       d  MA  Un  O   UR+                  5       (       d  [/        SIU SJ35      e[        R                  SKU5        [0        R2                  " UTR4                  SL9m[7        TR8                  TR:                  TR<                  TR>                  TR@                  (       + TRB                  SM9m[E        [        TRF                  RH                  TRJ                  -  SN-  5      5      mS]UUUUU4SP jjnTRL                  (       a  T" 5        H  nTRO                  UT5      n[Q        U5       H  u  pU	SQ:  a)  [$        RR                  RT                  RW                  T5        [$        RR                  RT                  RW                  U
RX                  5        [$        RR                  RT                  R[                  5         M     M     gOTR\                  (       Gau  [        TR\                  5      nUR_                  SSSR9  T" 5        GHC  nTR`                  SS:X  a!  [c        URe                  5       5      nX ST3-  nOU[f        Rh                  " 5        ST3-  n[j        Rl                  " [        U5      SU5      mT   SVn[Q        TRO                  UT5      5       H  u  pU(       dS  TRo                  U
RH                  5        TRq                  U
Rr                  5        TRu                  U
Rv                  5        SnU	SQ:  a  TRy                  T5        TRy                  U
RX                  5        M     SOSOSO5        [        R{                  SWU5        GMF     gOTR|                  SX:X  a  [~        R                  " SYSTSZ9 n[j        Rl                  " UR                  SU5      mU" 5         UR                  SQ5        [        R                  " U[$        RR                  RT                  5        SOSOSO5        gOTR|                  (       d  [        R                  " 5       (       a  [        TRF                  RH                  5       nT" 5        HY  n[Q        TRO                  UT5      5       H7  u  pU	SQ:  a  UR                  T5        UR                  U
RX                  5        M9     M[     SOSOSO5        gOTR|                  (       d  [        R                  S[5        S\Tl>        [j        Rl                  " TR|                  SU5      mT   U" 5         SOSOSO5        gO! , (       d  f       GN= f! , (       d  f       gO= f! , (       d  f       gO= f! , (       d  f       gO= f)^z Run piper text-to-speech engine.z-mz--modelTzPath to Onnx model file)requiredhelpz-cz--configzPath to model config file)r   z-iz--input-filez--input_fileappendzPaths to input text files)actionr   z-fz--output-filez--output_filez)Path to output WAV file (default: stdout)z-dz--output-dirz--output_dirz'Path to output directory (default: cwd)z--output-dir-naming)	timestamptextr   zDNaming scheme for WAV files in output directory (default: timestamp))choicesdefaultr   z--output-rawz--output_raw
store_truezStream raw audio to stdoutz-sz	--speakerzId of speaker (default: 0))typer   z--length-scalez--length_scalezPhoneme lengthz--noise-scalez--noise_scalezGenerator noisez--noise-w-scalez--noise_w_scalez	--noise-wz	--noise_wzPhoneme width noisez--cudazUse GPUz--sentence-silencez--sentence_silenceg        z&Seconds of silence after each sentence)r   r   r   z--volumeg      ?z Volume multiplier (default: 1.0)z--no-normalizezDon't normalize audioz
--data-dirz
--data_dirzEData directory to check for voice models (default: current directory))r   r   r   z--debugzPrint DEBUG messages to console)levelreturnc               3      >#    TR                    HS  n [        R                  SU 5        [        U SSS9 nU H   nUR	                  5       nU(       d  M  Uv   M"     S S S 5        MU     g ! , (       d  f       Mg  = f7f)NzReading text from %srzutf-8)encoding)
input_file_LOGGERdebugopenstrip)
input_pathr   lineargss      T/home/kim/smarthome/piper_models/venv/lib/python3.13/site-packages/piper/__main__.pylinesmain.<locals>.linesl   s^     "oo
4jA*cG<
 *#zz|4"&J !+ =< .<<s"   1A:A(A(A:(
A7	2A: c               3   Z   >#    T H   n U R                  5       n U (       d  M  U v   M"     g 7f)N)r   )r    textss    r"   r#   r$   }   s%     zz|4J s   +	+z.onnxzChecking '%s'zUnable to find voice: z (use piper.download_voices)zLoading voice: '%s')use_cuda)
speaker_idlength_scalenoise_scalenoise_w_scalenormalize_audiovolume   Nc                    > Sn T" 5        H  n[        TR                  UT5      5       H  u  p#U (       dS  TR                  UR                  5        TR	                  UR
                  5        TR                  UR                  5        Sn US:  a  TR                  T5        TR                  UR                  5        M     M     g )NFTr   )
	enumerate
synthesizesetframeratesample_ratesetsampwidthsample_widthsetnchannelssample_channelswriteframesaudio_int16_bytes)	wav_params_setr    iaudio_chunkr#   silence_int16_bytes
syn_configvoicewav_files	       r"   lines_to_wavmain.<locals>.lines_to_wav   s    GD"+E,<,<T:,N"O%))+*A*AB))+*B*BC))+*E*EF%)Nq5(()<=$$[%B%BC #P     r   )parentsexist_okr   z.wavwbFzWrote %s-zwb+)suffixzFAudio playback is not available (ffplay). Writing audio to output.wav.z
output.wavr   N)IargparseArgumentParseradd_argumentintfloatstrr   cwdparse_known_argsloggingbasicConfigr   DEBUGINFOr   r   r   joinsysstdinmodelexistsdata_dir
ValueErrorr   loadcudar   speakerr*   r+   r,   no_normalizer.   bytesconfigr4   sentence_silence
output_rawr2   r1   stdoutbufferwriter:   flush
output_dirmkdiroutput_dir_namingr   r   timemonotonic_nswaver   r3   r5   r6   r7   r8   r9   infooutput_filetempfileNamedTemporaryFilenameseekshutilcopyfileobjr	   is_availableplaywarning)parserunknown_args
model_path
voice_namer\   maybe_model_pathrB   r    audio_streamr<   r=   rj   r   wav_pathr;   temp_wav_fileplayerr!   r#   r>   r?   r'   r@   rA   s                    @@@@@@@r"   mainr      s   $$&F
i$=VW
j/JK
(   8	   6	   %S	   )	   k:VW
*=M   u;L   "   IF
5   2T   4K   TXXZ!T   ,-N    002D,tzzgmmw||LMM$	'x} 	' 	' XXl+,EIIE	x} 	 djj!JZZ
H#H~:,e0DDMM/+;<&&((-
 & $ZL0LM
 	

 MM'4OOJ;E <<&&$$((!...{{J  ELL$$t'<'<<q@AD D GD ++D*=L"+L"9q5JJ%%++,?@

!!''(E(EF

!!'') #:  
$//*
5GD%%/(6%&5 &4+<+<+>*?t(DDyyX5H!&&/0@0@z0R&SNA) --k.E.EF --k.F.FG --k.I.IJ)-1u ,,-@A(()F)FG 'T  LLX.1 4 s",,U6Bm99]%7%7>""1%""=#**2C2CD CB ""(@(@(B(BU\\556&!GD*3E4D4DT:4V*Wq5"KK(;<K$A$AB	 +X $ 76 ##\ $0 yy!1!148H U $ CB 76  s3   B3_A)_$A%_5`
_!	$
_25
`
`__main__rJ   )__doc__rK   rS   rv   rX   rr   rm   ro   collections.abcr   pathlibr   pathvalidater    r   r   audio_playbackr	   __file___FILE	getLoggerstemr   r   __name__ rD   r"   <module>r      sd        
    $  * ) 'X


EJJ
'cP zF rD   