
    11i3                         S r SSKrSSKrSSKrSSKJr  SSKJr  SSKJrJ	r	J
r
Jr  SSKJr  SSKJr  SSKJr   " S	 S
\5      rg)z!Mbrola backend for the phonemizer    N)Logger)Path)UnionOptionalListDict)BaseEspeakBackend)EspeakWrapper)	Separatorc                     ^  \ rS rSrSrSrSS\S\\   4U 4S jjjr	\
S 5       r\S\4S	 j5       r\S
 5       r\S\S\\\4   S\4S j5       r\S\\\4   4S j5       rS\\   S\S\S\S\\   4
S jrS\S\S\S\S\4
S jrSrU =r$ )EspeakMbrolaBackend   z(Espeak-mbrola backend for the phonemizerNlanguageloggerc                 V   > [         TU ]  XS9  U R                  R                  U5        g )N)r   )super__init___espeak	set_voice)selfr   r   	__class__s      Z/home/james-whalen/.local/lib/python3.13/site-packages/phonemizer/backend/espeak/mbrola.pyr   EspeakMbrolaBackend.__init__"   s%    1x(    c                      g)Nzespeak-mbrola r   r   r   nameEspeakMbrolaBackend.name&   s    r   returnc                     [         R                  " 5       =(       a2    [        R                  " S5      =(       a    [         R                  " 5       $ )z,Mbrola backend is available for espeak>=1.49mbrola)r	   is_availableshutilwhichis_espeak_ng)clss    r   r"    EspeakMbrolaBackend.is_available*   s7     "..0 1X&1!..0	2r   c                     [        5       R                  S5      nU Vs0 s H  o"R                  SS  UR                  _M     sn$ s  snf )Nr!      )r
   available_voices
identifierr   )r&   voicesvoices      r   _all_supported_languages,EspeakMbrolaBackend._all_supported_languages2   sB     11(;>DEfU  $ejj0fEEEs   #A	data_pathc                     USS n[         R                  " US-  U-  5      R                  5       (       a  g[        R                  S:w  aE  SU 3SU SU 3SU 3/nU H.  n[         R                  " U5      R                  5       (       d  M.    g   g	)
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   r0   r-   
candidates	candidates         r   _is_language_installed*EspeakMbrolaBackend._is_language_installed8   s     <<	H,u45==??<<7"$UG,$UG1UG4+E735J (	<<	*2244 ( r   c                    U R                   cd  [        5       R                  nU R                  5       R	                  5        VVs0 s H  u  p#U R                  X!5      (       d  M  X#_M!     snnU l         U R                   $ s  snnf )z+Returns the list of installed mbrola voices)_supported_languagesr
   r0   r.   itemsr:   )r&   r0   kvs       r   supported_languages'EspeakMbrolaBackend.supported_languagesN   sv     ##+%11I!$!=!=!?!E!E!G(=!G--a; !G(=C$ '''(=s   A>#A>textoffset	separatorstripc                     / n[        USS9 HF  u  pgU R                  R                  U5      nU R                  XrU-   X45      nUR	                  U5        MH     U$ )N   )start)	enumerater   
synthetize_postprocess_lineappend)r   rC   rD   rE   rF   outputnumlines           r   _phonemize_aux"EspeakMbrolaBackend._phonemize_auxX   sW    "4q1IC<<**40D))$iODMM$ 2 r   rP   rO   c                     S UR                  S5       5       nUR                  R                  S U 5       5      nU(       d  XSR                  -  nU$ )Nc              3   v   #    U  H/  oR                  5       (       d  M  UR                  S 5      S   v   M1     g7f)	r   N)rF   split).0phns     r   	<genexpr>8EspeakMbrolaBackend._postprocess_line.<locals>.<genexpr>e   s+      K*:3iikCIIdOA*:s   99
c              3   4   #    U  H  oS :w  d  M
  Uv   M     g7f)_Nr   )rW   phos     r   rY   rZ   g   s     'Nx#:xs   		)rV   phonejoin)r   rP   rO   rE   rF   phonemess         r   rL   %EspeakMbrolaBackend._postprocess_linea   sJ    K*.**T*:K??'''Nx'NN'Hr   r   )N)__name__
__module____qualname____firstlineno____doc__r=   strr   r   r   staticmethodr   classmethodboolr"   r.   r   r   r:   r   rA   r   intr   rQ   rL   __static_attributes____classcell__)r   s   @r   r   r      s'   2) )hv.> ) )   2T 2 2 F F
 c eCI>N  * (DcN ( (49 c "+48=A#Yc  %.7;@C r   r   )rg   r4   r#   r6   loggingr   r   typingr   r   r   r   phonemizer.backend.espeak.baser	   !phonemizer.backend.espeak.wrapperr
   phonemizer.separatorr   r   r   r   r   <module>rt      s7    (   
   . . < ; *O+ Or   