???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................
]F                 @   s   d  d l  m Z e 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 e e e e e e g Z Gd d   d e  Z d d   Z d d   Z Gd d   d  Z Gd d   d  Z d d d  Z e Z d S)    )
namedtuple_sunau_paramsz7nchannels sampwidth framerate nframes comptype compnameidns.                                    l    c               @   s   e  Z d  Z d S)ErrorN)__name__
__module____qualname__ r   r   */opt/alt/python35/lib64/python3.5/sunau.pyr      s   r   c             C   sP   d } xC t  d  D]5 } |  j d  } | s4 t  | d t |  } q W| S)Nr   r   r      )rangereadEOFErrorord)filexiZbyter   r   r   	_read_u32   s    r   c             C   se   g  } xE t  d  D]7 } t | d  \ } } | j d t |   | } q W|  j t |   d  S)Nr   r   r   )r   divmodinsertintwritebytes)r   r   datar   dmr   r   r   
_write_u32   s    
r'   c               @   s   e  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) S)*Au_readc             C   s\   t  |  t  d  k rB d d  l } | j | d  } d |  _ n	 d |  _ |  j |  d  S)N r   rbTF)typebuiltinsopen_openedinitfp)selffr,   r   r   r   __init__   s    	zAu_read.__init__c             C   s   |  j  r |  j   d  S)N)_fileclose)r0   r   r   r   __del__   s    	zAu_read.__del__c             C   s   |  S)Nr   )r0   r   r   r   	__enter__   s    zAu_read.__enter__c             G   s   |  j    d  S)N)r4   )r0   argsr   r   r   __exit__   s    zAu_read.__exit__c             C   so  | |  _  d |  _ t t |   } | t k r< t d   t t |   |  _ |  j d k  rl t d   |  j d k r t d   t |  |  _ |  j t k r t |  j  |  _ t t |   |  _	 |  j	 t
 k r t d   |  j	 t t f k rd |  _ d	 |  _ n |  j	 t k r3d	 |  _ |  _ nr |  j	 t k rUd |  _ |  _ nP |  j	 t k rwd
 |  _ |  _ n. |  j	 t k rd |  _ |  _ n t d   t t |   |  _ t t |   |  _ |  j |  j |  _ |  j d k r+| j |  j d  |  _ |  j j d  \ |  _ } } n	 d |  _ y | j   |  _ Wn! t t f k
 rjd  |  _ Yn Xd  S)Nr   zbad magic numberr   zheader size too smalld   zheader size ridiculously largezencoding not (yet) supportedr   r   r   r   zunknown encodings        )r3   	_soundposr!   r   AUDIO_FILE_MAGICr   Z	_hdr_size
_data_sizeAUDIO_UNKNOWN_SIZE	_encoding_simple_encodingsAUDIO_FILE_ENCODING_MULAW_8AUDIO_FILE_ENCODING_ALAW_8
_sampwidth
_framesizeAUDIO_FILE_ENCODING_LINEAR_8AUDIO_FILE_ENCODING_LINEAR_16AUDIO_FILE_ENCODING_LINEAR_24AUDIO_FILE_ENCODING_LINEAR_32
_framerate
_nchannelsr   _info	partitiontell	_data_posAttributeErrorOSError)r0   r   magic_r   r   r   r/      sP    				!	zAu_read.initfpc             C   s   |  j  S)N)r3   )r0   r   r   r   getfp   s    zAu_read.getfpc             C   s   |  j  S)N)rJ   )r0   r   r   r   getnchannels   s    zAu_read.getnchannelsc             C   s   |  j  S)N)rC   )r0   r   r   r   getsampwidth   s    zAu_read.getsampwidthc             C   s   |  j  S)N)rI   )r0   r   r   r   getframerate   s    zAu_read.getframeratec             C   s4   |  j  t k r t S|  j t k r0 |  j  |  j Sd S)Nr   )r=   r>   r?   r@   rD   )r0   r   r   r   
getnframes   s
    zAu_read.getnframesc             C   s.   |  j  t k r d S|  j  t k r& d Sd Sd  S)NULAWALAWNONE)r?   rA   rB   )r0   r   r   r   getcomptype   s
    zAu_read.getcomptypec             C   s.   |  j  t k r d S|  j  t k r& d Sd Sd  S)NzCCITT G.711 u-lawzCCITT G.711 A-lawznot compressed)r?   rA   rB   )r0   r   r   r   getcompname   s
    zAu_read.getcompnamec             C   s=   t  |  j   |  j   |  j   |  j   |  j   |  j    S)N)r   rT   rU   rV   rW   r[   r\   )r0   r   r   r   	getparams   s    zAu_read.getparamsc             C   s   d  S)Nr   )r0   r   r   r   
