
    11i'                         S r SSKrSSKrSSKrSSK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  SSKJr  \R                  S:w  a  SSKr " S S	5      rg)
z$Low-level bindings to the espeak API    N)CDLL)Path)Union)EspeakVoicewin32c                       \ rS rSrSrS\\\4   S\\\S4   4S jrS r	\
S 5       r\S	 5       r\
S
\4S j5       rS rS rS
\4S jrS rS rS rS rSrg)	EspeakAPI#   zExposes the espeak API to the EspeakWrapper

This class exposes only low-level bindings to the API and should not be
used directly.

library	data_pathNc                    S U l         Ub  [        U5      R                  S5      n [        R                  R                  [        U5      5      nU R                  U5      nA[        R                  " 5       U l        [        R                  S:X  a!  [        R                  " U R                   5        O6["        R$                  " X R&                  U R                   U R                  5        [(        R*                  " U R                  5      UR,                  -  n[.        R0                  " XFSS9  [        R                  R                  [        U5      5      U l          U R                   R3                  SSUS5      S::  a  [        S5      e X@l        g ! [         a  n[        S[        U5       35      S eS nAff = f! [4         a    [        S	5      S ef = f)
Nzutf-8zfailed to load espeak library: r   F)follow_symlinks   r   z*failed to initialize espeak shared libraryzfailed to load espeak library)_librarystrencodectypescdllLoadLibrary_shared_library_pathOSErrorRuntimeErrortempfilemkdtemp_tempdirsysplatformatexitregister_delete_win32weakreffinalize_deletepathlibr   nameshutilcopyespeak_InitializeAttributeError_library_path)selfr   r   espeaklibrary_patherrorespeak_copys          W/home/james-whalen/.local/lib/python3.13/site-packages/phonemizer/backend/espeak/api.py__init__EspeakAPI.__init__+   s     I--g6I	J ";;223w<@F44V<L !((* <<7"OOD../T<<Nll4==1L4E4EELuE //K0@A	;}}..tQ	1EJ"@B B K *E  	J1#e*>@EIJ	J8  	;/16:;	;s#   :F
 -F4 

F1F,,F14Gc                 P    U R                  U R                  U R                  5        g )N)r#   r   r   r+   s    r0   r    EspeakAPI._delete_win32d   s     	T]]DMM2    c                      U R                  5         [        R                  S:X  a  SS KnUR                  U R                  5        [        R                  " U5        g ! [         a     NVf = f)Nr   r   )	espeak_Terminater)   r   r   _ctypesFreeLibrary_handler&   rmtree)r   tempdirr9   s      r0   r#   EspeakAPI._deletei   sZ    	$$& <<7" 0 	g  		s   A 
A)(A)c                     U R                   $ )z0Absolute path to the espeak library being in use)r*   r4   s    r0   r-   EspeakAPI.library_path}   s     !!!r6   returnc                 Z   [         R                  " U R                  5      R                  5       nUR	                  5       (       a  U$  [         R                  " [
        R                  " U 5      R                  5      R                  5       $ ! [        [        4 a    [        SU  S35      Sef = f)zReturns the absolute path to `library`

This function is cross-platform and works for Linux, MacOS and Windows.
Raises a RuntimeError if the library path cannot be retrieved

zfailed to retrieve the path to z libraryN)r$   r   _nameresolveis_filedlinfoDLInfopath	ExceptionImportErrorr   )r   rH   s     r0   r   EspeakAPI._shared_library_path   s     ||GMM*224<<>>K	O<<g 6 ; ;<DDFF;' 	O1'(CEJNO	Os   AB	 	!B*c                     U R                   R                  n[        R                  Ul        [        R                  " 5       nU" [        R
                  " U5      5      nX2R                  4$ )zBindings to espeak_Info

Returns
-------
version, data_path: encoded strings containing the espeak version
    number and data path respectively

)r   espeak_Infor   c_char_prestypebyrefvalue)r+   f_infor   versions       r0   infoEspeakAPI.info   sJ     **OO%	i01''r6   c                    U R                   R                  n[        R                  " [        R
                  5      /Ul        [        R                  " [        R                  " [        R
                  5      5      Ul        U" U5      $ )zBindings to espeak_ListVoices

Parameters
----------
name (str or None): if specified, a filter on voices to be listed

Returns
-------
voices: a pointer to EspeakVoice.Struct instances

)r   espeak_ListVoicesr   POINTERr   VoiceStructargtypesrO   )r+   r%   f_list_voicess      r0   list_voicesEspeakAPI.list_voices   s[     77"(..1H1H"I!J &NN;223!5T""r6   c                 j    U R                   R                  n[        R                  /Ul        U" U5      $ )zBindings to espeak_SetVoiceByName

Parameters
----------
name (str) : the voice name to setup

Returns
-------
0 on success, non-zero integer on failure

)r   espeak_SetVoiceByNamer   rN   rZ   )r+   r%   f_set_voice_by_names      r0   set_voice_by_nameEspeakAPI.set_voice_by_name   s/     #mmAA(.'8$"4((r6   c                     U R                   R                  n[        R                  " [        R
                  5      Ul        U" 5       R                  $ )zvBindings to espeak_GetCurrentVoice

Returns
-------
a EspeakVoice.Struct instance or None if no voice has been setup

)r   espeak_GetCurrentVoicer   rX   r   rY   rO   contents)r+   f_get_current_voices     r0   get_current_voiceEspeakAPI.get_current_voice   s;     #mmBB&,nn[5L5L&M#"$---r6   c                     U R                   R                  n[        R                  Ul        [        R
                  " [        R                  5      [        R                  [        R                  /Ul        U" XU5      $ )aF  Bindings to espeak_TextToPhonemes

Parameters
----------
text_ptr (pointer): the text to be phonemized, as a pointer to a
    pointer of chars
text_mode (bits field): see espeak sources for details
phonemes_mode (bits field): see espeak sources for details

Returns
-------
an encoded string containing the computed phonemes

)r   espeak_TextToPhonemesr   rN   rO   rX   c_intrZ   )r+   text_ptr	text_modephonemes_modef_text_to_phonemess        r0   text_to_phonemesEspeakAPI.text_to_phonemes   sY     "]]@@%+__"NN6??+LLLL'# "(}EEr6   c                     U R                   R                  n[        R                  [        R                  /Ul        U" X5        g)a  "Bindings on espeak_SetPhonemeTrace

This method must be called before any call to synthetize()

Parameters
----------
mode (bits field): see espeak sources for details
file_pointer (FILE*): a pointer to an opened file in which to output
    the phoneme trace

N)r   espeak_SetPhonemeTracer   rk   c_void_prZ   )r+   modefile_pointerf_set_phoneme_traces       r0   set_phoneme_traceEspeakAPI.set_phoneme_trace   s7     #mmBBLLOO($ 	D/r6   c           
      R   U R                   R                  n[        R                  [        R                  [        R
                  [        R                  [        R
                  [        R                  " [        R
                  5      [        R                  /Ul        U" XSSSUSS5      $ )a@  Bindings on espeak_Synth

The output phonemes are sent to the file specified by a call to
set_phoneme_trace().

Parameters
----------
text (pointer) : a pointer to chars
size (int) : number of chars in `text`
mode (bits field) : see espeak sources for details

Returns
-------
0 on success, non-zero integer on failure

r      N)	r   espeak_Synthr   rt   c_size_tc_uintrk   rX   rZ   )r+   rl   sizeru   f_synthetizes        r0   
synthetizeEspeakAPI.synthetize   sp    " }}11OOOOMMLLMMNN6==)OO! HAq!T4FFr6   )r   r*   r   )__name__
__module____qualname____firstlineno____doc__r   r   r   r1   r    staticmethodr#   propertyr-   r   rT   r\   intra   rg   rp   rx   r   __static_attributes__ r6   r0   r	   r	   #   s    7*c4i 0 7*U3d?=S 7*r3
  & " " O O O&(#$) ) 
.F.0$Gr6   r	   )r   r   r   r$   r&   r   r   r!   r   r   typingr   phonemizer.backend.espeak.voicer   r   rF   r	   r   r6   r0   <module>r      sH    +     
      7<<7sG sGr6   