
    җic*                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlmZ  ej                         dk(  rd dl
Z
d dlmZ ddlmZ d Z G d d	      Zy)
    N)NamedTemporaryFileWindows)Voice   )_espeakc                     t        |       S N)EspeakDriver)proxys    `/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pyttsx3/drivers/espeak.pybuildDriverr      s        c                       e Zd ZdZdZd Zd Zd Zed        Z	d Z
edefd	       Zedefd
       Zd Zd Zd Zd Zd Zd Zd Zy)r
   F c                    t         j                  st        j                  t        j                  d      }|dk(  rd}t        |      t        j                         }|rE|j                  j                  r/|j                  j                  j                  d      t         _
        ndt         _
        dt         _        || _        d| _        d| _        d| _        d | _        d| _        g | _        d | _        t        j&                  | j(                         | j+                  d	t         j                         | j+                  d
d       | j+                  dd       y )Ni  zcould not initialize espeakutf-8zgmw/enTFr   voicerate   volumeg      ?)r
   _moduleInitializedr   
InitializeAUDIO_OUTPUT_RETRIEVALRuntimeErrorGetCurrentVoicecontentsnamedecode_defaultVoice_proxy_looping	_stopping	_speaking_text_to_say_data_buffer_numerise_buffer
_save_fileSetSynthCallback_onSynthsetProperty)selfr   r   msgcurrent_voices        r   __init__zEspeakDriver.__init__   s   .. %%g&D&DdKDrz3"3''#335M!7!7!<!<-:-C-C-H-H-O-OPW-X* .6*.2L+  "  /,"<"<=%3'r   c                     | j                   j                  |       t        j                  t	        | j                               S r	   )r'   appendctypesc_void_plenr,   datas     r   numerisezEspeakDriver.numerise:   s0    $$T*s4#8#89::r   c                 8    | j                   t        |      dz
     S )Nr   )r'   intr5   s     r   decode_numericzEspeakDriver.decode_numeric>   s    $$SY]33r   c                  .    t        j                  d        y r	   )r   r)    r   r   destroyzEspeakDriver.destroyA   s      &r   c                 d    t        j                         rd| _        t        j                          y y )NT)r   	IsPlayingr#   Cancelr,   s    r   stopzEspeakDriver.stopE   s$    !DNNN r   r   c                    | dk(  rg }t        j                  d       D ]  }|j                  j                  d      j	                         }||j
                  j                  d      d}|j                  r)	 |j                  dd  }|j                  dd      }|g|d<   g d	}||j                     |d
<   |j                  xs d |d<   |j                  t        di |        |S | dk(  r`t        j                         }|rI|j                  j
                  r3|j                  j                  j                  d      j	                         S y | dk(  r#t        j                  t         j                        S | dk(  r&t        j                  t         j                         dz  S | dk(  r#t        j                  t         j"                        S d|  }	t%        |	      # t        $ r
 dg|d<   Y Iw xY w)Nvoicesr   )idr   r   ignore)errors	languagesUnknown)NMaleFemalegenderager   r   r   g      Y@pitchunknown property r<   )r   
ListVoices
identifierr   lowerr   rH   UnicodeDecodeErrorrL   rM   r1   r   r   r   GetParameterRATEVOLUMEPITCHKeyError)
r   rD   vvoice_idkwargslanguage_code_byteslanguage_codegendersr   r-   s
             r   getPropertyzEspeakDriver.getPropertyJ   s   8F''- /<<..%'  #FFMM'2 ;;:./kk!"o+(;(B(B7S[(B(\/<o{+ 3#*188#4x  !ueofo.'/( M7?++-E,,~~0077@FFHH6>''558''7%??7?''66!$(sm' . :/8k{+:s   4(GG&%G&c           	         | dk(  r|y 	 t        |      j                  d      }t        j                  d|        t	        j
                  |      }|dk(  rt        j                  d|        n=|dk(  rd| }t        |      |dk(  rd	| }t        |      d
| d| }t        |      y | dk(  r'	 t	        j                  t        j                  |d       y | dk(  r=	 t	        j                  t        j                  t        t        |dz  d            d       y | dk(  r0	 t	        j                  t        j                  t        |      d       y d|  }t!        |      # t        j                  $ r}d| d| }t        |      d }~ww xY w# t        j                  $ r}t        t        |            d }~ww xY w# t        $ r}t        t        |            d }~ww xY w# t        $ r}t        t        |            d }~ww xY w)Nr   r   zAttempting to set voice to: r   zSuccessfully set voice to: r   z=SetVoiceByName failed: EE_BUFFER_FULL while setting voice to    z@SetVoiceByName failed: EE_INTERNAL_ERROR while setting voice to z/SetVoiceByName failed with unknown return code z for voice: zInvalid voice name: z	, error: r   r   d   rN   rO   )strencodeloggingdebugr   SetVoiceByName
ValueErrorr2   ArgumentErrorSetParameterrU   rV   r9   round	TypeErrorrW   rX   )r   value	utf8Valueresultr-   es         r   r+   zEspeakDriver.setPropertyq   s   7?}&J--g6	 <UGDE //	:Q;MM$?w"GHq[YZ_Y`aC$S/)q[\]b\cdC$S/) J!(,ug7  %S/) I  V^)$$W\\5!< X)$$W^^Sus{A9N5OQRS W_)$$W]]CJB &dV,C3-) '' &,UG9QC@ o%& '' ) Q(()
  ) Q(()
  ) Q(()s`   B"E  3%F ;F= !.G"  F3FFF:!F55F:=	GGG"	H+G??Hc                      || _         || _        y)zH
        Save the synthesized speech to the specified filename.
        N)r(   r%   )r,   textfilenames      r   save_to_filezEspeakDriver.save_to_file   s     # r   c                    | j                   j                  d       | j                   j                  d       d| _        d| _        	 t        j                  t        |      j                  d      t
        j                  t
        j                  z         y # t        $ r>}| j                   j                  d       | j                   j                  d|        d }~ww xY w)	NTzstarted-utterancer   r   )flagsFerror)	exception)r!   setBusynotifyr$   r&   r   Synthrc   rd   ENDPAUSE
CHARS_UTF8	Exception)r,   rr   rp   s      r   _start_synthesiszEspeakDriver._start_synthesis   s    D!./	MM#d)**737;K;KgN`N`;`a 	KK&KKw!4	s   AB 	C9CCc           	         | j                   syd}	 ||   }|j                  t        j                  k(  rn|j                  t        j                  k(  rq| j
                  r.|j                  dz
  }||j                  z   }| j
                  || }nd}| j                  j                  d||j                  |j                         ne|j                  t        j                  k(  rG| j                  r	 t        j                  | j                  d      5 }	|	j                  d       |	j                  d       |	j!                  d	       |	j#                  | j$                         d
