a
    "hF                     @   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   -/opt/python-3.9.21/usr/lib/python3.9/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   s@   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__   s    zAu_read.__init__c                 C   s   | j r|   d S N_filecloser2   r   r   r   __del__   s    zAu_read.__del__c                 C   s   | S r5   r   r9   r   r   r   	__enter__   s    zAu_read.__enter__c                 G   s   |    d S r5   r8   r2   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
vrtd| j	ttfv rd| _d	| _nj| j	tkrd	 | _| _nR| j	tkrd | _| _n:| j	tkrd
 | _| _n"| j	tkrd | _| _ntdtt|| _tt|| _| jsLtd| j| j | _| jdkr|| jd | _| jd\| _}}nd| _z| | _W n ttfy   d | _Y n0 d 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 encodingzbad # of channels        )r7   	_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)r2   r   magic_r   r   r   r0      sV    







zAu_read.initfpc                 C   s   | j S r5   )r7   r9   r   r   r   getfp   s    zAu_read.getfpc                 C   s   | j S r5   )rR   r9   r   r   r   getnchannels   s    zAu_read.getnchannelsc                 C   s   | j S r5   )rK   r9   r   r   r   getsampwidth   s    zAu_read.getsampwidthc                 C   s   | j S r5   )rQ   r9   r   r   r   getframerate   s    zAu_read.getframeratec                 C   s(   | j tkrtS | jtv r$| j | j S dS Nr   )rE   rF   rG   rH   rL   r9   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rG   rI   rJ   r9   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 )NCCITT G.711 u-lawCCITT G.711 A-lawnot compressedrd   r9   r   r   r   getcompname   s
    

zAu_read.getcompnamec                 C   s*   t |  |  |  |  |  |  S r5   r   r\   r]   r^   r`   re   ri   r9   r   r   r   	getparams  s    zAu_read.getparamsc                 C   s   d S r5   r   r9   r   r   r   
getmarkers  s    zAu_read.getmarkersc                 C   s   t dd S )Nzno marks)r   )r2   idr   r   r   getmark  s    zAu_read.getmarkc                 C   sp   | j tv rl|tkr| j }n| j|| j }|  jt|| j 7  _| j tkrhdd l	}|
|| j}|S d S r_   )rG   rH   rF   r7   r   rL   rC   lenrI   audioopZulaw2linrK   )r2   nframesr$   rp   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   )rV   rX   r7   seekrC   r9   r   r   r   rewind  s    
zAu_read.rewindc                 C   s   | j S r5   )rC   r9   r   r   r   rU   !  s    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 rangers   )r`   r   rV   rX   r7   rt   rL   rC   )r2   posr   r   r   setpos$  s    
zAu_read.setposc                 C   s"   | j }|rd | _ | jr|  d S r5   )r7   r/   r8   r2   r   r   r   r   r8   ,  s
    zAu_read.closeN)r   r   r   r4   r:   r;   r?   r0   r[   r\   r]   r^   r`   re   ri   rk   rl   rn   rr   ru   rU   rw   r8   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}||d}d| _nd| _| | d S )Nr)   r   wbTFr+   r1   r   r   r   r4   5  s    zAu_write.__init__c                 C   s   | j r|   d | _ d S r5   r6   r9   r   r   r   r:   >  s    zAu_write.__del__c                 C   s   | S r5   r   r9   r   r   r   r;   C  s    zAu_write.__enter__c                 G   s   |    d S r5   r<   r=   r   r   r   r?   F  s    zAu_write.__exit__c                 C   sF   || _ d| _d| _d| _d| _t| _d| _d| _d| _	d| _
d| _d S )Nr   rB   ra   )r7   rQ   rR   rK   rL   rF   _nframes_nframeswritten_datawritten_datalengthrS   	_comptyperx   r   r   r   r0   I  s    zAu_write.initfpc                 C   s(   | 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   rR   )r2   	nchannelsr   r   r   setnchannelsV  s
    zAu_write.setnchannelsc                 C   s   | j std| j S )Nznumber of channels not set)rR   r   r9   r   r   r   r\   ]  s    zAu_write.getnchannelsc                 C   s(   | j rtd|dvrtd|| _d S )Nr   )r   r   r   r   zbad sample width)r|   r   rK   )r2   	sampwidthr   r   r   setsampwidthb  s
    zAu_write.setsampwidthc                 C   s   | j std| jS )Nsample width not specified)rQ   r   rK   r9   r   r   r   r]   i  s    zAu_write.getsampwidthc                 C   s   | j rtd|| _d S )Nr   )r|   r   rQ   )r2   	framerater   r   r   setframeraten  s    zAu_write.setframeratec                 C   s   | j std| j S )Nzframe rate not set)rQ   r   r9   r   r   r   r^   s  s    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{   )r2   rq   r   r   r   
setnframesx  s
    zAu_write.setnframesc                 C   s   | j S r5   r|   r9   r   r   r   r`     s    zAu_write.getnframesc                 C   s   |dv r|| _ ntdd S )N)rc   ra   zunknown compression type)r   r   )r2   r,   namer   r   r   setcomptype  s    zAu_write.setcomptypec                 C   s   | j S r5   r   r9   r   r   r   re     s    zAu_write.getcomptypec                 C   s$   | j dkrdS | j dkrdS dS d S )Nra   rf   rb   rg   rh   r   r9   r   r   r   ri     s
    

