
    yh
                     <   S SK r S SKJ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Jr  S	rS
rSr\S\S\S0rS r " S S\5      r " S S\5      rg! \ a?    \R
                  R                  S5      r\R
                  R                  S5      rS SKJr   Nf = f)    N)	SpeechLibzSAPI.SpVoicezSAPI.SpFileStream   )Voice   )fromUtf8toUtf8z@HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSSamzAHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSMaryzAHKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\Voices\Tokens\MSMike)gGz<a@(\?)g\(c@r	   )gp=
Kc@r	   c                     [        U 5      $ N)SAPI5Driver)proxys    M/var/www/auris/envauris/lib/python3.13/site-packages/pyttsx3/drivers/sapi5.pybuildDriverr   $   s    u    c                   f    \ rS rSrS rS rS rS rS r\	S 5       r
S rS	 rS
 rS rS rS rSrg)r   )   c                    [         R                  R                  S5      U l        SU R                  l        [        5       U l        U R                  R                  [        R                  " U 5      5        [         R                  R                  U R                  U R                  5      U l        Xl        SU l        SU l        SU l        SU l        SU l        U R%                  SU R'                  S5      5        g )NzSAPI.SPVoicei  F    voice)comtypesclientCreateObject_ttsEventInterestsSAPI5DriverEventSink_event_sink	setDriverweakrefr   	GetEvents_advise_proxy_looping	_speaking	_stopping_current_text_rateWpmsetPropertygetProperty)selfr   s     r   __init__SAPI5Driver.__init__*   s    OO00@	#(		 /1""7==#6700D<L<LM$"2"27";<r   c                 &    SU R                   l        g )Nr   )r   r   r*   s    r   destroySAPI5Driver.destroy:   s    #$		 r   c                     U R                   R                  S5        U R                   R                  S5        SU l        Xl        U R
                  R                  [        [        U5      5      S5        g )NTzstarted-utterancer   )	r"   setBusynotifyr$   r&   r   Speakr   r   )r*   texts     r   saySAPI5Driver.say=   sQ    D!./! 			.2r   c                     U R                   (       d  g U R                  R                  S5        SU l        U R                  R                  SS5        g )NTr      )r$   r"   r2   r%   r   r4   r.   s    r   stopSAPI5Driver.stopG   s7    ~~D!		Ar   c                    [         R                  " 5       n[        R                  R	                  S5      nUR                  U[        R                  5        U R                  R                  nX@R                  l	        U R                  R                  [        [        U5      5      5        XPR                  l	        UR                  5         [         R                  " U5        g )NzSAPI.SPFileStream)osgetcwdr   r   r   Openr   SSFMCreateForWriter   AudioOutputStreamr4   r   r   closechdir)r*   r5   filenamecwdstreamtemp_streams         r   save_to_fileSAPI5Driver.save_to_fileN   s    iik--.ABHi::;ii11&,		#		./&1		#
