o
    Wli!                     @   s   d 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	 ddl
mZ ddlmZ ddlmZmZ ddlmZ eeZeejZdd
dZedkrVe  dS dS )zPiper main script.    N)Iterable)Path)sanitize_filename   )
PiperVoiceSynthesisConfig)AudioPlayerreturnc               	      s  t  } | jddddd | jdddd	 | jd
ddddd | jddddd	 | jddddd	 | jddddd | jdddd d | jd!d"td#d$ | jd%d&td'd$ | jd(d)td*d$ | jd+d,d-d.td/d$ | jd0dd1d | jd2d3td4d5d6 | jd7td8d9d6 | jd:dd;d | jd<d=dtt gd>d? | jd@ddAd |  \ }t	j
 jrt	jnt	jdB t   jrdCtt f fdDdEn|rdF|gntjdCtt ffdGdEt j}| s j} jD ]}t|| dH }tdI| | r|} nq| stdJ| dKtdL| tj| jdMt j j j j j   j!dNt"tj#j$ j% dO d_fdQdR} j&r D ]-}'|}t(|D ]\}	}
|	dSkrstj)j*+ tj)j*+|
j, tj)j*-  qcqWdPS  j.rt j.}|j/dddT  D ]x} j0dUkrt1|2 }|| dV }n	|t34  dV }t56t|dW? dX}t('|D ],\}	}
|s7|
j$ 8|
j9 :|
j; d}|	dSkr< <|
j, qW dP   n	1 sw   Y  t=dY| qdPS  j>dZkrMt?j@d[dVd\ }t56|jAdW|  |BdS tCD|tj)j* W dP   dPS 1 sFw   Y  dPS  j>stEF rtEj#j$.} D ]!}t('|D ]\}	}
|	dSkrx|G |G|
j, qjq`W dP   dPS 1 sw   Y  dPS  j>stHd] d^ _>t56 j>dW |  W dP   dPS 1 sw   Y  dPS )`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)levelr	   c               	   3   sh     j D ]-} td|  t| ddd}|D ]}| }|r!|V  qW d    n1 s,w   Y  qd S )NzReading text from %srzutf-8)encoding)
input_file_LOGGERdebugopenstrip)Z
input_pathr   line)args H/home/kim/smarthome/.venv/lib/python3.10/site-packages/piper/__main__.pylinesl   s   
zmain.<locals>.lines c                  3   s"     D ]} |   } | r| V  qd S )N)r   )r   )textsr   r   r    }   s   z.onnxzChecking '%s'zUnable to find voice: z (use piper.download_voices)zLoading voice: '%s')Zuse_cuda)Z
speaker_idlength_scalenoise_scalenoise_w_scaleZnormalize_audiovolume   Nc                     sx   d}   D ]4}t |D ])\}}| s)|j |j |j d} |dkr2 |j	 qqd S )NFTr   )
	enumerate
synthesizesetframeratesample_ratesetsampwidthsample_widthsetnchannelssample_channelswriteframesaudio_int16_bytes)wav_params_setr   iaudio_chunk)r    silence_int16_bytes
syn_configvoicewav_filer   r   lines_to_wav   s   

zmain.<locals>.lines_to_wavr   )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%   Zno_normalizer&   bytesconfigr+   Zsentence_silenceZ
output_rawr)   r(   stdoutbufferwriter1   flush
output_dirmkdirZoutput_dir_namingr   r   timemonotonic_nswaver   r*   r,   r-   r.   r/   r0   infooutput_filetempfileNamedTemporaryFilenameseekshutilcopyfileobjr   Zis_availableZplaywarning)parserZunknown_argsZ
model_pathZ
voice_namerQ   Zmaybe_model_pathr9   r   Zaudio_streamr3   r4   r\   r   Zwav_pathr2   Ztemp_wav_fileZplayerr   )r   r    r5   r6   r"   r7   r8   r   main   sT  	













$


$	$rk   __main__r?   )__doc__r@   rH   rg   rM   rc   r^   r`   collections.abcr   pathlibr   Zpathvalidater    r   r   Zaudio_playbackr   __file__Z_FILE	getLoggerstemr   rk   __name__r   r   r   r   <module>   s(    
 i