zAu_write.getcompnamec                 C   sH   |\}}}}}}|  | | | | | | | | || d S r5   )r   r   r   r   r   )r2   paramsr   r   r   rq   ZcomptypeZcompnamer   r   r   	setparams  s    



zAu_write.setparamsc                 C   s*   t |  |  |  |  |  |  S r5   rj   r9   r   r   r   rk     s    zAu_write.getparamsc                 C   s   | j S r5   r   r9   r   r   r   rU     s    zAu_write.tellc                 C   s~   t |ttfst|d}|   | jdkrDdd l}||| j	}t
|| j }| j| | j| | _| jt
| | _d S )NBra   r   )
isinstancer#   	bytearray
memoryviewcast_ensure_header_writtenr   rp   Zlin2ulawrK   ro   rL   r7   r"   r|   r}   )r2   r$   rp   rq   r   r   r   writeframesraw  s    
zAu_write.writeframesrawc                 C   s.   |  | | j| jks"| j| jkr*|   d S r5   )r   r|   r{   r~   r}   _patchheader)r2   r$   r   r   r   writeframes  s
    

zAu_write.writeframesc                 C   sx   | j rtzP|   | j| jks(| j| jkr0|   | j   W | j }d | _ | jrt|	  n| j }d | _ | jrr|	  0 d S r5   )
r7   r   r|   r{   r~   r}   r   flushr/   r8   rx   r   r   r   r8     s     

zAu_write.closec                 C   s<   | j s8| jstd| js"td| js0td|   d S )Nz# of channels not specifiedr   zframe rate not specified)r|   rR   r   rK   rQ   _write_headerr9   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| _qtdn| j dkrt}d| _ntd| j| j	 | _t
| jt dt| j }|d	 d
@ }t
| j| | jtkrt}n| j| j }z| j | _W n ttfy   d | _Y n0 t
| j| || _t
| j| t
| j| j t
| j| j	 | j| j | jd|t| j d   d S )Nrc   r   r   r   r   zinternal errorra   r   r
   irA   r   )r   rK   rM   rL   rN   rO   rP   r   rI   rR   r'   r7   rD   ro   rS   r{   rF   rU   _form_length_posrW   rX   r~   rQ   r"   )r2   encodingheader_sizelengthr   r   r   r     sJ    







zAu_write._write_headerc                 C   sH   | j d u rtd| j| j  t| j| j | j| _| jdd d S )Nrs   r   r   )r   rX   r7   rt   r'   r}   r~   r9   r   r   r   r     s    
zAu_write._patchheaderN)r   r   r   r4   r:   r;   r?   r0   r   r\   r   r]   r   r^   r   r`   r   re   ri   r   rk   rU   r   r   r8   r   r   r   r   r   r   r   ry   3  s2   	
*ry   Nc                 C   sJ   |d u rt | dr| j}nd}|dv r.t| S |dv r>t| S tdd S )Nmoder*   )rr*   )wrz   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr   r(   ry   r   )r3   r   r   r   r   r.     s    
r.   )N)collectionsr   r   rD   rI   rM   rN   rO   rP   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_5rJ   rF   rH   	Exceptionr   r   r'   r(   ry   r.   r   r   r   r   <module>j   s@   	  Q