o
     JAfTF                     @   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   /usr/lib/python3.10/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rtd| jddkr$tdd| _d | _	 d| _	z	t| jdd}W n	 t
y@   Y n0w | }|d	krR| | d| _n|d
krk| js]td|| _|j| j | _d| _	n|  q+| jrv| jszt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}   s@   
zWave_read.initfpc                 C   J   d | _ t|trt|d}|| _ z| | W d S    | j r$|   )Nrb_i_opened_the_file
isinstancestrbuiltinsr   r&   closer#   fr   r   r   __init__   s   
zWave_read.__init__c                 C      |    d S Nr.   r#   r   r   r   __del__      zWave_read.__del__c                 C      | S r3   r   r5   r   r   r   	__enter__      zWave_read.__enter__c                 G   r2   r3   r4   r#   argsr   r   r   __exit__   r7   zWave_read.__exit__c                 C      | j S r3   )r   r5   r   r   r   getfp      zWave_read.getfpc                 C   s   d| _ d| _d S )Nr   r   )r   r   r5   r   r   r   rewind   s   
zWave_read.rewindc                 C   s&   d | _ | j}|rd | _|  d S d S r3   )r   r*   r.   r#   r$   r   r   r   r.      s   zWave_read.closec                 C   r>   r3   )r   r5   r   r   r   tell   r@   zWave_read.tellc                 C   r>   r3   )
_nchannelsr5   r   r   r   getnchannels   r@   zWave_read.getnchannelsc                 C   r>   r3   )r!   r5   r   r   r   
getnframes   r@   zWave_read.getnframesc                 C   r>   r3   )
_sampwidthr5   r   r   r   getsampwidth   r@   zWave_read.getsampwidthc                 C   r>   r3   )
_framerater5   r   r   r   getframerate   r@   zWave_read.getframeratec                 C   r>   r3   	_comptyper5   r   r   r   getcomptype   r@   zWave_read.getcomptypec                 C   r>   r3   	_compnamer5   r   r   r   getcompname   r@   zWave_read.getcompnamec                 C   s*   t |  |  |  |  |  |  S r3   )r   rE   rH   rJ   rF   rM   rP   r5   r   r   r   	getparams   s   zWave_read.getparamsc                 C      d S r3   r   r5   r   r   r   
getmarkers   r:   zWave_read.getmarkersc                 C      t dNzno marksr   r#   idr   r   r   getmark      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 r| jdd | j| j }|r| j|d d| _ |dkr"dS | j|| j }| jdkr<tjdkr<t	
|| j}| jrF|rF| |}| jt|| j| j   | _|S )Nr       r   big)r   r   seekr   r    r   rG   sys	byteorderaudioopbyteswapr   lenrD   )r#   nframesr[   datar   r   r   
readframes   s   

zWave_read.readframesc                 C   s   zt d|d\}| _| _}}W n t jy   td w |tkrJzt d|dd }W n t jy:   td w |d d | _| jsIt	dnt	d	|f | jsXt	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   rD   rI   errorr   WAVE_FORMAT_PCMrG   r   r    rL   rO   )r#   r%   Z
wFormatTagZdwAvgBytesPerSecZwBlockAlign	sampwidthr   r   r   r      s*   $
zWave_read._read_fmt_chunkN)r   r	   r
   r&   r1   r6   r9   r=   r?   rA   r.   rC   rE   rF   rH   rJ   rM   rP   rQ   rS   rY   r\   rg   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   r'   )Nwbr)   r/   r   r   r   r1   -  s   
zWave_write.__init__c                 C   s@   || _ d | _d| _d| _d| _d| _d| _d| _d| _d| _	d S )Nr   F)
r   r   rD   rG   rI   r!   _nframeswritten_datawritten_datalength_headerwrittenrB   r   r   r   r&   9  s   
zWave_write.initfpc                 C   r2   r3   r4   r5   r   r   r   r6   E  r7   zWave_write.__del__c                 C   r8   r3   r   r5   r   r   r   r9   H  r:   zWave_write.__enter__c                 G   r2   r3   r4   r;   r   r   r   r=   K  r7   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   rm   )rv   r   rD   )r#   	nchannelsr   r   r   setnchannelsQ  s
   
