
    җi?                     4   d dl Z	 d dlm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 dZdZdZed	ed
ediZd Zd Z G d d      Z G d d      Zy# e$ r? ej
                  j                  d      Zej
                  j                  d      Zd dlmZ Y w xY w)    N)	SpeechLibzSAPI.SpVoicezSAPI.SpFileStream)Voicez@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                     t        |       S N)SAPI5Driver)proxys    _/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pyttsx3/drivers/sapi5.pybuildDriverr   "   s    u    c                     | j                  d      \  }}t        |      dz  t        |      z  }	 t        j                  |   j	                  dd      S # t
        $ r d| cY S w xY w)N-
   _zUnknown Locale: )splitintlocalewindows_localereplaceKeyError)language_codeprimarysub	locale_ids       r
   lcid_to_localer   &   sk     &&s+LGSSR3w</I.$$Y/77SAA .!)--.s   "A A$#A$c                   n    e Zd ZddZddZddZddZddZed        Z	d Z
d	 Zdd
ZddZddZd Zy)r   Nc                    t         j                  j                  d      | _        d| j                  _        t               | _        | j                  j                  t        j                  |              t         j                  j                  | j                  | j                        | _        || _        d| _        d| _        d| _        d| _        d| _        | j%                  d| j'                  d             y )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__zSAPI5Driver.__init__1   s    OO00@	#(		 /1""7==#6700D<L<LM$"2"27";<r   c                 &    d| j                   _        y )Nr   )r$   r%   r4   s    r
   destroyzSAPI5Driver.destroyA   s    #$		 r   c                    | j                   j                  d       | j                   j                  d       d| _        || _        | j
                  j                  t        |      j                  d      j                  d      d       y )NTzstarted-utteranceutf-8   )
r,   setBusynotifyr.   r0   r$   Speakstrencodedecode)r4   texts     r
   sayzSAPI5Driver.sayD   sg    D!./! 			IW%,,W5q	
r   c                     | j                   sy | j                  j                  d       d| _        | j                  j                  dd       y )NTr      )r.   r,   r<   r/   r$   r>   r7   s    r
   stopzSAPI5Driver.stopP   s7    ~~D!		Ar   c                    t        j                         }t        j                  j	                  d      }|j                  |t        j                         | j                  j                  }|| _
        || j                  _	        | j                  j                  t        |      j                  d      j                  d             || j                  _	        |j                          t        j                   |       y )NzSAPI.SPFileStreamr:   )osgetcwdr!   r"   r#   Openr   SSFMCreateForWriter$   AudioOutputStreamr0   r>   r?   r@   rA   closechdir)r4   rB   filenamecwdstreamtemp_streams         r
   save_to_filezSAPI5Driver.save_to_fileW   s    iik--.ABHi::;ii11!&,		#		D	((188AB&1		#
r   c                 X   | j                   }| j                         }| j                  d      }t        |d      }|dz   d|dz	  dz   }t	        |      g}| j                  d      }|xs dj                         }|dv r|nd }	| j                  d	      }
|
d
v r|
nd }t        ||||	|      S )NLanguage   i  r   r   Genderr   >   MaleFemaleAge>   TeenAdultChildSenior)idname	languagesgenderage)IdGetDescriptionGetAttributer   r   titler   )attrvoice_id
voice_namelanguage_attrr   primary_sub_codera   gender_attrgender_title_caserb   age_attrrc   s               r
   _toVoicezSAPI5Driver._toVoicec   s     77((*
 ))*5M2.+e34A}7Je6S5TU#$456	 ''1(.B557&7;M&M"SW $$U+"&JJhPT zYv[^__r   c                     | j                   j                         }|D ]  }|j                  |k(  s|c S  d}t        ||      )Nzunknown voice id %s)r$   	GetVoicesrd   
