
    g
fc                     4   d Z dZdZdZdZdZdZddlm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 d
dl
mZ d
dl
mZ d
dlmZ d
dlmZmZ 	 dd	lZdZ	  eed       dZ G d dej<                        Zy	# e$ r dZY w xY w# e$ r dZY ,w xY w)z=Provides an Orca speech server for Speech Dispatcher backend.z$Id$z
$Revision$z$Date$z Tomas Cerha <cerha@brailcom.org>z(Copyright (c) 2006-2008 Brailcom, o.p.s.LGPL    )GLibN   )debug)	guilabels)mathsymbols)messages)speechserver)settings)script_manager)settings_manager)ACSS)SSMLSSMLCapabilitiesTCallbackTypeFc                       e Zd Zi ZdZeej                  iZed        Z	ed        Z
ed        Zed0d       Zed        Z fdZd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd1dZd Zd Zd Zd Zd2dZd2dZd2dZ d Z!d Z"d3dZ#d Z$d0dZ%d0dZ&d4dZ'd4d Z(d5d!Z)d5d"Z*d5d#Z+d5d$Z,d% Z-d& Z.d1d'Z/d0d(Z0d1d)Z1d* Z2d+ Z3d, Z4d- Z5d6d.Z6d/ Z7 xZ8S )7SpeechServerdefaultc                  "    t         j                  S N)r   SPEECH_DISPATCHER     >/usr/lib/python3/dist-packages/orca/speechdispatcherfactory.pygetFactoryNamezSpeechServer.getFactoryName@   s    ***r   c                      g } t         j                  t         j                        }|J| j                  |       |j	                         D ]&  }| j                  t         j                  |             ( | S r   )r   _getSpeechServerDEFAULT_SERVER_IDappendlist_output_modules)serversr   modules      r   getSpeechServerszSpeechServer.getSpeechServersD   se    //0N0NONN7#!557 F|<<VDEFr   c                 d    || j                   vr | |       | j                   j                  |      S )zReturn an active server for given id.

        Attempt to create the server if it doesn't exist yet.  Returns None
        when it is not possible to create the server.
        
        )_active_serversget)clsserverIds     r   r   zSpeechServer._getSpeechServerN   s2     3...M ""&&x00r   c                 Z    | | d   nt         j                  }t         j                  |      S )Nr   )r   r   r   )infothisIds     r   getSpeechServerzSpeechServer.getSpeechServer\   s)     ,a,2P2P,,V44r   c                      t         j                  j                         D  cg c]  } |  }} |D ]  }|j                           y c c} w r   )r   r%   valuesshutdown)sr!   servers      r   shutdownActiveServersz"SpeechServer.shutdownActiveServersa   sC    *::AACD1DD 	FOO	 Es   	Ac                 ~   t         t        |           || _        d | _        i | _        t        j                  | j                  ft        j                  | j                  ft        j                  | j                  ft        j                  | j                  ff| _        t         s(d}t#        j$                  t"        j&                  |d       y t(        s(d}t#        j$                  t"        j&                  |d       y 	 t*        j,                  j.                  }t4        j6                  t*        j,                  j8                  t4        j:                  |t4        j<                  t*        j,                  j2                  t4        j>                  t*        j,                  j@                  i| _!        t*        jD                  jF                  tH        jJ                  jL                  t*        jD                  jN                  tH        jJ                  jP                  t*        jD                  jR                  tH        jJ                  jT                  t*        jD                  jV                  tH        jJ                  jL                  i| _,        tZ        j\                  |z  | _/        	 | ja                          | t        jb                  |<   d | _3        y # t0        $ r t*        j,                  j2                  }Y w xY w# t0        $ rT t#        jd                  t"        j&                         d}t#        j$                  t"        j&                  |d       Y d | _3        y w xY w)Nz)ERROR: Speech Dispatcher is not availableTz<ERROR: Speech Dispatcher version 0.6.2 or later is required.z2ERROR: Speech Dispatcher service failed to connect)4superr   __init___id_client_current_voice_propertiesr   RATE	_set_rateAVERAGE_PITCH
_set_pitchGAIN_set_volumeFAMILY_set_family_acss_manipulators_speechd_availabler   printMessageLEVEL_WARNING_speechd_version_okspeechdPunctuationModeMOST	ExceptionSOMEr   PUNCTUATION_STYLE_ALLALLPUNCTUATION_STYLE_MOSTPUNCTUATION_STYLE_SOMEPUNCTUATION_STYLE_NONENONE_PUNCTUATION_MODE_MAPr   BEGINr
   SayAllContextPROGRESSCANCELINTERRUPTEDEND	COMPLETED
INDEX_MARK_CALLBACK_TYPE_MAPr   SPEECH_DEFAULT_VOICE_default_voice_name_initr%   printException_lastKeyEchoTime)selfr(   msgmost	__class__s       r   r5   zSpeechServer.__init__i   sZ   lD*,)+&YY'1YY(()[[$**+	# "=Cu22C>"PCu22C>	0**//D **W-D-D-H-H++T++W-D-D-I-I++W-D-D-I-I	&"   &&(B(B(K(K  '')C)C)O)O  $$l&@&@&J&J  ++L,F,F,O,O	# $-#A#AH#L 	:JJL 6:L((2 $5  	0**//D	0&  	?  !4!45FCu22C> !%	?s%   9J5 
K 5#KKAL<;L<c                    t        j                  d| j                        x| _        }|j	                  t         j
                  j                         | j                  | j                  k7  r|j                  | j                         i | _	        | j                  t        j                     }|j                  |       |j                  t         j                  j                          y )NOrca)	component)rF   
