
    $h                         S SK r S SKJr  S SKJrJrJrJrJrJ	r	  S SK
Jr  S SKJr  S SKJr   " S S\5      rS	 r " S
 S\5      rg)    N)NSSpeechSynthesizer)NSURLNSDateNSDefaultRunLoopModeNSObject	NSRunLoopNSTimer)	AppHelper)PyObjCAppHelperRunLoopStopper)Voicec                   2    \ rS rSrSrSS jrS rSS jrSrg)	RunLoopStopper   zCOverrides PyObjCAppHelperRunLoopStopper to terminate after endLoop.Nc                     SU l         g NF
shouldStopselfs    N/home/james-whalen/.local/lib/python3.13/site-packages/pyttsx3/drivers/nsss.py__init__RunLoopStopper.__init__   s	        c                 T    [         R                  " [        U 5      R                  5       $ N)objcsuperr   initr   s    r   r   RunLoopStopper.init   s    zz.$/4466r   c                     SU l         g )NTr   r   s    r   stopRunLoopStopper.stop   s	    r   r   returnN)	__name__
__module____qualname____firstlineno____doc__r   r   r!   __static_attributes__ r   r   r   r      s    M 7r   r   c                 H    [         R                  5       R                  U 5      $ r   )NSSpeechDriverallocinitWithProxy)proxys    r   buildDriverr1      s    !//66r   c                   X   \ rS rSrSS jr\R                  S 5       rSS jrSS jr	SS jr
\SS j5       rS	 r\R                  SS
 j5       rSS jr\R                  S 5       r\R                  S 5       r\R                  SS j5       r\R                  SS j5       rSS jrSS jrSrg)r-   !   Nc                 <    S U l         S U l        SU l        SU l        g )NF )_proxy_tts
_completed_current_textr   s    r   r   NSSpeechDriver.__init__"   s    	r   c                 d    [         R                  " [        U 5      R                  5       nU(       al  Xl        [        R                  " 5       R                  S 5      U l	        U R                  R                  U 5        U R                  R                  S5        SU l        U $ ! [         a    U n Nf = f)N   T)r   r   r-   r   AttributeErrorr6   r   r.   initWithVoice_r7   setDelegate_setRate_r8   )r   r0   
proxy_attrs      r   r/   NSSpeechDriver.initWithProxy(   s    	ND9>>@J K+113BB4HDIII""4(IIs#"DO  	J	s   )B   B/.B/c                 >    U R                   R                  S 5        U ? g r   )r7   r?   r   s    r   destroyNSSpeechDriver.destroy7   s    		t$Ir   c                 :    U R                   R                  S5        g r   r6   setBusy)r   timers     r   onPumpFirst_NSSpeechDriver.onPumpFirst_;   s    E"r   c                 ,   [         R                  " SU SS S5        [        R                  " 5       n[        R                  5       R                  5       n[        R                  " X!5        UR                  5       (       a  UR                  [        5      n[        R                  " S5      nUb  UR                  U5      nUR                  [        U5      (       d  UR!                  5         OUR                  5       (       a  M  [        R"                  " U5        g )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   	startLoopNSSpeechDriver.startLoop>   s    PP~tU	
 **, &&(--/%BB7T!!001EFH77:D#,,X6../CXNN !! 	&FFwOr   c                  .    [         R                  " 5         g r   )r
   stopEventLoopr+   r   r   endLoopNSSpeechDriver.endLoopP   s    !r   c              #   J   #    U R                   R                  S5        S v   g 7fr   rG   r   s    r   iterateNSSpeechDriver.iterateT   s     E"s   !#c                     U R                   R                  S5        SU l        U R                   R                  S5        Xl        U R
                  R                  U5        g )NTzstarted-utterance)r6   rH   r8   notifyr9   r7   startSpeakingString_)r   texts     r   sayNSSpeechDriver.sayX   sF    D!./!		&&t,r   c                     U R                   R                  5       (       a  SU l        U R                  R	                  5         g r   )r6   isBusyr8   r7   stopSpeakingr   s    r   r!   NSSpeechDriver.stop`   s,    ;;#DO		 r   c           
          [        UR                  S5      UR                  S5      UR                  SUR                  S5      5      /UR                  S5      UR                  S5      5      $ )NVoiceIdentifier	VoiceNameVoiceLocaleIdentifierVoiceLanguageVoiceGenderVoiceAge)r   get)r   attrs     r   _toVoiceNSSpeechDriver._toVoicee   s[    HH&'HH[!XX-txx/HIJHH]#HHZ 
 	
r   c                    US:X  aR  [        [        R                  " 5       5       Vs/ s H(  nU R                  [        R                  " U5      5      PM*     sn$ US:X  a  U R
                  R                  5       $ US:X  a  U R
                  R                  5       $ US:X  a  U R
                  R                  5       $ US:X  a  [        S5        g SU 3n[        U5      es  snf )Nvoicesvoiceratevolumepitch.Pitch adjustment not supported when using NSSSunknown property )listr   availableVoicesrv   attributesForVoice_r7   rz   r{   r|   printKeyError)r   namevmsgs       r   getPropertyNSSpeechDriver.getPropertyo   s    8 1AACDDA 1EEaHID  7?99??$$6>99>>##899##%%7?BC!$(sms   /Cc                    US:X  a  U R                   R                  5       nU R                   R                  5       nU R                   R                  U5        U R                   R	                  U5        U R                   R                  U5        g US:X  a  U R                   R	                  U5        g US:X  a  U R                   R                  U5        g US:X  a  [        S5        g SU 3n[        U5      e)Nrz   r{   r|   r}   r~   r   )r7   r|   r{   	setVoice_r@   
setVolume_r   r   )r   r   valuevolr{   r   s         r   setPropertyNSSpeechDriver.setProperty   s    7?))""$C99>>#DII&IIt$II  %V^IIu%XII  'W_BC%dV,C3-r   c                     U R                   R                  S5        SU l        Xl        [        R
                  " U5      nU R                  R                  X5        g)zPApple writes .aiff, not .wav. https://github.com/nateshmbhat/pyttsx3/issues/361.TN)r6   rH   r8   r9   r   fileURLWithPath_r7   startSpeakingString_toURL_)r   rf   filenameurls       r   save_to_fileNSSpeechDriver.save_to_file   sE     	D!!$$X.		,,T7r   c                     [        U R                  5      nU R                  R                  SUS9  U R                  R	                  S5        g )Nzfinished-utterance)	completedF)boolr8   r6   rd   rH   )r   ttssuccesss      r   $speechSynthesizer_didFinishSpeaking_3NSSpeechDriver.speechSynthesizer_didFinishSpeaking_   s:    t'/7CE"r   c                     U R                   (       a0  U R                   UR                  UR                  UR                  -    OSnU R                  R	                  SXBR                  UR                  S9  g )NUnknownzstarted-word)r   locationlength)r9   r   r   r6   rd   )r   r   rngrf   current_words        r   )speechSynthesizer_willSpeakWord_ofString_8NSSpeechDriver.speechSynthesizer_willSpeakWord_ofString_   s`     !! s||cllSZZ.GH 	 	SZZ 	 	
r   )r8   r9   r6   r7   r#   )r%   r&   r'   r(   r   r   python_methodr/   rD   rJ   rZ   staticmethodr^   ra   rg   r!   rv   r   r   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   r1   r-   r+   r   r   <module>r      s=     & X X ! @ 
2 
7
K
X K
r   