o
    Xi                     @   s,   d dl mZmZ d dlZG dd deZdS )    )ABCabstractmethodNc                   @   sp   e Zd ZdZdefddZedejdejfddZ	dejd	edejfd
dZ
dejdededejfddZdS )BaseProcessorModulez/Abstract base class for all processing modules.sample_ratec                 C   s
   || _ d S )N)r   )selfr    r   E/home/user/Projects/AutoRemaster/tools/automaster_app/modules/base.py__init__   s   
zBaseProcessorModule.__init__audioreturnc                 K   s   dS )zProcess the audio array.Nr   )r   r
   kwargsr   r   r   process
   s   zBaseProcessorModule.processwindow_sizec                 C   sj   t j|d |d |d fdd}t || }t t j||dd}||d | d p,d dt| S )zHelper: Calculate RMS envelope.   edge)modesameN)nppadonessqrtconvolvelen)r   r
   r   paddedwindowenveloper   r   r   _calculate_rms_envelope   s    &z+BaseProcessorModule._calculate_rms_enveloper   attack_samplesrelease_samplesc                 C   sT   ddl m} td|d  }td|d  }|| d }|d| gd| g|S )z+Helper: Apply attack and release smoothing.r   )lfilterg      g&.>r   g      ?)scipy.signalr   r   exp)r   r   r   r   r   Z	alpha_attZ	alpha_relalphar   r   r   _apply_attack_release   s
   z)BaseProcessorModule._apply_attack_releaseN)__name__
__module____qualname____doc__intr	   r   r   ndarrayr   r   r#   r   r   r   r   r      s    "r   )abcr   r   numpyr   r   r   r   r   r   <module>   s    