o
    P8jE                     @  sh   d Z ddlmZ ddlZddlZddlmZ ddlZddlm	Z	m
Z
 dd
dZdddZddddZdS )u  TTS (Sprachausgabe).

Primär: ElevenLabs (eleven_v3, explizit Serbisch) mit der gewählten Stimme.
Fallback: edge-tts (kostenlos), falls ElevenLabs ausfällt — App bleibt funktionsfähig.
Cache by Hash über Engine+Stimme+Modell+Text → identische Antworten werden wiederverwendet.
    )annotationsN)Path   )configeleventextstrreturnc                 C  s(   dD ]}|  |d} qd|   S )N)	*_#`"()[] )replacejoinsplitstrip)r   ch r   //home/nk/hobo-godmode/plappi-mvp/backend/tts.py_clean   s   r   outr   Nonec                   s2   t j| tjtjtjd}|t|I d H  d S )N)ratepitch)edge_ttsCommunicater   PLAPPI_VOICEPLAPPI_TTS_RATEPLAPPI_TTS_PITCHsaver   )r   r   commr   r   r   _edge_fallback   s
   
r'   voice
str | Nonec           	   
     s  t | pd ttj}|ptj|rd dtj ndtj }t| d  	 
 dd }tj| d }| rJ| jdkrJ|jS |rzt }|d fd	d
I dH }|| |jW S  ty } ztd| ddd W Y d}~nd}~ww t |I dH  |jS )z0-> relativer Audio-Dateiname (unter data/audio).zHallo.zel||zedge|N   z.mp3   c                     s   t j dS )N)voice_id)r   ttsr   cleanr-   r   r   <lambda>,   s    zsynthesize.<locals>.<lambda>z![tts] ElevenLabs fehlgeschlagen (z) -> edge-tts FallbackT)flush)r   boolr   ELEVENLABS_API_KEYELEVENLABS_VOICE_IDELEVENLABS_MODELr"   hashlibmd5encode	hexdigest	AUDIO_DIRexistsstatst_sizenameasyncioget_event_looprun_in_executorwrite_bytes	Exceptionprintr'   )	r   r(   
use_eleventagkeyr   loopaudioer   r/   r   
synthesize   s*   

"$
 rL   )r   r   r	   r   )r   r   r   r   r	   r   )N)r   r   r(   r)   r	   r   )__doc__
__future__r   r@   r7   pathlibr   r     r   r   r   r'   rL   r   r   r   r   <module>   s    

