
    җi                         d dl Z d dlmZ d dlmZmZmZmZmZm	Z	 d dl
mZ d dlmZ d dlmZ  G d de      Zd	 Z G d
 de      Zy)    N)NSSpeechSynthesizer)NSURLNSDateNSDefaultRunLoopModeNSObject	NSRunLoopNSTimer)	AppHelper)PyObjCAppHelperRunLoopStopper)Voicec                   &    e Zd ZdZddZd ZddZy)RunLoopStopperzCOverrides PyObjCAppHelperRunLoopStopper to terminate after endLoop.Nc                     d| _         y NF
shouldStopselfs    ^/home/obispo/Crisostomo_bridge/mision_env/lib/python3.12/site-packages/pyttsx3/drivers/nsss.py__init__zRunLoopStopper.__init__   s	        c                 R    t        j                  t        |       j                         S N)objcsuperr   initr   s    r   r   zRunLoopStopper.init   s    zz.$/4466r   c                     d| _         y )NTr   r   s    r   stopzRunLoopStopper.stop   s	    r   returnN)__name__
__module____qualname____doc__r   r   r    r   r   r   r      s    M 7r   r   c                 H    t         j                         j                  |       S r   )NSSpeechDriverallocinitWithProxy)proxys    r   buildDriverr+      s    !//66r   c                   :   e Zd ZddZej
                  d        ZddZddZddZ	e
dd       Zd Zej
                  dd	       Zdd
Zej
                  d        Zej
                  d        Zej
                  dd       Zej
                  dd       ZddZddZy)r'   Nc                 <    d | _         d | _        d| _        d| _        y )NF )_proxy_tts