d
d
       t'        d| j                          nR	 t-        dd      5 }t        j                  |d      5 }	|	j                  d       |	j                  d       |	j!                  d	       |	j#                  | j$                         d
d
d
       |j.                  }|j1                          d
d
d
       t3        j4                         dk(  rt7        j8                  dgd       nlt3        j4                         dk(  rt;        j4                  d d       n;t3        j4                         dk(  r$t=        j>                  t<        j@                         t;        jB                         d| _        d| _         | j                  j                  dd       | j                  jE                  d       | jG                          n|dz  }|dkD  rM| xj$                  tI        jJ                  ||tI        jL                  tH        jN                        z        z  c_        y# 1 sw Y   'xY w# t(        $ r}
d|
 }t+        |      d
}
~
ww xY w# 1 sw Y   xY w# 1 sw Y   xY w# t(        $ r}
t'        d|
        Y d
}
~
d
}
~
ww xY w)z]
        TODO: Refactor this function because it is too complex by several measures.
        r   Tr   rI   zstarted-word)r   locationlengthwbra   i"V  NzAudio saved to zError saving WAV file: z.wavF)suffixdeleteDarwinafplay)checkLinuxzaplay z -qr   zPlayback error: r   finished-utterance	completed)(r$   typer   EVENT_LIST_TERMINATED
EVENT_WORDr%   text_positionr   r!   rz   EVENT_MSG_TERMINATEDr(   waveopensetnchannelssetsampwidthsetframeratewriteframesr&   printr~   r   r   r   flushplatformsystem
subprocessrunoswinsound	PlaySoundSND_FILENAMEremovery   endLoopr2   	string_atsizeofc_short)r,   wav
numsampleseventsieventstart_index	end_indexwordfrp   r-   temp_wavtemp_wav_names                 r   r*   zEspeakDriver._onSynth   sA    ~~ 1IEzzW:::zzW///$$"'"5"5"9K +ell :I,,[CD$D""""00 <<	 #  w;;;??	0!YYt= =NN1-NN1-NN51MM$*;*;<	=
 /@AB
6/veL -PX!%8T!: Aa !q 1 !q 1 !u 5 !d.?.? @	A -5MMM$NN,- $??,8&NNHm+DDQ%__.'9II}oS&AB%__.);$..}h>S>ST 		-0
 %(!!&""#74"H##E*FAA F >!1!1#zFMMRXR`R`Da7a!bba= = % 0 7s;*3//0A A- -( % 6 04556s{   . N AN N  O
 N=$AN03$N=B:O
 NN 	N-N((N-0N:	5N==OO
 
	O,O''O,c                     d| _         y )NF)r"   rA   s    r   r   zEspeakDriver.endLoop  s	    r   c                 :   d}d| _         | j                   r| j                   sy |rD| j                  j                  d       d}| j                  r| j	                  | j                         | j                          t        j                  d       | j                   ry y )NTFg{Gz?)r"   r!   ry   r%   r   iteratetimesleep)r,   firsts     r   	startLoopzEspeakDriver.startLoop  st    mm==##E*$$))$*;*;<LLNJJt mmr   c                     | j                   sy | j                  rdt        j                          d| _        | j                  j                  dd       | j                  j                  d       | j                          y y )NFr   r   )r"   r#   r   r@   r!   rz   ry   r   rA   s    r   r   zEspeakDriver.iterate  s\    }}>>NN"DNKK3uEKK&LLN r   c                     || _         y r	   )r%   )r,   rr   s     r   sayzEspeakDriver.say  s
     r   N)__name__
__module____qualname__r   r    r/   r7   r:   staticmethodr=   rB   rc   r_   r+   rt   r   r*   r   r   r   r   r<   r   r   r
   r
      s    M(<;4 ' '
 $# $ $L * # *  * X!
Ob!r   r
   )r2   re   r   r   r   r   r   tempfiler   r   r   pyttsx3.voicer   r   r   r   r
   r<   r   r   <module>r      sH      	     '8??	!  
F! F!r   