o
    Yi-	                     @   s<   d dl Zd dlmZmZmZ ddlmZ G dd deZdS )    N)iirnotchsosfiltbutter   )BaseProcessorModulec                   @   s8   e Zd ZdZddejdededed	ed
ejfddZdS )SpectralSmootherModulez<Surgical Dynamic Spectral Smoother with Anti-Aliasing logic.N      4      ?audio
resonancesthreshold_dbsensitivitykey_freqreturnc                    s  |s|S | j | }|D ]|}|d d|r'| }t|t| dk r'ds+dnd}	|dd|	k r6qd	  td
td  td
 d   gddd fdd}
|jdkri|
|}q|
|d d df |d d df< |
|d d df |d d df< q|S )NfreqFg?Tg      @g      (@
prominencer   g      >@      r   bandpasssosfsoutputc              	      s   t | }dttt|d d  }|krWsdnd}|  | }tdtd  td d   gddd	}t || }td
|d }|| | d|   S | S )Nr   r   g&.>g      ?g?r   bandstopr   r   g?g      .@g      ?)r   nplog10sqrtmeanr   maxmin)ZchanZband_energyrms_dbZreduction_multZreduction_dbZsos_stopnotchedZblendbwr   Z
is_musicalr   sos_bpsrr    R/home/user/Projects/AutoRemaster/tools/automaster_app/modules/spectral_smoother.pyprocess_chan    s   
"2
z4SpectralSmootherModule.process.<locals>.process_chan)	sample_ratecopyabsroundgetr   r   r   ndim)selfr
   r   r   r   r   outresratioZprom_thresholdr(   r&   r"   r'   process   s$   2BzSpectralSmootherModule.process)Nr   r	   N)	__name__
__module____qualname____doc__r   ndarraylistfloatr3   r&   r&   r&   r'   r      s    ,r   )	numpyr   scipy.signalr   r   r   baser   r   r&   r&   r&   r'   <module>   s    