B
    u9a5G                 @   s   d dl Z dddddgZG dd deZdZd	Zd dlZd dlZd dlZd d
l	m
Z
 d dlmZ d dlZeddZG dd dZG dd dZdddZdddZdS )    NopenopenfpError	Wave_read
Wave_writec               @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r
   r
   /usr/lib/python3.7/wave.pyr   N   s      )NbhNi)Chunk)
namedtuple_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 | _xd| _	yt| jdd}W n t
k
r   P Y nX | }|d	kr| | d| _n2|d
kr| jstd|| _|j| j | _d| _	P |  qVW | jr| jstdd S )Nr   )Z	bigendians   RIFFz file does not start with RIFF id   s   WAVEznot a WAVE filer   s   fmt s   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_chunkZ	chunksize
_framesize_nframesskip)selffilechunkZ	chunknamer
   r
   r   initfp~   s:    
zWave_read.initfpc             C   sR   d | _ t|tr"t|d}|| _ y| | W n   | j rF|   Y nX 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 )Nr
   )r   r
   r
   r   	__enter__   s    zWave_read.__enter__c             G   s   |    d S )N)r(   )r   argsr
   r
   r   __exit__   s    zWave_read.__exit__c             C   s   | j S )N)r   )r   r
   r
   r   getfp   s    zWave_read.getfpc             C   s   d| _ d| _d S )Nr   r   )r   r   )r   r
   r
   r   rewind   s    zWave_read.rewindc             C   s"   d | _ | j}|rd | _|  d S )N)r   r$   r(   )r   r    r
   r
   r   r(      s
    zWave_read.closec             C   s   | j S )N)r   )r   r
   r
   r   tell   s    zWave_read.tellc             C   s   | j S )N)
_nchannels)r   r
   r
   r   getnchannels   s    zWave_read.getnchannelsc             C   s   | j S )N)r   )r   r
   r
   r   
getnframes   s    zWave_read.getnframesc             C   s   | j S )N)
_sampwidth)r   r
   r
   r   getsampwidth   s    zWave_read.getsampwidthc             C   s   | j S )N)
_framerate)r   r
   r
   r   getframerate   s    zWave_read.getframeratec             C   s   | j S )N)	_comptype)r   r
   r
   r   getcomptype   s    zWave_read.getcomptypec             C   s   | j S )N)	_compname)r   r
   r
   r   getcompname   s    zWave_read.getcompnamec             C   s*   t |  |  |  |  |  |  S )N)r   r3   r6   r8   r4   r:   r<   )r   r
   r
   r   	getparams   s    zWave_read.getparamsc             C   s   d S )Nr
   )r   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   r5   sys	byteorderaudioopbyteswapr   lenr2   )r   nframesrA   datar
   r
   r   
readframes   s    

zWave_read.readframesc             C   s   y$t d|d\}| _| _}}W n t jk
r@   td Y nX |tkryt d|dd }W n t jk
r   td Y nX |d d | _| jst	dnt	d	|f | jst	d
| j| j | _
d| _d| _d S )Nz<HHLLH   z<H   r         zbad sample widthzunknown format: %rzbad # of channelsNONEznot compressed)structunpack_fromr   r2   r7   errorr   WAVE_FORMAT_PCMr5   r   r   r9   r;   )r   r!   Z
wFormatTagZdwAvgBytesPerSecZwBlockAlign	sampwidthr
   r
   r   r      s$    $
zWave_read._read_fmt_chunkN)r   r   r	   r"   r*   r+   r,   r.   r/   r0   r(   r1   r3   r4   r6   r8   r:   r<   r=   r>   r@   rB   rM   r   r
   r
   r
   r   r   _   s*   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}|| _ y| | W n   | j rF|   Y nX d S )Nwb)r$   r%   r&   r'   r   r"   r(   )r   r)   r
   r
   r   r*   .  s    
zWave_write.__init__c             C   s@   || _ d | _d| _d| _d| _d| _d| _d| _d| _d| _	d S )Nr   F)
r   r   r2   r5   r7   r   _nframeswritten_datawritten_datalength_headerwritten)r   r    r
   r
   r   r"   :  s    zWave_write.initfpc             C   s   |    d S )N)r(   )r   r
   r
   r   r+   F  s    zWave_write.__del__c             C   s   | S )Nr
   )r   r
   r
   r   r,   I  s    zWave_write.__enter__c             G   s   |    d S )N)r(   )r   r-   r
   r
   r   r.   L  s    zWave_write.__exit__c             C   s(   | j rtd|dk rtd|| _d S )Nz0cannot change parameters after starting to writer   zbad # of channels)rZ   r   r2   )r   	nchannelsr
   r
   r   setnchannelsR  s
    zWave_write.setnchannelsc             C   s   | j std| j S )Nznumber of channels not set)r2   r   )r   r
   r
   r   r3   Y  s    zWave_write.getnchannelsc             C   s0   | j rtd|dk s|dkr&td|| _d S )Nz0cannot change parameters after starting to writer   r   zbad sample width)rZ   r   r5   )r   rW   r
   r
   r   setsampwidth^  s
    zWave_write.setsampwidthc             C   s   | j std| j S )Nzsample width not set)r5   r   )r   r
   r
   r   r6   e  s    zWave_write.getsampwidthc             C   s0   | j rtd|dkrtdtt|| _d S )Nz0cannot change parameters after starting to writer   zbad frame rate)rZ   r   introundr7   )r   	framerater
   r
   r   setframeratej  s
    zWave_write.setframeratec             C   s   | j std| j S )Nzframe rate not set)r7   r   )r   r
   r
   r   r8   q  s    zWave_write.getframeratec             C   s   | j rtd|| _d S )Nz0cannot change parameters after starting to write)rZ   r   r   )r   rK   r
   r
   r   