r   c                 J    [        U R                  U R                  5       5      $ r   )r   IdGetDescription)attrs    r   _toVoiceSAPI5Driver._toVoiceY   s    TWWd11344r   c                     U R                   R                  5       nU H  nUR                  U:X  d  M  Us  $    [        SU5      e)Nzunknown voice id %s)r   	GetVoicesrK   
ValueError)r*   id_tokenstokens       r   _tokenFromIdSAPI5Driver._tokenFromId]   s>    $$&Exx3  .44r   c                 x   US:X  a9  U R                   R                  5        Vs/ s H  o R                  U5      PM     sn$ US:X  a   U R                   R                  R                  $ US:X  a  U R
                  $ US:X  a  U R                   R                  S-  $ US:X  a  [        S5        g [        SU-  5      es  snf )	Nvoicesr   ratevolumeg      Y@pitch/Pitch adjustment not supported when using SAPI5unknown property %s)	r   rQ   rN   r   rK   r'   VolumeprintKeyError)r*   namerM   s      r   r)   SAPI5Driver.getPropertyd   s    848II4G4G4IJ4IDMM$'4IJJW_99??%%%V^== X99##e++W_CD04788 Ks   B7c                 J   US:X  a  U R                  U5      nX0R                  l        [        R	                  U[        [
           5      u  pE[        [        R                  " U R                  U-  U5      5      U R                  l
        g US:X  a|  U R                  R                  R                  n[        R	                  U[        [
           5      u  pE [        [        R                  " X$-  U5      5      U R                  l
        X l	        g US:X  a)   [        [        US-  S5      5      U R                  l        g US:X  a  [#        S5        g [%        SU-  5      e! [         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   rZ   r[   d   r   r\   r]   r^   )rV   r   r   E_REGgetMSMARYintmathlogr'   RaterK   	TypeErrorrR   strroundr_   r`   ra   )r*   rb   valuerU   abrS   es           r   r(   SAPI5Driver.setPropertyr   sB   7?%%e,E#IIO99UE&M2DA $--!*;Q!?@DIINV^))//$$C99S%-0DA)!$TXXei%;!<		 "MX)#&uUS[!'<#=		  W_CD04788  ) Q(()  ) Q(()s0   1E 'E? 
E<#E77E<?
F"	FF"c                     SnSU l         U R                   (       ac  U(       a  U R                  R                  S5        Sn[        R                  " 5         [
        R                  " S5        U R                   (       a  Mb  g g )NTFg?)r#   r"   r2   	pythoncomPumpWaitingMessagestimesleep)r*   firsts     r   	startLoopSAPI5Driver.startLoop   sR    mm##E*))+JJt mmmr   c                     SU l         g NF)r#   r.   s    r   endLoopSAPI5Driver.endLoop   s	    r   c              #   x   #    U R                   R                  S5         [        R                  " 5         S v   M  7fr~   )r"   r2   rv   rw   r.   s    r   iterateSAPI5Driver.iterate   s.     E"))+ s   8:)	r!   r&   r   r#   r"   r'   r$   r%   r   N)__name__
__module____qualname____firstlineno__r+   r/   r6   r:   rH   staticmethodrN   rV   r)   r(   r{   r   r   __static_attributes__ r   r   r   r   )   sM    = %3	 5 55990r   r   c                   2    \ rS rSrS rS rS rS rS rSr	g)	r      c                     S U l         g r   _driverr.   s    r   r+   SAPI5DriverEventSink.__init__   s	    r   c                     Xl         g r   r   )r*   drivers     r   r   SAPI5DriverEventSink.setDriver   s    r   c                 L    U R                   R                  R                  SXS9  g )Nstarted-word)locationlength)r   r"   r3   )r*   stream_numberstream_positions      r   _ISpeechVoiceEvents_StartStream4SAPI5DriverEventSink._ISpeechVoiceEvents_StartStream   s%    ""] 	# 	Lr   c                    U R                   nUR                  (       a)  UR                  R                  SUR                  (       + S9  SUl        SUl        UR                  R                  S5        UR                  5         g )Nzfinished-utterance)	completedF)r   r$   r"   r3   r%   r2   r   )r*   r   r   ds       r   _ISpeechVoiceEvents_EndStream2SAPI5DriverEventSink._ISpeechVoiceEvents_EndStream   sV    LL;;HHOO0OOL				r   c                     U R                   R                  nU(       a  XSX4-    nOSnU R                   R                  R                  SXcUS9  g )NUnknownr   )rb   r   r   )r   r&   r"   r3   )r*   r   r   charr   current_textcurrent_words          r   _ISpeechVoiceEvents_Word-SAPI5DriverEventSink._ISpeechVoiceEvents_Word   sJ    ||11'T];L$L""V 	# 	Mr   r   N)
r   r   r   r   r+   r   r   r   r   r   r   r   r   r   r      s    LMr   r   )comtypes.clientr   comtypes.genr   ImportErrorr   r   enginerF   rj   r=   rx   r   rv   r   r   r   r   r   MSSAMrh   MSMIKErf   r   objectr   r   r   r   r   <module>r      s    '&  	      	Q	R	R 
			!
r& rlM6 Ms  '__)).9F__))*=>F&'s   A ABB