
    rHJj                         d Z ddlZddlmZ ddlmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ dd	lmZ  G d
 de	      Zy)z0Base class of espeak backends for the phonemizer    N)Logger)OptionalUnionPattern)BaseBackend)EspeakWrapper)
get_logger)Punctuation)	Separatorc                        e Zd ZdZ	 	 	 ddedeeeef      dedee	   f fdZ
ed        Zed        Zed	efd
       Zed	efd       Zed        Zej$                  dedededed	ef
d       Z xZS )BaseEspeakBackendzAbstract espeak backend for the phonemizer

    Base class of the concrete backends Espeak and EspeakMbrola. It provides
    facilities to find espeak library and read espeak version.

    languagepunctuation_markspreserve_punctuationloggerc                     t         |   ||||       t               | _        | j                  j                  d| j                  j                         y )N)r   r   r   z	loaded %s)super__init__r   _espeakr   debuglibrary_path)selfr   r   r   r   	__class__s        h/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/phonemizer/backend/espeak/base.pyr   zBaseEspeakBackend.__init__#   sL     	/!5	 	 	 %+t||'@'@A    c                 .    t        j                  |       y)ab  Sets the espeak backend to use `library`

        If this is not set, the backend uses the default espeak shared library
        from the system installation.

        Parameters
        ----------
        library (str or None) : the path to the espeak shared library to use as
            backend. Set `library` to None to restore the default.

        N)r   set_library)clslibrarys     r   r   zBaseEspeakBackend.set_library1   s     	!!'*r   c                 *    t        j                         S )a  Returns the espeak library used as backend

        The following precedence rule applies for library lookup:

        1. As specified by BaseEspeakBackend.set_library()
        2. Or as specified by the environment variable
           PHONEMIZER_ESPEAK_LIBRARY
        3. Or the default espeak library found on the system

        Raises
        ------
        RuntimeError if the espeak library cannot be found or if the
            environment variable PHONEMIZER_ESPEAK_LIBRARY is set to a
            non-readable file

        )r   r   r   s    r   r   zBaseEspeakBackend.library@   s    $ $$&&r   returnc                 8    	 t                y# t        $ r Y yw xY w)NFT)r   RuntimeErrorr!   s    r   is_availablezBaseEspeakBackend.is_availableT   s%    	O   		s   
 	c                 (    | j                         dk\  S )z0Returns True if using espeak-ng, False otherwise)   1   )versionr!   s    r   is_espeak_ngzBaseEspeakBackend.is_espeak_ng\   s     {{}''r   c                 *    t               j                  S )zEspeak version as a tuple (major, minor, patch)

        Raises
        ------
        RuntimeError if BaseEspeakBackend.is_available() is False or if the
            version cannot be extracted for some reason.

        )r   r)   r!   s    r   r)   zBaseEspeakBackend.versionb   s     &&&r   linenum	separatorstripc                      y )N )r   r,   r-   r.   r/   s        r   _postprocess_linez#BaseEspeakBackend._postprocess_linen   s     	r   )NFN)__name__
__module____qualname____doc__strr   r   r   boolr   r   classmethodr   r   r%   r*   r)   abcabstractmethodintr   r2   __classcell__)r   s   @r   r   r      s    EI.3,0B B$,U3<-@$AB'+B "&)B + + ' '& T   (T ( (
 	' 	' 	c  %.7;@C r   r   )r6   r:   loggingr   typingr   r   r   phonemizer.backend.baser   !phonemizer.backend.espeak.wrapperr   phonemizer.loggerr	   phonemizer.punctuationr
   phonemizer.separatorr   r   r1   r   r   <module>rE      s3    7 
  + + / ; ( . *U Ur   