???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................
]|                 @   s  d  d l  Z  d  d l Z d  d l Z d d d g Z Gd d   d e  Z d Z d d   Z d	 d
   Z d d   Z	 d d   Z
 d d   Z d Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d  l m Z d  d! l m Z e d" d#  Z Gd$ d%   d%  Z Gd& d'   d'  Z d d( d  Z e Z e d) k rd  d l Z e j d* d  re j j  d+  e j d* Z! e e! d,  Z" e# d- e!  e# d. e" j$    e# d/ e" j%    e# d0 e" j&    e# d1 e" j'    e# d2 e" j(    e# d3 e" j)    e j d4 d  re j d4 Z* e# d5 e*  e e* d6  E Z+ e+ j, e" j-    x( e" j. d7  Z/ e/ rPe+ j0 e/  q~WWd QRXe# d8  Wd QRXd S)9    NErroropenopenfpc               @   s   e  Z d  Z d S)r   N)__name__
__module____qualname__ r   r   )/opt/alt/python35/lib64/python3.5/aifc.pyr      s   l   @Q E c             C   sC   y! t  j d |  j d   d SWn t  j k
 r> t  Yn Xd  S)Nz>l   r   )structunpackreaderrorEOFError)filer   r   r	   
_read_long   s    !r   c             C   sC   y! t  j d |  j d   d SWn t  j k
 r> t  Yn Xd  S)Nz>Lr
   r   )r   r   r   r   r   )r   r   r   r	   _read_ulong   s    !r   c             C   sC   y! t  j d |  j d   d SWn t  j k
 r> t  Yn Xd  S)Nz>h   r   )r   r   r   r   r   )r   r   r   r	   _read_short   s    !r   c             C   sC   y! t  j d |  j d   d SWn t  j k
 r> t  Yn Xd  S)Nz>Hr   r   )r   r   r   r   r   )r   r   r   r	   _read_ushort   s    !r   c             C   s\   t  |  j d   } | d k r* d } n |  j |  } | d @d k rX |  j d  } | S)N   r       )ordr   )r   lengthdatadummyr   r   r	   _read_string   s    	r   gc             C   s   t  |   } d } | d k  r. d
 } | d } t |   } t |   } | | k oh | k oh d k n rv d }  n> | d k r t }  n) | d } | d | t d | d	  }  | |  S)Nr   r   i   g        i  i?  l        g       @?   )r   r   	_HUGE_VALpow)fexponsignhimantlomantr   r   r	   _read_float   s    
'		
r&   c             C   s   |  j  t j d |   d  S)Nz>h)writer   pack)r!   xr   r   r	   _write_short   s    r*   c             C   s   |  j  t j d |   d  S)Nz>H)r'   r   r(   )r!   r)   r   r   r	   _write_ushort   s    r+   c             C   s   |  j  t j d |   d  S)Nz>l)r'   r   r(   )r!   r)   r   r   r	   _write_long   s    r,   c             C   s   |  j  t j d |   d  S)Nz>L)r'   r   r(   )r!   r)   r   r   r	   _write_ulong   s    r-   c             C   sq   t  |  d k r t d   |  j t j d t  |    |  j |  t  |  d @d k rm |  j d  d  S)N   z%string exceeds maximum pstring lengthBr   r   s    )len
ValueErrorr'   r   r(   )r!   sr   r   r	   _write_string   s    r3   c       	      C   se  d d  l  } | d k  r+ d } | d } n d } | d k rR d } d } d } n | j |  \ } } | d k s | d k s | | k r | d B} d } d } n | d } | d k  r | j | |  } d } | | B} | j | d  } | j |  } t |  } | j | | d  } | j |  } t |  } t |  |  t |  |  t |  |  d  S)	Nr   i   r   i @  i  i?      r   )mathfrexpldexpfloorintr+   r-   )	r!   r)   r5   r#   r"   r$   r%   ZfmantZfsmantr   r   r	   _write_float   s8    	$
	

