o
    %IŒjì  ã                   @  s~   d dl mZ d dlZd dlm  mZ d dlZ	d dl
mZmZ d dlmZ dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zdd„ ZdS )é    )ÚannotationsN)ÚbutterÚsosfilt)ÚAudioEnginec                 C  s   t | t | |ddddS )Nr   ©Úaxis)r   )ÚsosÚx© r
   ú>/home/user/Projects/AutoRemaster/tests/test_reference_width.pyÚ_apply2	   s   r   c                 C  s8   t d|d|dd}t d|d|dd}t|| ƒt|| ƒfS )Né   Úlowr   )ÚbtypeÚfsÚoutputÚhigh)r   r   )r	   ÚfreqÚsrÚloÚhir
   r
   r   Ú_split   s   r   c           
      C  sb   g }| }dD ]%}t |||ƒ\}}g }|D ]}t |||ƒ\}}	| ||	 ¡ q||g }q||g S )N)g     @o@g     @¯@)r   Úappend)
r	   r   ÚoutÚrestr   r   ÚalignedÚbandr   r   r
   r
   r   Ú_bands   s   
r   c           
      C  sÈ   | d d …df | d d …df  d }| d d …df | d d …df  d }t j||gdd}i }tdt||ƒƒD ]*\}}t  |d d …df d ¡}t  |d d …df d ¡}	t|	||	 d  ƒ||< q7|S )Nr   é   g      à?r   ©r   Úmidr   r   çê-™—q=)ÚnpÚstackÚzipr   ÚmeanÚfloat)
Úaudior   r    ÚsideÚmsÚresultÚnamer   ÚemÚesr
   r
   r   Ú_ratios    s   $$r.   c               	   C  s\  d} t j d¡}| d }| dd|¡}| dd|¡}t  || || f¡ t j¡}tƒ }| |_dddd	œ}| 	||¡}t
|| ƒ}	|D ]j}
|	|
 }||
 }|| }t|ƒ}d
}||k}|s t d|fd||f¡dt ¡ v sqt t¡rvt t¡ndt |¡t |¡t |¡t |¡dœ }t |
|	|f¡d d|i }tt |¡ƒ‚d  } } } } }}qBtt  t  |d ¡¡ƒ}tt  t  |d ¡¡ƒ}dt  |d |d  ¡ }t|ƒ}d}||k}|s&t d|fd||f¡dt ¡ v sôt t¡rùt t¡nddt ¡ v st |¡rt |¡ndt |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )NéD¬  é*   é   r   g¸…ëQ¸¾?g{®Gáz´?g¸…ëQ¸ž?g
×£p=
Ç?r   gìQ¸…ë¡?©ú<=©z=%(py7)s
{%(py7)s = %(py0)s((%(py2)s - %(py4)s))
} <= %(py10)sÚabs©Úpy0Úpy2Úpy4Úpy7Úpy10ú
>assert %(py12)sÚpy12r   g      4@r!   g333333Ã?)z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} <= %(py6)sÚenergy_delta_db)r7   Úpy1Úpy3Úpy6zassert %(py8)sÚpy8)r"   ÚrandomÚdefault_rngÚnormalÚcolumn_stackÚastypeÚfloat64r   Úsample_rateZmatch_reference_stereo_widthr.   r5   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚ_format_assertmsgÚAssertionErrorÚ_format_explanationr&   Úsqrtr%   Úlog10)r   ÚrngÚnr    r(   r'   ÚengineÚtargetr   Úmeasuredr   Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert6Ú@py_assert9Ú@py_assert8Ú@py_format11Ú@py_format13Z	input_rmsZ
output_rmsr>   Ú@py_assert2Ú@py_assert4Ú@py_format7Ú@py_format9r
   r
   r   Ú7test_reference_width_match_uses_profile_band_definition,   s    
