
    rp0j              	       b   S r SSKrSSKrSSKJrJrJr  SSKrSSKrSSK	J
r
  SSKJrJrJr  SSKJr  SSKJrJrJr  \R(                  " \R*                  " 5       S	9rS
\R.                  S\R0                  S\\   S\\   4S jrSSS.S\\R6                     S\\   S\\   4S jjr " S S5      rg)z|This module contains functions to list all available voices and a class to find the
correct voice based on their attributes.    N)AnyListOptional)Unpack   )SEC_MS_GEC_VERSIONVOICE_HEADERS
VOICE_LIST)DRM)VoiceVoicesManagerFindVoicesManagerVoice)cafilesessionssl_ctxproxyreturnc                   #    U R                  [         S[        R                  " 5        S[         3[        R
                  " [        5      UUSS9 ISh  vN n[        R                  " UR                  5       I Sh  vN 5      nSSS5      ISh  vN   W H2  nSU;  a  0 US'   SUS   ;  a  / US   S'   SUS   ;  d  M*  / US   S'   M4     U$  Nz NT NB! , ISh  vN  (       d  f       NW= f7f)	a  
Private function that makes the request to the voice list URL and parses the
JSON response. This function is used by list_voices() and makes it easier to
handle client response errors related to clock skew.

Args:
    session (aiohttp.ClientSession): The aiohttp session to use for the request.
    ssl_ctx (ssl.SSLContext): The SSL context to use for the request.
    proxy (Optional[str]): The proxy to use for the request.

Returns:
    List[Voice]: A list of voices and their attributes.
z&Sec-MS-GEC=z&Sec-MS-GEC-Version=T)headersr   sslraise_for_statusNVoiceTagContentCategoriesVoicePersonalities)
getr
   r   generate_sec_ms_gecr   headers_with_muidr	   jsonloadstext)r   r   r   urldatavoices         I/home/wildlama/miniconda3/lib/python3.13/site-packages/edge_tts/voices.py__list_voicesr%      s       {{,l3#:#:#<"=
12	4%%m4    
**388:%56  U" "E*eJ&7757E*12uZ'8868E*23  K) &6   s`   AC0CC0$C=C
>CC0C,C0C0CC0C-CC-)C0)	connectorr   r&   c                   #    [         R                  " U SS9 ISh  vN n [        U[        U5      I Sh  vN nSSS5      ISh  vN   U$  N0 N! [         R                   aK  nUR
                  S:w  a  e [        R                  " U5        [        U[        U5      I Sh  vN  n SnANpSnAff = f Nl! , ISh  vN  (       d  f       W$ = f7f)am  
List all available voices and their attributes.

This pulls data from the URL used by Microsoft Edge to return a list of
all available voices.

Args:
    connector (Optional[aiohttp.BaseConnector]): The connector to use for the request.
    proxy (Optional[str]): The proxy to use for the request.

Returns:
    List[Voice]: A list of voices and their attributes.
T)r&   	trust_envNi  )aiohttpClientSessionr%   _SSL_CTXClientResponseErrorstatusr   handle_client_response_error)r&   r   r   r"   es        r$   list_voicesr0   :   s       $$yDIIW	A&w%@@D JI K J@** 	Axx3,,Q/&w%@@@D	A JII Ks   CACB5AAACB3CAB0%;B+ B#!B+&B5+B00B53C5C;B><CCc                   n    \ rS rSrSrSS jr\ SS\\\	      SS 4S jj5       r
S\\   S\\   4S	 jrS
rg)VoicesManagerV   z>
A class to find the correct voice based on their attributes.
r   Nc                      / U l         SU l        g )NF)voicescalled_create)selfs    r$   __init__VoicesManager.__init__[   s    02#(    custom_voicesc                    #    [        5       nUc  [        5       I Sh  vN OUnU Vs/ s H   n0 UESUS   R                  S5      S   0EPM"     snUl        SUl        U$  NBs  snf 7f)zL
Creates a VoicesManager object and populates it with all available voices.
NLanguageLocale-r   T)r2   r0   splitr5   r6   )clsr;   r7   r5   r#   s        r$   createVoicesManager.create_   sw      (5(={}$$=NT
NTU@u@j%/"7"7"<Q"?@f
 " %
s    A'A 
A''A"A'"A'kwargsc                     U R                   (       d  [        S5      eU R                   Vs/ s H(  o!R                  5       UR                  5       ::  d  M&  UPM*     nnU$ s  snf )z=
Finds all matching voices based on the provided attributes.
z9VoicesManager.find() called before VoicesManager.create())r6   RuntimeErrorr5   items)r7   rD   r#   matching_voicess       r$   findVoicesManager.findn   s]     !!K 
  ${{
*elln.ME{ 	 
 
s   %AA)r6   r5   )r   N)N)__name__
__module____qualname____firstlineno____doc__r8   classmethodr   r   r   rB   r   r   r   rI   __static_attributes__ r:   r$   r2   r2   V   s[    ) 48$T%[1	 V$56 4@R;S r:   r2   )rO   r   r   typingr   r   r   r)   certifityping_extensionsr   	constantsr   r	   r
   drmr   r   r   r   create_default_contextwherer+   r*   
SSLContextstrr%   BaseConnectorr0   r2   rR   r:   r$   <module>r]      s   ,  
 & &   $ D D  @ @%%W]]_=$""$-0^^$DLSM$	%[$P 59QU7001AI#	%[8$ $r:   