
,Oc        U   @   s  d  Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d d d d d d	 d
 d d d d d d d d d d d d d d d d d d d d d d  d! d" d# d$ d% d& d' d( d) d* d+ d, d- d. d/ d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK dL dM dN dO dP dQ dR gP Z e dS dT dU dV dW dX dY dZ d[ d\ d] d^ d_ d` da db dc dd de df dg dh di dj dk dl dm dn do dp dq dr ds dt du dv dw dx dy dz d{ d| d} d~ d d g. Z d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g d d d d d d d d d d d d d d d g g g Z d d d g d d d g g Z	 h  d d <d d <d d <d d <d d <d d <d 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 d   Z d   Z d   Z d   Z e d j o+ e d  Z e d d e d Z e GHn d S(   s  
usage: %(progname)s [args]

   --cat [files]  -- categorize a bunch of files

      mp3info(filename)
        - reads the mp3 header and returns a dictionary containing
          these fields:

          VERSION
          MM - number of minutes
          SS - number of seconds
          STEREO - 0-mono, 1-stereo
          LAYER - MPEG layer 2 or 3
          MODE
          COPYRIGHT
          BITRATE
          FREQUENCY

      get_mp3tag(filename)
        - finds the id3 tag of the mp3 and returns a dictionary
          containing these fields: TITLE, ARTIST, ALBUM, YEAR, COMMENT

      get_xing_header(filename)
        - returns the XING header (flags, frames, bytes) of the mp3 or
          None.

      Categorize(fn)
        - creates a directory called 'cats' with three subdirectories
          'GENRE_ARTIST', 'GENRE', and 'ARTIST'.  It reads the ID3 tag
          off of the mp3 and creates a three symlinks in this
          directory structure.  All files without ID3 tags will have a
          genre and artist of 'Unknown'.


