
    @};d                         d dl Z d dlZ ej                  dd       d dlmZ d dlmZmZmZ d dlZd dl	Z	 e	j                  d ej                                dZ G d d	e      Zy)
    NGstz1.0)RB)GObjectGior   	rhythmboxgMbP?c                   T    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zy)ReplayGainPlayerc                 F   g }d}|D ]3  }t         j                  j                  |      #|j                  |       5 t	        |      dkD  r\t        d      dj                  |      z  }t        j                  |j                  j                  t        d      |       t        |      |j                  j                  | _        | j                  j                  j                  | _        t        j                  j!                  d      | _        | j"                  j%                  d| j&                         g | _        d| _        t-        j.                  d	| j                        r"| j1                          | j2                  | _        y | j7                          | j8                  | _        y )
N)rgvolume	rglimiterr   ziThe GStreamer elements required for ReplayGain processing are not available. The missing elements are: %sz, z*ReplayGain GStreamer plugins not availablez&org.gnome.rhythmbox.plugins.replaygainzchanged::limiterg        get-stream-filters)r   ElementFactoryfindappendlen_joinr   error_dialogpropswindow	Exceptionshell_playerplayerr   Settingsnewsettingsconnectlimiter_changed_cbprevious_gainfallback_gainr   signal_lookupsetup_xfade_modedeactivate_xfade_modedeactivate_backendsetup_playbin_modedeactivate_playbin_mode)selfshellmissingrequiredemsgs         @/usr/lib/x86_64-linux-gnu/rhythmbox/plugins/replaygain/player.py__init__zReplayGainPlayer.__init__+   s_   '&( a	a (NN1 	\A	
v	wz~  {D  {D  EL  {M  
M3??5;;%%q)U'VX[\	3kk..$!!''..$+,,""#KL$---*D,C,CD$$ /=!774!994    c                 @    | j                          d | _        d | _        y N)r$   r   r   r'   s    r-   
deactivatezReplayGainPlayer.deactivateL   s    $+$r/   c                    | j                   d   }||j                  _        | j                   d   }|t        j                  k(  rd|j                  _        nd|j                  _        | j                  |j                  _        t        d|j                  j                  t        |j                  j
                        |j                  j                  fz         y )Npreampmode   r   zEupdated rgvolume settings: preamp %f, album-mode %s, fallback gain %f)	r   r   pre_ampconfigREPLAYGAIN_MODE_ALBUM
album_moder    printstr)r'   r   r5   r6   s       r-   set_rgvolumezReplayGainPlayer.set_rgvolumeR   s    =="&!(..
 
v	$	V))) 8>> 8>> "&!3!3(..O>>3x~~8898>>;W;WSY 	Y Zr/   c                 B   |j                   j                  |j                   j                  z
  }t        || j                  z
        t
        k  rt        d|z         yt        |      t
        k  rt        d       yt        | j                        t        j                  k(  r| j                  j                  d       | j                  j                  |       t        | j                        t        | j                        z  | _        t        d|| j                  fz         y)Nz(ignoring gain %f (current fallback gain)Fz$ignoring zero gain (pretty unlikely)r   zAgot target gain %f; running average of previous gain values is %fT)r   target_gainr8   absr    EPSILONr<   r   r   r9   AVERAGE_GAIN_SAMPLESpopr   sum)r'   r   gains      r-   update_fallback_gainz%ReplayGainPlayer.update_fallback_gaing   s    		#	#hnn&<&<	<$""	"#g-	3d	:;
Y	/0
 			 ; ;;!D!4--.T5G5G1HH$KtUYUgUgNhhi	r/   c                 &    | j                  |       y r1   )rG   r'   r   pspecs      r-   playbin_target_gain_cbz'ReplayGainPlayer.playbin_target_gain_cb}   s    H%r/   c                    t        d       t        j                         | _        t        j                  j                  dd       | _        | j                  j                  d| j                         | j                  j                  | j                         t        j                  j                  dd       | _
        | j                  j                  | j                         | j                  j                  t        j                  j                  d| j                  j                  d                   | j                  j                  t        j                  j                  d| j                  j                  d                   | j                  j                  | j                         | j                   j#                  | j                         y )Nz.using output filter for rgvolume and rglimiterr   notify::target-gainr   sinksrc)r<   r   Binrgfilterr   maker   r   rK   addr   add_padGhostPadr   get_static_padlinkr   
add_filterr2   s    r-   r%   z#ReplayGainPlayer.setup_playbin_mode   s#   89'')$-$$))*d;$----t/J/JK--DMM"%%**;=$.--DNN#--((1M1Mf1UVW--((0M0Me0TUV--T^^$++'r/   c                 \    | j                   j                  | j                         d | _        y r1   )r   remove_filterrQ   r2   s    r-   r&   z(ReplayGainPlayer.deactivate_playbin_mode   s    ++DMM*$-r/   c                 b    | j                  |      du r|j                  | j                         y y )NT)rG   disconnect_by_funcxfade_target_gain_cbrI   s      r-   r]   z%ReplayGainPlayer.xfade_target_gain_cb   s.    	x(T1t889 2r/   c                     t        d|z         t        j                  j                  dd       }|j	                  d| j
                         | j                  |       |gS )Nz(creating rgvolume instance for stream %sr   rM   )r<   r   r   rR   r   r]   r>   )r'   r   urir   s       r-   create_stream_filter_cbz(ReplayGainPlayer.create_stream_filter_cb   sU    2S89$$Z6(
($*C*CDH
r/   c                     | j                   8|d   }t        dt        |      z         || j                   j                  _        y y )Nlimiterzlimiter setting is now %s)r   r<   r=   r   enabled)r'   r   keyrb   s       r-   r   z#ReplayGainPlayer.limiter_changed_cb   s?    	^^i 7	$s7|	34")4>>  r/   c                    t        d       | j                  j                  d| j                        | _        t
        j                  j                  dd       | _        | j                  j                  | j                         y )Nz$using per-stream filter for rgvolumer   r   )
r<   r   r   r`   stream_filter_idr   r   rR   r   rX   r2   s    r-   r"   z!ReplayGainPlayer.setup_xfade_mode   s]    ./++--.BDD`D`a$ %%**;=$.++(r/   c                     | j                   j                  | j                         d | _        | j                   j                  | j                         d | _        y r1   )r   
disconnectrf   rZ   r   r2   s    r-   r#   z&ReplayGainPlayer.deactivate_xfade_mode   s?    ++../$++DNN+$.r/   N)__name__
__module____qualname__r.   r3   r>   rG   rK   r%   r&   r]   r`   r   r"   r#    r/   r-   r	   r	   *   s@    :BZ*,&(":
*)r/   r	   )rbgirequire_versiongi.repositoryr   r   r   r   r9   gettextinstall
locale_dirrB   objectr	   rl   r/   r-   <module>ru      sY   8 
 	   5%    + +   ]R]]_ -
Lv Lr/   