
    Pi3                         d 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m	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ  G d	 d
e          ZdS )z!Mbrola backend for the phonemizer    N)Logger)Path)UnionOptionalListDict)BaseEspeakBackend)EspeakWrapper)	Separatorc                   6    e Zd ZdZdZddedee         f fdZe	d             Z
edefd            Zed	             Zeded
eeef         defd            Zedeeef         fd            Zdee         dedededee         f
dZdededededef
dZ xZS )EspeakMbrolaBackendz(Espeak-mbrola backend for the phonemizerNlanguageloggerc                     t                                          ||           | j                            |           d S )N)r   )super__init___espeak	set_voice)selfr   r   	__class__s      t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/phonemizer/backend/espeak/mbrola.pyr   zEspeakMbrolaBackend.__init__"   s<    &111x(((((    c                      dS )Nzespeak-mbrola r   r   r   namezEspeakMbrolaBackend.name&   s    r   returnc                 v    t          j                    o&t          j        d          ot          j                    S )z,Mbrola backend is available for espeak>=1.49mbrola)r	   is_availableshutilwhichis_espeak_ng)clss    r   r   z EspeakMbrolaBackend.is_available*   s8     ".00 1X&&1!.00	2r   c                 \    t                                          d          }d |D             S )Nr   c                 8    i | ]}|j         d d         |j        S )   N)
identifierr   ).0voices     r   
<dictcomp>z@EspeakMbrolaBackend._all_supported_languages.<locals>.<dictcomp>6   s(    EEEU $ejEEEr   )r
   available_voices)r#   voicess     r   _all_supported_languagesz,EspeakMbrolaBackend._all_supported_languages2   s/     11(;;EEfEEEEr   	data_pathc                    |dd         }t          j        |dz  |z                                            rdS t          j        dk    r?d| d| d| d| g}|D ]+}t          j        |                                          r dS ,d	S )
z6Returns True if the required mbrola voice is installedr&   Nr   Twin32z/usr/share/mbrola//z/usr/share/mbrola/voices/F)pathlibr   is_filesysplatform)r#   r   r.   r)   
candidates	candidates         r   _is_language_installedz*EspeakMbrolaBackend._is_language_installed8   s     <	H,u455==?? 	4<7"",U,,4U44U443E335J (    	<	**2244  44  ur   c                       j         Kt                      j         fd                                                                 D              _          j         S )z+Returns the list of installed mbrola voicesNc                 H    i | ]\  }}                     |          ||S r   )r8   )r(   kvr#   r.   s      r   r*   z;EspeakMbrolaBackend.supported_languages.<locals>.<dictcomp>S   sE     (= (= (=A--a;;(=1(= (= (=r   )_supported_languagesr
   r.   r-   items)r#   r.   s   `@r   supported_languagesz'EspeakMbrolaBackend.supported_languagesN   sn     #+%1I(= (= (= (= (=!$!=!=!?!?!E!E!G!G(= (= (=C$ ''r   textoffset	separatorstripc                     g }t          |d          D ]O\  }}| j                            |          }|                     |||z   ||          }|                    |           P|S )N   )start)	enumerater   
synthetize_postprocess_lineappend)r   r@   rA   rB   rC   outputnumlines           r   _phonemize_auxz"EspeakMbrolaBackend._phonemize_auxX   ss    "4q111 	  	 IC<**400D))$iOODMM$r   rM   rL   c                     d |                     d          D             }|j                            d |D                       }|s
||j        z  }|S )Nc              3   t   K   | ]3}|                                 |                    d           d         V  4dS )	r   N)rC   split)r(   phns     r   	<genexpr>z8EspeakMbrolaBackend._postprocess_line.<locals>.<genexpr>e   s[       K K#&ciikkKIIdOOAK K K K K Kr   
c              3   &   K   | ]}|d k    |V  dS )_Nr   )r(   phos     r   rT   z8EspeakMbrolaBackend._postprocess_line.<locals>.<genexpr>g   s&      'N'N3#::::::'N'Nr   )rR   phonejoin)r   rM   rL   rB   rC   phonemess         r   rI   z%EspeakMbrolaBackend._postprocess_linea   sn    K K*.**T*:*:K K K?'''N'Nx'N'N'NNN 	(	'Hr   )N)__name__
__module____qualname____doc__r=   strr   r   r   staticmethodr   classmethodboolr   r-   r   r   r8   r   r?   r   intr   rN   rI   __classcell__)r   s   @r   r   r      s       22) ) )hv.> ) ) ) ) ) )   \ 2T 2 2 2 [2 F F [F
 c eCI>N    [* (DcN ( ( ( [(49 c "+48=A#Y   c  %.7;@C       r   r   )r_   r2   r    r4   loggingr   r   typingr   r   r   r   phonemizer.backend.espeak.baser	   !phonemizer.backend.espeak.wrapperr
   phonemizer.separatorr   r   r   r   r   <module>rk      s    ( '   



             . . . . . . . . . . . . < < < < < < ; ; ; ; ; ; * * * * * *O O O O O+ O O O O Or   