SSIPClientr6   r7   set_priorityPriorityMESSAGEr   set_output_moduler8   rQ   r   verbalizePunctuationStyleset_punctuationset_data_modeDataModer   )r`   clientmodes      r   r]   zSpeechServer._init   s     ' 2 26TXX NNvG,,44588t---$$TXX.)+&))(*L*LMt$W--223r   c                    t         j                  t         j                  k(  rd}n&t         j                  t         j                  k(  rd}nd}	 | j                  j                  |       y# t        j                  $ rU d}t        j                  t        j                  |d       | j                          | j                  j                  |       Y yt        $ r Y yw xY w)z;Updates the capitalization style used by the speech server.iconspellnone8SPEECH DISPATCHER: Connection lost. Trying to reconnect.TN)r   capitalizationStyleCAPITALIZATION_STYLE_ICONCAPITALIZATION_STYLE_SPELLr7   set_cap_let_recognrF   SSIPCommunicationErrorr   rC   
LEVEL_INFOresetrI   )r`   stylera   s      r   updateCapitalizationStylez&SpeechServer.updateCapitalizationStyle   s     ''8+M+MME))X-P-PPEE	LL++E2-- 	3LCu//d;JJLLL++E2 		s   A( (A%CCCc                 t    | j                   t        j                     }| j                  j	                  |       y)z6 Punctuation level changed, inform this speechServer. N)rQ   r   rl   r7   rm   )r`   rq   s     r   updatePunctuationLevelz#SpeechServer.updatePunctuationLevel   s*    ))(*L*LM$$T*r   c                     	  ||i |S # t         j                  $ rB d}t        j                  t        j                  |d       | j                           ||i |cY S t        $ r Y y w xY w)Nrv   T)rF   r{   r   rC   r|   r}   rI   )r`   commandargskwargsra   s        r   _send_commandzSpeechServer._send_command   sm    	D+F++-- 	,LCu//d;JJLD+F++ 		s   
 AA)A)(A)c           
          t        dt        dt        d|            z  dz
        }| j                  | j                  j
                  |       y )N   r   c   b   )intmaxminr   r7   set_rate)r`   	acss_raterates      r   r:   zSpeechServer._set_rate   s>    1s1c"i011B674<<00$7r   c           
          t        dt        dt        d|            z  dz
        }| j                  | j                  j
                  |       y )N   r   	   Z   )r   r   r   r   r7   	set_pitch)r`   
acss_pitchpitchs      r   r<   zSpeechServer._set_pitch   s>    BQAz 233b894<<1159r   c           
          t        dt        dt        d|            z  dz
        }| j                  | j                  j
                  |       y )N   r   r   #   )r   r   r   r   r7   
