
    z%iX                         	 d dl mZ d dlZd dlZd dlZg dZ G d de      ZdZdZ	dZ
d	Z ed
d      Zd Z G d d      Z G d d      Z G d d      ZddZy)    )
namedtupleN)openError	Wave_read
Wave_writec                       e Zd Zy)r   N)__name__
__module____qualname__     8/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/wave.pyr   r   R   s    r   r      i  s            8q)NbhNi_wave_paramsz7nchannels sampwidth framerate nframes comptype compnamec                     t        t        |             }t        dt        |       |      D ]&  }t        |      D ]  }| ||z      |||z   dz
  |z
  <    ( t        |      S )Nr   r   )	bytearraylenrangebytes)datawidthswapped_datar   js        r   	_byteswapr   `   sk    SY'L1c$i' :u 	:A.21q5kLUQ*+	:: r   c                   <    e Zd Zd	dZd Zd Zd
dZd ZddZd Z	y)_Chunkc                    d| _         || _        |rd}nd}|| _        |j                  d      | _        t        | j                        dk  rt        	 t        j                  |dz   |j                  d            d   | _	        |r| j                  dz
  | _	        d| _        	 | j                  j                         | _        d| _        y # t        j                  $ r t        d w xY w# t        t         f$ r
 d| _        Y y w xY w)	NF><   Lr      T)closedalignfileread	chunknamer   EOFErrorstructunpack_from	chunksizeerror	size_readtelloffsetseekableAttributeErrorOSError)selfr(   r'   	bigendian
inclheaderstrflags         r   __init__z_Chunk.__init__k   s    
GG	1t~~"N	%#//TYYq\J1MDN !^^a/DN	!))..*DK !DM || 	%$	% ( 	"!DM	"s   0C  C% C"%C>=C>c                     	 | j                   S N)r*   r6   s    r   getnamez_Chunk.getname   s    8~~r   c                 f    | j                   s	 | j                          d| _         y y # d| _         w xY w)NT)r&   skipr=   s    r   closez_Chunk.close   s.    {{#		"	  #s   ' 	0c                 H   	 | j                   rt        d      | j                  st        d      |dk(  r|| j                  z   }n|dk(  r|| j
                  z   }|dk  s|| j
                  kD  rt        | j                  j                  | j                  |z   d       || _        y )NI/O operation on closed filezcannot seekr      r   )
r&   
ValueErrorr3   r5   r0   r.   RuntimeErrorr(   seekr2   )r6   poswhences      r   rG   z_Chunk.seek   s    	
 ;;;<<}}-((Q;&Cq[&C7cDNN*		t{{S(!,r   c                 H    | j                   rt        d      | j                  S )NrC   )r&   rE   r0   r=   s    r   r1   z_Chunk.tell   s    ;;;<<~~r   c                 X   	 | j                   rt        d      | j                  | j                  k\  ry|dk  r| j                  | j                  z
  }|| j                  | j                  z
  kD  r| j                  | j                  z
  }| j                  j                  |      }| j                  t        |      z   | _        | j                  | j                  k(  rS| j                  rG| j                  dz  r8| j                  j                  d      }| j                  t        |      z   | _        |S )NrC   r   r   r   )r&   rE   r0   r.   r(   r)   r   r'   )r6   sizer   dummys       r   r)   z_Chunk.read   s    	
 ;;;<<>>T^^+!8>>DNN2D$..4>>11>>DNN2Dyy~~d##d)3>>T^^+::NNQIINN1%E!^^c%j8DNr   c                     	 | j                   rt        d      | j                  rk	 | j                  | j                  z
  }| j
                  r| j                  dz  r|dz   }| j                  j                  |d       | j                  |z   | _        y | j                  | j                  k  rWt        d| j                  | j                  z
        }| j                  |      }|st        | j                  | j                  k  rVy y # t        $ r Y |w xY w)NrC   r   i    )r&   rE   r3   r.   r0   r'   r(   rG   r5   minr)   r+   )r6   nrM   s      r   r@   z_Chunk.skip   s    	 ;;;<<==	NNT^^3::4>>A#5AA		q!$!%!!3 nnt~~-D$..4>>9:AIIaLE	 nnt~~-  s   A)D 	DDN)TTF)r   ))
r	   r
   r   r:   r>   rA   rG   r1   r)   r@   r   r   r   r   r   j   s%    !2#&
.r   r   c                       e 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d Zd Zd Zd Zd Zd Zd Zd Zy)r   c                    d | _         d| _        t        |d      | _        | j                  j	                         dk7  rt        d      | j                  j                  d      dk7  rt        d      d| _        d | _        	 d| _	        	 t        | j                  d      }|j	                         }|d	k(  r| j                  |       d| _        nI|d
k(  rD| j                  st        d      || _        |j                  | j                  z  | _        d| _	        n|j                          | j                  r| j                  st        d      y # t        $ r Y /w xY w)Nr   )r7      RIFFz file does not start with RIFF idr#      WAVEznot a WAVE filer      fmt    datazdata chunk before fmt chunkz#fmt chunk and/or data chunk missing)_convert	_soundposr   _filer>   r   r)   _fmt_chunk_read_data_chunk_data_seek_neededr+   _read_fmt_chunkr.   
_framesize_nframesr@   )r6   r(   chunkr*   s       r   initfpzWave_read.initfp   sE   Da0
::7*:;;::??1()** %&D"tzzq9 IG#$$U+'($g%++ =>>#(  %4?? B)*&JJL# $ ##4+;+;=>> ,<  s   	E 	EEc                     d | _         t        |t              rt        j                  |d      }|| _         	 | j                  |       y #  | j                   r|j                           xY w)Nrb_i_opened_the_file
isinstancestrbuiltinsr   rb   rA   r6   fs     r   r:   zWave_read.__init__  sX    "&aa&A&'D#	KKN	&&	   A A'c                 $    | j                          y r<   rA   r=   s    r   __del__zWave_read.__del__$      

r   c                     | S r<   r   r=   s    r   	__enter__zWave_read.__enter__'      r   c                 $    | j                          y r<   rn   r6   argss     r   __exit__zWave_read.__exit__*  rp   r   c                     | j                   S r<   )rZ   r=   s    r   getfpzWave_read.getfp0  s    zzr   c                      d| _         d| _        y )Nr   r   )r]   rY   r=   s    r   rewindzWave_read.rewind3  s    !"r   c                 ^    d | _         | j                  }|rd | _        |j                          y y r<   )rZ   rf   rA   r6   r(   s     r   rA   zWave_read.close7  s-    
&&&*D#JJL r   c                     | j                   S r<   )rY   r=   s    r   r1   zWave_read.tell>      ~~r   c                     | j                   S r<   )
_nchannelsr=   s    r   getnchannelszWave_read.getnchannelsA      r   c                     | j                   S r<   )r`   r=   s    r   
getnframeszWave_read.getnframesD  s    }}r   c                     | j                   S r<   )
_sampwidthr=   s    r   getsampwidthzWave_read.getsampwidthG  r   r   c                     | j                   S r<   )
_framerater=   s    r   getframeratezWave_read.getframerateJ  r   r   c                     | j                   S r<   	_comptyper=   s    r   getcomptypezWave_read.getcomptypeM  r   r   c                     | j                   S r<   	_compnamer=   s    r   getcompnamezWave_read.getcompnameP  r   r   c           	          t        | j                         | j                         | j                         | j	                         | j                         | j                               S r<   )r   r   r   r   r   r   r   r=   s    r   	getparamszWave_read.getparamsS  sQ    D--/1B1B1D((*DOO,='')4+;+;+=? 	?r   c                      y r<   r   r=   s    r   
getmarkerszWave_read.getmarkersX      r   c                     t        d      Nzno marksr   r6   ids     r   getmarkzWave_read.getmark[      Jr   c                 ^    |dk  s|| j                   kD  rt        d      || _        d| _        y )Nr   zposition not in ranger   )r`   r   rY   r]   )r6   rH   s     r   setposzWave_read.setpos^  s/    7cDMM)/00!"r   c                 J   | j                   rZ| j                  j                  dd       | j                  | j                  z  }|r| j                  j                  |d       d| _         |dk(  ry| j                  j                  || j                  z        }| j                  dk7  r)t        j                  dk(  rt        || j                        }| j                  r|r| j                  |      }| j                  t        |      | j                  | j                  z  z  z   | _        |S )Nr   r   r   big)r]   r\   rG   rY   r_   r)   r   sys	byteorderr   rX   r   r   )r6   nframesrH   r   s       r   
readframeszWave_read.readframesd  s    !!!!!Q'..4??2C  %%c1-%&D"a<$$Wt%>???aCMMU$:T4??3D==T==&D#d)$//8Y*ZZr   c                    	 t        j                  d|j                  d            \  }| _        | _        }}|t        k7  r|t        k7  rt        d|      	 t        j                  d|j                  d            d   }|t        k(  r~	 t        j                  d|j                  d            \  }}}|j                  d	      }	t        |	      d	k  rt        	 |	t        k7  r%	 dd l}
d
|
j                  |	       }t        |      |dz   dz  | _        | j                  st        d      | j                  st        d      | j                  | j                  z  | _        d| _        d| _        y # t         j
                  $ r t        d w xY w# t         j
                  $ r t        d w xY w# t         j
                  $ r t        d w xY w# t        $ r d}Y t        |      w xY w)Nz<HHLLH   zunknown format: z<HrD   r   z<HHLr%      zunknown extended format: )bytes_lezunknown extended format   bad sample widthbad # of channelsNONEznot compressed)r,   r-   r)   r   r   r/   r+   WAVE_FORMAT_PCMWAVE_FORMAT_EXTENSIBLEr   r   KSDATAFORMAT_SUBTYPE_PCMuuidUUID	Exceptionr   r_   r   r   )r6   ra   
wFormatTagdwAvgBytesPerSecwBlockAlign	sampwidthcbSizewValidBitsPerSampledwChannelMask	SubFormatr   subformat_msgs               r   r^   zWave_read._read_fmt_chunky  s   	%Z`ZlZlmuw|  xB  xB  CE  xF  [GWJ:JK (Z;Q-Q
<==	%**4A?BI //)=C=O=OPVX]XbXbcdXe=f:+]!JJrN	y>B&"N ' 44>&?		S\	@]?^$_M M**$q=Q.*+++,,//DOO;)? || 	%$	% || 	%$	% << )D() ! >$=MM**>s6   5E/ (F 
AF+ #G	 /F
F(+G	G! G!N)r	   r
   r   rb   r:   ro   rr   rw   ry   r{   rA   r1   r   r   r   r   r   r   r   r   r   r   r   r^   r   r   r   r   r      sp    <?>?
 #*"*r   r   c                       e 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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y)r   c                     d | _         t        |t              rt        j                  |d      }|| _         	 | j                  |       y #  | j                   r|j                           xY w)Nwbre   rj   s     r   r:   zWave_write.__init__  sX    "&aa&A&'D#	KKN	&&	rl   c                     || _         d | _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        y )Nr   F)
rZ   rX   r   r   r   r`   _nframeswritten_datawritten_datalength_headerwrittenr}   s     r   rb   zWave_write.initfp  sL    
 #r   c                 $    | j                          y r<   rn   r=   s    r   ro   zWave_write.__del__  rp   r   c                     | S r<   r   r=   s    r   rr   zWave_write.__enter__  rs   r   c                 $    | j                          y r<   rn   ru   s     r   rw   zWave_write.__exit__  rp   r   c                 `    | j                   rt        d      |dk  rt        d      || _        y )N0cannot change parameters after starting to writer   r   )r   r   r   )r6   	nchannelss     r   setnchannelszWave_write.setnchannels  s1    JKKq=+,,#r   c                 H    | j                   st        d      | j                   S )Nznumber of channels not set)r   r   r=   s    r   r   zWave_write.getnchannels  s    455r   c                 j    | j                   rt        d      |dk  s|dkD  rt        d      || _        y )Nr   r   r#   r   )r   r   r   )r6   r   s     r   setsampwidthzWave_write.setsampwidth  s7    JKKq=IM*++#r   c                 H    | j                   st        d      | j                   S )Nzsample width not set)r   r   r=   s    r   r   zWave_write.getsampwidth  s    .//r   c                     | j                   rt        d      |dk  rt        d      t        t        |            | _        y )Nr   r   zbad frame rate)r   r   introundr   )r6   	framerates     r   setframeratezWave_write.setframerate  s;    JKK>())eI./r   c                 H    | j                   st        d      | j                   S )Nzframe rate not set)r   r   r=   s    r   r   zWave_write.getframerate  s    ,--r   c                 @    | j                   rt        d      || _        y Nr   )r   r   r`   )r6   r   s     r   
