o
    i3                     @   s   d Z ddlZddlZddlZddlmZ ddlmZ ddlmZm	Z	m
Z
mZ ddlmZ ddlmZ ddlmZ G d	d
 d
eZdS )z!Mbrola backend for the phonemizer    N)Logger)Path)UnionOptionalListDict)BaseEspeakBackend)EspeakWrapper)	Separatorc                       s   e Zd ZdZdZddedee f fddZe	dd Z
ed	efd
dZedd Zededeeef d	efddZed	eeef fddZdee dededed	ee f
ddZdedededed	ef
ddZ  ZS )EspeakMbrolaBackendz(Espeak-mbrola backend for the phonemizerNlanguageloggerc                    s    t  j||d | j| d S )N)r   )super__init___espeak	set_voice)selfr   r   	__class__ T/home/ubuntu/.local/lib/python3.10/site-packages/phonemizer/backend/espeak/mbrola.pyr   "   s   zEspeakMbrolaBackend.__init__c                   C   s   dS )Nzespeak-mbrolar   r   r   r   r   name&   s   zEspeakMbrolaBackend.namereturnc                 C   s   t  otdot  S )z,Mbrola backend is available for espeak>=1.49mbrola)r   is_availableshutilwhichis_espeak_ngclsr   r   r   r   *   s
   z EspeakMbrolaBackend.is_availablec                 C   s   t  d}dd |D S )Nr   c                 S   s   i | ]}|j d d |jqS )   N)
identifierr   ).0voicer   r   r   
<dictcomp>6   s    z@EspeakMbrolaBackend._all_supported_languages.<locals>.<dictcomp>)r	   available_voices)r   voicesr   r   r   _all_supported_languages2   s   z,EspeakMbrolaBackend._all_supported_languages	data_pathc                 C   st   |dd }t |d |  rdS tjdkr8d| d| d| d| g}|D ]}t | r7 dS q+d	S )
z6Returns True if the required mbrola voice is installedr    Nr   Twin32z/usr/share/mbrola//z/usr/share/mbrola/voices/F)pathlibr   is_filesysplatform)r   r   r(   r#   
candidates	candidater   r   r   _is_language_installed8   s   
z*EspeakMbrolaBackend._is_language_installedc                    s6    j du rt j fdd   D  _  j S )z+Returns the list of installed mbrola voicesNc                    s"   i | ]\}}  |r||qS r   )r1   )r"   kvr   r(   r   r   r$   S   s    
z;EspeakMbrolaBackend.supported_languages.<locals>.<dictcomp>)_supported_languagesr	   r(   r'   itemsr   r   r4   r   supported_languagesN   s   

z'EspeakMbrolaBackend.supported_languagestextoffset	separatorstripc                 C   sH   g }t |ddD ]\}}| j|}| ||| ||}|| q|S )N   )start)	enumerater   
synthetize_postprocess_lineappend)r   r8   r9   r:   r;   outputnumliner   r   r   _phonemize_auxX   s   z"EspeakMbrolaBackend._phonemize_auxrD   rC   c                 C   s<   dd | dD }|jdd |D }|s||j7 }|S )Nc                 s   s&    | ]}|  r|d d V  qdS )	r   N)r;   split)r"   phnr   r   r   	<genexpr>e   s    
z8EspeakMbrolaBackend._postprocess_line.<locals>.<genexpr>
c                 s   s    | ]	}|d kr|V  qdS )_Nr   )r"   phor   r   r   rI   g   s    )rG   phonejoin)r   rD   rC   r:   r;   phonemesr   r   r   r@   a   s   
z%EspeakMbrolaBackend._postprocess_line)N)__name__
__module____qualname____doc__r5   strr   r   r   staticmethodr   classmethodboolr   r'   r   r   r1   r   r7   r   intr
   rE   r@   __classcell__r   r   r   r   r      s<    

	

	r   )rS   r+   r   r-   loggingr   r   typingr   r   r   r   phonemizer.backend.espeak.baser   !phonemizer.backend.espeak.wrapperr	   phonemizer.separatorr
   r   r   r   r   r   <module>   s   