r:   )Chunk)
namedtuple_aifc_paramsz7nchannels sampwidth framerate nframes comptype compnamec               @   s6  e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d S)2	Aifc_readNc             C   s  d |  _  d  |  _ g  |  _ d |  _ | |  _ t |  } | j   d k rW t d   | j d  } | d k r~ d |  _	 n$ | d k r d |  _	 n t d   d |  _
 x d |  _ y t |  j  } Wn t k
 r PYn X| j   } | d	 k r|  j |  d |  _
 ng | d
 k rA| |  _ | j d  } d |  _ n7 | d k r_t |  |  _  n | d k rx|  j |  | j   q W|  j
 s|  j rt d   d  S)Nr   s   FORMz file does not start with FORM idr
   s   AIFFs   AIFCr   znot an AIFF or AIFF-C files   COMMs   SSND   s   FVERs   MARKz$COMM chunk and/or SSND chunk missing)_version_convert_markers	_soundpos_filer;   Zgetnamer   r   _aifcZ_comm_chunk_read_ssnd_seek_neededr   _read_comm_chunk_ssnd_chunkr   	_readmarkskip)selfr   chunkZformdataZ	chunknamer   r   r   r	   initfp+  sH    								zAifc_read.initfpc          	   C   s^   t  | t  rM t j | d  } y |  j |  WqZ | j     YqZ Xn |  j |  d  S)Nrb)
