o
    i                     @   sX   d Z ddlZddlZddlmZ ddlmZmZ ddlZddl	Z	G dd dej
jZdS )zGWrapper class for the vocoder model trained with parallel_wavegan repo.    N)Path)OptionalUnionc                       s`   e Zd ZdZ	ddeeef deeeef  f fddZe	
 de	jde	jfd	d
Z  ZS ) ParallelWaveGANPretrainedVocoderzEWrapper class to load the vocoder trained with parallel_wavegan repo.N
model_fileconfig_filec                    s   t    zddlm} W n ty   td  w |du r.tj	t
|}tj|d}t|}tj|tjd}W d   n1 sEw   Y  |d | _|||| _t| jdr`| j  d	| _t| jd
rnd| _dS dS )z3Initialize ParallelWaveGANPretrainedVocoder module.r   )
load_modelzZ`parallel_wavegan` is not installed. Please install via `pip install -U parallel_wavegan`.Nz
config.yml)Loadersampling_rateremove_weight_normFmeanT)super__init__parallel_wavegan.utilsr   ImportErrorloggingerrorospathdirnamestrjoinopenyamlloadr	   fsvocoderhasattrr   normalize_before)selfr   r   r   r   fconfig	__class__ i/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/tts/utils/parallel_wavegan_pretrained_vocoder.pyr      s.   




z)ParallelWaveGANPretrainedVocoder.__init__featsreturnc                 C   s   | j j|| jddS )zGenerate waveform with pretrained vocoder.

        Args:
            feats (Tensor): Feature tensor (T_feats, #mels).

        Returns:
            Tensor: Generated waveform tensor (T_wav).

        )r   )r   	inferencer   view)r   r&   r$   r$   r%   forward.   s   z(ParallelWaveGANPretrainedVocoder.forward)N)__name__
__module____qualname____doc__r   r   r   r   r   torchno_gradTensorr+   __classcell__r$   r$   r"   r%   r      s    
 r   )r/   r   r   pathlibr   typingr   r   r0   r   nnModuler   r$   r$   r$   r%   <module>   s   