set_volume)r`   acss_volumevolumes      r   r>   zSpeechServer._set_volume   s>    R#aQ!455:;4<<22F;r   c                 H   |i }|j                  t        j                  j                        }|j                  t        j                  j                        }|sGdd l}|j                         \  }}d\  }}|r)|j                  d      }|d   }t        |      dk(  r|d   }||fS )Nr   ) r   _r   r   )	r&   r
   VoiceFamilyLANGDIALECTlocalegetdefaultlocalesplitlen)r`   acss_familylanguagedialectr   familyLocaleencodinglocaleValuess           r   _get_language_and_dialectz&SpeechServer._get_language_and_dialect   s    K??<#;#;#@#@A//,":":"B"BC%+%<%<%>"L( &Hg+11#6'?|$)*1oG  r   c                    | j                  |      \  }}|rT| j                  | j                  j                  |       |r,| j                  | j                  j                  |dz   |z          	 | j                  j                  }|j                  t        j                  j                        }|#|| j                  k7  r| j                  ||       y y y # t        $ r Y y w xY w)N-)r   r   r7   set_languageset_synthesis_voicer&   r
   r   NAMEr\   AttributeError)r`   r   langr   r   names         r   r@   zSpeechServer._set_family   s    66{Cgt||88$?""4<<#<#<dSj7>RS	>"&,,"B"B ??<#;#;#@#@ADDD,D,D$D""#6= %E	  		s   ,C 	CCc                 p   t         j                  t         j                  kD  ry 	 | j                  | j                  j
                        }| j                  | j                  j                        }| j                  | j                  j                        }| j                  | j                  j                        }| j                  j                  t        j                        }t        j                  dt        j                   dt        j"                  dt        j$                  di}d| d| j                  j                  t        j&                         d| j                  j                  t        j(                         d	| j                  j                  t        j*                         d
| j-                  |      d    d|j                  t/        j0                         j3                  d             d| d| d	| d
| }t        j4                  t         j                  |d       y # t        $ r dx}x}x}}Y |w xY w)Nz(exception occurred)rP   rJ   rH   rL   zSPEECH DISPATCHER: z
ORCA rate z, pitch z	, volume z, language r   z, punctuation: rl   z	
SD rate T)r   
debugLevelr|   r   r7   get_rate	get_pitch
get_volumeget_languagerI   r8   r&   r   r?   r   rO   rN   rM   rK   r9   r;   r=   r   r   
getManager
getSettingrC   )	r`   prefixsd_ratesd_pitch	sd_volumesd_languagefamilystylesra   s	            r   _debug_sd_valueszSpeechServer._debug_sd_values   s   e...	R(()>)>?G))$,,*@*@AH**4<<+B+BCI,,T\\-F-FGK //33DKK@11611611600%9 "& *77;;DIIFG H33778J8JKL M4488CD E66v>qAB Czz*557BBC^_`a bixz9+[Q\P]_ 	 	5++S$7)  	R;QQGQhQ[	Rs   BH   H54H5c                    |!t         j                  t         j                     }| j                  }| j                  D ]  \  }}|j                  |      }|#|j                  |      |k7  s. ||       |||<   <|t        j                  k(  r |d       d||<   ]|t        j                  k(  r |d       d||<   ~|t        j                  k(  r |d       d||<   |t        j                  k(  s |i        i ||<    y )Ng      @
   2   )r   voicesDEFAULT_VOICEr8   rA   r&   r   r;   r=   r9   r?   )r`   acsscurrentacss_propertymethodvalues         r   _apply_acsszSpeechServer._apply_acss  s    <??8#9#9:D00%)%<%< 	,!M6HH]+E ;;}-65M-2GM*$"4"44s),&$))+r
),&$))+r
),&$++-r
)+&#	,r   c                    t        |t              rd}t        j                  |t        j
                        }| j                  |       | j                  d| d        | j                  | j                  j                  |fi | y )Nr   z
Speaking 'z' )
isinstancer   r   
markupTextr   MARKr   r   r   r7   speak)r`   textr   r   ssmls        r   _speakzSpeechServer._speak2  sn    dD!Dt%5%:%:;
4&344<<--t>v>r   c           	           	 t              \  }d fd	} j                  j                  ||t         j                  j                                      y# t        $ r Y yw xY w)zLProcess another sayAll chunk.

        Called by the gidle thread.

        c                 @   
j                   |    }|t        j                  j                  k(  r|r|j	                  d      }t        |      dk\  r|dd \  }}j                  t        |      z   _        j                  t        |      z   _	        dj                   dj                   dj                   dj                   }t        j                  t        j                  |d       nNj                  _        d _	        n5|t        j                  j                  k(  rj                  _        d _	        t        j                   	j#                         |       |t        j                  j                  k(  r"t        j                   
j$                  	       y y )N:r   r   zSPEECH DISPATCHER: Got mark z / T)rZ   r
   rS   rT   r   r   startOffsetr   currentOffsetcurrentEndOffset	endOffsetr   rC   r|   rX   r   idle_addcopy_say_all)callbackType
