o
     JAfF                     @   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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/lib/python3.10/sunau.pyr      s    r   c                 C   s8   d}t dD ]}| d}|st|d t| }q|S )Nr   r   r      )rangereadEOFErrorord)filexiZbyter   r   r   	_read_u32   s   
r   c                 C   sF   g }t dD ]}t|d\}}|dt| |}q| 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   @   t |t dkrdd l}||d}d| _nd| _| | d S )N r   rbTFtypebuiltinsopen_openedinitfpselffr.   r   r   r   __init__      zAu_read.__init__c                 C   s   | j r	|   d S d S N_filecloser3   r   r   r   __del__   s   zAu_read.__del__c                 C      | S r7   r   r;   r   r   r   	__enter__      zAu_read.__enter__c                 G      |    d S r7   r:   r3   argsr   r   r   __exit__      zAu_read.__exit__c              	   C   s  || _ d| _tt|}|tkrtdtt|| _| jdk r$td| jdkr-tdt|| _| jtkr=t| j| _tt|| _	| j	t
vrMtd| j	ttfv r[d| _d	| _n4| j	tkrgd	 | _| _n(| j	tkrsd | _| _n| j	tkrd
 | _| _n| j	tkrd | _| _ntdtt|| _tt|| _| jstd| j| j | _| jdkr|| jd | _| jd\| _}}nd| _z| | _W d S  ttfy   d | _Y d S w )Nr   zbad magic numberr   zheader size too smalld   zheader size ridiculously largezencoding not (yet) supportedr   r   r   r   zunknown encodingzbad # of channels        )r9   	_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)r3   r   magic_r   r   r   r1      sX   









zAu_read.initfpc                 C      | j S r7   )r9   r;   r   r   r   getfp      zAu_read.getfpc                 C   ra   r7   )rX   r;   r   r   r   getnchannels   rc   zAu_read.getnchannelsc                 C   ra   r7   )rQ   r;   r   r   r   getsampwidth   rc   zAu_read.getsampwidthc                 C   ra   r7   )rW   r;   r   r   r   getframerate   rc   zAu_read.getframeratec                 C   s(   | j tkrtS | jtv r| j | j S dS Nr   )rK   rL   rM   rN   rR   r;   r   r   r   
getnframes   s
   

zAu_read.getnframesc                 C       | j tkrdS | j tkrdS dS )NULAWALAWNONErM   rO   rP   r;   r   r   r   getcomptype   
   

zAu_read.getcomptypec                 C   ri   )NCCITT G.711 u-lawCCITT G.711 A-lawnot compressedrm   r;   r   r   r   getcompname   ro   zAu_read.getcompnamec                 C   *   t |  |  |  |  |  |  S r7   r   rd   re   rf   rh   rn   rs   r;   r   r   r   	getparams     zAu_read.getparamsc                 C   s   d S r7   r   r;   r   r   r   
getmarkers  r?   zAu_read.getmarkersc                 C   s   t d)Nzno marks)r   )r3   idr   r   r   getmark  s   zAu_read.getmarkc                 C   sp   | j tv r6|tkr| j }n	| j|| j }|  jt|| j 7  _| j tkr4dd l	}|
|| j}|S d S rg   )rM   rN   rL   r9   r   rR   rI   lenrO   audioopZulaw2linrQ   )r3   nframesr$   r|   r   r   r   
readframes  s   

zAu_read.readframesc                 C   s*   | j d u r	td| j| j  d| _d S )Ncannot seekr   )r\   r^   r9   seekrI   r;   r   r   r   rewind  s   

zAu_read.rewindc                 C   ra   r7   )rI   r;   r   r   r   r[   !  rc   zAu_read.tellc                 C   sP   |dk s
||   krtd| jd u rtd| j| j|| j   || _d S )Nr   zposition not in ranger   )rh   r   r\   r^   r9   r   rR   rI   )r3   posr   r   r   setpos$  s   

zAu_read.setposc                 C   s*   | j }|rd | _ | jr|  d S d S d S r7   )r9   r0   r:   r3   r   r   r   r   r:   ,  s   zAu_read.closeN)r   r   r   r5   r<   r>   rD   r1   rb   rd   re   rf   rh   rn   rs   rv   rx   rz   r~   r   r[   r   r:   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   r)   )Nr*   r   wbTFr,   r2   r   r   r   r5   5  r6   zAu_write.__init__c                 C   s   | j r|   d | _ d S r7   r8   r;   r   r   r   r<   >     
zAu_write.__del__c                 C   r=   r7   r   r;   r   r   r   r>   C  r?   zAu_write.__enter__c                 G   r@   r7   rA   rB   r   r   r   rD   F  rE   zAu_write.__exit__c                 C   sF   || _ d| _d| _d| _d| _t| _d| _d| _d| _	d| _
d| _d S )Nr   rH   rj   )r9   rW   rX   rQ   rR   rL   _nframes_nframeswritten_datawritten_datalengthrY   	_comptyper   r   r   r   r1   I  s   
zAu_write.initfpc                 C   (   | j rtd|dvrtd|| _d S )N0cannot change parameters after starting to write)r   r   r   z"only 1, 2, or 4 channels supported)r   r   rX   )r3   	nchannelsr   r   r   setnchannelsV  
   
