o "e@sxddlZddlZddlmZdZdddZddd Zd d Zd d Z ia ia dddZ dddZ ddZ dddZdS)N)melg@h㈵>cCsttj||d|S)z5 PARAMS ------ C: compression factor )min)torchlogclamp)xCZclip_valr &/workspace/OpenVoice/mel_processing.pydynamic_range_compression_torchsr cCst||S)zF PARAMS ------ C: compression factor used to compress )rexp)r r r r r !dynamic_range_decompression_torchsrcC t|}|SN)r  magnitudesoutputr r r spectral_normalize_torchrcCrr)rrr r r spectral_de_normalize_torchrrFc Cst|dkrtdt|t|dkrtdt|t|jdt|j}t|d|}|tvrDt|j|j|jdt|<tj j j | dt ||dt ||dfd d }|d}tj||||t||d d d d d }t|ddd}|S)Ng min value is g? max value is _dtypedevicerreflectmodeFT hop_length win_lengthwindowcenterpad_mode normalizedonesidedreturn_complexư>)rrprintmaxstrrr hann_windowtonn functionalpad unsqueezeintsqueezestftsqrtpowsum) yn_fft sampling_ratehop_sizewin_sizer& dtype_devicewnsize_dtype_devicespecr r r spectrogram_torch(s<    rDc Cst|jdt|j}t|d|}|tvr&t|j|j|jdt|<tjjj| dt ||dt ||dfdd}|dd}t tj t |} | d|ddddd| jd} | ttjjt||d } ddlmm} |d usJ| j|| |j|d } tj| ddd|ddf| dd|dddfgdd } tj|d|||t||dd d d d }tj|| ddsJt| ddd}|S)Nrrrrrr rr+)sizeF)stride)dimTr"g-C6?)atolr,)r/rrr0rr1r2r3r4r5r6 view_as_realffteyepermutereshapeshape as_tensorlibrosautil pad_centerfloatZtorch.nn.functionalconv1dstackr8r7allcloser9r:r;)r<r=r>r?r@r&rArBZ freq_cutoffZ fourier_basisZ forward_basisFZforward_transform_squaredZspec2Zspec1rCr r r spectrogram_torch_convNs&6 &$ > rXc Csxt|jdt|j}t|d|}|tvr.t|||||}t|j|j|jdt|<tt||}t |}|S)Nrr) r/rr mel_basislibrosa_mel_fnr from_numpyr1matmulr) rCr=num_melsr>fminfmaxrAfmax_dtype_devicerr r r spec_to_mel_torchzs  rac  Csdt|dkrtdt|t|dkrtdt|t|jdt|j} t|d| } t|d| } | tvrTt|||||} t | j |j|jdt| <| t vrft |j |j|jdt | <tj j j|dt||dt||dfd d }|d}tj||||t | |d d d d d } t| ddd} tt| | } t| } | S)Ngrg?rrrrrrr FTr"r+r,)rrr-r.r/rrrYrZr[r1r0r2r3r4r5r6r7r8r9r:r;r\r)r<r=r]r>r?r@r^r_r&rAr`rBrrCr r r mel_spectrogram_torchsL      rb)rr)r)F)rtorch.utils.dataZlibrosa.filtersrrZZ MAX_WAV_VALUEr rrrrYr0rDrXrarbr r r r s      &,