
    Cc                          d Z g dZddlZddlmZ ddlmZmZmZ ddl	m
Z
mZmZ  G d de      Z G d	 d
e      Z G d de      ZeZy)zMonkey's Audio streams with APEv2 tags.

Monkey's Audio is a very efficient lossless audio compressor developed
by Matt Ashland.

For more information, see http://www.monkeysaudio.com/.
)MonkeysAudioOpendelete    N)
StreamInfo)	APEv2Fileerrorr   )cdataconvert_errorendswithc                       e Zd Zy)MonkeysAudioHeaderErrorN)__name__
__module____qualname__     6/usr/lib/python3/dist-packages/mutagen/monkeysaudio.pyr   r      s    r   r   c                   4    e Zd ZdZ eee      d        Zd Zy)MonkeysAudioInfoax  MonkeysAudioInfo()

    Monkey's Audio stream information.

    Attributes:
        channels (`int`): number of audio channels
        length (`float`): file length in seconds, as a float
        sample_rate (`int`): audio sampling rate in Hz
        bits_per_sample (`int`): bits per sample
        version (`float`): Monkey's Audio stream version, as a float (eg: 3.99)
    c                    |j                  d      }t        |      dk7  s|j                  d      st        d      t	        j
                  |dd       | _        | j                  dk\  r0t        j                  d|dd       \  }}}| _	        | _
        | _        nt	        j
                  |dd	       }t        j                  d
|dd       \  | _
        | _        t        j                  d|dd       \  }}| j                  dk\  rd}n(| j                  dk\  s| j                  dk\  r|dk(  rd}nd}d| _	        |dd j                  d      r!t        j                  d|dd       d   | _	        | xj                  dz  c_        d| _        | j                  dk7  r/|dkD  r)|dz
  |z  |z   }t        |      | j                  z  | _        yyy)zRaises MonkeysAudioHeaderErrorL      MAC znot a Monkey's Audio file      i  z<IIIHHI8      z<HI
      z<II       in  i  i<  i  i   i $  r   0   Ns   WAVEfmtz<HJ   g     @@g           )readlen
startswithr   r	   	ushort_leversionstructunpackbits_per_samplechannelssample_ratelengthfloat)selffileobjheaderblocks_per_framefinal_frame_blockstotal_framescompression_leveltotal_blockss           r   __init__zMonkeysAudioInfo.__init__*   s    b!v;"F$5$5g$>)*EFFva{3<<4 "(y&B-!H1<!4= %q <.4mmvb}/&+DM4+/5}}vb}0&,L,||t##, %$,,$*>*;q*@#( #' #$D bc{%%j1'-}}T6"R='I!'L$!q(8)A-1AA./L-0@0@@DK )9!r   c                 N    d| j                   | j                  | j                  fz  S )Nz(Monkey's Audio %.2f, %.2f seconds, %d Hz)r(   r.   r-   )r0   s    r   pprintzMonkeysAudioInfo.pprintM   s)    :LL$++t'7'7>9 9 	9r   N)	r   r   r   __doc__r
   IOErrorr   r8   r:   r   r   r   r   r      s+    
 734 A 5 AD9r   r   c                   ,    e Zd ZdZeZddgZed        Zy)r   z}MonkeysAudio(filething)

    Arguments:
        filething (filething)

    Attributes:
        info (`MonkeysAudioInfo`)
    z	audio/apezaudio/x-apec                 Z    |j                  d      t        | j                         d      z   S )Nr   z.ape)r&   r   lower)filenamer1   r2   s      r   scorezMonkeysAudio.score_   s&      )HX^^5Ev,NNNr   N)	r   r   r   r;   r   _Info_mimesstaticmethodrA   r   r   r   r   r   R   s,     E=)FO Or   r   )r;   __all__r)   mutagenr   mutagen.apev2r   r   r   mutagen._utilr	   r
   r   r   r   r   r   r   r   r   <module>rI      sQ    -   2 2 8 8	e 	29z 29jO9 O$ r   