zAu_write.setnchannelsc                 C      | j std| j S )Nznumber of channels not set)rX   r   r;   r   r   r   rd   ]     zAu_write.getnchannelsc                 C   r   )Nr   )r   r   r   r   zbad sample width)r   r   rQ   )r3   	sampwidthr   r   r   setsampwidthb  r   zAu_write.setsampwidthc                 C   s   | j std| jS )Nsample width not specified)rW   r   rQ   r;   r   r   r   re   i  r   zAu_write.getsampwidthc                 C   s   | j rtd|| _d S )Nr   )r   r   rW   )r3   	framerater   r   r   setframeraten  r   zAu_write.setframeratec                 C   r   )Nzframe rate not set)rW   r   r;   r   r   r   rf   s  r   zAu_write.getframeratec                 C   s(   | j rtd|dk rtd|| _d S )Nr   r   z# of frames cannot be negative)r   r   r   )r3   r}   r   r   r   
setnframesx  r   zAu_write.setnframesc                 C   ra   r7   r   r;   r   r   r   rh     rc   zAu_write.getnframesc                 C   s   |dv r	|| _ d S td)N)rl   rj   zunknown compression type)r   r   )r3   r-   namer   r   r   setcomptype  s   
zAu_write.setcomptypec                 C   ra   r7   r   r;   r   r   r   rn     rc   zAu_write.getcomptypec                 C   s    | j dkrdS | j dkrdS dS )Nrj   rp   rk   rq   rr   r   r;   r   r   r   rs     ro   zAu_write.getcompnamec                 C   sH   |\}}}}}}|  | | | | | | | | || d S r7   )r   r   r   r   r   )r3   paramsr   r   r   r}   ZcomptypeZcompnamer   r   r   	setparams  s   



zAu_write.setparamsc                 C   rt   r7   ru   r;   r   r   r   rv     rw   zAu_write.getparamsc                 C   ra   r7   r   r;   r   r   r   r[     rc   zAu_write.tellc                 C   s~   t |ttfst|d}|   | jdkr"dd l}||| j	}t
|| j }| j| | j| | _| jt
| | _d S )NBrj   r   )
isinstancer#   	bytearray
memoryviewcast_ensure_header_writtenr   r|   Zlin2ulawrQ   r{   rR   r9   r"   r   r   )r3   r$   r|   r}   r   r   r   writeframesraw  s   
zAu_write.writeframesrawc                 C   s2   |  | | j| jks| j| jkr|   d S d S r7   )r   r   r   r   r   _patchheader)r3   r$   r   r   r   writeframes  s
   
zAu_write.writeframesc                 C   s   | j r>z+|   | j| jks| j| jkr|   | j   W | j }d | _ | jr-|	  d S d S | j }d | _ | jr=|	  w w d S r7   )
r9   r   r   r   r   r   r   flushr0   r:   r   r   r   r   r:     s$   
zAu_write.closec                 C   s@   | j s| js
td| jstd| jstd|   d S d S )Nz# of channels not specifiedr   zframe rate not specified)r   rX   r   rQ   rW   _write_headerr;   r   r   r   r     s   zAu_write._ensure_header_writtenc              	   C   s|  | j dkr5| jdkrt}d| _n4| jdkrt}d| _n)| jdkr&t}d| _n| jdkr1t}d| _ntd| j dkr@t}d| _ntd| j| j	 | _t
| jt dt| j }|d	 d
@ }t
| j| | jtkrlt}n| j| j }z| j | _W n ttfy   d | _Y nw t
| j| || _t
| j| t
| j| j t
| j| j	 | j| j | jd|t| j d   d S )Nrl   r   r   r   r   zinternal errorrj   r   r
   irG   r   )r   rQ   rS   rR   rT   rU   rV   r   rO   rX   r'   r9   rJ   r{   rY   r   rL   r[   _form_length_posr]   r^   r   rW   r"   )r3   encodingheader_sizelengthr   r   r   r     sL   







"zAu_write._write_headerc                 C   sH   | j d u r	td| j| j  t| j| j | j| _| jdd d S )Nr   r   r   )r   r^   r9   r   r'   r   r   r;   r   r   r   r     s   
zAu_write._patchheaderN)r   r   r   r5   r<   r>   rD   r1   r   rd   r   re   r   rf   r   rh   r   rn   rs   r   rv   r[   r   r   r:   r   r   r   r   r   r   r   r   3  s4    	
*r   Nc                 C   sF   |d u rt | dr| j}nd}|dv rt| S |dv rt| S td)Nmoder+   )rr+   )wr   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr   r(   r   r   )r4   r   r   r   r   r/     s   
r/   r7   )collectionsr   r   rJ   rO   rS   rT   rU   rV   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_5rP   rL   rN   	Exceptionr   r   r'   r(   r   r/   r   r   r   r   <module>   sD    i	  Q