setnframeszWave_write.setnframes   s    JKKr   c                     | j                   S r<   r   r=   s    r   r   zWave_write.getnframes      ###r   c                 l    | j                   rt        d      |dvrt        d      || _        || _        y )Nr   )r   zunsupported compression type)r   r   r   r   )r6   comptypecompnames      r   setcomptypezWave_write.setcomptype  s9    JKK9$677!!r   c                     | j                   S r<   r   r=   s    r   r   zWave_write.getcomptype  r   r   c                     | j                   S r<   r   r=   s    r   r   zWave_write.getcompname  r   r   c                     |\  }}}}}}| j                   rt        d      | j                  |       | j                  |       | j	                  |       | j                  |       | j                  ||       y r   )r   r   r   r   r   r   r   )r6   paramsr   r   r   r   r   r   s           r   	setparamszWave_write.setparams  so    GMD	9i(HJKK)$)$)$ 8,r   c                     | j                   r| j                  r| j                  st        d      t	        | j                   | j                  | j                  | j
                  | j                  | j                        S )Nznot all parameters set)r   r   r   r   r   r`   r   r   r=   s    r   r   zWave_write.getparams   sS    dooT__011DOOT__doommT^^T^^= 	=r   c                     t        d      )Nzsetmark() not supportedr   )r6   r   rH   names       r   setmarkzWave_write.setmark&  s    -..r   c                     t        d      r   r   r   s     r   r   zWave_write.getmark)  r   r   c                      y r<   r   r=   s    r   r   zWave_write.getmarkers,  r   r   c                     | j                   S r<   r   r=   s    r   r1   zWave_write.tell/  r   r   c                 &   t        |t        t        f      st        |      j	                  d      }| j                  t        |             t        |      | j                  | j                  z  z  }| j                  r| j                  |      }| j                  dk7  r)t        j                  dk(  rt        || j                        }| j                  j                  |       | xj                  t        |      z  c_        | j                   |z   | _        y )NBr   r   )rg   r   r   
memoryviewcast_ensure_header_writtenr   r   r   rX   r   r   r   rZ   writer   r   )r6   r   r   s      r   writeframesrawzWave_write.writeframesraw2  s    $	 23d#((-D##CI.d)$// AB====&D??aCMMU$:T4??3D

SY&#33g=r   c                 z    | j                  |       | j                  | j                  k7  r| j                          y y r<   )r   r   r   _patchheader)r6   r   s     r   writeframeszWave_write.writeframes?  s5    D!t000 1r   c                    	 | j                   rT| j                  d       | j                  | j                  k7  r| j	                          | j                   j                          d | _         | j                  }|rd | _        |j                          y y # d | _         | j                  }|rd | _        |j                          w w xY w)Nr   )rZ   r   r   r   r   flushrf   rA   r}   s     r   rA   zWave_write.closeD  s    	zz++A.##t'8'88%%'

  "DJ**D*.'

  DJ**D*.'

 s   A B /B?c                     | j                   sW| j                  st        d      | j                  st        d      | j                  st        d      | j                  |       y y )Nz# channels not specifiedzsample width not specifiedzsampling rate not specified)r   r   r   r   r   _write_header)r6   datasizes     r   r   z!Wave_write._ensure_header_writtenV  sW    ""??677??899??9::x( #r   c                    | j                   j                  d       | j                  s!|| j                  | j                  z  z  | _        | j                  | j                  z  | j                  z  | _        	 | j                   j                         | _        | j                   j                  t        j                  dd| j
                  z   dddt        | j                  | j                  | j                  | j                  z  | j                  z  | j                  | j                  z  | j                  dz  d             | j                  | j                   j                         | _        | j                   j                  t        j                  d	| j
                               d
| _        y # t        t        f$ r d | _        Y +w xY w)NrT   z<L4s4sLHHLLHH4s$   rU   rV   r   r%   rW   <LT)rZ   r   r`   r   r   r   r1   _form_length_posr4   r5   r,   packr   r   _data_length_posr   )r6   
initlengths     r   r   zWave_write._write_header`  sP   

!}}&4??T__+LMDM==4??:T__L	)$(JJOO$5D! 	

%6!!!7GRT__dooOOdoo-?OOdoo-OOa* 	+   ,$(JJOO$5D!

T4+;+;<=" ( 	)$(D!	)s   5F& &G ?G c                 H   | j                   | j                  k(  ry | j                  j                         }| j                  j	                  | j
                  d       | j                  j                  t        j                  dd| j                   z                | j                  j	                  | j                  d       | j                  j                  t        j                  d| j                                | j                  j	                  |d       | j                   | _        y )Nr   r   r   )
r   r   rZ   r1   rG   r   r   r,   r  r  )r6   curposs     r   r   zWave_write._patchheaderu  s     0 00"

--q1

T20A0A+ABC

--q1

T4+<+<=>

",,r   N)r	   r
   r   r:   rb   ro   rr   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r1   r   r   rA   r   r   r   r   r   r   r   r     s    2

$$
$
0
 
$"-=/ $> 
$)#*
-r   r   c                     |t        | d      r| j                  }nd}|dv rt        |       S |dv rt        |       S t	        d      )Nmoderd   )rrd   )wr   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr  r   r   r   )rk   r  s     r   r   r     sO    |1f66DD{|		!}:;;r   r<   )collectionsr   ri   r,   r   __all__r   r   r   r   r   _array_fmtsr   r   r   r   r   r   r   r   r   <module>r     s   GR #   
 7	I 	  X '.NPl l^B* B*Ja- a-H<r   