+
    ¶¬‚jŸ  ã                   óú   € R t ^ RIt^ RIt^ RIHtHtHt ^ RIt^ RIt^ RI	H
t
 ^RIHtHtHt ^RIHt ^RIHtHtHt ]P(                  ! ]P*                  ! 4       R7      tR R	 ltR
RRR/R R llt ! R R4      tR# )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)Úcafilec          	      óœ   € V ^8„  d   QhR\         P                  R\        P                  R\        \
        ,          R\        \        ,          /# )é   ÚsessionÚssl_ctxÚproxyÚreturn)ÚaiohttpÚClientSessionÚsslÚ
SSLContextr   Ústrr   r
   )Úformats   "ÚL/Users/cheyod/AIGC/DSH/.venv/lib/python3.14/site-packages/edge_tts/voices.pyÚ__annotate__r      s>   € ÷ $ñ $Ü×"Ñ"ð$Ü-0¯^©^ð$ÜDLÌSÅMð$ä	Œ%…[ñ$ó    c              ƒ  ó$  "  € V P                  \         R\        P                  ! 4        R\         2\        P
                  ! \        4      VVRR7      ;_uu_4       GRj  x€L
 p\        P                  ! VP                  4       G Rj  x€L
 4      pRRR4      GRj  x€L
  X FE  pRV9  d   / VR&   RVR,          9  d   . VR,          R&   RVR,          9  g   K9  . VR,          R&   KG  	  V#  L� Lg LU  + GRj  x€L 
 '       g   i     Ll; i5i)	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   r   Úraise_for_statusNÚVoiceTagÚContentCategoriesÚVoicePersonalities)