iNt   Bluess   Classic Rockt   Countryt   Dancet   Discot   Funkt   Grunges   Hip-Hopt   Jazzt   Metals   New Aget   Oldiest   Othert   Pops   R&Bt   Rapt   Reggaet   Rockt   Technot
   Industrialt   Alternativet   Skas   Death Metalt   Prankst
   Soundtracks   Euro-Technot   Ambients   Trip-Hopt   Vocals	   Jazz+Funkt   Fusiont   Trancet	   Classicalt   Instrumentalt   Acidt   Houset   Games
   Sound Clipt   Gospelt   Noiset
   AlternRockt   Basst   Soult   Punkt   Spacet
   Meditatives   Instrumental Pops   Instrumental Rockt   Ethnict   Gothict   Darkwaves   Techno-Industrialt
   Electronics   Pop-Folkt	   Eurodancet   Dreams   Southern Rockt   Comedyt   Cultt   Gangstas   Top 40s   Christian Raps   Pop/Funkt   Jungles   Native Americant   Cabarets   New Wavet   Psychadelict   Ravet	   Showtunest   Trailers   Lo-Fit   Tribals	   Acid Punks	   Acid Jazzt   Polkat   Retrot   Musicals   Rock & Rolls	   Hard Rockt   Folks	   Folk-Rocks   National Folkt   Swings   Fast Fusiont   Bebobt   Latint   Revivalt   Celtict	   Bluegrasst
   Avantgardes   Gothic Rocks   Progressive Rocks   Psychedelic Rocks   Symphonic Rocks	   Slow Rocks   Big Bandt   Choruss   Easy Listeningt   Acoustict   Humourt   Speecht   Chansont   Operas   Chamber Musict   Sonatat   Symphonys
   Booty Basst   Primuss   Porn Groovet   Satires   Slow Jamt   Clubt   Tangot   Sambat   Folkloret   Ballads   Power Ballads   Rhythmic Soult	   Freestylet   Duets	   Punk Rocks	   Drum Solot   Acapellas
   Euro-Houses
   Dance Halli    i    i0   i8   i@   iP   i`   ip   i   i   i   i   i   i   i   i   i   i   i(   i   i@  i`  i  i  i  i"V  i]  i>  iD  i  i }  i   i   i   i   i   i   i   c         C   s#   |  i  | d  |  i d  } | S(   Ni    i   (   t   seekt   read(   t   fpt   offt   word(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   getword  s    c         C   s"   t  d   t t t t |     S(   Nc         S   s   |  d  >| S(   i   (    (   t   at   b(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   <lambda>  s    (   t   reducet   mapt   longt   ord(   t   s(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   get_l4  s    c      
   C   s   |  i    } z |  i d  |  i d  } t i | d  } | d j o~ | d } t | | | d ! } | d } t | | | d ! } | d } t | | | d ! } | d } | | | f Sn d  SWd  |  i |  Xd  S(   Ni    i    t   Xingi   (   t   tellRR   RS   t   stringt   findR`   t   None(   t   ft   whereRY   t   it   flagst   framest   bytes(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   get_xing_header   s     



c         C   sS  t  |   }  |  d d >@o) |  d d >@o
 d } n d } d } n d } d } d |  d ?d @} | o d |  d	 ?d @} n |  d	 ?d @| d } |  d
 ?d @d A} |  d ?d @} |  d ?d @} |  d ?d @} |  d ?d @}	 |  d ?d @}
 |  d ?d @} |  d ?d @} |  d @} |	 t j o
 d } n d } t   Sd d  k } | i t    (   Ni   i   i   i    i   i   i   i   i
   i   i   i   i	   i   i   i(   R`   t   MPG_MD_MONOt   localst   pprint(   RV   t   lsft   mpeg25t   layt   sampling_frequencyt   error_protectiont   bitrate_indext   paddingt	   extensiont   modet   mode_extt	   copyrightt   originalt   emphasist   stereoRo   (    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   get_newhead?  s6    



c         C   s  t  |   d j o h  Sn t |  d  d >t |  d  d >Bt |  d  d >Bt |  d  B} | d	 ?d @} | d
 ?d @} | d ?d @} | d ?d @} | d ?d @} | d ?d @} | d ?d @} | d ?d @}	 | d ?d @}
 | d ?d @} | d ?d @} | d ?d @} | d	 ?d @} | } y t | d | | } Wn t j
 o d } n Xy t | | } Wn t j
 o d } n Xt   S(   Ni   i    i   i   i   i   i   i   i   i   i   i   i
   i	   i   (   t   lenR^   t	   t_bitratet
   IndexErrort   t_sampling_freqt   vars(   RV   t   lt   idt   layert   protection_bitRu   t   sampling_freqt   padding_bitt   private_bitRx   t   mode_extensionRz   R{   R|   t   version_indexRk   t   bitratet   fs(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   get_headi  s4    Fc         C   s[   |  d d j p; |  d d j p* |  d d @d j p |  d p	 |  d p d Sn d S(	   NRu   i    R   i   Rk   l      R   R   (    (   t   h(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   is_mp3  s    c         C   s5  |  i  d d  |  i d  } | d j o d Sn |  i d  } t | d  } t | d  } d | | f } |  i d  } t |  d ?d @} t |  d ?d @} t |  d	 ?d @} |  i d
  } d }	 x4 t d
  D]& }
 |	 t | d |
  d |
 }	 q W| o | d } |  i d
  } n t   S(   Ni    i   t   ID3i   i   s   ID3v2.%d.%di   i   i   i   i   i
   (   RR   RS   R^   t   rangeR   (   RT   RV   Rk   t   major_versiont   minor_versiont   versiont   unsynct
   ext_headert   experimentalt   tagsizeRh   t   ext_header_size(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt
   get_v2head  s*     $
c      
   C   s  d } d } d } d } d } t  i |   d d j o h  Sn t |   } t | |  } | d j oB t |  } | o+ | | d } | | } t | |  } q n t |  }	 d }
 t |  } | o | \ } } } | d @o
 d }
 n |
 o t d d d d g t |	 d	   } | d
 d d d d d d d d g	 t |	 d  |	 d >} d Gt | d | | d  GHqn xu t	 |  } | p Pn | d } t | |  } | | j o" d G|  Gt  i |   d GHh  Sn t
 |  o Pqq| i d d  | i   } y | i d d  Wn t j
 o } h  Sn X| d o d | d | d | d <n d  | d | d | d <| d! | d" <d# | d | d$ | d% <d& | | | d d' d d& | d d& | d | d( <t | d( d)  | d* <h  } | d | d+ <t | d* d,  | d- <| d* d, | d. <| d! d# j | d/ <| d" d j o- | d" d# j o d | d0 <qd# | d0 <n d1 | d0 <| d! | d2 <| d3 | d4 <| d d j o | d | d5 <n d1 | d5 <| d% d j o t | d% | d6 <n d1 | d6 <| S(7   Ni    i   i   R   i   i   i  i  Rr   iD  i  i }  i"V  i]  i>  i+  i.  i@  Rs   Rp   s   VBR average bit-rate:g       @i  s   BAD FILEi   iR   g     AR   R   t   mean_frame_sizeg     @Rx   R   i   R   t   freq_idxg      ?g      @t   lengthid   t   secst   VERSIONi<   t   MMt   SSt   STEREOt   LAYERt    t   MODERz   t	   COPYRIGHTt   BITRATEt	   FREQUENCY(   t   ost   statt   openRW   R   R~   Rl   t   floatt   intR   R   RR   Rb   t   IOErrort   frequency_tbl(   t   fnRU   t   eofR   Rh   t   totRT   RV   t   id3v2t   nht   vbrt   xhRi   t   xing_framest
   xing_bytest   tpft   reason(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   mp3info  s    

 
	:


c   
      C   s  t  i |   d d j o h  Sn y t |   } Wn t j
 o } h  Sn Xy | i d d  Wn t j
 o } h  Sn Xd  } x! | i   } | p Pn | } q h  } | d  d j o8d } d } | d } | } | d } t i | | | ! | d	 <| } | d } t i | | | ! | d
 <| } | d } t i | | | ! | d <| } | d } t i | | | ! | d <| } | d } t i | | | ! | d <t	 | d  }	 y t
 t	 | d  | d <Wqt j
 o d | d <qXn | S(   Ni   i    ii   i   t   TAGi   i   t   TITLEt   ARTISTt   ALBUMi   t   YEARi   t   COMMENTit   GENREt   Unknown(   R   R   R   R   RR   Re   t   readlineRc   t   stripR^   t   winamp_genresR   (
   R   RT   R   t   lineR   R   t   v1Rh   t   jt   genre(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt
   get_mp3tag4  sT    			





c         C   s  t  |   } t |   } d | i d d  | i d d  f } d | i d d  } d | i d d  } t i | d d  } t i | d	 d  } t i | d d  } t i | d	 d  } t i | d d  } t i | d	 d  } t i i |  p t i |  n t i i |  p t i |  n t i i |  p t i |  n t i i	 |   \ } } y# t i
 |  t i i | |   Wn n Xy# t i
 |  t i i | |   Wn n Xy# t i
 |  t i i | |   Wn n Xd  S(
   Ns   cats/GENRE_ARIST/%s/%sR   R   R   s   cats/GENRE/%ss   cats/ARIST/%st    t   _t    (   R   R   t   getRc   t   replaceR   t   patht   isdirt   makedirst   splitt   symlinkt   join(   R   t   i1t   i2t   path1t   path2t   path3t   baset   ffn(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt
   Categorizeo  s>    ###c         C   s   t  t   GHd  S(   N(   t   __doc__R   (   t   progname(    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   usage  s    c      	   C   s9  |  d } t  i  |  d d d d g  \ } } t |  d j o t |  d  Sn xc | D][ \ } } | d j o t |  d  Sq[ | d j o# x | D] } t |  q Wd  Sq[ q[ Wxx | D]p } | GHt |  }	 x# |	 i   D] \ }
 } |
 G| GHq Wt |  } x# | i   D] \ }
 } |
 G| GHqWHq Wd  S(   Ni    i   R   t   helpt   cats   --helps   --cat(   t   getoptR   R   R   R   t   itemsR   (   t   argvt   stdoutt   environR   t   listt   argst   fieldt   valR   R   t   kt   vR   (    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pyt   main  s8    

 
    t   __main__s<   E:/Music/LCD Soundsystem - Get Innocuous (Soulwax remix).mp3R   i<   R   (   R   R   t   sysRc   t   timeR   t
   mp3_genresR   R   R   R   RW   R`   Rl   t   MPG_MD_STEREOt   MPG_MD_JOINT_STEREOt   MPG_MD_DUAL_CHANNELRm   R~   R   R   R   R   R   R   R   R   t   __name__t   infot   seconds(    (    (    sM   /home/saberrider/srcds/css/cstrike/addons/eventscripts/_libs/python/mp3lib.pys   <module>&   s  	
	A				*	'			{	;	-		 	