
    z%i.H                         	 d dl mZ d dlZ ej                  ed        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e      Zd Zd Z G d d      Z G d d      ZddZy)    )
namedtupleN)      )remove_sunau_paramsz7nchannels sampwidth framerate nframes comptype compnameidns.      r                              l    c                       e Zd Zy)ErrorN)__name__
__module____qualname__     9/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/sunau.pyr   r      s    r   r   c                 ~    d}t        d      D ],  }| j                  d      }|st        |dz  t        |      z   }. |S )Nr   r
   r      )rangereadEOFErrorord)filexibytes       r   	_read_u32r%      sH    	A1X yy|NcECI	
 Hr   c                     g }t        d      D ].  }t        |d      \  }}|j                  dt        |             |}0 | j	                  t        |             y )Nr
   r   r   )r   divmodinsertintwritebytes)r!   r"   datar#   dms         r   
_write_u32r/      sR    D1X a~1As1v 	JJuT{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y)Au_readc                     t        |t              rdd l}|j                  |d      }d| _        nd| _        | j                  |       y )Nr   rbTF
isinstancestrbuiltinsopen_openedinitfpselffr7   s      r   __init__zAu_read.__init__   8    aa&ADL DLAr   c                 >    | j                   r| j                          y y N_filecloser<   s    r   __del__zAu_read.__del__   s    ::JJL r   c                     | S rA   r   rE   s    r   	__enter__zAu_read.__enter__       r   c                 $    | j                          y rA   rD   r<   argss     r   __exit__zAu_read.__exit__       

r   c                 R   || _         d| _        t        t        |            }|t        k7  rt        d      t        t        |            | _        | j                  dk  rt        d      | j                  dkD  rt        d      t        |      | _        | j                  t        k7  rt        | j                        | _        t        t        |            | _	        | j                  t        vrt        d      | j                  t        t        fv rd| _        d	| _        n| j                  t        k(  rd	x| _        | _        nq| j                  t         k(  rdx| _        | _        nO| j                  t"        k(  rd
x| _        | _        n-| j                  t$        k(  rdx| _        | _        nt        d      t        t        |            | _        t        t        |            | _        | j(                  st        d      | j                  | j(                  z  | _        | j                  dkD  rH|j+                  | j                  dz
        | _        | j,                  j/                  d      \  | _        }}nd| _        	 |j1                         | _        y # t4        t6        f$ r
 d | _        Y y w xY w)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    r   )rC   	_soundposr)   r%   AUDIO_FILE_MAGICr   	_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)r<   r!   magic_s       r   r:   zAu_read.initfp   s   
IdO$$$*++Yt_->>B/00>>C899#D/??00!$//2DOYt_->>!22677>>9,. .DODO^^;;011DOdo^^<<011DOdo^^<<011DOdo^^<<011DOdo*++io.io.+,,//DOO;>>B4>>B#67DJ#zz33E:DJ1DJ	"!YY[DN( 	"!DN	"s   7J J&%J&c                     | j                   S rA   )rC   rE   s    r   getfpzAu_read.getfp   s    zzr   c                     | j                   S rA   )rc   rE   s    r   getnchannelszAu_read.getnchannels       r   c                     | j                   S rA   )r\   rE   s    r   getsampwidthzAu_read.getsampwidth   rp   r   c                     | j                   S rA   )rb   rE   s    r   getframeratezAu_read.getframerate   rp   r   c                     | j                   t        k(  rt        S | j                  t        v r| j                   | j                  z  S y)Nr   )rV   rW   rX   rY   r]   rE   s    r   
getnframeszAu_read.getnframes   s8    ??00%%>>..??doo55r   c                 T    | j                   t        k(  ry| j                   t        k(  ryy)NULAWALAWNONErX   rZ   r[   rE   s    r   getcomptypezAu_read.getcomptype   s%    >>88^^99r   c                 T    | j                   t        k(  ry| j                   t        k(  ryy)NCCITT G.711 u-lawCCITT G.711 A-lawnot compressedr{   rE   s    r   getcompnamezAu_read.getcompname   s%    >>88&^^99&#r   c           	          t        | j                         | j                         | j                         | j	                         | j                         | j                               S rA   r   ro   rr   rt   rv   r|   r   rE   s    r   	getparamszAu_read.getparams  Q    T..0$2C2C2E##%t'8""$d&6&6&8: 	:r   c                      y rA   r   rE   s    r   
getmarkerszAu_read.getmarkers  s    r   c                     t        d      )Nzno marks)r   )r<   ids     r   getmarkzAu_read.getmark  s    Jr   c                    | j                   t        v r|t        k(  r| j                  j	                         }n(| j                  j	                  || j
                  z        }| xj                  t        |      | j
                  z  z  c_        | j                   t        k(  rXt        j                         5  t        j                  dt               dd l}d d d        j                  || j                        }|S y # 1 sw Y   (xY w)Nignorecategoryr   )rX   rY   rW   rC   r   r]   rS   lenrZ   warningscatch_warningssimplefilterDeprecationWarningaudioopulaw2linr\   )r<   nframesr,   r   s       r   
