a
    RhTF                     @   s   d dl mZ d dlmZ d dlZd dlZd dlZd dlZg dZG dd de	Z
dZdZed	d
ZG dd dZG dd dZdddZdS )    )Chunk)
namedtupleN)openError	Wave_read
Wave_writec                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   ,/opt/python-3.9.24/usr/lib/python3.9/wave.pyr   T   s   r      )NbhNi_wave_paramsz7nchannels sampwidth framerate nframes comptype compnamec                   @   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+S ),r   c                 C   s   d | _ d| _t|dd| _| j dkr0td| jddkrHtdd| _d | _d| _	zt| jdd}W n t
y   Y qY n0 | }|d	kr| | d| _n2|d
kr| jstd|| _|j| j | _d| _	q|  qT| jr| jstdd S )Nr   )Z	bigendian   RIFFz file does not start with RIFF id      WAVEznot a WAVE filer      fmt    datazdata chunk before fmt chunkz#fmt chunk and/or data chunk missing)_convert	_soundposr   _fileZgetnamer   readZ_fmt_chunk_read_data_chunk_data_seek_neededEOFError_read_fmt_chunk	chunksize
_framesize_nframesskip)selffilechunkZ	chunknamer   r   r   initfp}   s8    


zWave_read.initfpc                 C   sR   d | _ t|tr"t|d}|| _ z| | W n   | j rF|   Y n0 d S )Nrb_i_opened_the_file
isinstancestrbuiltinsr   r&   closer#   fr   r   r   __init__   s    
zWave_read.__init__c                 C   s   |    d S Nr-   r#   r   r   r   __del__   s    zWave_read.__del__c                 C   s   | S r1   r   r3   r   r   r   	__enter__   s    zWave_read.__enter__c                 G   s   |    d S r1   r2   r#   argsr   r   r   __exit__   s    zWave_read.__exit__c                 C   s   | j S r1   )r   r3   r   r   r   getfp   s    zWave_read.getfpc                 C   s   d| _ d| _d S )Nr   r   )r   r   r3   r   r   r   rewind   s    zWave_read.rewindc                 C   s"   d | _ | j}|rd | _|  d S r1   )r   r)   r-   r#   r$   r   r   r   r-      s
    zWave_read.closec                 C   s   | j S r1   )r   r3   r   r   r   tell   s    zWave_read.tellc                 C   s   | j S r1   )
_nchannelsr3   r   r   r   getnchannels   s    zWave_read.getnchannelsc                 C   s   | j S r1   )r!   r3   r   r   r   
getnframes   s    zWave_read.getnframesc                 C   s   | j S r1   )
_sampwidthr3   r   r   r   getsampwidth   s    zWave_read.getsampwidthc                 C   s   | j S r1   )
_framerater3   r   r   r   getframerate   s    zWave_read.getframeratec                 C   s   | j S r1   	_comptyper3   r   r   r   getcomptype   s    zWave_read.getcomptypec                 C   s   | j S r1   	_compnamer3   r   r   r   getcompname   s    zWave_read.getcompnamec                 C   s*   t |  |  |  |  |  |  S r1   )r   r>   rA   rC   r?   rF   rI   r3   r   r   r   	getparams   s    zWave_read.getparamsc                 C   s   d S r1   r   r3   r   r   r   
getmarkers   s    zWave_read.getmarkersc                 C   s   t dd S Nzno marksr   r#   idr   r   r   getmark   s    zWave_read.getmarkc                 C   s*   |dk s|| j krtd|| _d| _d S )Nr   zposition not in ranger   )r!   r   r   r   )r#   posr   r   r   setpos   s    zWave_read.setposc                 C   s   | j r8| jdd | j| j }|r2| j|d d| _ |dkrDdS | j|| j }| jdkrxtjdkrxt	
|| j}| jr|r| |}| jt|| j| j   | _|S )Nr       r   big)r   r   seekr   r    r   r@   sys	byteorderaudioopbyteswapr   lenr=   )r#   nframesrQ   datar   r   r   
readframes   s    

zWave_read.readframesc                 C   s   z$t d|d\}| _| _}}W n t jy>   td Y n0 |tkrzt d|dd }W n t jy|   td Y n0 |d d | _| jst	dnt	d	|f | jst	d
| j| j | _
d| _d| _d S )Nz<HHLLH   z<H   r         bad sample widthzunknown format: %rbad # of channelsNONEznot compressed)structunpack_fromr   r=   rB   errorr   WAVE_FORMAT_PCMr@   r   r    rE   rH   )r#   r%   Z
wFormatTagZdwAvgBytesPerSecZwBlockAlign	sampwidthr   r   r   r      s$    $
zWave_read._read_fmt_chunkN)r   r	   r
   r&   r0   r4   r5   r8   r9   r:   r-   r<   r>   r?   rA   rC   rF   rI   rJ   rK   rP   rR   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d3d4 Zd5d6 Zd7d8 Zd9S ):r   c                 C   sR   d | _ t|tr"t|d}|| _ z| | W n   | j rF|   Y n0 d S )Nwbr(   r.   r   r   r   r0   -  s    
