o
    ߥi	                     @   s   d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZ d dlmZ d dlmZ ejejejdG d	d
 d
eZdS )    )nn)Models)MODELS
TorchModel)RectifiedLinearSigmoid)AffineTransformUniDeepFsmn)Tasks)module_namec                       s<   e Zd ZdZ		ddef fddZdd Zd	d
 Z  ZS )DfsmnAnszDenoise model with DFSMN.

    Args:
        model_dir (str): the model path.
        fsmn_depth (int): the depth of deepfsmn
        lorder (int):
    	      	model_dirc                    sv   t  j|g|R i |  | _tdd| _tdd| _ fddt|D }tj	| | _
tdd| _tdd| _d S )Nx      c                    s   g | ]	}t d d  d qS )r   r	   ).0ilorder [/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/audio/ans/denoise_net.py
<listcomp>(   s    z%DfsmnAns.__init__.<locals>.<listcomp>i  )super__init__r   r   linear1r   reluranger   
Sequentialdeepfsmnlinear2r   sig)selfr   
fsmn_depthr   argskwargsrepeats	__class__r   r   r      s   
zDfsmnAns.__init__c                 C   s6   |  |}| |}| |}| |}| |}|S )z
        Args:
            input: fbank feature [batch_size,number_of_frame,feature_dimension]

        Returns:
            mask value [batch_size, number_of_frame, FFT_size/2+1]
        )r   r   r    r!   r"   )r#   inputx1x2x3x4x5r   r   r   forward/   s   




zDfsmnAns.forwardc                 C   sh   d}|d7 }|| j  7 }|| j 7 }| jD ]}|| 7 }q|| j 7 }|| j 7 }|d7 }|S )N z<Nnet>
z</Nnet>
)r   to_kaldi_nnetr   r    r!   r"   )r#   re_strdfsmnr   r   r   r2   >   s   
zDfsmnAns.to_kaldi_nnet)r   r   )	__name__
__module____qualname____doc__strr   r0   r2   __classcell__r   r   r(   r   r      s    
r   N)torchr   modelscope.metainfor   modelscope.modelsr   r   .modelscope.models.audio.ans.layers.activationsr   r   3modelscope.models.audio.ans.layers.affine_transformr   0modelscope.models.audio.ans.layers.uni_deep_fsmnr
   modelscope.utils.constantr   register_moduleacoustic_noise_suppressionspeech_dfsmn_ansr   r   r   r   r   <module>   s   