readframeszAu_read.readframes  s    >>..,,zz(zzw'@ANNc$i4??::N~~!<<,,. #))(=OP"# ''doo>K# #s   1 C88Dc                     | j                   t        d      | j                  j                  | j                          d| _        y )Ncannot seekr   )rg   ri   rC   seekrS   rE   s    r   rewindzAu_read.rewind   s2    >>!-((

'r   c                     | j                   S rA   )rS   rE   s    r   rf   zAu_read.tell&      ~~r   c                     |dk  s|| j                         kD  rt        d      | j                  t        d      | j                  j                  | j                  || j                  z  z          || _        y )Nr   zposition not in ranger   )rv   r   rg   ri   rC   r   r]   rS   )r<   poss     r   setposzAu_read.setpos)  sa    7cDOO--/00>>!-((

t)>>?r   c                 j    | j                   }|r%d | _         | j                  r|j                          y y y rA   )rC   r9   rD   r<   r!   s     r   rD   zAu_read.close1  s/    zzDJ||

  r   N)r   r   r   r>   rF   rH   rN   r:   rm   ro   rr   rt   rv   r|   r   r   r   r   r   r   rf   r   rD   r   r   r   r1   r1      sg    ,"\$:
 r   r1   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y)Au_writec                     t        |t              rdd l}|j                  |d      }d| _        nd| _        | j                  |       y )Nr   wbTFr4   r;   s      r   r>   zAu_write.__init__:  r?   r   c                 J    | j                   r| j                          d | _         y rA   rB   rE   s    r   rF   zAu_write.__del__C  s    ::JJL
r   c                     | S rA   r   rE   s    r   rH   zAu_write.__enter__H  rI   r   c                 $    | j                          y rA   rK   rL   s     r   rN   zAu_write.__exit__K  rO   r   c                     || _         d| _        d| _        d| _        d| _        t
        | _        d| _        d| _        d| _	        d| _
        d| _        y )Nr   r   rx   )rC   rb   rc   r\   r]   rW   _nframes_nframeswritten_datawritten_datalengthrd   	_comptyper   s     r   r:   zAu_write.initfpN  sR    
* 
r   c                 ^    | j                   rt        d      |dvrt        d      || _        y )N0cannot change parameters after starting to write)r   r	   r
   z"only 1, 2, or 4 channels supported)r   r   rc   )r<   	nchannelss     r   setnchannelszAu_write.setnchannels[  s2    JKKI%<==#r   c                 H    | j                   st        d      | j                   S )Nznumber of channels not set)rc   r   rE   s    r   ro   zAu_write.getnchannelsb      455r   c                 ^    | j                   rt        d      |dvrt        d      || _        y )Nr   )r   r	   r   r
   zbad sample width)r   r   r\   )r<   	sampwidths     r   setsampwidthzAu_write.setsampwidthg  s2    JKKL(*++#r   c                 H    | j                   st        d      | j                  S )Nsample width not specified)rb   r   r\   rE   s    r   rr   zAu_write.getsampwidthn  r   r   c                 @    | j                   rt        d      || _        y )Nr   )r   r   rb   )r<   	framerates     r   setframeratezAu_write.setframerates  s    JKK#r   c                 H    | j                   st        d      | j                   S )Nzframe rate not set)rb   r   rE   s    r   rt   zAu_write.getframeratex  s    ,--r   c                 `    | j                   rt        d      |dk  rt        d      || _        y )Nr   r   z# of frames cannot be negative)r   r   r   )r<   r   s     r   
setnframeszAu_write.setnframes}  s1    JKKQ;899r   c                     | j                   S rA   r   rE   s    r   rv   zAu_write.getnframes      ###r   c                 0    |dv r|| _         y t        d      )N)rz   rx   zunknown compression type)r   r   )r<   typenames      r   setcomptypezAu_write.setcomptype  s    ##!DN233r   c                     | j                   S rA   r   rE   s    r   r|   zAu_write.getcomptype  r   r   c                 D    | j                   dk(  ry| j                   dk(  ryy)Nrx   r~   ry   r   r   r   rE   s    r   r   zAu_write.getcompname  s#    >>V#&^^v%&#r   c                     |\  }}}}}}| j                  |       | j                  |       | j                  |       | j                  |       | j	                  ||       y rA   )r   r   r   r   r   )r<   paramsr   r   r   r   comptypecompnames           r   	setparamszAu_write.setparams  sZ    GMD	9i(H)$)$)$ 8,r   c           	          t        | j                         | j                         | j                         | j	                         | j                         | j                               S rA   r   rE   s    r   r   zAu_write.getparams  r   r   c                     | j                   S rA   r   rE   s    r   rf   zAu_write.tell  r   r   c                 2   t        |t        t        f      st        |      j	                  d      }| j                          | j                  dk(  rXt        j                         5  t        j                  dt               dd l}d d d        j                  || j                        }t        |      | j                  z  }| j                   j#                  |       | j$                  |z   | _        | j&                  t        |      z   | _        y # 1 sw Y   xY w)NBrx   r   r   r   )r5   r+   	bytearray
memoryviewcast_ensure_header_writtenr   r   r   r   r   r   lin2ulawr\   r   r]   rC   r*   r   r   )r<   r,   r   r   s       r   writeframesrawzAu_write.writeframesraw  s    $	 23d#((-D##%>>V#((* %%h9KL ##D$//:Dd)t.

