o
    iA                     @   s   d dl Z d dlmZmZm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 d dlmZ d dlmZ d dlmZ d d	lmZ G d
d deZdS )    N)OptionalTupleUnion)ComplexTensor)check_argument_types)AbsFrontend)LogMel)Stft)get_default_kwargs)Frontendc                       s   e Zd ZdZddddddddd	dddeedfd
eeef dededede	e de
de
de
dededede
de	e de
f fddZdefddZdejdejdeejejf fdd Zdejdejdejfd!d"Z  ZS )#DefaultFrontendztConventional frontend structure for ASR.

    Stft -> WPE -> MVDR-Beamformer -> Power-spec -> Mel-Fbank -> CMVN
    i>  i   N   hannTFP   fsn_fft
win_length
hop_lengthwindowcenter
normalizedonesidedn_melsfminfmaxhtkfrontend_conf
apply_stftc              	      s   t  sJ t   t|trt|}t|}|| _	|r+t
|||||||d| _nd | _|| _|d urDtdd|d d i|| _nd | _t|||	|
||d| _|	| _d| _d S )N)r   r   r   r   r   r   r   idim      )r   r   r   r   r   r   default )r   super__init__
isinstancestrhumanfriendly
parse_sizecopydeepcopyr   r	   stftr   r   frontendr   logmelr   frontend_type)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   	__class__r"   P/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/asr/frontend/default.pyr$      s>   







zDefaultFrontend.__init__returnc                 C   s   | j S )N)r   )r/   r"   r"   r2   output_sizeO   s   zDefaultFrontend.output_sizeinputinput_lengthsc           
      C   s   | j d ur| ||\}}nt|d |d }|}| jd ur2t|ts)J t|| ||\}}}| dkra| jrStj	
|d}|d d d d |d d f }n|d d d d dd d f }|jd |jd  }| ||\}	}|	|fS )N.r   .r       r   r   )r+   _compute_stftr   r,   r%   typedimtrainingnprandomrandintsizerealimagr-   )
r/   r5   r6   
input_stft
feats_lens_maskchinput_powerinput_featsr"   r"   r2   forwardR   s   

zDefaultFrontend.forwardc                 C   sX   |  ||\}}| dksJ |j|jd dksJ |jt|d |d }||fS )Nr9   r   r7   r8   )r+   r<   shaper   )r/   r5   r6   rD   rE   r"   r"   r2   r:   w   s
   zDefaultFrontend._compute_stft)__name__
__module____qualname____doc__r
   r   r   intr&   r   booldictr$   r4   torchTensorr   rK   r:   __classcell__r"   r"   r0   r2   r      sx    
	
8
%r   )r)   typingr   r   r   r'   numpyr>   rU   torch_complex.tensorr   	typeguardr   !espnet2.asr.frontend.abs_frontendr   espnet2.layers.log_melr   espnet2.layers.stftr	    espnet2.utils.get_default_kwargsr
   .espnet.nets.pytorch_backend.frontends.frontendr   r   r"   r"   r"   r2   <module>   s    