
    g
fe)                        d Z dZdZdZdZdZddlZddlZdd	lm	Z	 dd
lm
Z
 ddlmZ ddlmZ ddlmZ ddlmZ  e
j"                         Zej'                  d      Zdadad Zd Zd ZddZd Zd ZddZddZddZd Z d Z!d Z"d dZ#d Z$y)!zManages the default speech server for orca.  A script can use this
as its speech server, or it can feel free to create one of its own.z$Id$z
$Revision$z$Date$z-Copyright (c) 2005-2009 Sun Microsystems Inc.LGPL    N   )debug)logger)settings)speech_generator)VoiceFamily)ACSSspeechc                    | sy d }	 t        j                  d|        }t        j                  }|r|j                  j                  |      a
t        sE|j                  j                         a
|r)d|g}t        j                  t        j                  |d       t        st        d|        y # t        $ rL 	 t        j                  |       }n2# t        $ r& t        j                  t        j
                         Y nw xY wY w xY w)Nzorca.z!SPEECH: Invalid speechServerInfo:Tz%ERROR: No speech server for factory: )	importlibimport_module	Exceptionr   printExceptionLEVEL_SEVEREr   speechServerInfoSpeechServergetSpeechServer_speechserverprintTokens
LEVEL_INFO)
moduleNamer   factorytokenss       -/usr/lib/python3/dist-packages/orca/speech.py_initSpeechServerr   2   s     G5))E**>?  00,,<<=MN,,<<>9;KLFe..=?
|LMM %  5	5--j9G 	5  !3!34	55s5   B, ,	D6CD,C;8D:C;;D Dc                  z   t        j                  t         j                  dd       t        r&t        j                  t         j                  dd       y t        j
                  r2t        t        dt        j
                         t        t        dddg       	 t        j                  } t        | t        j                         t        r*d g}t        j                  t         j                  |d       n'd	}t        j                  t         j                  |d       t        j                  t         j                  d
d       y # t        $ ru t        j                  }|D ]]  } | t        j                  k7  s	 t        | d        t        r n4-# t        $ r& t        j                  t         j                         Y [w xY w Y w xY w)NzSPEECH: InitializingTzSPEECH: Already initializedspeechServerFactoryr   zDefault Synthesizerdefaultz$SPEECH: Using speech server factory:zSPEECH: Not availablezSPEECH: Initialized)r   printMessager   r   r   speechSystemOverridesetattrr   r   r   r   speechFactoryModulesr   r   r   )r   moduleNamesr   msgs       r   initr&   Q   s_   	u'')?F5++-JDQ
 $$/1N1NO,/Di.PQ=11
*h&?&?@ 8*E%**FD9%5++S$7	u'')>E%  	=33% 	=JX999=%j$7$ %  =((););<=	=	=s6   *D< <1F:/FF:,F30F:2F33F:9F:c                      d} t        j                  t         j                  | d       t        j                  st                y t                y )Nz SPEECH: Checking speech setting.T)r   r    r   r   enableSpeechshutdownr&   )r%   s    r   checkSpeechSettingr*   u   s2    
,C	u''d3  
    c                    t        | t              r8| j                  | j                        }	 t	        |      }|| | j                  <   | S t        | t              rt        |       dk(  rt        | d         S t        | t              rt        |       S t        j                  }t        |t        j                           S # t
        $ r t	        i       }Y w xY w)Nr   r   )
isinstancer
   getFAMILYr	   r   listlendictr   voicesDEFAULT_VOICE)acssfamilyr3   s      r   __resolveACSSr7   ~   s    $$++&	% (F #T[[	D$	CINDG}	D$	DzF811233  	% _F	%s   B< <CCc                    t         j                  ry t        rt        j                  | |       y | D ]O  \  }}d|j                   d}t        j                  t
        j                  |d       t        j                  |       Q y )NSPEECH OUTPUT: ''T)
r   silenceSpeechr   sayAll	utterancer   r    r   loginfo)utteranceIteratorprogressCallbackcontextr5   logLines        r   r<   r<      so    .0@A0 	OWd():):(;1=Gu//$?HHW	r+   c                 \   t         sCd|  d| }t        j                  t        j                  |d       t        j                  |       yt        t        j                  j                  t        j                              }	 |j                  t        |             t        |      }d|  d| }t        j                  t        j                  |d       t         j                  | ||       y# t        $ r7}d| d| }t        j                  t        j                  |d       Y d}~d}~ww xY w)z2Speaks the individual string using the given ACSS.r9   ' TNz%SPEECH: Exception updated voice with z: )r   r   r    r   r>   r?   r
   r   r3   r.   r4   updater7   r   speak)textr5   	interruptrC   voiceerrorr%   resolvedVoices           r   _speakrM      s     $TF"TF35++Wd;$$X%;%;<=E8]4()
 "%(MTF"]O
