
    ahq                     v    d dl Zd dlZd dlZd dlmZmZ dZdZ	dZ
dZdZddZd	 Zdd
ZddZd Zd Zd Zd Zy)    N)buttersosfiltg      0       @i>  d   g&.>c                     t        j                  | |d      \  }}t        |dz  z  }t        d|dd      }t	        ||      }||fS )NT)srmonor      highpasssos)NWnbtypeoutput)librosaloadHPFr   r   )path	target_sryr   wnr   s         6/var/www/html/engine/services/proctor/voice_quality.py	load_monor      sL    LL)$7EAr 
S	B
1:e
<CQAb5L    c                 N    t        j                  |      }|j                  |       S )N)pylnMeterintegrated_loudness)r   r   meters      r   integrated_lufsr       s     JJrNE$$Q''r   c                 T   t        j                  t        j                  | ||            dz  }t        j                  ||      }||k\  ||k  z  }	||k\  ||k  z  }
||	   j                         }||
   j                         }|||k\  ||k  z     j                         t        z   }||z  S )N)n_fft
hop_lengthr
   )r   r"   )npabsr   stftfft_frequenciessumEPS)r   r   f_lowf_splitf_high	frame_lenhopSfreqslohilo_ehi_etotals                 r   band_energy_ratior6      s    
w||AY3?@!CA##r;E
5.UW_	-B
7
u	/BR599;DR599;D5F?3499;cAE%<r   c                    t        ||z  dz        }t        j                  j                  | ||dz  d      }t	        j
                  |dz  j                  d      t        z         }t	        j                  ||      }t	        j                  |      }dt	        j                  |t        z   |t        z   z        z  }	t        t	        j                  |	dd	            S )
Ni  r
   r   )frame_lengthr#   axis   )r9      i<   )intr   utilframer$   sqrtmeanr)   quantilemedianlog10floatclip)
r   r   frame_mssilence_quantiler-   framesrmsnoisesignalsnrs
             r   	snr_proxyrN   %   s    BMD()I\\	iQRlYZ[F
''619"""*S0
1CKK-.EYYs^F
RXXv|eck23
3Cc2&''r   c                     t        j                  | g dg d      }t        j                  |g dg d      }d|z  d|z  z   S )N)gQ?皙?ffffff?      ?)        g      ?ffffff?      ?)   
   r;      rR   )r$   interp)hfersnr_db	hfer_partsnr_parts       r   clarity_scorer^   /   s>     		$ 8:OPI		&/3HIHy=3x<''r   c                     t        | t        z
        }t        t        j                  t        j
                  |dt        ddgg d      dd            S )Nr         )rU   rT   rP   rS   r:   )r%   TARGET_LUFSrE   r$   rF   rY   OK_RANGE)lufsdiffs     r   loudness_scorerf   7   sB    tk!"D4!Xq")=?STVWYZ[\\r   c                 >    d| z  d|z  z   }|dk  ry|dk  ry|dk  ryy)	Ng333333?g?rQ   poormoderateg?good	excellent )clarityloudss      r   fuse_scoresrp   =   s2    Gc$hA4x3w
3wr   c           	         t        | t        t        d            \  }}t        j                  t        j                  |            dk  rdd ddS t        ||      }t        ||      }t        ||      }t        ||      }t        |      }t        ||      }g }	|d|t        t        z
  k  r|	j                  d|dd	       n=|t        t        z   kD  r|	j                  d
|dd	       n|	j                  d|dd	       |	j                  d|d       |	j                  d|dd       |t        |d      t        |d      t        |d      t        |d      t        |d      dj                  |	      dS )N }  )r   g-C6?rh   zAudio is near-silent.)ratingrd   notesztoo quiet (z.1fz LUFS)z
too loud (zvolume near target (z	HF ratio z.2fzSNR z dBr:      z; )rs   rd   rZ   r[   r^   rf   rt   )r   maxFS_MINr$   r%   r    r6   rN   r^   rf   rp   rb   rc   appendroundjoin)
r   r   r   rd   rZ   rM   cscorelscorers   rt   s
             r   judge_audio_qualityr}   E   sg   dc&%&89EAr	vvbffQi4 $9PQQ1b!DQ#DQC4%FD!F(FE+((LL;tCj78K(**LL:d3Zv67LL/Sz@A	LL9T#J'(	LL4Cy$% dAdAQ-vq)*5! r   )rr   )r   i  iX  i   i   )rX   g?)numpyr$   r   
pyloudnormr   scipy.signalr   r   rb   rc   rw   r   r)   r   r    r6   rN   r^   rf   rp   r}   rl   r   r   <module>r      sS       (		
	(((]!r   