
    yh!                         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  \R                  " 5       S:X  a  S SK	r	SSK
Jr  SSKJrJrJr  S r " S	 S
\5      rg)    N)NamedTemporaryFileWindows   )Voice   )_espeakfromUtf8toUtf8c                     [        U 5      $ N)EspeakDriver)proxys    N/var/www/auris/envauris/lib/python3.13/site-packages/pyttsx3/drivers/espeak.pybuildDriverr      s        c                       \ rS rSrSrSrS rS rS r\	S 5       r
S r\	S	\4S
 j5       r\	S	\4S j5       rS rS rS rS rS rS rS rSrg)r      F c                    [         R                  (       dL  [        R                  " [        R                  S5      nUS:X  a  [        S5      eS[         l        S[         l        Xl        SU l        SU l	        SU l
        S U l        SU l        / U l        [        R                  " U R                  5        U R!                  S[         R                  5        U R!                  S	S
5        U R!                  SS5        g )Ni  zcould not initialize espeakdefaultTFr   voicerate   volumeg      ?)r   _moduleInitializedr   
InitializeAUDIO_OUTPUT_RETRIEVALRuntimeError_defaultVoice_proxy_looping	_stopping	_speaking_text_to_say_data_buffer_numerise_bufferSetSynthCallback_onSynthsetProperty)selfr   r   s      r   __init__EspeakDriver.__init__   s    .. %%g&D&DdKDrz"#@AA)2L&.2L+  "  /,"<"<=%3'r   c                     U R                   R                  U5        [        R                  " [	        U R                   5      5      $ r   )r'   appendctypesc_void_plenr+   datas     r   numeriseEspeakDriver.numerise0   s0    $$T*s4#8#89::r   c                 8    U R                   [        U5      S-
     $ )Nr   )r'   intr3   s     r   decode_numericEspeakDriver.decode_numeric4   s    $$SY]33r   c                  0    [         R                  " S 5        g r   )r   r(    r   r   destroyEspeakDriver.destroy7   s      &r   c                 r    [         R                  " 5       (       a  SU l        [         R                  " 5         g g )NT)r   	IsPlayingr#   Cancelr+   s    r   stopEspeakDriver.stop;   s'    !DNNN r   namec                 r   U S:X  a  / n[         R                  " S 5       H  n[        UR                  5      [        UR                  5      S.nUR                  (       a*   UR                  SS  nUR                  SSS9nU/US'   / S	QnWUR                     US
'   UR                  =(       d    S US'   UR                  [        S0 UD65        M     U$ U S:X  a4  [         R                  " 5       n[        UR                  R                  5      $ U S:X  a$  [         R                  " [         R                  5      $ U S:X  a'  [         R                  " [         R                  5      S-  $ U S:X  a$  [         R                  " [         R                   5      $ [#        SU -  5      e! [         a  nS/US'    S nAGN-S nAff = f)Nvoices)idrE   r   zutf-8ignore)errors	languagesUnknown)Nmalefemalegenderager   r   r   g      Y@pitchunknown property %sr<   )r   
ListVoicesr	   rE   rK   decodeUnicodeDecodeErrorrO   rP   r/   r   GetCurrentVoicecontentsGetParameterRATEVOLUMEPITCHKeyError)	rE   rG   vkwargslanguage_code_byteslanguage_codeegendersr   s	            r   getPropertyEspeakDriver.getProperty@   su   8F''- ( 0(166:JK;;:./kk!"o+(;(B(B7S[(B(\/<o{+ 7G#*188#4x  !ueofo. . MW_++-EENN//00V^''55X''7%??W_''6604788# . :/8k{+:s   %F
F6%F11F6c           	      "   U S:X  a'  Uc  g  [        U5      n[        R                  " U5        g U S:X  a(   [        R                  " [        R                  US5        g U S:X  a>   [        R                  " [        R                  [        [        US-  S5      5      S5        g U S:X  a1   [        R                  " [        R                  [        U5      S5        g [        SU -  5      e! [        R                   a  n[        [        U5      5      eS nAff = f! [        R                   a  n[        [        U5      5      eS nAff = f! [         a  n[        [        U5      5      eS nAff = f! [         a  n[        [        U5      5      eS nAff = f)	Nr   r   r   r   d   r   rQ   rR   )r
   r   SetVoiceByNamer0   ArgumentError
ValueErrorstrSetParameterrY   rZ   r8   round	TypeErrorr[   r\   )rE   value	utf8Valuera   s       r   r*   EspeakDriver.setProperty^   sU   7?})"5M	&&y1 V^)$$W\\5!< X)$$NNCeck1(=$>C W_)$$MM3u:q 04788+ '' ) Q(()
 '' ) Q(()  ) Q(()  ) Q(()s^   !C% &D #<E '/E+ %D9DDE)D==E
E(E##E(+
F5F		Fc                     U R                  U5      n[        R                  " [        U5      [        R                  [        R
                  -  US9  g )N)flags	user_data)r5   r   Synthr
   ENDPAUSE
CHARS_UTF8)r+   textfilenamecodes       r   save_to_fileEspeakDriver.save_to_file}   s6    }}X&fTl'*:*:W=O=O*O[_`r   c                    U R                   R                  S5        U R                   R                  S5        SU l        SU l         [
        R                  " [        U5      [
        R                  [
        R                  -  S9  g ! [         a;  nU R                   R                  S5        U R                   R                  SUS9  e S nAff = f)NTzstarted-utterancer   )rr   Ferror)	exception)r!   setBusynotifyr$   r&   r   rt   r
   ru   rv   	Exception)r+   rw   ra   s      r   _start_synthesisEspeakDriver._start_synthesis   s    D!./	MM&,g.>.>ASAS.ST 	KK&KKw!4	s   =B 