isinstancestrbuiltinsr   rM   close)rK   r!   file_objectr   r   r	   __init__R  s    
zAifc_read.__init__c             C   s   |  S)Nr   )rK   r   r   r	   	__enter__^  s    zAifc_read.__enter__c             G   s   |  j    d  S)N)rR   )rK   argsr   r   r	   __exit__a  s    zAifc_read.__exit__c             C   s   |  j  S)N)rD   )rK   r   r   r	   getfpg  s    zAifc_read.getfpc             C   s   d |  _  d |  _ d  S)Nr   r   )rF   rC   )rK   r   r   r	   rewindj  s    	zAifc_read.rewindc             C   s,   |  j  } | d  k	 r( d  |  _  | j   d  S)N)rD   rR   )rK   r   r   r   r	   rR   n  s    		zAifc_read.closec             C   s   |  j  S)N)rC   )rK   r   r   r	   tellt  s    zAifc_read.tellc             C   s   |  j  S)N)
_nchannels)rK   r   r   r	   getnchannelsw  s    zAifc_read.getnchannelsc             C   s   |  j  S)N)_nframes)rK   r   r   r	   
getnframesz  s    zAifc_read.getnframesc             C   s   |  j  S)N)
_sampwidth)rK   r   r   r	   getsampwidth}  s    zAifc_read.getsampwidthc             C   s   |  j  S)N)
_framerate)rK   r   r   r	   getframerate  s    zAifc_read.getframeratec             C   s   |  j  S)N)	_comptype)rK   r   r   r	   getcomptype  s    zAifc_read.getcomptypec             C   s   |  j  S)N)	_compname)rK   r   r   r	   getcompname  s    zAifc_read.getcompnamec             C   s=   t  |  j   |  j   |  j   |  j   |  j   |  j    S)N)r=   r\   r`   rb   r^   rd   rf   )rK   r   r   r	   	getparams  s    zAifc_read.getparamsc             C   s    t  |  j  d k r d  S|  j S)Nr   )r0   rB   )rK   r   r   r	   
getmarkers  s    zAifc_read.getmarkersc             C   sA   x% |  j  D] } | | d k r
 | Sq
 Wt d j |    d  S)Nr   zmarker {0!r} does not exist)rB   r   format)rK   idmarkerr   r   r	   getmark  s    zAifc_read.getmarkc             C   s=   | d k  s | |  j  k r' t d   | |  _ d |  _ d  S)Nr   zposition not in ranger   )r]   r   rC   rF   )rK   posr   r   r	   setpos  s    	zAifc_read.setposc             C   s   |  j  r^ |  j j d  |  j j d  } |  j |  j } | rU |  j j | d  d |  _  | d k rn d S|  j j | |  j  } |  j r | r |  j |  } |  j t |  |  j |  j	 |  _ | S)Nr   r?   r   )
rF   rH   seekr   rC   
_framesizerA   r0   r[   r_   )rK   nframesr   rm   r   r   r   r	   
readframes  s    		zAifc_read.readframesc             C   s   d d  l  } | j | d  S)Nr   r   )audioopZalaw2lin)rK   r   rs   r   r   r	   	_alaw2lin  s    zAifc_read._alaw2linc             C   s   d d  l  } | j | d  S)Nr   r   )rs   Zulaw2lin)rK   r   rs   r   r   r	   	_ulaw2lin  s    zAifc_read._ulaw2linc             C   sI   d d  l  } t |  d  s$ d  |  _ | j | d |  j  \ } |  _ | S)Nr   _adpcmstater   )rs   hasattrrv   Z	adpcm2lin)rK   r   rs   r   r   r	   
_adpcm2lin  s
    	!zAifc_read._adpcm2linc             C   s  t  |  |  _ t |  |  _ t  |  d d |  _ t t |   |  _ |  j |  j |  _ |  j	 rd } | j
 d k r d } t j d  d | _
 | j d  |  _ | rt | j j d   } | d @d k r | d } | j
 | | _
 | j j d d  t |  |  _ |  j d	 k r|  j d
 k r@|  j |  _ nH |  j d k r^|  j |  _ n* |  j d k r||  j |  _ n t d   d |  _ n d	 |  _ d |  _ d  S)N   r?   r      r   zWarning: bad COMM chunk size   r
   s   NONEs   G722   ulaw   ULAW   alaw   ALAWzunsupported compression typer   s   not compressedr   )r|   r}   )r~   r   )r   r[   r   r]   r_   r9   r&   ra   rp   rE   	chunksizewarningswarnr   rc   r   r   ro   r   re   rx   rA   ru   rt   r   )rK   rL   Zkludger   r   r   r	   rG     s<    		
	zAifc_read._read_comm_chunkc             C   s   t  |  } yd x] t |  D]O } t  |  } t |  } t |  } | sR | r |  j j | | | f  q WWnV t k
 r d t |  j  t |  j  d k r d n d | f } t j	 |  Yn Xd  S)Nz;Warning: MARK chunk contains only %s marker%s instead of %sr    r2   )
r   ranger   r   rB   appendr   r0   r   r   )rK   rL   Znmarkersirj   rm   namewr   r   r	   rI     s    !*
zAifc_read._readmark)r   r   r   rD   rM   rT   rU   rW   rX   rY   rR   rZ   r\   r^   r`   rb   rd   rf   rg   rh   rl   rn   rr   rt   ru   rx   rG   rI   r   r   r   r	   r>     s2   $'&r>   c               @   s  e  Z d  Z d Z d d   Z d d   Z d d   Z d d	   Z d
 d   Z d d   Z	 d d   Z
 d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d d   Z d  d!   Z d" d#   Z d$ d%   Z d& d'   Z d( d)   Z d* d+   Z d, d-   Z d. d/   Z d0 d1   Z d2 d3   Z d4 d5   Z d6 d7   Z d8 d9   Z d: d;   Z  d< d=   Z! d> d?   Z" d@ dA   Z# dB dC   Z$ dD dE   Z% dF dG   Z& dH dI   Z' d S)J