zWave_write.setnchannelsc                 C      | j std| j S )Nznumber of channels not set)rD   r   r5   r   r   r   rE   X     zWave_write.getnchannelsc                 C   s0   | j rtd|dk s|dkrtd|| _d S )Nry   r   r   rl   )rv   r   rG   )r#   rs   r   r   r   setsampwidth]  s
   
zWave_write.setsampwidthc                 C   r|   )Nzsample width not set)rG   r   r5   r   r   r   rH   d  r}   zWave_write.getsampwidthc                 C   s0   | j rtd|dkrtdtt|| _d S )Nry   r   zbad frame rate)rv   r   introundrI   )r#   	framerater   r   r   setframeratei  s
   zWave_write.setframeratec                 C   r|   )Nzframe rate not set)rI   r   r5   r   r   r   rJ   p  r}   zWave_write.getframeratec                 C   s   | j rtd|| _d S Nry   )rv   r   r!   )r#   re   r   r   r   
setnframesu  s   
zWave_write.setnframesc                 C   r>   r3   ru   r5   r   r   r   rF   z  r@   zWave_write.getnframesc                 C   s.   | j rtd|dvrtd|| _|| _d S )Nry   )rn   zunsupported compression type)rv   r   rL   rO   )r#   comptypecompnamer   r   r   setcomptype}  s   
zWave_write.setcomptypec                 C   r>   r3   rK   r5   r   r   r   rM     r@   zWave_write.getcomptypec                 C   r>   r3   rN   r5   r   r   r   rP     r@   zWave_write.getcompnamec                 C   sV   |\}}}}}}| j rtd| | | | | | | | | || d S r   )rv   r   r{   r~   r   r   r   )r#   paramsrz   rs   r   re   r   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)rD   rG   rI   r   r   r!   rL   rO   r5   r   r   r   rQ     s
   zWave_write.getparamsc                 C   rT   )Nzsetmark() not supportedrV   )r#   rX   r[   namer   r   r   setmark  rZ   zWave_write.setmarkc                 C   rT   rU   rV   rW   r   r   r   rY     rZ   zWave_write.getmarkc                 C   rR   r3   r   r5   r   r   r   rS     r:   zWave_write.getmarkersc                 C   r>   r3   r   r5   r   r   r   rC     r@   zWave_write.tellc                 C   s   t |ttfst|d}| t| t|| j| j  }| j	r'| 	|}| jdkr8t
jdkr8t|| j}| j| |  jt|7  _| j| | _d S )NBr   r^   )r+   bytes	bytearray
memoryviewcast_ensure_header_writtenrd   rG   rD   r   r`   ra   rb   rc   r   writerv   ru   )r#   rf   re   r   r   r   writeframesraw  s   
zWave_write.writeframesrawc                 C   s&   |  | | j| jkr|   d S d S r3   )r   rw   rv   _patchheader)r#   rf   r   r   r   writeframes  s   
zWave_write.writeframesc                 C   sz   z+| j r| d | j| jkr|   | j   W d | _ | j}|r*d | _|  d S d S d | _ | j}|r<d | _|  w w )Nr   )r   r   rw   rv   r   flushr*   r.   rB   r   r   r   r.     s&   


zWave_write.closec                 C   sB   | j s| js
td| jstd| jstd| | d S d S )Nz# channels not specifiedzsample width not specifiedzsampling rate not specified)rx   rD   r   rG   rI   _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y2   d | _Y nw | j t
dd| j dddt| j| j| j| j | j | j| j | jd d | jd ure| j  | _| j t
d	| j d
| _d S )Nr   z<L4s4sLHHLLHH4s$   r   r      rk   r   <LT)r   r   r!   rD   rG   rw   rC   _form_length_posAttributeErrorOSErrorro   packrr   rI   _data_length_posrx   )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   )
rv   rw   r   rC   r_   r   r   ro   r   r   )r#   Zcurposr   r   r   r     s   
zWave_write._patchheaderN)r   r	   r
   r1   r&   r6   r9   r=   r{   rE   r~   rH   r   rJ   r   rF   r   rM   rP   r   rQ   r   rY   rS   rC   r   r   r.   r   r   r   r   r   r   r   r     s<    

r   c                 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(   )wrt   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr   r   r   r   )r0   r   r   r   r   r     s   
r   r3   )r%   r   collectionsr   rb   r-   ro   r`   __all__	Exceptionr   rr   Z_array_fmtsr   r   r   r   r   r   r   r   <module>   s&    I 6 d