Ò¸rf   c           '      C  sB  dd l }ddlm} d}tj d¡}|d }| dd|¡}| dd|¡}t || || f¡ tj	¡}| d }	| d	 }
|j
|	||d
d ddddœ}dd|dœ}|t|	ƒt|
ƒ|dddœd dt| d ƒddgd d	 |j|
dd\}}t||ƒ}|D ]j}|| }|| }|| }t|ƒ}d}||k}|sØt d|fd||f¡dt ¡ v s©t t¡r®t t¡ndt |¡t |¡t |¡t |¡dœ }t |||f¡d  d!|i }tt |¡ƒ‚d  } } } } }}qzdd"lm} dd l}|||ƒ}d#}| }||k}|s\t d|fd$||f¡d%t ¡ v st |¡rt |¡nd%d&t ¡ v s*t |¡r/t |¡nd&d't ¡ v s=t |¡rBt |¡nd't |¡t |¡d(œ }d)d*|i }tt |¡ƒ‚d  } } }}|j}||ƒ}|j}||ƒ}d+}| } ||  }!t|!ƒ}"d}#|"|#k}$|$st d|$fd,|"|#f¡dt ¡ v sŸt t¡r¤t t¡ndd-t ¡ v s²t |¡r·t |¡nd-t |¡d't ¡ v sÉt |¡rÎt |¡nd't |¡t |¡d&t ¡ v sät |¡rét |¡nd&t |¡t |¡t |"¡t |#¡d.œ }%d/d0|%i }&tt |&¡ƒ‚d  } } } } } }  }! }" }$}#d S )1Nr   )Úrun_processing_pipeliner/   é   é   g)\Âõ(¼?gìQ¸…ë±?z
source.wavz
master.wavÚFLOAT)Úsubtypegš™™™™™™?gR¸…ëQÈ?gìQ¸…ëÁ?r   g      ,Àg      ð¿)Útarget_lufsÚoutput_ceiling_dbÚstereo_target_ratiosT)Ústereo_imagingÚfinal_limitingg      ð?Útempro   rp   )	Ú	file_pathZoutput_pathÚpresetZactive_checkboxesZcustom_preset_valuesZtempo_factorZtemp_dirÚmodule_orderÚlocked_modules)Z	always_2dg{®Gáz¤?r2   r4   r5   r6   r<   r=   )Úmeasure_true_peak_dbg®Gáz®ï?)z:%(py4)s
{%(py4)s = %(py0)s(%(py1)s, %(py2)s)
} <= -%(py7)srv   ÚmasteredÚout_sr)r7   r?   r8   r9   r:   zassert %(py10)sr;   g      ,@)zÃ%(py17)s
{%(py17)s = %(py0)s((%(py11)s
{%(py11)s = %(py8)s
{%(py8)s = %(py6)s
{%(py6)s = %(py3)s
{%(py3)s = %(py1)s.Meter
}(%(py4)s)
}.integrated_loudness
}(%(py9)s)
} - -%(py13)s))
} <= %(py20)sÚpyln)r7   r?   r@   r9   rA   rB   Úpy9Úpy11Zpy13Úpy17Zpy20zassert %(py22)sZpy22)Z	soundfileZengine.workerrg   r"   rC   rD   rE   rF   rG   Úfloat32ÚwriteÚstrÚreadr.   r5   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   Úengine.true_peakrv   Ú
pyloudnormÚMeterÚintegrated_loudness)'Útmp_pathÚsfrg   r   rU   rV   r    r(   r'   Úsrcr   rX   rs   rw   rx   rY   r   rZ   r[   r\   r]   r^   r_   r`   ra   rv   ry   re   rb   Ú@py_assert7Z@py_assert10Z@py_assert12Ú@py_assert14Z@py_assert15Z@py_assert16Z@py_assert19Z@py_assert18Z@py_format21Z@py_format23r
   r
   r   Ú+test_reference_width_survives_final_limiter?   s>   ýü
Òêþ| rŠ   )Ú
__future__r   ÚbuiltinsrL   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterJ   Únumpyr"   Zscipy.signalr   r   Zengine.processorr   r   r   r   r.   rf   rŠ   r
   r
   r
   r   Ú<module>   s    "