C	6CC	c           	      "   Sn X4   nUR                   [        R                  :X  a  GOUR                   [        R                  :X  ap  U R                  (       a,  UR
                  S-
  nXeR                  -   nU R                  Xg nOSnU R                  R                  SXR
                  UR                  S9  GO,UR                   [        R                  :X  Ga  [        SSS	9n	 [        R                  " U	S
5       n
U
R                  S5        U
R                  S5        U
R                  S5        U
R!                  U R"                  5        S S S 5        SU l        UR$                  (       aA  [&        R(                  " SU	R*                   SU R-                  UR$                  5       S35        O[.        R(                  " 5       S:X  a%   [0        R2                  " SU	R*                  /SSSS9nO[.        R(                  " 5       S:X  a%  [&        R(                  " SU	R*                   S35        OH[.        R(                  " 5       S:X  a/  [8        R:                  " U	R*                  [8        R<                  5         U	RA                  5         [&        RB                  " U	R*                  5        U R                  R                  SSS9  U R                  RE                  S5        U RG                  5         OUS-  nGM  US:  aN  U =R"                  [H        RJ                  " X[H        RL                  " [H        RN                  5      -  5      -  sl        g! , (       d  f       GN = f! [0        R4                   a  n[7        SU 35      eS nAff = f! [>         a  n[7        SU 35      eS nAff = f! [>         a  n[7        SU 35      eS nAff = f!  U	RA                  5         [&        RB                  " U	R*                  5        f ! [>         a  n[7        SU 35      eS nAff = f= f)Nr   Tr   rL   zstarted-word)rE   locationlengthFz.wav)deletesuffixwbr   g    @r   zffmpeg -y -i  z -loglevel quietDarwinafplay)checkcapture_outputrw   z6[EspeakDriver._onSynth] Mac afplay failed with error: Linuxzaplay z -qr   zError during playback: z#Error deleting temporary WAV file: finished-utterance	completed)(typer   EVENT_LIST_TERMINATED
EVENT_WORDr%   text_positionr   r!   r   	EVENT_ENDr   waveopensetnchannelssetsampwidthsetframeratewriteframesr&   rs   ossystemrE   r9   platform
subprocessrunCalledProcessErrorr   winsound	PlaySoundSND_FILENAMEr   closeremover   endLoopr0   	string_atsizeofc_short)r+   wav
numsampleseventsieventstart_index	end_indexwordstreamfresultra   s                r   r)   EspeakDriver._onSynth   sC   IEzzW:::zzW///$$"'"5"5a"7K +ll :I,,[CD$D"">GZGZchcoco"pw000+5HV640Aq)q)w/d&7&78	 1
 ),D%		M&++a@S@STYTcTc@d?eeu"vw#??,8q)36;;8OW[lpw{)| &__.'9IIv{{m3&?@%__.);$..v{{H<Q<QRV		&++. ""#74"H##E*FAm p >!1!1#FMMRXR`R`Da7a!bbO 10 $.#@#@ q&25klmkn3o&p pq ! F&)@'DEEF % V*-PQRPS+TUUVV		&++.$ V*-PQRPS+TUUVs    M; 7AL?A M; &N; 'M; #M $N; %=M; "N; #AM; ,0N ?
M	M; M8%M33M88M; ;
NNNN; 
N8%N33N8;P=0O.-P.
P8PPPc                     SU l         g )NF)r"   rB   s    r   r   EspeakDriver.endLoop   s	    r   c                 p   SnSU l         U R                   (       a  U R                   (       d  g U(       aI  U R                  R                  S5        SnU R                  (       a  U R	                  U R                  5        U R                  5         [        R                  " S5        U R                   (       a  M  g g )NTFg{Gz?)r"   r!   r   r%   r   iteratetimesleep)r+   firsts     r   	startLoopEspeakDriver.startLoop   sv    mm==##E*$$))$*;*;<LLNJJt mmmr   c                    U R                   (       d  g U R                  (       ab  [        R                  " 5         SU l        U R                  R                  SSS9  U R                  R                  S5        U R                  5         g g )NFr   r   )r"   r#   r   rA   r!   r   r   r   rB   s    r   r   EspeakDriver.iterate   s\    }}>>NN"DNKK3uEKK&LLN r   c                     Xl         g r   )r%   )r+   rw   s     r   sayEspeakDriver.say   s     r   )r&   r"   r'   r!   r$   r#   r%   N)__name__
__module____qualname____firstlineno__r   r    r,   r5   r9   staticmethodr=   rC   rj   rc   r*   rz   r   r)   r   r   r   r   __static_attributes__r<   r   r   r   r      s    M(.;4 ' '
 9# 9 9: 9# 9 9<a
<~!r   r   )r   r   r   r0   r   r   tempfiler   r   r   r   r   r   r   r	   r
   r   objectr   r<   r   r   <module>r      sH    	      '??	!  ' '
T!6 T!r   