a �DOg�F�@s�ddlmZedd�ZdZdZdZdZdZd Zd Z d Z d Z d Z dZ dZdZdZeeeeeegZGdd�de�Zdd�Zdd�ZGdd�d�ZGdd�d�Zddd�ZdS) �)� namedtuple� _sunau_paramsz7nchannels sampwidth framerate nframes comptype compnameidns.������������l��c@s eZdZdS)�ErrorN)�__name__� __module__� __qualname__�rr�/usr/lib64/python3.9/sunau.pyr�srcCs8d}td�D]&}|�d�}|s"t�|dt|�}q |S)Nrrr�)�range�read�EOFError�ord)�file�x�iZbyterrr� _read_u32�s  rcCsFg}td�D]&}t|d�\}}|�dt|��|}q |�t|��dS)Nrrr)r�divmod�insert�int�write�bytes)rr�datar�d�mrrr� _write_u32�s  r'c@s�eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)S)*�Au_readcCs@t|�td�kr,ddl}|�|d�}d|_nd|_|�|�dS)N�r�rbTF��type�builtins�open�_opened�initfp��self�fr-rrr�__init__�s  zAu_read.__init__cCs|jr|��dS�N��_file�close�r2rrr�__del__�szAu_read.__del__cCs|Sr5rr9rrr� __enter__�szAu_read.__enter__cGs |��dSr5�r8�r2�argsrrr�__exit__�szAu_read.__exit__c Cs�||_d|_tt|��}|tkr(td��tt|��|_|jdkrHtd��|jdkrZtd��t|�|_|jtkrzt|j�|_tt|��|_ |j t vr�td��|j t t fvr�d|_ d |_nj|j tkr�d |_|_ nR|j tkr�d|_|_ n:|j tkr�d |_|_ n"|j tk�rd |_|_ ntd ��tt|��|_tt|��|_|j�sLtd ��|j|j|_|jdk�r�|�|jd�|_|j�d�\|_}}nd|_z|��|_Wnttf�y�d|_Yn0dS)Nrzbad magic numberr zheader size too small�dzheader size ridiculously largezencoding not (yet) supportedrrrrzunknown encodingzbad # of channels��)r7� _soundposr!r�AUDIO_FILE_MAGICrZ _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)r2r�magic�_rrrr0�sV       �     zAu_read.initfpcCs|jSr5)r7r9rrr�getfp�sz Au_read.getfpcCs|jSr5)rRr9rrr� getnchannels�szAu_read.getnchannelscCs|jSr5)rKr9rrr� getsampwidth�szAu_read.getsampwidthcCs|jSr5)rQr9rrr� getframerate�szAu_read.getframeratecCs(|jtkrtS|jtvr$|j|jSdS�Nr)rErFrGrHrLr9rrr� getnframes�s    zAu_read.getnframescCs$|jtkrdS|jtkrdSdSdS)N�ULAW�ALAW�NONE�rGrIrJr9rrr� getcomptype�s   zAu_read.getcomptypecCs$|jtkrdS|jtkrdSdSdS)N�CCITT G.711 u-law�CCITT G.711 A-law�not compressedrdr9rrr� getcompname�s   zAu_read.getcompnamecCs*t|��|��|��|��|��|���Sr5�rr\r]r^r`rerir9rrr� getparamss  �zAu_read.getparamscCsdSr5rr9rrr� getmarkersszAu_read.getmarkerscCs td��dS)Nzno marks)r)r2�idrrr�getmark szAu_read.getmarkcCsp|jtvrl|tkr|j��}n|j�||j�}|jt|�|j7_|jtkrhddl }|� ||j �}|SdSr_) rGrHrFr7rrLrC�lenrI�audioopZulaw2linrK)r2�nframesr$rprrr� readframess   zAu_read.readframescCs*|jdurtd��|j�|j�d|_dS)N� cannot seekr)rVrXr7�seekrCr9rrr�rewinds zAu_read.rewindcCs|jSr5)rCr9rrrrU!sz Au_read.tellcCsP|dks||��krtd��|jdur.td��|j�|j||j�||_dS)Nrzposition not in rangers)r`rrVrXr7rtrLrC)r2�posrrr�setpos$s  zAu_read.setposcCs"|j}|rd|_|jr|��dSr5)r7r/r8�r2rrrrr8,s z Au_read.closeN)rrrr4r:r;r?r0r[r\r]r^r`rerirkrlrnrrrurUrwr8rrrrr(�s( . r(c@s�eZdZdd�Zdd�Zdd�Zdd�Zd d �Zd d �Zd d�Z dd�Z dd�Z dd�Z dd�Z dd�Zdd�Zdd�Zdd�Zdd �Zd!d"�Zd#d$�Zd%d&�Zd'd(�Zd)d*�Zd+d,�Zd-d.�Zd/d0�Zd1d2�Zd3S)4�Au_writecCs@t|�td�kr,ddl}|�|d�}d|_nd|_|�|�dS)Nr)r�wbTFr+r1rrrr45s  zAu_write.__init__cCs|jr|��d|_dSr5r6r9rrrr:>szAu_write.__del__cCs|Sr5rr9rrrr;CszAu_write.__enter__cGs |��dSr5r<r=rrrr?FszAu_write.__exit__cCsF||_d|_d|_d|_d|_t|_d|_d|_d|_ d|_ d|_ dS)NrrBra) r7rQrRrKrLrF�_nframes�_nframeswritten� _datawritten� _datalengthrS� _comptyperxrrrr0IszAu_write.initfpcCs(|jrtd��|dvrtd��||_dS)N�0cannot change parameters after starting to write)rrrz"only 1, 2, or 4 channels supported)r|rrR)r2� nchannelsrrr� setnchannelsVs zAu_write.setnchannelscCs|jstd��|jS)Nznumber of channels not set)rRrr9rrrr\]szAu_write.getnchannelscCs(|jrtd��|dvrtd��||_dS)Nr�)rrrrzbad sample width)r|rrK)r2� sampwidthrrr� setsampwidthbs zAu_write.setsampwidthcCs|jstd��|jS)N�sample width not specified)rQrrKr9rrrr]iszAu_write.getsampwidthcCs|jrtd��||_dS)Nr�)r|rrQ)r2� frameraterrr� setframeratenszAu_write.setframeratecCs|jstd��|jS)Nzframe rate not set)rQrr9rrrr^sszAu_write.getframeratecCs(|jrtd��|dkrtd��||_dS)Nr�rz# of frames cannot be negative)r|rr{)r2rqrrr� setnframesxs zAu_write.setnframescCs|jSr5�r|r9rrrr`szAu_write.getnframescCs|dvr||_ntd��dS)N)rcrazunknown compression type)rr)r2r,�namerrr� setcomptype�szAu_write.setcomptypecCs|jSr5�rr9rrrre�szAu_write.getcomptypecCs$|jdkrdS|jdkrdSdSdS)Nrarfrbrgrhr�r9rrrri�s   zAu_write.getcompnamecCsH|\}}}}}}|�|�|�|�|�|�|�|�|�||�dSr5)r�r�r�r�r�)r2�paramsr�r�r�rqZcomptypeZcompnamerrr� setparams�s     zAu_write.setparamscCs*t|��|��|��|��|��|���Sr5rjr9rrrrk�s  �zAu_write.getparamscCs|jSr5r�r9rrrrU�sz Au_write.tellcCs~t|ttf�st|��d�}|��|jdkrDddl}|�||j �}t |�|j }|j � |�|j||_|jt |�|_dS)N�Brar)� isinstancer#� bytearray� memoryview�cast�_ensure_header_writtenrrpZlin2ulawrKrorLr7r"r|r})r2r$rprqrrr�writeframesraw�s   zAu_write.writeframesrawcCs.|�|�|j|jks"|j|jkr*|��dSr5)r�r|r{r~r}� _patchheader)r2r$rrr� writeframes�s    �zAu_write.writeframescCsx|jrtzP|��|j|jks(|j|jkr0|��|j��W|j}d|_|jrt|� �n|j}d|_|jrr|� �0dSr5) r7r�r|r{r~r}r��flushr/r8rxrrrr8�s   �  �zAu_write.closecCs<|js8|jstd��|js"td��|js0td��|��dS)Nz# of channels not specifiedr�zframe rate not specified)r|rRrrKrQ� _write_headerr9rrrr��szAu_write._ensure_header_writtenc Cs�|jdkrl|jdkr t}d|_q�|jdkr6t}d|_q�|jdkrLt}d|_q�|jdkrbt}d|_q�td��n|jdkr�t}d|_ntd��|j|j |_t |j t �dt |j�}|d d @}t |j |�|jtkr�t}n |j|j}z|j ��|_Wnttf�yd|_Yn0t |j |�||_t |j |�t |j |j�t |j |j �|j �|j�|j �d |t |j�d �dS) Nrcrrrrzinternal errorrar r i����rAr )rrKrMrLrNrOrPrrIrRr'r7rDrorSr{rFrU�_form_length_posrWrXr~rQr")r2�encoding� header_size�lengthrrrr��sJ               zAu_write._write_headercCsH|jdurtd��|j�|j�t|j|j�|j|_|j�dd�dS)Nrsrr)r�rXr7rtr'r}r~r9rrrr��s  zAu_write._patchheaderN)rrrr4r:r;r?r0r�r\r�r]r�r^r�r`r�rerir�rkrUr�r�r8r�r�r�rrrrry3s2    *ryNcCsJ|durt|d�r|j}nd}|dvr.t|�S|dvr>t|�Std��dS)N�moder*)�rr*)�wrzz$mode must be 'r', 'rb', 'w', or 'wb')�hasattrr�r(ryr)r3r�rrrr.s r.)N)� collectionsrrrDrIrMrNrOrPZAUDIO_FILE_ENCODING_FLOATZAUDIO_FILE_ENCODING_DOUBLEZAUDIO_FILE_ENCODING_ADPCM_G721ZAUDIO_FILE_ENCODING_ADPCM_G722Z AUDIO_FILE_ENCODING_ADPCM_G723_3Z AUDIO_FILE_ENCODING_ADPCM_G723_5rJrFrH� Exceptionrrr'r(ryr.rrrr�js@ �� Q