Aifc_writeNc          	   C   sv   t  | t  re t j | d  } y |  j |  Wn | j     Yn X| j d  rr d |  _ n |  j |  d  S)Nwbz.aiffr   )rO   rP   rQ   r   rM   rR   endswithrE   )rK   r!   rS   r   r   r	   rT   !  s    
zAifc_write.__init__c             C   s   | |  _  t |  _ d |  _ d |  _ d  |  _ d |  _ d |  _ d |  _ d |  _	 d |  _
 d |  _ d |  _ g  |  _ d |  _ d |  _ d  S)Ns   NONEs   not compressedr   r   )rD   _AIFC_versionr@   rc   re   rA   r[   r_   ra   r]   _nframeswritten_datawritten_datalengthrB   _marklengthrE   )rK   r   r   r   r	   rM   1  s    														zAifc_write.initfpc             C   s   |  j    d  S)N)rR   )rK   r   r   r	   __del__B  s    zAifc_write.__del__c             C   s   |  S)Nr   )rK   r   r   r	   rU   E  s    zAifc_write.__enter__c             G   s   |  j    d  S)N)rR   )rK   rV   r   r   r	   rW   H  s    zAifc_write.__exit__c             C   s"   |  j  r t d   d |  _ d  S)Nz0cannot change parameters after starting to writer   )r   r   rE   )rK   r   r   r	   aiffN  s    	zAifc_write.aiffc             C   s"   |  j  r t d   d |  _ d  S)Nz0cannot change parameters after starting to writer   )r   r   rE   )rK   r   r   r	   aifcS  s    	zAifc_write.aifcc             C   s:   |  j  r t d   | d k  r- t d   | |  _ d  S)Nz0cannot change parameters after starting to writer   zbad # of channels)r   r   r[   )rK   	nchannelsr   r   r	   setnchannelsX  s
    	zAifc_write.setnchannelsc             C   s   |  j  s t d   |  j  S)Nznumber of channels not set)r[   r   )rK   r   r   r	   r\   _  s    	zAifc_write.getnchannelsc             C   sF   |  j  r t d   | d k  s- | d k r9 t d   | |  _ d  S)Nz0cannot change parameters after starting to writer   r
   zbad sample width)r   r   r_   )rK   	sampwidthr   r   r	   setsampwidthd  s
    	zAifc_write.setsampwidthc             C   s   |  j  s t d   |  j  S)Nzsample width not set)r_   r   )rK   r   r   r	   r`   k  s    	zAifc_write.getsampwidthc             C   s:   |  j  r t d   | d k r- t d   | |  _ d  S)Nz0cannot change parameters after starting to writer   zbad frame rate)r   r   ra   )rK   	framerater   r   r	   setframeratep  s
    	zAifc_write.setframeratec             C   s   |  j  s t d   |  j  S)Nzframe rate not set)ra   r   )rK   r   r   r	   rb   w  s    	zAifc_write.getframeratec             C   s"   |  j  r t d   | |  _ d  S)Nz0cannot change parameters after starting to write)r   r   r]   )rK   rq   r   r   r	   
setnframes|  s    	zAifc_write.setnframesc             C   s   |  j  S)N)r   )rK   r   r   r	   r^     s    zAifc_write.getnframesc             C   sC   |  j  r t d   | d	 k r- t d   | |  _ | |  _ d  S)
Nz0cannot change parameters after starting to write   NONE   ulaw   ULAW   alaw   ALAW   G722zunsupported compression type)r   r   r   r   r   r   )r   r   rc   re   )rK   comptypecompnamer   r   r	   setcomptype  s    			zAifc_write.setcomptypec             C   s   |  j  S)N)rc   )rK   r   r   r	   rd     s    zAifc_write.getcomptypec             C   s   |  j  S)N)re   )rK   r   r   r	   rf     s    zAifc_write.getcompnamec             C   s   | \ } } } } } } |  j  r- t d   | d	 k rE t d   |  j |  |  j |  |  j |  |  j |  |  j | |  d  S)
Nz0cannot change parameters after starting to write   NONE   ulaw   ULAW   alaw   ALAW   G722zunsupported compression type)r   r   r   r   r   r   )r   r   r   r   r   r   r   )rK   paramsr   r   r   rq   r   r   r   r   r	   	setparams  s    		zAifc_write.setparamsc             C   sU   |  j  s |  j s |  j r* t d   t |  j  |  j |  j |  j |  j |  j  S)Nznot all parameters set)r[   r_   ra   r   r=   r]   rc   re   )rK   r   r   r	   rg     s    zAifc_write.getparamsc             C   s   | d k r t  d   | d k  r0 t  d   t | t  sK t  d   xN t t |  j   D]7 } | |  j | d k ra | | | f |  j | <d  Sqa W|  j j | | | f  d  S)Nr   zmarker ID must be > 0zmarker position must be >= 0zmarker name must be bytes)r   rO   bytesr   r0   rB   r   )rK   rj   rm   r   r   r   r   r	   setmark  s    zAifc_write.setmarkc             C   sA   x% |  j  D] } | | d k r
 | Sq
 Wt d j |    d  S)Nr   zmarker {0!r} does not exist)rB   r   ri   )rK   rj   rk   r   r   r	   rl     s    zAifc_write.getmarkc             C   s    t  |  j  d k r d  S|  j S)Nr   )r0   rB   )rK   r   r   r	   rh     s    zAifc_write.getmarkersc             C   s   |  j  S)N)r   )rK   r   r   r	   rZ     s    zAifc_write.tellc             C   s   t  | t t f  s* t |  j d  } |  j t |   t |  |  j |  j } |  j	 ro |  j	 |  } |  j
 j |  |  j | |  _ |  j t |  |  _ d  S)Nr/   )rO   r   	bytearray
memoryviewcast_ensure_header_writtenr0   r_   r[   rA   rD   r'   r   r   )rK   r   rq   r   r   r	   writeframesraw  s    	zAifc_write.writeframesrawc             C   s?   |  j  |  |  j |  j k s1 |  j |  j k r; |  j   d  S)N)r   r   r]   r   r   _patchheader)rK   r   r   r   r	   writeframes  s    zAifc_write.writeframesc             C   s   |  j  d  k r d  Sz |  j d  |  j d @rP |  j  j d  |  j d |  _ |  j   |  j |  j k s |  j |  j k s |  j r |  j	   Wd  d  |  _
 |  j  } d  |  _  | j   Xd  S)Nr   r   s    )rD   r   r   r'   _writemarkersr   r]   r   r   r   rA   rR   )rK   r!   r   r   r	   rR     s     
				zAifc_write.closec             C   s   d d  l  } | j | d  S)Nr   r   )rs   Zlin2alaw)rK   r   rs   r   r   r	   	_lin2alaw  s    zAifc_write._lin2alawc             C   s   d d  l  } | j | d  S)Nr   r   )rs   Zlin2ulaw)rK   r   rs   r   r   r	   	_lin2ulaw  s    zAifc_write._lin2ulawc             C   sI   d d  l  } t |  d  s$ d  |  _ | j | d |  j  \ } |  _ | S)Nr   rv   r   )rs   rw   rv   Z	lin2adpcm)rK   r   rs   r   r   r	   
_lin2adpcm  s
    	!zAifc_write._lin2adpcmc             C   s   |  j  s |  j d k rE |  j s* d |  _ |  j d k rE t d   |  j sZ t d   |  j so t d	   |  j s t d
   |  j |  d  S)N   ULAW   ulaw   ALAW   alaw   G722r   zRsample width must be 2 when compressing with ulaw/ULAW, alaw/ALAW or G7.22 (ADPCM)z# channels not specifiedzsample width not specifiedzsampling rate not specified)r   r   r   r   r   )r   rc   r_   r   r[   ra   _write_header)rK   Zdatasizer   r   r	   r     s    						z!Aifc_write._ensure_header_writtenc             C   s[   |  j  d k r |  j |  _ n9 |  j  d k r< |  j |  _ n |  j  d k rW |  j |  _ d  S)Ns   G722   ulaw   ULAW   alaw   ALAW)r   r   )r   r   )rc   r   rA   r   r   )rK   r   r   r	   _init_compression  s    zAifc_write._init_compressionc             C   s
  |  j  r" |  j d k r" |  j   |  j j d  |  j sR | |  j |  j |  _ |  j |  j |  j |  _ |  j d @r |  j d |  _ |  j  r|  j d k r |  j d |  _ |  j d @r|  j d |  _ n@ |  j d	 k r|  j d
 d |  _ |  j d @r|  j d |  _ y |  j j	   |  _
 Wn! t t f k
 rJd  |  _
 Yn X|  j |  j  } |  j  r|  j j d  |  j j d  t |  j d  t |  j |  j  n |  j j d  |  j j d  t |  j |  t |  j |  j  |  j
 d  k	 r|  j j	   |  _ t |  j |  j  |  j d k rEt |  j d  n t |  j |  j d  t |  j |  j  |  j  r|  j j |  j  t |  j |  j  |  j j d  |  j
 d  k	 r|  j j	   |  _ t |  j |  j d  t |  j d  t |  j d  d  S)Ns   NONEs   FORMr      ulaw   ULAW   alaw   ALAWr      G722   r
   s   AIFCs   FVERs   AIFFs   COMMr?   s   SSNDr   )r   r   r   r   )r   r   r   r   r   )rE   rc   r   rD   r'   r]   r[   r_   r   rZ   _form_length_posAttributeErrorOSError_write_form_lengthr-   r@   r*   _nframes_posr:   ra   r3   re   _ssnd_length_pos)rK   Z
initlength
commlengthr   r   r	   r     s^    
				zAifc_write._write_headerc             C   st   |  j  r9 d	 t |  j  } | d @r0 | d } d } n d } d } t |  j d | |  j d | d |  | S)
Nrz      r      r   r
   r?      r{   )rE   r0   re   r-   rD   r   )rK   
datalengthr   Z
verslengthr   r   r	   r   J  s    	

		"zAifc_write._write_form_lengthc             C   s0  |  j  j   } |  j d @r< |  j d } |  j  j d  n	 |  j } | |  j k r |  j |  j k r |  j d k r |  j  j | d  d  S|  j  j |  j	 d  |  j
 |  } |  j  j |  j d  t |  j  |  j  |  j  j |  j d  t |  j  | d  |  j  j | d  |  j |  _ | |  _ d  S)Nr   s    r   r?   )rD   rZ   r   r'   r   r]   r   r   ro   r   r   r   r-   r   )rK   Zcurposr   r   r   r   r	   r   W  s&    	zAifc_write._patchheaderc             C   s  t  |  j  d k r d  S|  j j d  d } xX |  j D]M } | \ } } } | t  |  d d } t  |  d @d k r9 | d } q9 Wt |  j |  | d |  _ t |  j t  |  j   xP |  j D]E } | \ } } } t |  j |  t |  j |  t |  j |  q Wd  S)Nr   s   MARKr   r      r?   )r0   rB   rD   r'   r-   r   r*   r3   )rK   r   rk   rj   rm   r   r   r   r	   r   m  s"    zAifc_write._writemarkers)(r   r   r   rD   rT   rM   r   rU   rW   r   r   r   r\   r   r`   r   rb   r   r^   r   rd   rf   r   rg   r   rl   rh   rZ   r   r   rR   r   r   r   r   r   r   r   r   r   r   r   r   r	   r     sJ   	3r   c             C   si   | d  k r- t  |  d  r' |  j } n d } | d k rC t |   S| d k rY t |   St d   d  S)	NmoderN   rr   r   z$mode must be 'r', 'rb', 'w', or 'wb')r   rN   )r   r   )rw   r   r>   r   r   )r!   r   r   r   r	   r     s    

__main__r   z/usr/demos/data/audio/bach.aiffr   ZReadingznchannels =znframes   =zsampwidth =zframerate =zcomptype  =zcompname  =r   ZWritingr   i   zDone.)1r   rQ   r   __all__	Exceptionr   r   r   r   r   r   r   r   r&   r*   r+   r,   r-   r3   r:   rL   r;   collectionsr<   r=   r>   r   r   r   r   sysargvr   fnr!   printr\   r^   r`   rb   rd   rf   Zgngr   rg   rr   r   r   r   r   r   r	   <module>   sf   
!	 