???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3

  \¯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G dd„ deƒZdd„ Zdd„ ZG dd„ dƒZG d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   ú/usr/lib64/python3.6/sunau.pyr   ˆ   s   r   c             C   s<   d}x2t dƒD ]&}| jdƒ}|s$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   sJ   g }x2t dƒD ]&}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r,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   s¸  || _ d| _tt|ƒƒ}|tkr(tdƒ‚tt|ƒƒ| _| jdk rHtdƒ‚| jdkrZtdƒ‚t|ƒ| _| jtkrzt| jƒ| _tt|ƒƒ| _	| j	t
krštdƒ‚| j	ttfkr¶d| _d	| _nj| j	tkrÎd	 | _| _nR| j	tkræd | _| _n:| j	tkrþ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ƒ | _W n  ttfk
r²   d | _Y nX d S )Nr   zbad magic numberr   zheader size too smalléd   zheader size ridiculously largezencoding not (yet) supportedr   r   r   r   zunknown encodingó    ó    )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)rK   )r0   r   r   r   Úgetnchannelsà   s    zAu_read.getnchannelsc             C   s   | j S )N)rD   )r0   r   r   r   Úgetsampwidthã   s    zAu_read.getsampwidthc             C   s   | j S )N)rJ   )r0   r   r   r   Úgetframerateæ   s    zAu_read.getframeratec             C   s(   | j tkrtS | jtkr$| j | j S dS )Nr   )r>   r?   r@   rA   rE   )r0   r   r   r   Ú
getnframesé   s
    

zAu_read.getnframesc             C   s$   | j tkrdS | j tkrdS dS d S )NÚULAWÚALAWÚNONE)r@   rB   rC   )r0   r   r   r   Úgetcomptypeð   s
    

zAu_read.getcomptypec             C   s$   | j tkrdS | j tkrdS dS d S )NzCCITT G.711 u-lawzCCITT G.711 A-lawznot compressed)r@   rB   rC   )r0   r   r   r   Úgetcompnameø   s
    

zAu_read.getcompnamec             C   s*   t | jƒ | jƒ | jƒ | jƒ | jƒ | jƒ ƒS )N)r   rU   rV   rW   rX   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   sp   | j tkrl|tkr| jjƒ }n| jj|| j ƒ}|  jt|ƒ| j 7  _| j tkrhdd l	}|j
|| jƒ}|S d S )Nr   )r@   rA   r?   r3   r   rE   r<   ÚlenrB   ÚaudioopZulaw2linrD   )r0   Únframesr$   rc   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   )rO   rQ   r3   Úseekr<   )r0   r   r   r   Úrewind  s    
zAu_read.rewindc             C   s   | j S )N)r<   )r0   r   r   r   rN     s    zAu_read.tellc             C   sP   |dk s|| j ƒ krtdƒ‚| jd kr.tdƒ‚| jj| j|| j  ƒ || _d S )Nr   zposition not in rangezcannot seek)rX   r   rO   rQ   r3   rf   rE   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/   rT   rU   rV   rW   rX   r\   r]   r^   r_   ra   re   rg   rN   ri   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d1d2„ Zd3S )4ÚAu_writec             C   s@   t |ƒt dƒkr,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   sF   || _ d| _d| _d| _d| _t| _d| _d| _d| _	d| _
d| _d S )Nr   r;   rY   )r3   rJ   rK   rD   rE   r?   Ú_nframesÚ_nframeswrittenÚ_datawrittenÚ_datalengthrL   Ú	_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   )rm   r   rK   )r0   Ú	nchannelsr   r   r   ÚsetnchannelsS  s
    zAu_write.setnchannelsc             C   s   | j stdƒ‚| j S )Nznumber of channels not set)rK   r   )r0   r   r   r   rU   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   )rm   r   rD   )r0   Ú	sampwidthr   r   r   Úsetsampwidth_  s
    zAu_write.setsampwidthc             C   s   | j stdƒ‚| jS )Nzsample width not specified)rJ   r   rD   )r0   r   r   r   rV   f  s    zAu_write.getsampwidthc             C   s   | j rtdƒ‚|| _d S )Nz0cannot change parameters after starting to write)rm   r   rJ   )r0   Ú	framerater   r   r   Úsetframeratek  s    zAu_write.setframeratec             C   s   | j stdƒ‚| j S )Nzframe rate not set)rJ   r   )r0   r   r   r   rW   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)rm   r   rl   )r0   rd   r   r   r   Ú
