a
    "h]                  	   @   s^  d dl Z d dlZd dlZddgZG dd deZdZdd Zdd	 Zd
d Z	dd Z
dd 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lmZ d d lmZ ed!d"Zd#ej_d$ej_d%ej_d&ej_d'ej_d(ej_G d)d* d*Z G d+d, d,Z!d>d-dZ"e#d.krZd dl$Z$e$j%d/d s>e$j%&d0 e$j%d/ Z'e"e'd1Z(e)d2e' e)d3e(*  e)d4e(+  e)d5e(,  e)d6e(-  e)d7e(.  e)d8e(/  e$j%d9d r:e$j%d9 Z0e)d:e0 e"e0d;@Z1e12e(3  e(4d<Z5e5sqe16e5 qW d   n1 s(0    Y  e)d= W d   n1 sP0    Y  dS )?    NErroropenc                   @   s   e Zd ZdS )r   N)__name__
__module____qualname__ r   r   ,/opt/python-3.9.21/usr/lib/python3.9/aifc.pyr      s   l   @Q E c                 C   s8   zt d| dd W S  t jy2   td Y n0 d S )N>l   r   structunpackreaderrorEOFErrorfiler   r   r   
_read_long   s    r   c                 C   s8   zt d| dd W S  t jy2   td Y n0 d S )N>Lr
   r   r   r   r   r   r   _read_ulong   s    r   c                 C   s8   zt d| dd W S  t jy2   td Y n0 d S )N>h   r   r   r   r   r   r   _read_short   s    r   c                 C   s8   zt d| dd W S  t jy2   td Y n0 d S )N>Hr   r   r   r   r   r   r   _read_ushort   s    r   c                 C   s@   t | d}|dkrd}n
| |}|d@ dkr<| d}|S )N   r       )ordr   )r   lengthdatadummyr   r   r   _read_string   s    

r!   gc                 C   s   t | }d}|dk r d}|d }t| }t| }||  krN|  krNdkrXn nd} n0|dkrft} n"|d }|d | td	|d
  } ||  S )Nr   r      g          i?  l        g       @?   )r   r   	_HUGE_VALpow)fexponsignhimantlomantr   r   r   _read_float   s    "r-   c                 C   s   |  td| d S )Nr   writer   packr(   xr   r   r   _write_short   s    r3   c                 C   s   |  td| d S )Nr   r.   r1   r   r   r   _write_ushort   s    r4   c                 C   s   |  td| d S )Nr	   r.   r1   r   r   r   _write_long   s    r5   c                 C   s   |  td| d S )Nr   r.   r1   r   r   r   _write_ulong   s    r6   c                 C   sR   t |dkrtd| tdt | | | t |d@ dkrN| d d S )N   z%string exceeds maximum pstring lengthBr   r       )len
ValueErrorr/   r   r0   )r(   sr   r   r   _write_string   s    
r=   c           	      C   s   dd l }|dk rd}|d }nd}|dkr8d}d}d}n||\}}|dks^|dks^||krp|dB }d}d}nh|d }|dk r|||}d}||B }||d}||}t|}||| d}||}t|}t| | t| | t| | d S )	Nr   r#   r"   i @  r   r$   i?      )mathfrexpldexpfloorintr4   r6   )	r(   r2   r?   r*   r)   r+   r,   ZfmantZfsmantr   r   r   _write_float   s8    