ValueError)r4   id_tokenstokenmsgs        r
   _tokenFromIdzSAPI5Driver._tokenFromId{   sG    $$& 	Exx3	 $c""r   c                 n   |dk(  r7| j                   j                         D cg c]  }| j                  |       c}S |dk(  r | j                   j                  j                  S |dk(  r| j
                  S |dk(  r| j                   j                  dz  S |dk(  rt        d       y d| }t        |      c c}w )	Nvoicesr    ratevolumeg      Y@pitch/Pitch adjustment not supported when using SAPI5unknown property )	r$   rr   rp   r   rd   r1   Volumeprintr   )r4   r`   rh   rw   s       r
   r3   zSAPI5Driver.getProperty   s    848II4G4G4IJDDMM$'JJ7?99??%%%6>== 899##e++7?CD!$(sm Ks   B2c                 H   |dk(  r| j                  |      }|| j                  _        t        j	                  |t        t
                 \  }}t        t        j                  | j                  |z  |            | j                  _
        y |dk(  r~| j                  j                  j                  }t        j	                  |t        t
                 \  }}	 t        t        j                  ||z  |            | j                  _
        || _	        y |dk(  r)	 t        t        |dz  d            | j                  _        y |dk(  rt#        d       y d| }t%        |      # t        $ r}t        t        |            d }~ww xY w# t        $ r}t        t        |            d }~ww xY w)	Nr    r{   r|   d      r}   r~   r   )rx   r$   r   E_REGgetMSMARYr   mathlogr1   Raterd   	TypeErrorrs   r?   roundr   r   r   )	r4   r`   valuerv   abrt   erw   s	            r
   r2   zSAPI5Driver.setProperty   sQ   7?%%e,E#DIIO99UE&M2DAq $--!*;Q!?@DIINV^))//$$C99S%-0DAq)!$TXXeai%;!<		 "DMX)#&uUS[!'<#=		  W_CD%dV,C3-  ) Q(()  ) Q(()s0   1E 'E? 	E<#E77E<?	F!FF!c                     d}d| _         | j                   rV|r| j                  j                  d       d}t        j                          t        j                  d       | j                   rUy y )NTFg?)r-   r,   r<   	pythoncomPumpWaitingMessagestimesleep)r4   firsts     r
   	startLoopzSAPI5Driver.startLoop   sP    mm##E*))+JJt mmr   c                     d| _         y NF)r-   r7   s    r
   endLoopzSAPI5Driver.endLoop   s	    r   c              #   t   K   | j                   j                  d       	 t        j                          d  wr   )r,   r<   r   r   r7   s    r
   iteratezSAPI5Driver.iterate   s/     E"))+ s   68returnN)__name__
__module____qualname__r5   r8   rC   rF   rS   staticmethodrp   rx   r3   r2   r   r   r    r   r
   r   r   0   sO    = %


 ` `.# 2r   r   c                   4    e Zd ZddZddZddZddZddZy)r&   Nc                     d | _         y r   _driverr7   s    r
   r5   zSAPI5DriverEventSink.__init__   s	    r   c                     || _         y r   r   )r4   drivers     r
   r(   zSAPI5DriverEventSink.setDriver   s	    r   c                 T    | j                   j                  j                  d||       y )Nstarted-word)locationlength)r   r,   r=   )r4   stream_numberstream_positions      r
   _ISpeechVoiceEvents_StartStreamz4SAPI5DriverEventSink._ISpeechVoiceEvents_StartStream   s"    "">MRa"br   c                     | j                   }|j                  r(|j                  j                  d|j                          d|_        d|_        |j                  j                  d       |j                          y )Nzfinished-utterance)	completedF)r   r.   r,   r=   r/   r<   r   )r4   r   r   ds       r
   _ISpeechVoiceEvents_EndStreamz2SAPI5DriverEventSink._ISpeechVoiceEvents_EndStream   sV    LL;;HHOO0OOL				r   c                     | j                   j                  x}r||||z    nd}| j                   j                  j                  d|||       y )NUnknownr   )r`   r   r   )r   r0   r,   r=   )r4   r   r   charr   current_textcurrent_words          r
   _ISpeechVoiceEvents_Wordz-SAPI5DriverEventSink._ISpeechVoiceEvents_Word   sU     !% : ::: v. 	 	"">t\b"cr   r   )r   r   r   r5   r(   r   r   r   r   r   r
   r&   r&      s    cdr   r&   )comtypes.clientr!   comtypes.genr   ImportErrorr"   r#   enginerQ   r   r   rH   r   r)   r   pyttsx3.voicer   MSSAMr   MSMIKEr   r   r   r   r&   r   r   r
   <module>r      s    '&   	     	Q	R	R 
O.L L`d du  '__)).9F__))*=>F&'s   A ABB