index_marktindexstartendra   contextiteratororca_callbackr`   s          r   callbackz'SpeechServer._say_all.<locals>.callbackG  se    ++L922;;;! * 0 0 5u:?).qJE34;4G4G#e*4TG17>7J7JSQTX7UG4">#*#8#8"97;S;S:TTW#*#6#6"7q9J9J8K!M  
 "..u/?/?dK070C0C-370,44>>>,3,=,=G)/3G,mW\\^Q?22<<<MM$--=I =r   )r   event_typesFr   )nextr   	utterancelistrZ   keysStopIteration)r`   r   r   r   r   r   s   ```  @r   r   zSpeechServer._say_all<  sw    !	J NMGTJ J6 KK))4($()@)@)E)E)G$H  JA  	> A	s   A 	A*)A*c                 N    | j                  | j                  j                         y r   )r   r7   cancelr`   s    r   _cancelzSpeechServer._cancelf  s    4<<../r   c                    t         j                  t         j                     }||xr dxs dz  }	 |t        j                     }t        dt        d||z               |t        j                  <   d| }t        j                  t        j                  |d       | j                  |xr t        j                  xs t        j                  |       y # t
        $ r d}Y w xY w)	Nr   r   r   r   zSPEECH DISPATCHER: Rate set to Tr   )r   r   r   r   r9   KeyErrorr   r   r   rC   r|   r   r	   SPEECH_SLOWERSPEECH_FASTER)r`   stepdecreaser   deltar   ra   s          r   _change_default_speech_ratez(SpeechServer._change_default_speech_ratei  s    x556R-2.			?D aR!67TYY/v65++S$7

86 6 6 -,,4 	 	9  	D	   C CCc                    t         j                  t         j                     }||xr dxs dz  }	 |t        j                     }t        dt        d||z               |t        j                  <   d| }t        j                  t        j                  |d       | j                  |xr t        j                  xs t        j                  |       y # t
        $ r d}Y w xY w)	Nr   r      r   r   z SPEECH DISPATCHER: Pitch set to Tr   )r   r   r   r   r;   r   r   r   r   rC   r|   r   r	   SPEECH_LOWERSPEECH_HIGHER)r`   r   r   r   r   r   ra   s          r   _change_default_speech_pitchz)SpeechServer._change_default_speech_pitchv  s    x556R-2.	++,E $'q#a*?#@T 085++S$7

85 5 5 -,,4 	 	9  	E	r  c                    t         j                  t         j                     }||xr dxs dz  }	 |t        j                     }t        dt        d||z               |t        j                  <   d| }t        j                  t        j                  |d       | j                  |xr t        j                  xs t        j                  |       y # t
        $ r d}Y w xY w)	Nr   r   r   r   r   z!SPEECH DISPATCHER: Volume set to Tr   )r   r   r   r   r=   r   r   r   r   rC   r|   r   r	   SPEECH_SOFTERSPEECH_LOUDER)r`   r   r   r   r   r   ra   s          r   _change_default_speech_volumez*SpeechServer._change_default_speech_volume  s    x556R-2.	$))_F aQ!78TYY1&:5++S$7

86 6 6 -,,4 	 	9  	F	r  c                 z    | j                   j                  | j                  | j                        | j                  gS r   )_SERVER_NAMESr&   r6   r   s    r   getInfozSpeechServer.getInfo  s,    ""&&txx:DHHEEr   c                    ddl m}m}  ||      d   }|d|vrd }n|j                  d      \  }}|dz   |z   }d}	 | j                  j
                  }	 || j                  |      z  }d}	|r-|D ]  \  }
}}||k(  s|}	 n |	s|D ]  \  }
}}|k(  s|}	 |	s|}	| j                  |	d ff|z   }g }|D ]  \  }
}}|j                  t        j                  t        j                  j                  |
t        j                  j                  |j                  d      d   t        j                  j                   |j                  d      d   t        j                  j"                  |i              |S # t        $ r Y w xY w# t        $ r Y w xY w)Nr   )	getlocaleLC_MESSAGESr   r   r   r   r   )r   r  r  r   r7   list_synthesis_voicesr   rI   r   r\   r   r
   r   r   r   	partitionr   VARIANT)r`   r  r  r   locale_languagelocale_langlocale_dialectr   r  default_langr   r   variantfamiliess                 r   getVoiceFamilieszSpeechServer.getVoiceFamilies  s    	2;'*>S."O*0,,s*;'K)C/.@O		$(LL$F$F!$,,-BCC '- #dG?*#2L  +1 3'D${*'23  .++\4@BVK#) 	;D$OOL44&&++T&&++T^^C-@-C&&..s0CA0F&&..69 : ;	; ;    		s#   E: E* *	E76E7:	FFc                    |sy | j                   r(|xr$ t        j                         | j                   z
  dkD  }t        |      dk(  rcd| d}t        j                  t        j
                  |d       | j                  |       | j                  | j                  j                  |       y d| d}t        j                  t        j
                  |d       | j                  ||       y )N      ?r   SPEECH DISPATCHER: Speaking '	' as charT' as string)r_   timer   r   rC   r|   r   r   r7   charr   )r`   r   r   	interruptra   s        r   r   zSpeechServer.speak  s       !Qtyy{T5J5J'Jc&QIt9>1$yACu//d;T"t||00$71${CCu//d;KKd#r   c                 F    t        j                  | j                  ||       y r   )r   r   r   )r`   utteranceIteratorprogressCallbacks      r   sayAllzSpeechServer.sayAll  s    dmm%68HIr   c                    | j                  |       |}t        j                         j                         }|r/|j                  j                         rt        j                  |      }|r||k(  rRd| d}t        j                  t        j                  |d       | j                  | j                  j                  |       y | j                  ||       y )Nr  r  T)r   r   r   getActiveScript	utilitiesspeakMathSymbolNamesr   getCharacterNamer   rC   r|   r   r7   r"  r   )r`   	characterr   r   scriptra   s         r   speakCharacterzSpeechServer.speakCharacter  s    **,<<>f&&;;=//	:Dty(1)IFCu//d;t||00)<

