o
    
jB                     @   sb   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	m
Z
 G dd deZdd	d
ZdS )    N)signal)LSTMSpeakerEncoder)ResNetSpeakerEncoderc                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
AugmentWAVc                 C   s`  || _ d| _d| v ry|d | _| jd }|ryd| _g | _| j D ]}t| j| tr3| j| q#tjt	j
|ddd}i | _|D ]&}||dt	jd }|| jvrYqE|| jvrcg | j|< | j| | qEtd	t| d
| j  d| _d| v r|d | _| jd rtjt	j
| jd ddd| _d| _tdt| j d |   d S )NFadditivesounds_pathTz**/*.wav)	recursive r   z- | > Using Additive Noise Augmentation: with z audios instances from rirrir_pathz( | > Using RIR Noise Augmentation: with z audios instances)apuse_additive_noisekeysadditive_noise_configadditive_noise_types
isinstancedictappendglobospathjoin
noise_listreplacesplitsepprintlenuse_rir
rir_config	rir_filescreate_augmentation_global_list)selfr   augmentation_configadditive_pathkeyadditive_fileswav_file	noise_dir r)   R/home/kuhnn/.local/lib/python3.10/site-packages/TTS/encoder/utils/generic_utils.py__init__   s@   






 zAugmentWAV.__init__c                 C   s0   | j r| j| _ng | _| jr| jd d S d S NRIR_AUG)r   r   global_noise_listr   r   )r"   r)   r)   r*   r!   9   s   
z*AugmentWAV.create_augmentation_global_listc                 C   s  dt t |d d  }t| j| t| j| d | j| d }|jd }d }|D ]P}| j	j
|| j	jdd | }|jd |k rFq.t| j| d | j| d }	dt t |d d  }
t d||
 |	 d  | }|d u rz|}q.||7 }q.|d u r| ||S || S )	N
      g-C6?min_num_noisesmax_num_noisesr   srmin_snr_in_db)nplog10meanrandomsampler   randintr   shaper   load_wavsample_rateuniformsqrtadditive_noise)r"   
noise_typeaudioclean_dbr   	audio_len
noises_wavnoise
noiseaudio	noise_snrnoise_db	noise_wavr)   r)   r*   rA   A   s4   

zAugmentWAV.additive_noisec                 C   s`   |j d }t| j}| jj|| jjd}|tt	|d  }t
j||| jd dd | S )Nr   r3   r0   	conv_mode)mode)r<   r9   choicer    r   r=   r>   r6   r@   sumr   convolver   )r"   rC   rE   rir_filer
   r)   r)   r*   reverberatef   s
   
zAugmentWAV.reverberatec                 C   s*   t | j}|dkr| |S | ||S r,   )r9   rN   r.   rR   rA   )r"   rC   rB   r)   r)   r*   	apply_onen   s   
zAugmentWAV.apply_oneN)__name__
__module____qualname__r+   r!   rA   rR   rS   r)   r)   r)   r*   r      s    ,%r   configCoqpitc              	   C   s   | j d  dkr't| j d | j d | j d | j d | j dd| jd	}|S | j d  d
krJt| j d | j d | j dd| j dd| jd}|S )N
model_namelstm	input_dimproj_dimlstm_dimnum_lstm_layersuse_torch_specF)r_   audio_configresnet	log_input)r[   r\   rb   r_   r`   )model_paramslowerr   getrC   r   )rW   modelr)   r)   r*   setup_encoder_modelv   s&   rg   )rW   rX   )r   r   r9   numpyr6   scipyr   TTS.encoder.models.lstmr   TTS.encoder.models.resnetr   objectr   rg   r)   r)   r)   r*   <module>   s    j