rD   )Chunk)
namedtuple_aifc_paramsz7nchannels sampwidth framerate nframes comptype compnamez3Number of audio channels (1 for mono, 2 for stereo)zSample width in byteszSampling frequencyzNumber of audio framesz(Compression type ("NONE" for AIFF files)zRA human-readable version of the compression type
('not compressed' for AIFF files)c                   @   s   e Zd 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d0d1 ZdS )2	Aifc_readNc                 C   s6  d| _ d | _g | _d| _|| _t|}| dkr:td|d}|dkrTd| _	n|dkrdd| _	ntdd| _
d | _d| _zt| j}W n ty   Y qY n0 | }|d	kr| | d| _
nH|d
kr|| _|d}d| _n(|dkrt|| _ n|dkr| | |  qx| j
r*| js2tdd S )Nr      FORMz file does not start with FORM idr
      AIFF   AIFCr   znot an AIFF or AIFF-C file   COMM   SSND      FVER   MARKz$COMM chunk and/or SSND chunk missing)_version_convert_markers	_soundpos_filerE   Zgetnamer   r   _aifcZ_comm_chunk_read_ssnd_chunk_ssnd_seek_neededr   _read_comm_chunkr   	_readmarkskip)selfr   chunkZformdataZ	chunknamer    r   r   r   initfp4  sH    





zAifc_read.initfpc                 C   sL   t |tr>t|d}z| | W qH   |   Y qH0 n
| | d S )Nrb)
isinstancestrbuiltinsr   r^   closer\   r(   Zfile_objectr   r   r   __init__\  s    

zAifc_read.__init__c                 C   s   | S Nr   r\   r   r   r   	__enter__h  s    zAifc_read.__enter__c                 G   s   |    d S rf   rc   r\   argsr   r   r   __exit__k  s    zAifc_read.__exit__c                 C   s   | j S rf   )rU   rg   r   r   r   getfpq  s    zAifc_read.getfpc                 C   s   d| _ d| _d S )Nr   r   )rX   rT   rg   r   r   r   rewindt  s    zAifc_read.rewindc                 C   s    | j }|d urd | _ |  d S rf   )rU   rc   r\   r   r   r   r   rc   x  s    zAifc_read.closec                 C   s   | j S rf   )rT   rg   r   r   r   tell~  s    zAifc_read.tellc                 C   s   | j S rf   )
_nchannelsrg   r   r   r   getnchannels  s    zAifc_read.getnchannelsc                 C   s   | j S rf   )_nframesrg   r   r   r   
getnframes  s    zAifc_read.getnframesc                 C   s   | j S rf   )
_sampwidthrg   r   r   r   getsampwidth  s    zAifc_read.getsampwidthc                 C   s   | j S rf   )
_frameraterg   r   r   r   getframerate  s    zAifc_read.getframeratec                 C   s   | j S rf   	_comptyperg   r   r   r   getcomptype  s    zAifc_read.getcomptypec                 C   s   | j S rf   	_compnamerg   r   r   r   getcompname  s    zAifc_read.getcompnamec                 C   s*   t |  |  |  |  |  |  S rf   )rG   rr   rv   rx   rt   r{   r~   rg   r   r   r   	getparams  s    zAifc_read.getparamsc                 C   s   t | jdkrd S | jS Nr   r:   rS   rg   r   r   r   
getmarkers  s    zAifc_read.getmarkersc                 C   s2   | j D ]}||d kr|  S qtd|d S Nr   zmarker {0!r} does not existrS   r   formatr\   idmarkerr   r   r   getmark  s    

zAifc_read.getmarkc                 C   s*   |dk s|| j krtd|| _d| _d S )Nr   zposition not in ranger   )rs   r   rT   rX   )r\   posr   r   r   setpos  s    zAifc_read.setposc                 C   s   | j rD| jd | jd}| j| j }|r>| j|d  d| _ |dkrPdS | j|| j }| jrv|rv| |}| jt|| j| j	   | _|S )Nr   rN   r   )
rX   rW   seekr   rT   
_framesizerR   r:   rq   ru   )r\   nframesr    r   r   r   r   r   
readframes  s     


zAifc_read.readframesc                 C   s   dd l }||dS Nr   r   )audioopZalaw2linr\   r   r   r   r   r   	_alaw2lin  s    zAifc_read._alaw2linc                 C   s   dd l }||dS r   )r   Zulaw2linr   r   r   r   	_ulaw2lin  s    zAifc_read._ulaw2linc                 C   s2   dd l }t| dsd | _||d| j\}| _|S Nr   _adpcmstater   )r   hasattrr   Z	adpcm2linr   r   r   r   
_adpcm2lin  s
    
