
    Cc              	           d Z g dZddlZddlmZmZ ddlmZ ddlm	Z	m
Z
mZ ddd	d	d
d
dddZ G d de
      Z G d de      Z G d de	      ZeZy)a  OptimFROG audio streams with APEv2 tags.

OptimFROG is a lossless audio compression program. Its main goal is to
reduce at maximum the size of audio files, while permitting bit
identical restoration for all input. It is similar with the ZIP
compression, but it is highly specialized to compress audio data.

Only versions 4.5 and higher are supported.

For more information, see http://www.losslessaudio.org/
)	OptimFROGOpendelete    N   )convert_errorendswith)
StreamInfo)	APEv2Fileerrorr                )r   r                     c                       e Zd Zy)OptimFROGHeaderErrorN)__name__
__module____qualname__     3/usr/lib/python3/dist-packages/mutagen/optimfrog.pyr   r   )   s    r   r   c                   4    e Zd ZdZ eee      d        Zd Zy)OptimFROGInfoak  OptimFROGInfo()

    OptimFROG 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`): the audio sample size
        encoder_info (`mutagen.text`): encoder version, e.g. "5.100"
    c                    |j                  d      }t        |      dk7  s|j                  d      st        d      t	        j
                  d|dd       d   }|dk7  r|d	k  rt        d      t	        j
                  d
|dd       \  }}}| _        | _        ||dz  z  }| xj                  dz  c_        t        j                  |      | _
        | j                  r+t        |      | j                  | j                  z  z  | _        nd| _        |d	k\  r@t	        j
                  d|dd       d   }t        |dz	  dz         }|d   d|dd | _        yd| _        y)zRaises OptimFROGHeaderErrorL   s   OFR znot an OptimFROG filez<Ir   r   r         z<IHBBI   r   r   g        z<H   i  .N )readlen
startswithr   structunpackchannelssample_rateSAMPLE_TYPE_BITSgetbits_per_samplefloatlengthstrencoder_info)	selffileobjheader	data_sizetotal_samplestotal_samples_highsample_type
encoder_idversions	            r   __init__zOptimFROGInfo.__init__:   sS    b!v;"F$5$5g$>&'>??MM$q4Q7	?y2~&'>??#]]8VAb\B	*K		+r11/33K@.$--262B2B3C DDK DK?tVBr];A>J:?d23G+21:wqr{ CD "Dr   c                 8    d| j                   | j                  fz  S )NzOptimFROG, %.2f seconds, %d Hz)r3   r.   )r6   s    r   pprintzOptimFROGInfo.pprintU   s&    0DKK484D4D4F F 	Fr   N)	r   r   r   __doc__r   IOErrorr   r?   rA   r   r   r   r   r   -   s)    
 701# 2#4Fr   r   c                   $    e Zd ZdZeZed        Zy)r   znOptimFROG(filething)

    Attributes:
        info (`OptimFROGInfo`)
        tags (`mutagen.apev2.APEv2`)
    c                 x    | j                         } |j                  d      t        | d      z   t        | d      z   S )Ns   OFRs   .ofrs   .ofs)lowerr*   r   )filenamer7   r8   s      r   scorezOptimFROG.scored   s<    >>#!!&)HXw,GG7+, 	-r   N)r   r   r   rB   r   _InfostaticmethodrH   r   r   r   r   r   Z   s      E- -r   r   )rB   __all__r+   _utilr   r   mutagenr	   mutagen.apev2r
   r   r   r/   r   r   r   r   r   r   r   <module>rO      sp   
 *  *  2 2 								 	5 	*FJ *FZ-	 -" r   