o
    mi                     @   sn   d dl Z d dlZd dlZd dlZd dlZd dlZd dlmZ ddlm	Z	m
Z
mZ ddlmZ G dd dZdS )    N)EspeakWrapper   )DEFAULT_VOCABMAX_PHONEME_LENGTHEspeakConfig)logc                   @   sN   e Zd ZddedB defddZedefddZd	d
 Z	ddefddZ
dS )	TokenizerNespeak_configvocabc                 C   s>  |pt | _|s
t }|jst |_|jst |_t	dr%t	d|_z	t
j|j W nb ty } zVtd|  td dt  dt  dtj }t
jdp^t
jd|_|jsgt|z	t
j|j W n ty } z	t| d	| d }~ww W Y d }~nd }~ww t|j t|j d S )
NZPHONEMIZER_ESPEAK_LIBRARYz&Failed to load espeak shared library: z-Falling back to system wide espeak-ng librarya  Failed to load espeak-ng from fallback. Please install espeak-ng system wide.
	See https://github.com/espeak-ng/espeak-ng/blob/master/docs/guide.md
	Note: you can specify shared library path using PHONEMIZER_ESPEAK_LIBRARY environment variable.
Environment:
	z (z) | z	espeak-ngZespeakz: )r   r
   r   Z	data_pathespeakng_loaderZget_data_pathZlib_pathZget_library_pathosgetenvctypesZcdllZLoadLibrary	Exceptionr   errorwarningplatformreleasesysversionutilZfind_libraryRuntimeErrorr   Zset_data_pathZset_library)selfr	   r
   e
error_info r   O/home/kim/smarthome/.venv/lib/python3.10/site-packages/kokoro_onnx/tokenizer.py__init__   sP   





zTokenizer.__init__returnc                 C   s   |   S N)strip)textr   r   r   normalize_text8   s   zTokenizer.normalize_textc                 C   s4   t |tkrtdt ddd t| jj|D S )Nz$text is too long, must be less than z	 phonemesc                 S   s   g | ]}|d ur|qS r   r   ).0ir   r   r   
<listcomp>A   s    z&Tokenizer.tokenize.<locals>.<listcomp>)lenr   
ValueErrormapr
   get)r   phonemesr   r   r   tokenize<   s
   
zTokenizer.tokenizeen-usTc                    s@   |rt |}tj||ddd}dt fdd|}| S )z0
        lang can be 'en-us' or 'en-gb'
        T)Zpreserve_punctuationZwith_stress c                    s
   |  j v S r   )r
   )pr   r   r   <lambda>M   s   
 z%Tokenizer.phonemize.<locals>.<lambda>)r   r"   
phonemizer	phonemizejoinfilterr    )r   r!   langZnormr*   r   r/   r   r2   C   s   
zTokenizer.phonemize)NN)r,   T)__name__
__module____qualname__r   dictr   staticmethodstrr"   r+   r2   r   r   r   r   r      s    )r   )r   r   r   r   r   r1   Z!phonemizer.backend.espeak.wrapperr   configr   r   r   r   r   r   r   r   r   <module>   s    