o
    i                     @   sB   d dl Z d dl mZ ddlmZ ddlmZ G dd dejZdS )    N)nn   )VocosBackbone)	ISTFTHeadc                       s6   e Zd Z								d fdd		Zd
d Z  ZS )SopranoDecoder         N         c	           	         s~   t    || _|| _|| _|r|n|d | _|| _|| _|| _|| _	t
| j| j| j| jd|d| _t| j| j| jd| _d S )Nr   r   )input_channelsdimintermediate_dim
num_layersinput_kernel_sizedw_kernel_size)r   n_fft
hop_length)super__init__decoder_initial_channelsr   r   r   r   r   upscale	dw_kernelr   decoderr   head)	selfnum_input_channelsdecoder_num_layersdecoder_dimdecoder_intermediate_dimr   r   r   r   	__class__ I/home/ubuntu/.local/lib/python3.10/site-packages/soprano/vocos/decoder.pyr   	   s(   

zSopranoDecoder.__init__c                 C   sF   | d}tjjj|| j|d  d ddd}| |}| |}|S )N   r   linearT)sizemodealign_corners)r'   torchr   
functionalinterpolater   r   r   )r   xTreconstructedr#   r#   r$   forward(   s
   
$

zSopranoDecoder.forward)r   r   r	   Nr   r
   r   r   )__name__
__module____qualname__r   r0   __classcell__r#   r#   r!   r$   r      s    r   )r*   r   modelsr   headsr   Moduler   r#   r#   r#   r$   <module>   s
    