setnframesu  s
    zAu_write.setnframesc             C   s   | j S )N)rm   )r0   r   r   r   rX   |  s    zAu_write.getnframesc             C   s   |dkr|| _ ntdƒ‚d S )Nr[   rY   zunknown compression type)r[   rY   )rp   r   )r0   r+   Únamer   r   r   Úsetcomptype  s    zAu_write.setcomptypec             C   s   | j S )N)rp   )r0   r   r   r   r\   …  s    zAu_write.getcomptypec             C   s$   | j dkrdS | j dkrdS dS d S )NrY   zCCITT G.711 u-lawrZ   zCCITT G.711 A-lawznot compressed)rp   )r0   r   r   r   r]   ˆ  s
    

zAu_write.getcompnamec             C   sH   |\}}}}}}| j |ƒ | j|ƒ | j|ƒ | j|ƒ | j||ƒ d S )N)rr   rt   rv   rw   ry   )r0   Zparamsrq   rs   ru   rd   ZcomptypeZcompnamer   r   r   Ú	setparams  s    



zAu_write.setparamsc             C   s*   t | jƒ | jƒ | jƒ | jƒ | jƒ | jƒ ƒS )N)r   rU   rV   rW   rX   r\   r]   )r0   r   r   r   r^   ˜  s    zAu_write.getparamsc             C   s   | j S )N)rm   )r0   r   r   r   rN     s    zAu_write.tellc             C   s~   t |ttfƒst|ƒjdƒ}| jƒ  | jdkrDdd l}|j|| j	ƒ}t
|ƒ| j }| jj|ƒ | j| | _| jt
|ƒ | _d S )NÚBrY   r   )Ú
isinstancer#   Ú	bytearrayÚ
memoryviewÚcastÚ_ensure_header_writtenrp   rc   Zlin2ulawrD   rb   rE   r3   r"   rm   rn   )r0   r$   rc   rd   r   r   r   Úwriteframesraw   s    
zAu_write.writeframesrawc             C   s.   | j |ƒ | j| jks"| j| jkr*| jƒ  d S )N)r   rm   rl   ro   rn   Ú_patchheader)r0   r$   r   r   r   Úwriteframes¬  s    
zAu_write.writeframesc             C   s^   | j rZz6| jƒ  | j| jks(| j| jkr0| jƒ  | j jƒ  W d | j }d | _ | jrX|j	ƒ  X d S )N)
r3   r€   rm   rl   ro   rn   r‚   Úflushr.   r4   )r0   r   r   r   r   r4   ²  s    zAu_write.closec             C   s<   | j s8| jstdƒ‚| js"tdƒ‚| js0tdƒ‚| jƒ  d S )Nz# of channels not specifiedzsample width not specifiedzframe rate not specified)rm   rK   r   rD   rJ   Ú_write_header)r0   r   r   r   r€   Ä  s    zAu_write._ensure_header_writtenc             C   s‚  | j dkrl| jdkr t}d| _qŠ| jdkr6t}d| _qŠ| jdkrLt}d| _qŠ| jdkrbt}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ƒ | _W n  ttfk
r   d | _Y nX t
| j|ƒ || _t
| j|ƒ t
| j| jƒ t
| j| j	ƒ | jj| jƒ | jjd
|t| jƒ d  ƒ d S )Nr[   r   r   r   r   zinternal errorrY   r   r
   r:   r   iøÿÿÿ)rp   rD   rF   rE   rG   rH   rI   r   rB   rK   r'   r3   r=   rb   rL   rl   r?   rN   Ú_form_length_posrP   rQ   ro   rJ   r"   )r0   ÚencodingZheader_sizeZlengthr   r   r   r…   Î  sJ    







zAu_write._write_headerc             C   sH   | j d krtdƒ‚| jj| j ƒ t| j| jƒ | j| _| jjddƒ d S )Nzcannot seekr   r   )r†   rQ   r3   rf   r'   rn   ro   )r0   r   r   r   r‚   ø  s    
zAu_write._patchheaderN)r   r   r   r2   r5   r6   r8   r/   rr   rU   rt   rV   rv   rW   rw   rX   ry   r\   r]   rz   r^   rN   r   rƒ   r4   r€   r…   r‚   r   r   r   r   rj   0  s2   	
*rj   Nc             C   sJ   |d krt | dƒr| j}nd}|dkr.t| ƒS |dkr>t| ƒS tdƒ‚d S )	NÚmoder*   ÚrÚwrk   z$mode must be 'r', 'rb', 'w', or 'wb')r‰   r*   )rŠ   rk   )Úhasattrrˆ   r(   rj   r   )r1   rˆ   r   r   r   r-      s    
r-   )N)Úcollectionsr   r   r=   rB   rF   rG   rH   rI   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_5rC   r?   rA   Ú	Exceptionr   r   r'   r(   rj   r-   Zopenfpr   r   r   r   Ú<module>j   s>   	  Q
