o
    i                     @   s|   d dl Z d dlmZ d dl mZ d dlZzd dlmZ W n	   ed Y d dlZ	G dd dej
ZG dd dej
ZdS )	    N)Tensor)MelScalez,torchaudio missing, ACE model will be brokenc                       s:   e Zd Z					d fdd	Zdedefd	d
Z  ZS )LinearSpectrogram      F	pow2_sqrtc                    s>   t    || _|| _|| _|| _|| _| dt	| d S )Nwindow)
super__init__n_fft
win_length
hop_lengthcentermoderegister_buffertorchhann_window)selfr   r   r   r   r   	__class__ =/mnt/c/Users/fbmor/ComfyUI/comfy/ldm/ace/vae/music_log_mel.pyr
      s   
zLinearSpectrogram.__init__yreturnc                 C   s   |j dkr
|d}tjjj|d| j| j d | j| j d d fddd}|j	}tj
| | j| j| jtjj| jtj|jd| jddddd	
}t|}| jd
krct|ddd }||}|S )N         reflect)r   )dtypedeviceFT)r   r   r   r   pad_mode
normalizedonesidedreturn_complexr   gư>)ndimsqueezer   nn
functionalpad	unsqueezer   r   r   stftfloatr   comfymodel_managementcast_tor   float32r   r   view_as_realr   sqrtpowsumto)r   r   r   specr   r   r   forward    s:   




zLinearSpectrogram.forward)r   r   r   Fr   )__name__
__module____qualname__r
   r   r7   __classcell__r   r   r   r   r      s    r   c                       sj   e Zd Z								d fdd		Zd
edefddZd
edefddZdd
ededefddZ  Z	S )LogMelSpectrogramD  r   r      F        Nc	           	         s~   t    || _|| _|| _|| _|| _|| _|| _|p|d | _	t
||||| _t| j| j| j| j	| jd d dd| _d S )Nr   r   slaney)r	   r
   sample_rater   r   r   r   n_melsf_minf_maxr   spectrogramr   	mel_scale)	r   rA   r   r   r   rB   r   rC   rD   r   r   r   r
   B   s&   

zLogMelSpectrogram.__init__xr   c                 C   s   t t j|ddS )Ngh㈵>)min)r   logclampr   rG   r   r   r   compressc   s   zLogMelSpectrogram.compressc                 C   s
   t |S N)r   exprK   r   r   r   
decompressf   s   
zLogMelSpectrogram.decompressreturn_linearc                 C   s4   |  |}| |}| |}|r|| |fS |S rM   )rE   rF   rL   )r   rG   rP   linearr   r   r   r7   i   s   


zLogMelSpectrogram.forward)r=   r   r   r   r>   Fr?   N)F)
r8   r9   r:   r
   r   rL   rO   boolr7   r;   r   r   r   r   r<   A   s    ! r<   )r   torch.nnr'   r   loggingtorchaudio.transformsr   warningcomfy.model_managementr-   Moduler   r<   r   r   r   r   <module>   s   4