4r   c                    |j                         }|j                         }| d| j                         }t        |      dk(  rcd| d}t	        j
                  t        j                  |d       | j                  |       | j                  | j                  j                  |       n>d| d}t	        j
                  t        j                  |d       | j                  ||       t        j                         | _        y )N r   r  z' as keyTr   r   )
getKeyNamegetLockingStateStringstripr   r   rC   r|   r   r   r7   keyr   r!  r_   )r`   eventr   event_stringlockingStateStringra   s         r   speakKeyEventzSpeechServer.speakKeyEvent  s    '')"88:&q);(<=CCE|!1,xHCu//d;T"t||//>1,{KCu//d;JJ|$J/ $		r   c                 &    | j                  |       y r   r  r`   r   s     r   increaseSpeechRatezSpeechServer.increaseSpeechRate  s    ((.r   c                 *    | j                  |d       y NT)r   r;  r<  s     r   decreaseSpeechRatezSpeechServer.decreaseSpeechRate  s    (((=r   c                 &    | j                  |       y r   r  r<  s     r   increaseSpeechPitchz SpeechServer.increaseSpeechPitch  s    ))$/r   c                 *    | j                  |d       y r?  rB  r<  s     r   decreaseSpeechPitchz SpeechServer.decreaseSpeechPitch  s    ))$)>r   c                 &    | j                  |       y r   r  r<  s     r   increaseSpeechVolumez!SpeechServer.increaseSpeechVolume  s    **40r   c                 *    | j                  |d       y r?  rG  r<  s     r   decreaseSpeechVolumez!SpeechServer.decreaseSpeechVolume  s    **4$*?r   c                 6    | j                   j                         S )zReturns the current language.)r7   r   r   s    r   getLanguagezSpeechServer.getLanguage  s     ||((**r   c                     |sy| j                   j                  |       |r"| j                   j                  |dz   |z          yy)zSets the current languageNr   )r7   r   )r`   r   r   s      r   setLanguagezSpeechServer.setLanguage  s?     !!(+LL%%hnw&>? r   c                     d|v rJ|j                  dd      d   j                         }|j                  dd      d   j                         }||fS |j                         }|j                         }||fS )z;Attempts to ensure consistency across inconsistent formats.r   r   r   r   )r   lower)r`   r   r   normalized_languagenormalized_dialects        r   _normalizedLanguageAndDialectz*SpeechServer._normalizedLanguageAndDialect&  s~     (?"*..a"8";"A"A"C!)Q!7!;!A!A!C
 #$666 #+.."2!("$666r   c           	         t        j                          }| j                  ||      \  }}g }| j                  j                         }|D ]a  }	| j                  |	d         \  }
}|
|k7  r ||k(  r|j	                  |	       n|s||
k(  r|j	                  |	       |Rt        |      |k\  sa n dt        |       d| d| dt        j                          |z
  dd	}t        j                  t        j                  |d       |S )	zGReturns the families for language available in the current synthesizer.r   zSPEECH DISPATCHER: Found z match(es) for language='z' dialect='z' in z.4fzs.T)	r!  rS  r7   r  r   r   r   rC   r|   )r`   r   r   maximumr   target_languagetarget_dialectresultr   voicerQ  rR  ra   s                r   getVoiceFamiliesForLanguagez(SpeechServer.getVoiceFamiliesForLanguage2  s    		*.*L*LXW^*_'335 		E6:6X6XY^_`Ya6b3!3"o5!^3e$'N>Q,Qe$"s6{g'=		 (F}4MhZ XydiikE&9#%>bB 	 	5++S$7r   c           	      6   | j                  | j                               \  }}| j                  ||      \  }}d| d| d| d| d	}t        j                  t        j                  |d       ||k(  r-||k(  r(d}t        j                  t        j                  |d       y| j                  ||d	      }|r.d
|d   dg}	t        j                  t        j                  |	d       yd| j                         dg}	t        j                  t        j                  |	d       y)zFReturns True if we should change the voice for the specified language.z?SPEECH DISPATCHER: Should change voice for language? Current: 'z' 'z' New: ''Tz9SPEECH DISPATCHER: No. Language and dialect are the same.Fr   )rU  z-SPEECH DISPATCHER: Yes. Found matching familyr   .z,SPEECH DISPATCHER: No. No matching family in)rS  rL  r   rC   r|   rZ  printTokensgetOutputModule)
r`   r   r   current_languagecurrent_dialectother_languageother_dialectra   r  tokenss
             r   shouldChangeVoiceForLanguagez)SpeechServer.shouldChangeVoiceForLanguageM  s,    -1,N,NtO_O_Oa,b)/(,(J(J8U\(]%)*#o-> ?#$Ca9 	
 	5++S$7~-/]2RLCu//d;33NM[\3]ExPQ{TWXFe..=@$BVBVBXZ]^%**FD9r   c                 6    | j                   j                         S r   )r7   get_output_moduler   s    r   r_  zSpeechServer.getOutputModulei  s    ||--//r   c                 :    | j                   j                  |       y r   )r7   rk   )r`   r"   s     r   setOutputModulezSpeechServer.setOutputModulel  s    &&v.r   c                 $    | j                          y r   )r   r   s    r   stopzSpeechServer.stopo  s    r   c                 n    | j                   j                          t        j                  | j                  = y r   )r7   closer   r%   r6   r   s    r   r/   zSpeechServer.shutdownr  s$    ((2r   c                 X    | j                   j                          | j                          y r   )r7   rm  r]   )r`   r   r   s      r   r}   zSpeechServer.resetv  s    