4C	u''d3mY7  85dV2eWE5++S$778s   C+ +	D+4-D&&D+c                 X   t         j                  ryt        t        t        j
                  t        j                  t        f}d}t        | |      s3t        j                  t        j                  |t        |       z   dd       yt        rEdt        j                         t        z
  dd}t        j                  t        j                  |d       t        j                         at        | t              r.d|  d| }t        j                  t        j                  |d       n+d	| d
|g}t        j                  t        j                  |d       t        | t              rt        | ||       t        | t              syg }|}|t        |      }| D ]{  }	t        |	|      s3t        j                  t        j                  |t        |	      z   dd       Ct        |	t              rt!        |	||       at        |	t              rt#        |	      s}|j%                  |	       |st        |      }
g }t        |	t        j
                        r)|d   r|d   d   j'                         r|dxx   dz  cc<   nvt        |	t              rf|
j)                  |	       ||
}|
|k(  rd|
d|g}t        j                  t        j                  |d       |j%                  |j+                                |rdj-                  |      }t        |||       |
}|}~ |rdj-                  |      }t        |||       yy)zSpeaks the given content.  The content can be either a simple
    string or an array of arrays of objects returned by a speech
    generator.Nz$SPEECH: Bad content sent to speak():TSPEECH: Last spoke .4f seconds agozSPEECH: Speak 'z' acss: zSPEECH: Speakz, acss:.zSPEECH: New voicez != active voice )r   r;   strr0   r   Pause	LineBreakr
   r-   r   r    r   
_timestamptimer   rM   rG   r1   appendisalnumrF   popjoin)contentr5   rI   
validTypesrK   r%   r   toSpeakactiveVoiceelementnewVoicenewItemsToSpeakstrings                r   rG   rG      s   
 t-33",,d4J2Egz*5++US\-A4N #DIIK*$<S#AN5++S$7J'3y75++S$7!7It<%**FD9'3wi(gt$GK4j &':.u//W1EtTR&'4+%7|w'DzH O'#3#9#9:2;72;r?#:#:#<BK3&KGT*(&"*K{*-x9K[Y!!%"2"2FDA&&w{{}5'*v{I6"K%G9&< '"v{I. r+   c                 "   t         j                  ryt        rEdt        j                         t        z
  dd}t	        j
                  t        j                  |d       t        j                         a| j                         }| j                         }t        |      }| d| }d|j                          d| }t	        j
                  t        j                  |d       t        j                  |       t        rt        j                  | |       yy)	zeSpeaks a key event immediately.

    Arguments:
    - event: input_event.KeyboardEvent to speak.
    NrO   rP   rQ   TrT   r9   rE   )r   r;   rX   rY   r   r    r   
getKeyNamegetLockingStateStringr7   stripr>   r?   r   speakKeyEvent)eventr5   r%   keynamelockingStateStringrC   s         r   rj   rj      s      #DIIK*$<S#AN5++S$7J G446DIQ)*
+C Rv6G	u''$7HHW##E40 r+   c                    t         j                  ryt        rEdt        j                         t        z
  dd}t	        j
                  t        j                  |d       t        j                         at        |      }d|  d|g}t	        j                  t        j                  |d       t        j                  d|  d       t        rt        j                  | |       yy)	aS  Speaks a single character immediately.

    Arguments:
    - character: text to be spoken
    - acss:      acss.ACSS instance; if None,
                 the default voice settings will be used.
                 Otherwise, the acss settings will be
                 used to augment/override the default
                 voice settings.
    NrO   rP   rQ   Tr9   r:   )r5   )r   r;   rX   rY   r   r    r   r7   r   r>   r?   r   speakCharacter)	characterr5   r%   r   s       r   ro   ro     s      #DIIK*$<S#AN5++S$7JD 1-t4F	e&&5HH	{!,-$$YT$: r+   c                  >    d } t         rt         j                         } | S N)r   getInfo)r?   s    r   rs   rs   .  s    D$$&Kr+   c                  :    t         rt         j                          y y rr   )r   stop r+   r   ru   ru   5  s     r+   c                      t        j                  t         j                  dd       t        rt        j	                          d ay y )NzSPEECH: Shutting downT)r   r    r   r   shutdownActiveServersrv   r+   r   r)   r)   9  s4    	u'')@$G++- r+   c                 >    t         rt         j                  | |       y y rr   )r   reset)rH   r5   s     r   rz   rz   @  s    D$' r+   c                      t         S rr   )r   rv   r+   r   r   r   D  s    r+   rr   )NT)NN)%__doc____id____version____date____copyright____license__r   rY    r   r   r   r   speechserverr	   r5   r
   	getLogger_loggernewLogr>   r   rX   r   r&   r*   r7   r<   rM   rG   rj   ro   rs   ru   r)   rz   r   rv   r+   r   <module>r      s   (G ?       % 
&


nnX  
N>"FH4"	8*F/P16;8(r+   