o
    @Ti	                     @   sN   d dl Z d dlZd dl mZ dde jdede jfddZG d	d
 d
ejZdS )    N)nnHz>xclip_valreturnc                 C   s   t t j| |dS )N)min)torchlogclip)r   r    r   R/home/ubuntu/.local/lib/python3.10/site-packages/linacodec/module/audio_feature.pysafe_log	   s   r   c                       sF   e Zd Z					ddededed	ed
ef
 fddZdd Z  ZS )MelSpectrogramFeature]        d   centersample_raten_fft
hop_lengthn_melspaddingc                    sB   t    |dvrtd|| _tjj|||||dkdd| _d S )N)r   samez#Padding must be 'center' or 'same'.r      )r   r   r   r   r   power)super__init__
ValueErrorr   
torchaudio
transformsMelSpectrogrammel_spec)selfr   r   r   r   r   	__class__r   r   r      s   
zMelSpectrogramFeature.__init__c                 C   s^   | j dkr| jj| jj }tjjj||d |d fdd}| j|}| j	|}t
|}|S )zk
        Returns:
            mel_specgram (Tensor): Mel spectrogram of the input audio. (B, C, L)
        r      reflect)mode)r   r"   
win_lengthr   r   r   
functionalpadspectrogram	mel_scaler   )r#   audior+   specgrammel_specgramr   r   r   forward&   s   
 zMelSpectrogramFeature.forward)r   r   r   r   r   )__name__
__module____qualname__intstrr   r1   __classcell__r   r   r$   r   r      s$    r   )r   )r   r   r   Tensorfloatr   Moduler   r   r   r   r   <module>   s
   