zAifc_read._adpcm2linc                 C   sV  t || _t|| _t |d d | _tt|| _| jdkrFtd| jdkrXtd| j| j | _	| j
rFd}|jdkrd}td d	|_|d
| _|rt|jd}|d@ dkr|d }|j| |_|jdd t|| _| jdkrR| jdkr
| j| _n4| jdv r | j| _n| jdv r6| j| _ntdd| _nd| _d| _d S )N   rN   r   bad sample widthbad # of channels   r   zWarning: bad COMM chunk size   r
   r"      NONE   G722   ulaw   ULAW   alaw   ALAWunsupported compression typer      not compressed)r   rq   r   rs   ru   rC   r-   rw   r   r   rV   	chunksizewarningswarnr   rz   r   r   r   r!   r}   r   rR   r   r   )r\   r]   Zkludger   r   r   r   rY     sD    









zAifc_read._read_comm_chunkc                 C   s   t |}zDt|D ]6}t |}t|}t|}|s6|r| j|||f qW nB ty   dt| jt| jdkrvdnd|f }t	| Y n0 d S )Nz;Warning: MARK chunk contains only %s marker%s instead of %sr    r<   )
r   ranger   r!   rS   appendr   r:   r   r   )r\   r]   Znmarkersir   r   namewr   r   r   rZ     s    zAifc_read._readmark)r   r   r   rU   r^   re   rh   rl   rm   rn   rc   rp   rr   rt   rv   rx   r{   r~   r   r   r   r   r   r   r   r   rY   rZ   r   r   r   r   rH     s2   $(*rH   c                   @   s0  e Zd 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d0d1 Zd2d3 Zd4d5 Zd6d7 Zd8d9 Zd:d; Z d<d= Z!d>d? Z"d@dA Z#dBdC Z$dDdE Z%dFdG Z&dHdI Z'dS )J
Aifc_writeNc                 C   s\   t |trNt|d}z| | W n   |   Y n0 |drXd| _n
| | d S )Nwbz.aiffr   )r`   ra   rb   r   r^   rc   endswithrV   rd   r   r   r   re   /  s    

zAifc_write.__init__c                 C   s^   || _ t| _d| _d| _d | _d| _d| _d| _d| _	d| _
d| _d| _g | _d| _d| _d S )Nr   r   r   r   )rU   _AIFC_versionrQ   rz   r}   rR   rq   ru   rw   rs   _nframeswritten_datawritten_datalengthrS   _marklengthrV   ro   r   r   r   r^   ?  s    zAifc_write.initfpc                 C   s   |    d S rf   ri   rg   r   r   r   __del__P  s    zAifc_write.__del__c                 C   s   | S rf   r   rg   r   r   r   rh   S  s    zAifc_write.__enter__c                 G   s   |    d S rf   ri   rj   r   r   r   rl   V  s    zAifc_write.__exit__c                 C   s   | j rtdd| _d S )N0cannot change parameters after starting to writer   r   r   rV   rg   r   r   r   aiff\  s    zAifc_write.aiffc                 C   s   | j rtdd| _d S )Nr   r   r   rg   r   r   r   aifca  s    zAifc_write.aifcc                 C   s(   | j rtd|dk rtd|| _d S )Nr   r   r   )r   r   rq   )r\   	nchannelsr   r   r   setnchannelsf  s
    zAifc_write.setnchannelsc                 C   s   | j std| j S )Nznumber of channels not set)rq   r   rg   r   r   r   rr   m  s    zAifc_write.getnchannelsc                 C   s0   | j rtd|dk s|dkr&td|| _d S )Nr   r   r
   r   )r   r   ru   )r\   	sampwidthr   r   r   setsampwidthr  s
    zAifc_write.setsampwidthc                 C   s   | j std| j S )Nzsample width not set)ru   r   rg   r   r   r   rv   y  s    zAifc_write.getsampwidthc                 C   s(   | j rtd|dkrtd|| _d S )Nr   r   zbad frame rate)r   r   rw   )r\   	framerater   r   r   setframerate~  s
    zAifc_write.setframeratec                 C   s   | j std| j S )Nzframe rate not set)rw   r   rg   r   r   r   rx     s    zAifc_write.getframeratec                 C   s   | j rtd|| _d S )Nr   )r   r   rs   )r\   r   r   r   r   
setnframes  s    zAifc_write.setnframesc                 C   s   | j S rf   r   rg   r   r   r   rt     s    zAifc_write.getnframesc                 C   s.   | j rtd|dvrtd|| _|| _d S Nr   )r   r   r   r   r   r   r   )r   r   rz   r}   )r\   comptypecompnamer   r   r   setcomptype  s    zAifc_write.setcomptypec                 C   s   | j S rf   ry   rg   r   r   r   r{     s    zAifc_write.getcomptypec                 C   s   | j S rf   r|   rg   r   r   r   r~     s    zAifc_write.getcompnamec                 C   sf   |\}}}}}}| j rtd|dvr.td| | | | | | | | | || d S r   )r   r   r   r   r   r   r   )r\   paramsr   r   r   r   r   r   r   r   r   	setparams  s    



zAifc_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)rq   ru   rw   r   rG   rs   rz   r}   rg   r   r   r   r     s
    zAifc_write.getparamsc                 C   s   |dkrt d|dk r t dt|ts2t dtt| jD ],}|| j| d kr@|||f| j|<  d S q@| j|||f d S )Nr   zmarker ID must be > 0zmarker position must be >= 0zmarker name must be bytes)r   r`   bytesr   r:   rS   r   )r\   r   r   r   r   r   r   r   setmark  s    