getmarkers  s    zAu_read.getmarkersc             C   s   t  d   d  S)Nzno marks)r   )r0   idr   r   r   getmark  s    zAu_read.getmarkc             C   s   |  j  t k r | t k r- |  j j   } n |  j j | |  j  } |  j t |  |  j 7_ |  j  t k r d d  l	 } | j
 | |  j  } | Sd  S)Nr   )r?   r@   r>   r3   r   rD   r;   lenrA   audioopZulaw2linrC   )r0   nframesr$   rb   r   r   r   
readframes  s    zAu_read.readframesc             C   s;   |  j  d  k r t d   |  j j |  j   d |  _ d  S)Nzcannot seekr   )rN   rP   r3   seekr;   )r0   r   r   r   rewind  s    zAu_read.rewindc             C   s   |  j  S)N)r;   )r0   r   r   r   rM     s    zAu_read.tellc             C   sp   | d k  s | |  j    k r* t d   |  j d  k rE t d   |  j j |  j | |  j  | |  _ d  S)Nr   zposition not in rangezcannot seek)rW   r   rN   rP   r3   re   rD   r;   )r0   posr   r   r   setpos!  s    zAu_read.setposc             C   s/   |  j  } | r+ d  |  _  |  j r+ | j   d  S)N)r3   r.   r4   )r0   r   r   r   r   r4   )  s
    			zAu_read.closeN)r   r   r   r2   r5   r6   r8   r/   rS   rT   rU   rV   rW   r[   r\   r]   r^   r`   rd   rf   rM   rh   r4   r   r   r   r   r(      s(   	,r(   c               @   s<  e  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 d/ d0   Z d1 d2   Z d3 S)4Au_writec             C   s\   t  |  t  d  k rB d d  l } | j | d  } d |  _ n	 d |  _ |  j |  d  S)Nr)   r   wbTF)r+   r,   r-   r.   r/   )r0   r1   r,   r   r   r   r2   2  s    	zAu_write.__init__c             C   s    |  j  r |  j   d  |  _  d  S)N)r3   r4   )r0   r   r   r   r5   ;  s    	
zAu_write.__del__c             C   s   |  S)Nr   )r0   r   r   r   r6   @  s    zAu_write.__enter__c             G   s   |  j    d  S)N)r4   )r0   r7   r   r   r   r8   C  s    zAu_write.__exit__c             C   sg   | |  _  d |  _ d |  _ d |  _ d |  _ t |  _ d |  _ d |  _ d |  _	 d |  _
 d |  _ d  S)Nr   r:   rX   )r3   rI   rJ   rC   rD   r>   _nframes_nframeswritten_datawritten_datalengthrK   	_comptype)r0   r   r   r   r   r/   F  s    										zAu_write.initfpc             C   s:   |  j  r t d   | d k r- t d   | |  _ d  S)Nz0cannot change parameters after starting to writer   r   r   z"only 1, 2, or 4 channels supported)r   r   r   )rl   r   rJ   )r0   	nchannelsr   r   r   setnchannelsS  s
    	zAu_write.setnchannelsc             C   s   |  j  s t d   |  j  S)Nznumber of channels not set)rJ   r   )r0   r   r   r   rT   Z  s    	zAu_write.getnchannelsc             C   s:   |  j  r t d   | d k r- t d   | |  _ d  S)Nz0cannot change parameters after starting to writer   r   r   r   zbad sample width)r   r   r   r   )rl   r   rC   )r0   	sampwidthr   r   r   setsampwidth_  s
    	zAu_write.setsampwidthc             C   s   |  j  s t d   |  j S)Nzsample width not specified)rI   r   rC   )r0   r   r   r   rU   f  s    	zAu_write.getsampwidthc             C   s"   |  j  r t d   | |  _ d  S)Nz0cannot change parameters after starting to write)rl   r   rI   )r0   	framerater   r   r   setframeratek  s    	zAu_write.setframeratec             C   s   |  j  s t d   |  j  S)Nzframe rate not set)rI   r   )r0   r   r   r   rV   p  s    	zAu_write.getframeratec             C   s:   |  j  r t d   | d k  r- t d   | |  _ d  S)Nz0cannot change parameters after starting to writer   z# of frames cannot be negative)rl   r   rk   )r0   rc   r   r   r   
setnframesu  s
    	zAu_write.setnframesc             C   s   |  j  S)N)rl   )r0   r   r   r   rW   |  s    zAu_write.getnframesc             C   s(   | d k r | |  _  n t d   d  S)NrZ   rX   zunknown compression type)rZ   rX   )ro   r   )r0   r+   namer   r   r   setcomptype  s    zAu_write.setcomptypec             C   s   |  j  S)N)ro   )r0   r   r   r   r[     s    zAu_write.getcomptypec             C   s.   |  j  d k r d S|  j  d k r& d Sd Sd  S)NrX   zCCITT G.711 u-lawrY   zCCITT G.711 A-lawznot compressed)ro   )r0   r   r   r   r\     s
    zAu_write.getcompnamec             C   s`   | \ } } } } } } |  j  |  |  j |  |  j |  |  j |  |  j | |  d  S)N)rq   rs   ru   rv   rx   )r0   paramsrp   rr   rt   rc   ZcomptypeZcompnamer   r   r   	setparams  s    zAu_write.setparamsc             C   s=   t  |  j   |  j   |  j   |  j   |  j   |  j    S)N)r   rT   rU   rV   rW   r[   r\   )r0   r   r   r   r]     s    zAu_write.getparamsc             C   s   |  j  S)N)rl   )r0   r   r   r   rM     s    zAu_write.tellc             C   s   t  | t t f  s* t |  j d  } |  j   |  j d k rd d d  l } | j | |  j	  } t
 |  |  j } |  j j |  |  j | |  _ |  j t
 |  |  _ d  S)NBrX   r   )