zWave_write.__init__c                 C   s@   || _ d | _d| _d| _d| _d| _d| _d| _d| _d| _	d S )Nr   F)
r   r   r=   r@   rB   r!   _nframeswritten_datawritten_datalength_headerwrittenr;   r   r   r   r&   9  s    zWave_write.initfpc                 C   s   |    d S r1   r2   r3   r   r   r   r4   E  s    zWave_write.__del__c                 C   s   | S r1   r   r3   r   r   r   r5   H  s    zWave_write.__enter__c                 G   s   |    d S r1   r2   r6   r   r   r   r8   K  s    zWave_write.__exit__c                 C   s(   | j rtd|dk rtd|| _d S )N0cannot change parameters after starting to writer   rc   )rl   r   r=   )r#   	nchannelsr   r   r   setnchannelsQ  s
    zWave_write.setnchannelsc                 C   s   | j std| j S )Nznumber of channels not set)r=   r   r3   r   r   r   r>   X  s    zWave_write.getnchannelsc                 C   s0   | j rtd|dk s|dkr&td|| _d S )Nro   r   r   rb   )rl   r   r@   )r#   ri   r   r   r   setsampwidth]  s
    zWave_write.setsampwidthc                 C   s   | j std| j S )Nzsample width not set)r@   r   r3   r   r   r   rA   d  s    zWave_write.getsampwidthc                 C   s0   | j rtd|dkrtdtt|| _d S )Nro   r   zbad frame rate)rl   r   introundrB   )r#   	framerater   r   r   setframeratei  s
    zWave_write.setframeratec                 C   s   | j std| j S )Nzframe rate not set)rB   r   r3   r   r   r   rC   p  s    zWave_write.getframeratec                 C   s   | j rtd|| _d S Nro   )rl   r   r!   )r#   r[   r   r   r   
setnframesu  s    zWave_write.setnframesc                 C   s   | j S r1   rk   r3   r   r   r   r?   z  s    zWave_write.getnframesc                 C   s.   | j rtd|dvrtd|| _|| _d S )Nro   )rd   zunsupported compression type)rl   r   rE   rH   )r#   comptypecompnamer   r   r   setcomptype}  s    zWave_write.setcomptypec                 C   s   | j S r1   rD   r3   r   r   r   rF     s    zWave_write.getcomptypec                 C   s   | j S r1   rG   r3   r   r   r   rI     s    zWave_write.getcompnamec                 C   sV   |\}}}}}}| j rtd| | | | | | | | | || d S rw   )rl   r   rq   rr   rv   rx   r|   )r#   paramsrp   ri   ru   r[   rz   r{   r   r   r   	setparams  s    



zWave_write.setparamsc                 C   s8   | j r| jr| jstdt| j | j| j| j| j| jS )Nznot all parameters set)r=   r@   rB   r   r   r!   rE   rH   r3   r   r   r   rJ     s
    zWave_write.getparamsc                 C   s   t dd S )Nzsetmark() not supportedrM   )r#   rO   rQ   namer   r   r   setmark  s    zWave_write.setmarkc                 C   s   t dd S rL   rM   rN   r   r   r   rP     s    zWave_write.getmarkc                 C   s   d S r1   r   r3   r   r   r   rK     s    zWave_write.getmarkersc                 C   s   | j S r1   ry   r3   r   r   r   r<     s    zWave_write.tellc                 C   s   t |ttfst|d}| t| t|| j| j  }| j	rN| 	|}| jdkrpt
jdkrpt|| j}| j| |  jt|7  _| j| | _d S )NBr   rT   )r*   bytes	bytearray
memoryviewcast_ensure_header_writtenrZ   r@   r=   r   rV   rW   rX   rY   r   writerl   rk   )r#   r\   r[   r   r   r   writeframesraw  s    
zWave_write.writeframesrawc                 C   s"   |  | | j| jkr|   d S r1   )r   rm   rl   _patchheader)r#   r\   r   r   r   writeframes  s    
zWave_write.writeframesc                 C   sv   zP| j r0| d | j| jkr&|   | j   W d | _ | j}|rrd | _|  n d | _ | j}|rpd | _|  0 d S )Nr   )r   r   rm   rl   r   flushr)   r-   r;   r   r   r   r-     s     

zWave_write.closec                 C   s>   | j s:| jstd| js"td| js0td| | d S )Nz# channels not specifiedzsample width not specifiedzsampling rate not specified)rn   r=   r   r@   rB   _write_header)r#   Zdatasizer   r   r   r     s    z!Wave_write._ensure_header_writtenc                 C   s   | j d | js$|| j| j  | _| j| j | j | _z| j  | _W n tt	fyd   d | _Y n0 | j t
dd| j dddt| j| j| j| j | j | j| j | jd d | jd ur| j  | _| j t
d	| j d
| _d S )Nr   z<L4s4sLHHLLHH4s$   r   r      ra   r   <LT)r   r   r!   r=   r@   rm   r<   _form_length_posAttributeErrorOSErrorre   packrh   rB   _data_length_posrn   )r#   Z
initlengthr   r   r   r     s&    



zWave_write._write_headerc                 C   s   | j | jkrd S | j }| j| jd | jtdd| j   | j| j	d | jtd| j  | j|d | j | _d S )Nr   r   r   )
rl   rm   r   r<   rU   r   r   re   r   r   )r#   Zcurposr   r   r   r     s    
zWave_write._patchheaderN)r   r	   r
   r0   r&   r4   r5   r8   rq   r>   rr   rA   rv   rC   rx   r?   r|   rF   rI   r~   rJ   r   rP   rK   r<   r   r   r-   r   r   r   r   r   r   r   r     s8   

r   c                 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'   )wrj   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr   r   r   r   )r/   r   r   r   r   r     s    
r   )N)r%   r   collectionsr   rX   r,   re   rV   __all__	Exceptionr   rh   Z_array_fmtsr   r   r   r   r   r   r   r   <module>J   s"    6 d