o
    
j2                     @   sT   d dl Z d dlZd dlZd dlmZ d dlZd dlZd dlm	Z	 G dd de	Z
dS )    N)Manager)Datasetc                       sn   e Zd ZdZ							d fdd	Zdd Zed	d
 Zdd Zdd Z	dddZ
dd Zdd Z  ZS )
GANDatasetz
    GAN Dataset searchs for all the wav files under root path
    and converts them to acoustic features on the fly and returns
    random segments of (audio, feature) couples.
       FTc                    s   t    || _|| _t|d ttf | _|| _|| _	|| _
|| _|| _|| _|	| _|| _|
| _|| _|| dks>J d|| d|  | _ttt| j| _|   |r]|   d S d S )Nr   z- [!] seq_len has to be a multiple of hop_len.r   )super__init__ap	item_list
isinstancetuplelistcompute_featseq_lenhop_len	pad_shortconv_padreturn_pairsis_trainingreturn_segments	use_cacheuse_noise_augmentverbosefeat_frame_lenrangelenG_to_D_mappingsshuffle_mappingcreate_feature_cache)selfr   itemsr   r   r   r   r   r   r   r   r   r   	__class__ S/home/kuhnn/.local/lib/python3.10/site-packages/TTS/vocoder/datasets/gan_dataset.pyr      s*   
zGANDataset.__init__c                 C   s:   t  | _| j | _|  jdd tt| jD 7  _d S )Nc                 S   s   g | ]}d qS Nr"   ).0_r"   r"   r#   
<listcomp>>   s    z3GANDataset.create_feature_cache.<locals>.<listcomp>)r   managerr   cacher   r   r	   r   r"   r"   r#   r   ;   s   &zGANDataset.create_feature_cachec                 C   s   t j tj| ddddS )Nz**z*.wavT)	recursive)globospathjoin)r.   r"   r"   r#   find_wav_files@   s   zGANDataset.find_wav_filesc                 C   s
   t | jS r$   )r   r	   r*   r"   r"   r#   __len__D   s   
zGANDataset.__len__c                 C   sd   t jj rtt jj j | jr+| |}| jr)| j	| }| |}||fS |S | |}|S )zZReturn different items for Generator and Discriminator and
        cache acoustic features)
torchutilsdataget_worker_inforandomseedr   	load_itemr   r   )r   idxitem1idx2item2r"   r"   r#   __getitem__G   s   



zGANDataset.__getitem__Nc                 C   s   t || jk rtj|d| jt | fddd}|durL|jd | jk rL| jt| jj	gdddf }tj|ddgd| j|jd  gfd|
 d}||fS )z3Pad samples shorter than the output sequence lengthr   constantg        )modeconstant_valuesN   )r   r   nppadshaper   r   melspectrogramzeros
win_lengthmean)r   audiomel	pad_valuer"   r"   r#   _pad_short_samplesY   s    $zGANDataset._pad_short_samplesc                 C   s   t | j d S r$   )r6   shuffler   r*   r"   r"   r#   r   h   s   zGANDataset.shuffle_mappingc           
      C   s  | j r/| j| }| jr| j| dur| j| \}}nA| j|}| j|}| ||\}}n,| j| \}}| jrH| j| durH| j| \}}n| j|}t	|}| ||\}}tj
|d| jfdd}|d|jd | j  }|jd | j |jd ksJ d|jd | j  d|jd  t| d}t| d}| jr|jd | j }td|}|| j }|dd||f }|| j }	|dd|	|	| j f }| jr| jr| jr|d	t|  }||fS )
zload (audio, feat) coupleNr   edge)r?   z [!] z vs rA   g       ?)r   r	   r   r)   r   load_wavrE   rL   rB   loadrC   r   rD   r2   
from_numpyfloat	unsqueezesqueezer   r   r6   randintr   r   r   
randn_like)
r   r9   wavpathrI   rJ   	feat_pathmax_mel_start	mel_startmel_endaudio_startr"   r"   r#   r8   k   s<   

 

zGANDataset.load_item)r   FTTFFFr$   )__name__
__module____qualname____doc__r   r   staticmethodr0   r1   r=   rL   r   r8   __classcell__r"   r"   r    r#   r      s$    )

r   )r,   r-   r6   multiprocessingr   numpyrB   r2   torch.utils.datar   r   r"   r"   r"   r#   <module>   s    