#33g= --D	9 s   $ DDc                     | j                  |       | j                  | j                  k7  s| j                  | j                  k7  r| j                          y y rA   )r   r   r   r   r   _patchheader)r<   r,   s     r   writeframeszAu_write.writeframes  sG    D!4==0""d&7&77 8r   c                    | j                   r	 | j                          | j                  | j                  k7  s| j                  | j
                  k7  r| j                          | j                   j                          | j                   }d | _         | j                  r|j                          y y y # | j                   }d | _         | j                  r|j                          w w xY wrA   )
rC   r   r   r   r   r   r   flushr9   rD   r   s     r   rD   zAu_write.close  s    ::
!++-''4==8((D,=,==%%'

  "zz!
<<JJL    zz!
<<JJL  s   A,B, ,2Cc                     | j                   sV| j                  st        d      | j                  st        d      | j                  st        d      | j                          y y )Nz# of channels not specifiedr   zframe rate not specified)r   rc   r   r\   rb   _write_headerrE   s    r   r   zAu_write._ensure_header_written  sU    ##??9::??899??677  $r   c                    | j                   dk(  r| j                  dk(  rt        }d| _        n| j                  dk(  rt        }d| _        nm| j                  dk(  rt
        }d| _        nP| j                  dk(  rt        }d| _        n3t        d      | j                   dk(  rt        }d| _        nt        d      | j                  | j                  z  | _        t        | j                  t               dt        | j                        z   }|d	z   d
z  }t        | j                  |       | j                  t         k(  rt         }n| j                  | j                  z  }	 | j                  j#                         | _        t        | j                  |       || _        t        | j                  |       t        | j                  | j,                         t        | j                  | j                         | j                  j/                  | j                         | j                  j/                  d|t        | j                        z
  dz
  z         y # t&        t(        f$ r
 d | _        Y w xY w)Nrz   r   r	   r   r
   zinternal errorrx   r   r   irR   r   )r   r\   r^   r]   r_   r`   ra   r   rZ   rc   r/   rC   rT   r   rd   r   rW   rf   _form_length_posrh   ri   r   rb   r*   )r<   encodingheader_sizelengths       r   r   zAu_write._write_header  s   >>V#!#7"#A%8"#A%8"#A%8"#,--^^v%2HDO())//DOO;4::/03tzz?*"Q",4::{+==..'F]]T__4F	)$(JJOO$5D! 	4::v&!4::x(4::t/4::t/

$

c$**o = BCD ( 	)$(D!	)s   I I! I!c                    | j                   t        d      | j                  j                  | j                          t	        | j                  | j
                         | j
                  | _        | j                  j                  dd       y )Nr   r   r	   )r   ri   rC   r   r/   r   r   rE   s    r   r   zAu_write._patchheader  sc      (-((

--.4::t001,,

1r   N)r   r   r   r>   rF   rH   rN   r:   r   ro   r   rr   r   rt   r   rv   r   r|   r   r   r   rf   r   r   rD   r   r   r   r   r   r   r   r   8  s    
 $
$
$

 $4$-:
$: !$!(ETr   r   c                     |t        | d      r| j                  }nd}|dv rt        |       S |dv rt        |       S t	        d      )Nmoder3   )rr3   )wr   z$mode must be 'r', 'rb', 'w', or 'wb')hasattrr   r1   r   r   )r=   r   s     r   r8   r8   
  sO    |1f66DD{qz		{:;;r   rA   )collectionsr   r   _deprecatedr   r   rT   rZ   r^   r_   r`   ra   AUDIO_FILE_ENCODING_FLOATAUDIO_FILE_ENCODING_DOUBLEAUDIO_FILE_ENCODING_ADPCM_G721AUDIO_FILE_ENCODING_ADPCM_G722 AUDIO_FILE_ENCODING_ADPCM_G723_3 AUDIO_FILE_ENCODING_ADPCM_G723_5r[   rW   rY   	Exceptionr   r%   r/   r1   r   r8   r   r   r   <module>r      s   gR #    Xg . ?TV      !  !  !   !# !# #%  #%      01222/1 	I 	V VpP Pd<r   