isinstancer#   	bytearray
memoryviewcast_ensure_header_writtenro   rb   Zlin2ulawrC   ra   rD   r3   r"   rl   rm   )r0   r$   rb   rc   r   r   r   writeframesraw  s    
zAu_write.writeframesrawc             C   s?   |  j  |  |  j |  j k s1 |  j |  j k r; |  j   d  S)N)r   rl   rk   rn   rm   _patchheader)r0   r$   r   r   r   writeframes  s    zAu_write.writeframesc             C   s   |  j  r{ zI |  j   |  j |  j k s: |  j |  j k rD |  j   |  j  j   Wd  |  j  } d  |  _  |  j rz | j	   Xd  S)N)
r3   r   rl   rk   rn   rm   r   flushr.   r4   )r0   r   r   r   r   r4     s    	

			zAu_write.closec             C   sV   |  j  sR |  j s t d   |  j s3 t d   |  j sH t d   |  j   d  S)Nz# of channels not specifiedzsample width not specifiedzframe rate not specified)rl   rJ   r   rC   rI   _write_header)r0   r   r   r   r     s    				zAu_write._ensure_header_writtenc             C   s  |  j  d k r |  j d k r0 t } d |  _ q |  j d k rQ t } d |  _ q |  j d k rr t } d |  _ q |  j d k r t } d |  _ q t d   n- |  j  d k r t } d |  _ n t d   |  j |  j	 |  _ t
 |  j t  d t |  j  } | d	 d @} t
 |  j |  |  j t k r;t } n |  j |  j } y |  j j   |  _ Wn! t t f k
 rd  |  _ Yn Xt
 |  j |  | |  _ t
 |  j |  t
 |  j |  j  t
 |  j |  j	  |  j j |  j  |  j j d
 | t |  j  d  d  S)NrZ   r   r   r   r   zinternal errorrX   r   r
   s    r   i)ro   rC   rE   rD   rF   rG   rH   r   rA   rJ   r'   r3   r<   ra   rK   rk   r>   rM   _form_length_posrO   rP   rn   rI   r"   )r0   encodingZheader_sizelengthr   r   r   r     sJ    		zAu_write._write_headerc             C   sd   |  j  d  k r t d   |  j j |  j   t |  j |  j  |  j |  _ |  j j d d  d  S)Nzcannot seekr   r   )r   rP   r3   re   r'   rm   rn   )r0   r   r   r   r     s    zAu_write._patchheaderN)r   r   r   r2   r5   r6   r8   r/   rq   rT   rs   rU   ru   rV   rv   rW   rx   r[   r\   rz   r]   rM   r   r   r4   r   r   r   r   r   r   r   ri   0  s2   	
*ri   Nc             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moder*   rwrj   z$mode must be 'r', 'rb', 'w', or 'wb')r   r*   )r   rj   )hasattrr   r(   ri   r   )r1   r   r   r   r   r-      s    

r-   )collectionsr   r   r<   rA   rE   rF   rG   rH   ZAUDIO_FILE_ENCODING_FLOATZAUDIO_FILE_ENCODING_DOUBLEZAUDIO_FILE_ENCODING_ADPCM_G721ZAUDIO_FILE_ENCODING_ADPCM_G722Z AUDIO_FILE_ENCODING_ADPCM_G723_3Z AUDIO_FILE_ENCODING_ADPCM_G723_5rB   r>   r@   	Exceptionr   r   r'   r(   ri   r-   Zopenfpr   r   r   r   <module>j   s:   			