Úgetr   r	   Úgenerate_sec_ms_gecr   Úheaders_with_muidr   ÚjsonÚloadsÚtext)r   r   r   ÚurlÚdataÚvoices   &&&   r   Ú__list_voicesr,      sÿ   é € ð  �{‰{Üˆ,�l¤3×#:Ò#:Ó#<Ð"=Ø
Ô1Ð2ð	4ä×%Ò%¤mÓ4ØØØð ÷ ÷ ô ð 
ÜŸ*š*¨3¯8©8«:×%5Ó6ˆ÷÷ ó ˆØ˜UÔ"Ø "ˆE�*Ñà e¨JÕ&7Ô7Ø57ˆE�*ÕÐ1Ñ2à u¨ZÕ'8Ö8Ø68ˆE�*ÕÐ2Ó3ñ ð €Kñ)ñ &6÷÷ ÷ ò üsf   ‚ADÁ C.Á!DÁ$$C4ÂC0Â	C4ÂDÂC2Â:DÃDÃ0C4Ã2DÃ4D	Ã:C=Ã;
D	ÄD	ÄDÚ	connectorr   c                ó’   € V ^8„  d   QhR\         \        P                  ,          R\         \        ,          R\        \
        ,          /# )r   r-   r   r   )r   r   ÚBaseConnectorr   r   r
   )r   s   "r   r   r   :   s7   € ÷ ñ Üœ7×0Ñ0Õ1ðÜAIÌ#Åðä	Œ%…[ñr   c              ƒ  óÂ  "  € \         P                  ! V RR7      ;_uu_4       GRj  x€L
 p \        V\        V4      G Rj  x€L
 pRRR4      GRj  x€L
  V#  L0 L  \         P                   dM   pTP
                  R8w  d   h \        P                  ! T4       \        T\        T4      G Rj  x€L 
 p Rp?LrRp?ii ; i Ln  + GRj  x€L 
 '       g   i     X# ; i5i)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“  )r   r   r,   Ú_SSL_CTXÚClientResponseErrorÚstatusr	   Úhandle_client_response_error)r-   r   r   r*   Úes   $$   r   Úlist_voicesr7   :   s­   é € ô  ×$Ò$¨yÀD×I×IÕIÈWð	AÜ& w´¸%Ó@×@ˆD÷ J×Ið €Kñ Já@øÜ×*Ñ*ô 	AØ�x‰x˜3ŒØä×,Ò,¨QÔ/Ü& w´¸%Ó@×@Ð@�Dûð	Aú÷ J×I×IÑIð €Küs‹   ‚%C§A¨C«C­AÁAÁAÁCÁC ÁCÁAÁB=Á1<B8Â-B0
Â.B8Â3CÂ8B=Â=CÃ CÃC	ÃCÃ	
C	ÃC	Ã	Cc                   óh   a € ] tR t^Vt o RtV 3R lR lt]R
V 3R lR ll4       tV 3R lR ltR	t	V t
R# )ÚVoicesManagerz>
A class to find the correct voice based on their attributes.
c                ó   <€ V ^8„  d   QhRR/# )r   r   N© )r   Ú__classdict__s   "€r   r   ÚVoicesManager.__annotate__[   s   ø€ ÷ )ñ )˜$ñ )r   c                ó"   € . V n         R V n        R# )FN)ÚvoicesÚcalled_create)Úselfs   &r   Ú__init__ÚVoicesManager.__init__[   s   € Ø02ˆŒØ#(ˆÖr   Nc                óD   <€ V ^8„  d   QhRS[ S[S[,          ,          RR/# )r   Úcustom_voicesr   r9   )r   r   r
   )r   r<   s   "€r   r   r=   `   s&   ø€ ÷ ñ Ù$¡T©%¥[Õ1ðà	ñr   c              ƒ  óâ   "  € \        4       pVf   \        4       G Rj  x€L
 MTpV Uu. uF(  p/ VCRVR,          P                  R4      ^ ,          /CNK*  	  upVn        RVn        V#  LIu upi 5i)zL
Creates a VoicesManager object and populates it with all available voices.
NÚLanguageÚLocaleÚ-T)r9   r7   Úsplitr?   r@   )ÚclsrE   rA   r?   r+   s   &&   r   ÚcreateÚVoicesManager.create_   sw   é € ô ‹ˆØ(5Ò(=”{“}×$Ð$À=ˆáNTó
ÙNTÀUÐ@ˆuÐ@�j %¨¥/×"7Ñ"7¸Ó"<¸QÕ"?Ô@Éfñ
ˆŒð "ˆÔØˆñ %ùò
ùs    ‚A/žA(Ÿ
A/©.A*ÁA/Á*A/c                óF   <€ V ^8„  d   QhRS[ S[,          RS[S[,          /# )r   Úkwargsr   )r   r   r   r   )r   r<   s   "€r   r   r=   n   s'   ø€ ÷ ñ ™VÑ$5Õ6ð ¹4Ñ@RÕ;Sñ r   c                óÈ   € V P                   '       g   \        R4      hV P                   Uu. uF)  q!P                  4       VP                  4       8:  g   K'  VNK+  	  ppV# u upi )z=
Finds all matching voices based on the provided attributes.
z9VoicesManager.find() called before VoicesManager.create())r@   ÚRuntimeErrorr?   Úitems)rA   rO   r+   Úmatching_voicess   &,  r   ÚfindÚVoicesManager.findn   sb   € ð ×!×!Ð!ÜØKóð ð
  $Ÿ{š{ó
Ù*�e¯l©l«nÀÇÁÃÑ.M�EˆE™{ð 	ð 
ð Ðùò
s   ¬$AÁA)r@   r?   )N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rB   ÚclassmethodrL   rT   Ú__static_attributes__Ú__classdictcell__)r<   s   @r   r9   r9   V   s7   ø‡ € ñ÷)ð )ð ÷ñ ó ð÷ö r   r9   )rZ   r&   r   Útypingr   r   r   r   ÚcertifiÚtyping_extensionsr   Ú	constantsr   r   r   Údrmr	   r
   r   r   Úcreate_default_contextÚwherer2   r,   r7   r9   r;   r   r   Ú<module>re      sk   ðñ,ó Û 
ß &Ñ &ã Û Ý $ç DÑ DÝ ß @Ñ @à×%Ò%¨W¯]ª]«_Ô=€õ$ðNØ48ðØQU÷÷8$ó $r   