zAifc_write.setmarkc                 C   s2   | j D ]}||d kr|  S qtd|d S r   r   r   r   r   r   r     s    

zAifc_write.getmarkc                 C   s   t | jdkrd S | jS r   r   rg   r   r   r   r     s    zAifc_write.getmarkersc                 C   s   | j S rf   r   rg   r   r   r   rp     s    zAifc_write.tellc                 C   sz   t |ttfst|d}| t| t|| j| j  }| j	rN| 	|}| j
| | j| | _| jt| | _d S )Nr8   )r`   r   	bytearray
memoryviewcast_ensure_header_writtenr:   ru   rq   rR   rU   r/   r   r   )r\   r   r   r   r   r   writeframesraw  s    
zAifc_write.writeframesrawc                 C   s.   |  | | j| jks"| j| jkr*|   d S rf   )r   r   rs   r   r   _patchheader)r\   r   r   r   r   writeframes  s
    

zAifc_write.writeframesc                 C   s   | j d u rd S zx| d | jd@ r<| j d | jd | _|   | j| jksb| j| jksb| jrj| 	  W d | _
| j }d | _ |  nd | _
| j }d | _ |  0 d S )Nr   r   r9   )rU   r   r   r/   _writemarkersr   rs   r   r   r   rR   rc   )r\   r(   r   r   r   rc     s,    





zAifc_write.closec                 C   s   dd l }||dS r   )r   Zlin2alawr   r   r   r   	_lin2alaw  s    zAifc_write._lin2alawc                 C   s   dd l }||dS r   )r   Zlin2ulawr   r   r   r   	_lin2ulaw  s    zAifc_write._lin2ulawc                 C   s2   dd l }t| dsd | _||d| j\}| _|S r   )r   r   r   Z	lin2adpcmr   r   r   r   
_lin2adpcm  s
    
zAifc_write._lin2adpcmc                 C   sf   | j sb| jdv r.| jsd| _| jdkr.td| js<td| jsJtd| jsXtd| | d S )Nr   r   r   r   r   r   zRsample width must be 2 when compressing with ulaw/ULAW, alaw/ALAW or G7.22 (ADPCM)z# channels not specifiedzsample width not specifiedzsampling rate not specified)r   rz   ru   r   rq   rw   _write_header)r\   Zdatasizer   r   r   r     s    

z!Aifc_write._ensure_header_writtenc                 C   s>   | j dkr| j| _n&| j dv r(| j| _n| j dv r:| j| _d S )Nr   r   r   )rz   r   rR   r   r   rg   r   r   r   _init_compression  s    




zAifc_write._init_compressionc              	   C   sH  | j r| jdkr|   | jd | js<|| j| j  | _| j| j | j | _| jd@ rf| jd | _| j r| jdv r| jd | _| jd@ r| jd | _n0| jdkr| jd d | _| jd@ r| jd | _z| j	 | _
W n ttfy   d | _
Y n0 | | j}| j r@| jd	 | jd
 t| jd t| j| j n| jd | jd t| j| t| j| j | j
d ur| j	 | _t| j| j | jdv rt| jd nt| j| jd  t| j| j | j r| j| j t| j| j | jd | j
d ur| j	 | _t| j| jd  t| jd t| jd d S )Nr   rI   r   )r   r   r   r   r   r      r
   rK   rO   rJ   rL   r   rN   rM   r   )rV   rz   r   rU   r/   rs   rq   ru   r   rp   _form_length_posAttributeErrorOSError_write_form_lengthr6   rQ   r3   _nframes_posrD   rw   r=   r}   _ssnd_length_pos)r\   Z
initlength
commlengthr   r   r   r   %  s^    




zAifc_write._write_headerc                 C   s\   | j r*dt| j }|d@ r$|d }d}nd}d}t| jd| | j d | d |  |S )	Nr   r      r   r   r
   rN      )rV   r:   r}   r6   rU   r   )r\   
datalengthr   Z
verslengthr   r   r   r   X  s"    zAifc_write._write_form_lengthc                 C   s   | j  }| jd@ r,| jd }| j d n| j}|| jkrd| j| jkrd| jdkrd| j |d d S | j | j	d | 
|}| j | jd t| j | j | j | jd t| j |d  | j |d | j| _|| _d S )Nr   r9   r   rN   )rU   rp   r   r/   r   rs   r   r   r   r   r   r   r6   r   )r\   Zcurposr   r    r   r   r   r   e  s*    





zAifc_write._patchheaderc                 C   s   t | jdkrd S | jd d}| jD ]:}|\}}}|t | d d }t |d@ dkr(|d }q(t| j| |d | _t| jt | j | jD ]2}|\}}}t| j| t| j| t| j| qd S )Nr   rP   r   r      rN   )r:   rS   rU   r/   r6   r   r3   r=   )r\   r   r   r   r   r   r   r   r   r   {  s"    





zAifc_write._writemarkers)(r   r   r   rU   re   r^   r   rh   rl   r   r   r   rr   r   rv   r   rx   r   rt   r   r{   r~   r   r   r   r   r   rp   r   r   rc   r   r   r   r   r   r   r   r   r   r   r   r   r   r     sJ   	3r   c                 C   sJ   |d u rt | dr| j}nd}|dv r.t| S |dv r>t| S tdd S )Nmoder_   )rr_   )r   r   z$mode must be 'r', 'rb', 'w', or 'wb')r   r   rH   r   r   )r(   r   r   r   r   r     s    
__main__r   z/usr/demos/data/audio/bach.aiffr   ZReadingznchannels =znframes   =zsampwidth =zframerate =zcomptype  =zcompname  =r   ZWritingr   i   zDone.)N)7r   rb   r   __all__	Exceptionr   r   r   r   r   r   r!   r&   r-   r3   r4   r5   r6   r=   rD   r]   rE   collectionsrF   rG   r   __doc__r   r   r   r   r   rH   r   r   r   sysargvr   fnr(   printrr   rt   rv   rx   r{   r~   Zgngr   r   r   r   r   r   r   r   r   <module>   sx   
!     






.