o
    
j!                     @   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)
input_pathr   line)args A/home/kuhnn/.local/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')use_cuda)
speaker_idlength_scalenoise_scalenoise_w_scale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(   no_normalizer*   bytesconfigr/   sentence_silence
output_rawr-   r,   stdoutbufferwriter5   flush
output_dirmkdiroutput_dir_namingr   r   timemonotonic_nswaver   r.   r0   r1   r2   r3   r4   infooutput_filetempfileNamedTemporaryFilenameseekshutilcopyfileobjr   is_availableplaywarning)parserunknown_args
model_path
voice_namerU   maybe_model_pathr=   r   audio_streamr7   r8   rc   r   wav_pathr6   temp_wav_fileplayerr   )r   r!   r9   r:   r#   r;   r<   r    main   sT  	













$


$	$r}   __main__rC   )__doc__rD   rL   ro   rQ   rk   rf   rh   collections.abcr   pathlibr   pathvalidater    r   r   audio_playbackr   __file___FILE	getLoggerstemr   r}   __name__r   r   r   r    <module>   s(    
 i
