
    Pi                         d Z ddlZddlZddlmZ ddlmZmZmZm	Z	m
Z
 ddlmZ ddlmZmZmZ ddlmZmZmZ ddlmZ dd	lmZ  G d
 de          ZdS )!Espeak backend for the phonemizer    N)Logger)OptionalTupleListUnionPattern)BaseEspeakBackend)get_language_switch_processorLanguageSwitchBaseLanguageSwitch)get_words_mismatch_processorWordMismatchBaseWordsMismatch)EspeakWrapper)	Separatorc                       e Zd ZdZ ej        d          Z	 	 	 	 	 	 	 d!dedee	ee
f                  d	ed
ede	eef         dededee         f fdZedee         fd            Zed             Zed             Zd Zd ZdedefdZdededededeeef         f
dZdee         dee	eee         f         ef         f fdZdedef fdZedefd             Z xZ S )"EspeakBackendr   u	   [ˈˌ'-]+NF
keep-flagsignorelanguagepunctuation_markspreserve_punctuationwith_stresstielanguage_switchwords_mismatchloggerc	                 <   t                                          ||||           | j                            |           || _        |                     |          | _        t          || j        | j	                  | _
        t          || j                  | _        d S )N)r   r   r   )super__init___espeak	set_voice_with_stress	_init_tie_tier   r   r   _lang_switchr   _words_mismatch)
selfr   r   r   r   r   r   r   r   	__class__s
            t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/phonemizer/backend/espeak/espeak.pyr!   zEspeakBackend.__init__%   s     	(9!5f 	 	F 	F 	F 	x((('NN3''	0MT[$-19 192NDK3) 3)    returnc                     | sd S | du rdS t          |           } t          |           dk    rt          d|            | S )NT   ͡   z0explicit tie must be a single charcacter but is )strlenRuntimeError)r   s    r+   r%   zEspeakBackend._init_tie9   s^     	4$;;4 #hhs88q==H3HHJ J J
r,   c                      dS )Nespeak r6   r,   r+   namezEspeakBackend.nameH   s    xr,   c                 V    d t                                                      D             S )Nc                 (    i | ]}|j         |j        S r6   )r   r7   ).0voices     r+   
<dictcomp>z5EspeakBackend.supported_languages.<locals>.<dictcomp>N   s.     = = = NEJ= = =r,   )r   available_voices)clss    r+   supported_languagesz!EspeakBackend.supported_languagesL   s3    = =&99;;= = = 	=r,   c                 d   | j         !|j        r| j                            d           g }g }t	          |d          D ]o\  }}| j                            || j                   }|                     ||||          \  }}	|                    |           |	r|                    ||z              p||fS )Nz>cannot use ties AND phone separation, ignoring phone separatorr0   )start)	r&   phoner   warning	enumerater"   text_to_phonemes_postprocess_lineappend)
r)   textoffset	separatorstripoutputlang_switchesnumline
has_switchs
             r+   _phonemize_auxzEspeakBackend._phonemize_auxR   s    9 Y_ K+, , , "4q111 	3 	3IC<00tyAAD#55c9e -  -D*MM$ 3$$S6\222}$$r,   c                 J    | j         r|S t          j        | j        d|          S )N )r$   resub_ESPEAK_STRESS_RE)r)   words     r+   _process_stresszEspeakBackend._process_stressd   s)     	Kvd,b$777r,   rW   rJ   c                     | j         &| j         dk    r|                    d| j                   S |                    d|j                  S )Nr/   _)r&   replacerB   )r)   rW   rJ   s      r+   _process_tiezEspeakBackend._process_tiej   sD     9 TY$%6%6<<di000||C111r,   rO   rN   rK   c                 P   |                                                     dd                              dd          }t          j        dd|          }t          j        dd|          }| j                            |          \  }}|sd|fS d}|                    d          D ]Z}|                     |                                           }|s| j        |dz  }| 	                    ||          }|||j
        z   z  }[|r$|j
        r|d t          |j
                            }||fS )N
 z  z_+rZ   z_ rS   )rK   r[   rT   rU   r'   processsplitrX   r&   r\   rW   r2   )r)   rO   rN   rJ   rK   rP   out_linerW   s           r+   rF   zEspeakBackend._postprocess_liner   s8    zz||##D#..66tSAA
 veS$''veS$'',44T::j 	"z>!JJsOO 	. 	.D''

55D TY.$$T955Dy~--HH 	7Y^ 	7 5#in"5"5!5 56H##r,   rH   c                     t                                          |          \  }}| j                            |           ||fS N)r    _phonemize_preprocessr(   
count_text)r)   rH   r   r*   s      r+   re   z#EspeakBackend._phonemize_preprocess   sC    "'''"?"?"E"E''---&&&r,   c                 
   |d         }|d         }| j                             ||           | j                            |           t	                                          ||||          }| j                             |          S )Nr   r0   )r(   count_phonemizedr'   rC   r    _phonemize_postprocessr`   )r)   
phonemizedr   rJ   rK   rH   switchesr*   s          r+   ri   z$EspeakBackend._phonemize_postprocess   s{    !}a=--dI>>>!!(+++WW33D:KYX]^^
#++J777r,   c           	          g }t          t          | d                             D ]B|                    t          t	          j        fd| D                                            C|S )zSpecialization of BaseBackend._flatten for the espeak backend

        From [([1, 2], ['a', 'b']), ([3],), ([4], ['c'])] to [[1, 2, 3, 4],
        ['a', 'b', 'c']].

        r   c              3   2   K   | ]}|         D ]}|V  d S rd   r6   )r:   chunkcis      r+   	<genexpr>z)EspeakBackend._flatten.<locals>.<genexpr>   sW       %A %AuQx%A %A23A%A %A %A %A %A %A %Ar,   )ranger2   rG   list	itertoolschain)rj   	flattenedrp   s     @r+   _flattenzEspeakBackend._flatten   s     	s:a=))** 	C 	CAY_ %A %A %A %A#-%A %A %A A A B BC C C C r,   )NFFFr   r   N)!__name__
__module____qualname____doc__rT   compilerV   r1   r   r   r	   boolr   r   r   r!   staticmethodr%   r7   classmethodr?   rQ   rX   r   r\   intr   rF   r   re   ri   rw   __classcell__)r*   s   @r+   r   r      sX       ++"
<00 EI.3%*).3?08,0) ) )$,U3<-@$A)'+) #) D#I&	)
 #1) ".) "&)) ) ) ) ) )( (3-    \   \ = = [=
% % %$8 8 82 2 2 2 2 2$c $ $%.$7;$@Ec4i@P$ $ $ $<'$s) 'eCcN>SUY>Y8Z ' ' ' ' ' '
8y 8ae 8 8 8 8 8 8     \    r,   r   )r{   rt   rT   loggingr   typingr   r   r   r   r	   phonemizer.backend.espeak.baser
   )phonemizer.backend.espeak.language_switchr   r   r   (phonemizer.backend.espeak.words_mismatchr   r   r   !phonemizer.backend.espeak.wrapperr   phonemizer.separatorr   r   r6   r,   r+   <module>r      sK   ( '     				       8 8 8 8 8 8 8 8 8 8 8 8 8 8 < < < < < <G G G G G G G G G GC C C C C C C C C C ; ; ; ; ; ; * * * * * *M M M M M% M M M M Mr,   