setnframesv  s    zWave_write.setnframesc             C   s   | j S )N)rY   )r   r
   r
   r   r4   {  s    zWave_write.getnframesc             C   s.   | j rtd|dkrtd|| _|| _d S )Nz0cannot change parameters after starting to write)rR   zunsupported compression type)rZ   r   r9   r;   )r   comptypecompnamer
   r
   r   setcomptype~  s    zWave_write.setcomptypec             C   s   | j S )N)r9   )r   r
   r
   r   r:     s    zWave_write.getcomptypec             C   s   | j S )N)r;   )r   r
   r
   r   r<     s    zWave_write.getcompnamec             C   sV   |\}}}}}}| j rtd| | | | | | | | | || d S )Nz0cannot change parameters after starting to write)rZ   r   r^   r_   rc   rd   rg   )r   paramsr]   rW   rb   rK   re   rf   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)r2   r5   r7   r   r   r   r9   r;   )r   r
   r
   r   r=     s    zWave_write.getparamsc             C   s   t dd S )Nzsetmark() not supported)r   )r   r?   rA   namer
   r
   r   setmark  s    zWave_write.setmarkc             C   s   t dd S )Nzno marks)r   )r   r?   r
   r
   r   r@     s    zWave_write.getmarkc             C   s   d S )Nr
   )r   r
   r
   r   r>     s    zWave_write.getmarkersc             C   s   | j S )N)rY   )r   r
   r
   r   r1     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   rD   )r%   bytes	bytearray
memoryviewcast_ensure_header_writtenrJ   r5   r2   r   rF   rG   rH   rI   r   writerZ   rY   )r   rL   rK   r
   r
   r   writeframesraw  s    
zWave_write.writeframesrawc             C   s"   |  | | j| jkr|   d S )N)rs   r[   rZ   _patchheader)r   rL   r
   r
   r   writeframes  s    
zWave_write.writeframesc             C   sX   z2| j r0| d | j| jkr&|   | j   W d d | _ | j}|rRd | _|  X d S )Nr   )r   rq   r[   rZ   rt   flushr$   r(   )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)r\   r2   r   r5   r7   _write_header)r   Zdatasizer
   r
   r   rq     s    z!Wave_write._ensure_header_writtenc             C   s   | j d | js$|| j| j  | _| j| j | j | _y| j  | _W n tt	fk
rf   d | _Y nX | j t
dd| j dddt| j| j| j| j | j | j| j | jd d | jd k	r| j  | _| j t
d	| j d
| _d S )Ns   RIFFz<L4s4sLHHLLHH4s$   s   WAVEs   fmt    rQ   s   dataz<LT)r   rr   r   r2   r5   r[   r1   _form_length_posAttributeErrorOSErrorrS   packrV   r7   _data_length_posr\   )r   Z
initlengthr
   r
   r   rw     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   z<Lrx   )
rZ   r[   r   r1   rE   rz   rr   rS   r}   r~   )r   Zcurposr
   r
   r   rt     s    
zWave_write._patchheaderN)r   r   r	   r*   r"   r+   r,   r.   r^   r3   r_   r6   rc   r8   rd   r4   rg   r:   r<   ri   r=   rk   r@   r>   r1   rs   ru   r(   rq   rw   rt   r
   r
   r
   r   r     s8   

c             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#   )rr#   )wrX   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr   r   r   r   )r)   r   r
   r
   r   r     s    
c             C   s   t jdtdd t| |dS )NzBwave.openfp is deprecated since Python 3.7. Use wave.open instead.rO   )
stacklevel)r   )warningswarnDeprecationWarningr   )r)   r   r
   r
   r   r     s    
)N)N)r'   __all__	Exceptionr   rV   Z_array_fmtsrH   rS   rF   r!   r   collectionsr   r   r   r   r   r   r   r
   r
   r
   r   <module>J   s$    6 d
