o
    Ii%                     @   s`   d dl Zd dlm  mZ d dlZd dlZd dl	m
Z
 G dd dejZedkr.e  dS dS )    N)AudioEnginec                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )

TestStereoc                 C   s   t  | _d| j_d S )ND  )r   enginesample_rate)self r   5/home/user/Projects/AutoRemaster/tests/test_stereo.pysetUp   s   zTestStereo.setUpc                 C   s   d}t jd t jdd|df}|dddf |dddf  d }|dddf |dddf  d }|| }|| }t ||f}t jj||dd	 dS )
z"Test M/S encode/decode round trip.r   *   r         ?   N   gHz>atol)nprandomseednormalcolumn_stacktestingassert_allclose)r   sroriginalmidsideZleft_recZ	right_recZreconstructedr   r   r	   )test_ms_conversion_perfect_reconstruction   s   $$z4TestStereo.test_ms_conversion_perfect_reconstructionc                 C   sb  d}t jdd|dd}t dt j d | }t dt j d | d }|| }|| }t ||f}| jj|d	d	d	d
}t jj	|dddf |dddf dd | jj|dddd
}	|	dddf |	dddf  d }
|	dddf |	dddf  d }t 
t |d }t 
t |d }td|d td|d | j||d dd dS )z(Test apply_stereo_imaging width control.r   r         ?Fendpointr   i  r           	low_width	mid_width
high_widthNr   gh㈵>r          @zOriginal Side RMS: .4fzNew Side RMS: g?)delta)r   linspacesinpicosr   r   apply_stereo_imagingr   r   sqrtmeanprintassertAlmostEqual)r   r   tZmid_sigZside_sigleftrightstereoZmono_processedZwide_processedZnew_midZnew_sideZrms_orig_sideZrms_new_sider   r   r	   test_stereo_width_control   s.   *$$z$TestStereo.test_stereo_width_controlc                    s   d t jdd dd}t dt j d | }t dt j d | }|d	 }|d	 }|| ||  }|| ||  }t ||f}| jj|d
ddd}	 fdd}
|
|	d}|
|	d}td|d td|d | |d | 	|d dS )z0Test different widths for different frequencies.r   r   r   Fr   r   d   i'  r   r    r%   r!   c                    st   t j| d d df }t j| d d df }t jt| d  }t t || }|| d }t || S )Nr   r   r   )r   fftrfftrfftfreqlenargminabs)sigfreqZl_fftZr_fftfreqsidxZside_fftr   r   r	   get_lr_magnitude_diff_at_freqh   s   zPTestStereo.test_frequency_dependent_width.<locals>.get_lr_magnitude_diff_at_freqzSide Mag @ 100Hz (Target 0): r&   z Side Mag @ 10kHz (Target High): g     @@g     @N)
r   r(   r)   r*   r   r   r,   r/   
assertLessassertGreater)r   r1   lowhighZside_lowZ	side_highr2   r3   r4   	processedrB   Zside_low_magZside_high_magr   rA   r	   test_frequency_dependent_widthK   s,   


z)TestStereo.test_frequency_dependent_widthN)__name__
__module____qualname__r
   r   r5   rH   r   r   r   r	   r      s
    -r   __main__)builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arunittestnumpyr   engine.processorr   TestCaser   rI   mainr   r   r   r	   <module>   s   "y