o
    <fg                     @   sZ   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	 d dl
Z
G dd dZdS )    N)translit)	num2wordsc                   @   s*   e Zd Zdd Zedd Zddd	Zd
S )NeuralSpeakerc                 C   s   t d t }td}td d}tj|s!tj	d| tj
|dd| _| j| t }t dt|| d	 d
 d S )NzInitializing neural modelcpu   zmodel.ptz1https://models.silero.ai/models/tts/ru/v3_1_ru.pt
tts_modelsmodelzModel ready in     seconds)printtimetorchdeviceset_num_threadsospathisfilehubdownload_url_to_filepackagePackageImporterload_pickle_NeuralSpeaker__modeltoround)selfstartr   
local_fileend r   B/var/www/avals/data/www/bot.kubok-gagarina.ru/tts/NeuralSpeaker.py__init__   s   

zNeuralSpeaker.__init__c                 C   s   |   dd}t|ddS )N,.ru)lang)groupreplacer   )matchclean_numberr   r   r    __num2words_ru   s   zNeuralSpeaker.__num2words_ruxeniaF逻  c                 C   s  t |d}td| j|}td|  t|dkr!|dd }nd S | dkr, d}n% d	kr4 d
}n dkr< d}n dkrD d}n dkrL d}ndkrQd}| }|dvrZd}|dvr`d}t }td z| jj|||d}W n t	y   td Y d S w t }	t
|	| d}
td|
 d | }|dtt| 9 }|tj}t|dd|}|s| }|  |
S |jS )Nr$   z-?[0-9][0-9,._]*z"text after translit and num2words    r   r	   z!1aidarz!2bayaz!3kseniaz!4r+   z!5eugenez!0random)r,   i]  i@  r,   )r.   r/   kseniyar+   r1   r2   zModel started)textspeakersample_ratez	Bad inputzModel applied in r
   i     )r   resub_NeuralSpeaker__num2words_rur   lenr   r   	apply_tts
ValueErrorr   numpynpmaxabsastypeint16sa
WaveObjectplay	wait_done
audio_data)r   wordsr5   	save_filer6   possible_speakerexample_textr   audior   time_elapsedwave_objplay_objr   r   r    speak"   s^   






zNeuralSpeaker.speakN)r+   Fr,   )__name__
__module____qualname__r!   staticmethodr:   rQ   r   r   r   r    r      s
    
r   )r   r   r   r>   r?   simpleaudiorD   transliterater   r   r8   r   r   r   r   r    <module>   s    