_completed_current_textr   s    r   r   zNSSpeechDriver.__init__"   s    	r   c                 V   	 t        j                  t        |       j                         }|rl|| _        t        j                         j                  d       | _	        | j                  j                  |        | j                  j                  d       d| _        | S # t        $ r | }Y }w xY w)N   T)r   r   r'   r   AttributeErrorr/   r   r(   initWithVoice_r0   setDelegate_setRate_r1   )r   r*   
proxy_attrs      r   r)   zNSSpeechDriver.initWithProxy(   s    	ND9>>@J DK+113BB4HDIII""4(IIs#"DO  	J	s   (B B('B(c                 >    | j                   j                  d        | ` y r   )r0   r7   r   s    r   destroyzNSSpeechDriver.destroy7   s    		t$Ir   c                 :    | j                   j                  d       y r   r/   setBusy)r   timers     r   onPumpFirst_zNSSpeechDriver.onPumpFirst_;   s    E"r   c                    t        j                  d| dd d       t        j                         }t        j                         j                         }t        j                  ||       |j                         ru|j                  t              }t        j                  d      }||j                  |      }|j                  t        |      s|j!                          n|j                         rut        j"                  |       y )Ng        zonPumpFirst:Fr   )r	   @scheduledTimerWithTimeInterval_target_selector_userInfo_repeats_r   currentRunLoopr   r(   r   r   addRunLoopStopper_toRunLoop_	shouldRunlimitDateForMode_r   r   dateWithTimeIntervalSinceNow_earlierDate_runMode_beforeDate_r    removeRunLoopStopperFromRunLoop_)r   runLoopstoppernextfiresoons        r   	startLoopzNSSpeechDriver.startLoop>   s    PP~tU	
 **, &&(--/%BB7GT!001EFH77:D#,,X6../CXN ! 	&FFwOr   c                  ,    t        j                          y r   )r
   stopEventLoopr%   r   r   endLoopzNSSpeechDriver.endLoopP   s    !r   c              #   J   K   | j                   j                  d       d  y wr   r=   r   s    r   iteratezNSSpeechDriver.iterateT   s     E"s   !#c                     | j                   j                  d       d| _        | j                   j                  d       || _        | j
                  j                  |       y )NTzstarted-utterance)r/   r>   r1   notifyr2   r0   startSpeakingString_)r   texts     r   sayzNSSpeechDriver.sayX   sH    D!./!		&&t,r   c                 z    | j                   j                         rd| _        | j                  j	                          y r   )r/   isBusyr1   r0   stopSpeakingr   s    r   r   zNSSpeechDriver.stop`   s)    ;;#DO		 r   c           
          t        |j                  d      |j                  d      |j                  d|j                  d            g|j                  d      |j                  d            S )NVoiceIdentifier	VoiceNameVoiceLocaleIdentifierVoiceLanguageVoiceGenderVoiceAge)r   get)r   attrs     r   _toVoicezNSSpeechDriver._toVoicee   s[    HH&'HH[!XX-txx/HIJHH]#HHZ 
 	
r   c                    |dk(  rMt        t        j                               D cg c]&  }| j                  t        j                  |            ( c}S |dk(  r| j
                  j                         S |dk(  r| j
                  j                         S |dk(  r| j
                  j                         S |dk(  rt        d       y d| }t        |      c c}w )Nvoicesvoiceratevolumepitch.Pitch adjustment not supported when using NSSSunknown property )listr   availableVoicesrf   attributesForVoice_r0   ri   rj   rk   printKeyError)r   namevmsgs       r   getPropertyzNSSpeechDriver.getPropertyo   s    8 1AACD 1EEaHI  7?99??$$6>99>>##899##%%7?BC!$(sms   +Cc                    |dk(  r| j                   j                         }| j                   j                         }| j                   j                  |       | j                   j	                  |       | j                   j                  |       y |dk(  r| j                   j	                  |       y |dk(  r| j                   j                  |       y |dk(  rt        d       y d| }t        |      )Nri   rj   rk   rl   rm   rn   )r0   rk   rj   	setVoice_r8   
setVolume_rr   rs   )r   rt   valuevolrj   rv   s         r   setPropertyzNSSpeechDriver.setProperty   s    7?))""$C99>>#DII&IIt$II  %V^IIu%XII  'W_BC%dV,C3-r   c                     | j                   j                  d       d| _        || _        t	        j
                  |      }| j                  j                  ||       y)zPApple writes .aiff, not .wav. https://github.com/nateshmbhat/pyttsx3/issues/361.TN)r/   r>   r1   r2   r   fileURLWithPath_r0   startSpeakingString_toURL_)r   rX   filenameurls       r   save_to_filezNSSpeechDriver.save_to_file   sI     	D!!$$X.		,,T37r   c                     t        | j                        }| j                  j                  d|       | j                  j	                  d       y )Nzfinished-utterance)	completedF)boolr1   r/   rV   r>   )r   ttssuccesss      r   $speechSynthesizer_didFinishSpeaking_z3NSSpeechDriver.speechSynthesizer_didFinishSpeaking_   s:    t'/7CE"r   c                     | j                   r0| j                   |j                  |j                  |j                  z    nd}| j                  j	                  d||j                  |j                         y )NUnknownzstarted-word)rt   locationlength)r2   r   r   r/   rV   )r   r   rngrX   current_words        r   )speechSynthesizer_willSpeakWord_ofString_z8NSSpeechDriver.speechSynthesizer_willSpeakWord_ofString_   sb     !! s||cllSZZ.GH 	 	SZZ 	 	
r   r   )r!   r"   r#   r   r   python_methodr)   r;   r@   rO   staticmethodrR   rT   rY   r   rf   rw   r}   r   r   r   r%   r   r   r'   r'   !   s      
 #P$ " " 
- -!
 

 
 
 $ 
   $ 
8 8#
	
r   r'   )r   AppKitr   
Foundationr   r   r   r   r   r	   PyObjCToolsr
   PyObjCTools.AppHelperr   pyttsx3.voicer   r   r+   r'   r%   r   r   <module>r      s=     & X X ! @ 
2 
7
K
X K
r   