r   c                     	 | j                  | j                  j                        S # t        $ r Y yt        j
                  $ r Y yw xY w)aY  Return names of available output modules as a tuple of strings.

        This method is not a part of Orca speech API, but is used internally
        by the Speech Dispatcher backend.
        
        The returned tuple can be empty if the information can not be
        obtained (e.g. with an older Speech Dispatcher version).
        
        r   )r   r7   r    r   rF   SSIPCommandErrorr   s    r   r    z SpeechServer.list_output_modulesz  sE    	%%dll&F&FGG 	'' 		s   $' 	AAAr   )r   )F)NNT)r  )r  )NN)9__name__
__module____qualname__r%   r   r   DEFAULT_SYNTHESIZERr  staticmethodr   r#   classmethodr   r,   r2   r5   r]   r   r   r   r:   r<   r>   r   r@   r   r   r   r   r   r  r  r  r  r  r   r'  r/  r9  r=  r@  rC  rE  rH  rJ  rL  rN  rS  rZ  re  r_  ri  rk  r/   r}   r    __classcell__)rc   s   @r   r   r   8   sV    O!&	(E(EFM+ +   1 1 5 5  1%f4(+
	8:<!(>$8>,.?(T0999F0d$<J ,/>0?1@+
@
7680/3r   r   )__doc____id____version____date__
__author____copyright____license__gi.repositoryr   r!  r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   rF   rB   getattrrE   r   rI   r   r   r   r   <module>r     s   ( D	2
:            (# #( #Q	<,, Q	  $#$  s$   B 	B   B
	B
BB