+
    bi	                        R t ^ RIHt ^ RIt^ RIt^ RIt^ RIHt ^ RIH	t	 ^ RI
Ht ]P                  ! ]4      t ! R R]	4      tR# )u?   
ElevenLabs TTS Provider – generates speech audio from text.
)annotationsN)Path)TTSProviderVoiceSettingsc                  \    ] tR t^tRtRtRR R lltR R ltR R	 lt]	R
 R l4       t
RtR# )ElevenLabsTTSProviderz>Wraps the ElevenLabs Python SDK for text-to-speech generation.
elevenlabsNc                   V ^8  d   QhRR/# )   voice_settingszVoiceSettings | None )formats   "providers/tts_provider.py__annotate__"ElevenLabsTTSProvider.__annotate__   s     : :'; :    c                	    \         P                  ! R 4      pV'       g   \        R4      h^ RIHp ^ RIHp W@n        V! VR7      V n        T;'       g    \        4       V n	        R# )ELEVENLABS_API_KEYzKELEVENLABS_API_KEY is required for Generate mode. Set it in your .env file.)
ElevenLabsr   )api_keyN)
osgetenvEnvironmentErrorelevenlabs.clientr   r	   r   _el_voice_settings_clsclientsettings)selfr   r   r   ELVoiceSettingss   &&   r   __init__ElevenLabsTTSProvider.__init__   sQ    ))01",  	1?&5# 1&99-/r   c               $    V ^8  d   QhRRRRRR/# )r   textstroutput_path
str | Pathreturnr   r   )r   s   "r   r   r   %   s!      3 Z D r   c                   \        V4      pVP                  P                  RRR7       \        P	                  R\        V4      V4       V P                  P                  P                  VV P                  P                  V P                  P                  V P                  V P                  P                  V P                  P                  V P                  P                  V P                  P                   R7      R7      p\#        VR4      ;_uu_ 4       pV F,  p\%        V\&        4      '       g   K  VP)                  V4       K.  	  RRR4       \        P	                  RV4       V#   + '       g   i     L(; i)	zBGenerate speech audio and save to *output_path*. Returns the path.T)parentsexist_oku"   Generating TTS for %d chars → %s)	stabilitysimilarity_booststylespeed)r#   voice_idmodel_idr   wbNzTTS audio saved: %s)r   parentmkdirloggerinfolenr   text_to_speechconvertr   r/   r0   r   r+   r,   r-   r.   open
isinstancebyteswrite)r   r#   r%   audiofchunks   &&&   r   _generate_sync$ElevenLabsTTSProvider._generate_sync%   s   ;'   =8#d)[Q**22]]++]]++66--11!%!?!?mm))mm))	 7 	 3 

 +t$$eU++GGEN  %
 	);7 %$s   E$/E$$E4	c               $    V ^8  d   QhRRRRRR/# )r   r#   r$   r%   r   r'   r   )r   s   "r   r   r   @   s&     O O3 OT Od Or   c                `   "   \         P                  ! V P                  W4      G Rj  xL
 #  L5i)z%Generate speech audio asynchronously.N)asyncio	to_threadr@   )r   r#   r%   s   &&&r   generateElevenLabsTTSProvider.generate@   s$     &&t':':DNNNNs   %.,.c                    V ^8  d   QhRRRR/# )r   
audio_pathr&   r'   floatr   )r   s   "r   r   r   E   s     $ $z $e $r   c                Z    ^ RI Hp VP                  \        V 4      4      pVP                  # )z<Return the duration of an audio file in seconds using pydub.)AudioSegment)pydubrL   	from_filer$   duration_seconds)rI   rL   segs   &  r   get_audio_duration(ElevenLabsTTSProvider.get_audio_durationD   s'     	'$$S_5###r   )r   r   r   )N)__name__
__module____qualname____firstlineno____doc__namer    r@   rF   staticmethodrQ   __static_attributes__r   r   r   r   r      s.    HD:6O $ $r   r   )rW   
__future__r   rD   loggingr   pathlibr   providers.portsr   modelsr   	getLoggerrS   r4   r   r   r   r   <module>ra      s=    #   	  '  			8	$8$K 8$r   