o
    4ѹg                     @   s   d Z ddlZddlZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddlmZ ddlmZ d	ee d
dfddZded
dfddZdddZdddZedkrYe  dS dS )zJUtility functions for the command line interface. Used by the main module.    N)OptionalTextIO)tabulate   )CommunicateSubMakerlist_voices)DEFAULT_VOICE)UtilArgsproxyreturnc                    sJ   t | dI dH }t|dd d}g d}dd |D }tt|| dS )	zPrint all available voices.r   Nc                 S   s   | d S )N	ShortName )voicer   r   Q/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/site-packages/edge_tts/util.py<lambda>   s    z_print_voices.<locals>.<lambda>)key)NameGenderContentCategoriesVoicePersonalitiesc              	   S   s<   g | ]}|d  |d d |d d d |d d gqS )r   r   z, ZVoiceTagr   r   )join).0r   r   r   r   
<listcomp>   s    z!_print_voices.<locals>.<listcomp>)r   sortedprintr   )r   Zvoicesheaderstabler   r   r   _print_voices   s   	r   argsc                    s  zt j rt j r| jstdt jd t  W n ty+   tdt jd Y dS w t	| j
| j| j| j| j| jd}t }z| jdurP| jdkrPt| jdnt jj}| jdurf| jdkrft| jdd	d
nd}|du rt| jdkrtt j}| 2 z3 dH W }|d dkr||d  qx|d dkr|| qx6 | jdkr|| j |dur||  W |t jjur|  |dur|t jur|  dS dS dS |t jjur|  |dur|t jur|  w w w )z2Run TTS after parsing arguments from command line.zWarning: TTS output will be written to the terminal. Use --write-media to write to a file.
Press Ctrl+C to cancel the operation. Press Enter to continue.)filez
Operation canceled.N)ratevolumepitchr   -wbwutf-8encodingtypeaudiodataZWordBoundaryr   )sysstdinisattystdoutZwrite_mediar   stderrinputKeyboardInterruptr   textr   r"   r#   r$   r   r   openbufferZwrite_subtitlesstreamwritefeedZwords_in_cueZ
merge_cuesZget_srtclose)r    communicateZsubmakerZ
audio_fileZsub_filechunkr   r   r   _run_tts    sv   


r>   c                     s|  t jdd} | jdd}|jdddd |jd	d
dd | jdddt td |jddddd | jdddd | jdddd | jdddd | jdddtd  | jd!d"d | jd#d$d | jd%d&d | jt d'}|jrt	|j
d(I d)H  td* |jd)ur|jd+v rtj |_nt|jd,d-d.}| |_W d)   n1 sw   Y  |jd)urt|I d)H  d)S d)S )/zAsync main functionz9Text-to-speech using Microsoft Edge's online TTS service.)descriptionT)requiredz-tz--textzwhat TTS will say)helpz-fz--filez!same as --text but read from filez-vz--voicezvoice for TTS. Default: )rA   defaultz-lz--list-voicesz lists available voices and exits
store_true)rA   actionz--ratezset TTS rate. Default +0%%.z+0%z--volumezset TTS volume. Default +0%%.z--pitchzset TTS pitch. Default +0Hz.z+0Hzz--words-in-cuez/number of words in a subtitle cue. Default: 10.
   )rA   rB   r+   z--write-mediaz+send media output to file instead of stdoutz--write-subtitlesz7send subtitle output to provided file instead of stderrz--proxyz#use a proxy for TTS and voice list.)	namespacer   Nr   )r%   z
/dev/stdinrr(   r)   )argparseArgumentParseradd_mutually_exclusive_groupadd_argumentr	   int
parse_argsr
   r   r   r   r.   exitr!   r/   readr5   r6   r>   )parsergroupr    r!   r   r   r   amainZ   sb   



rR   c                   C   s   t t  dS )z$Run the main function using asyncio.N)asynciorunrR   r   r   r   r   main   s   rU   __main__)r   N)__doc__rH   rS   r.   typingr   r   r    r   r   r   	constantsr	   Zdata_classesr
   strr   r>   rR   rU   __name__r   r   r   r   <module>   s     
:
6
