o
    i0                     @   s  d dl mZ d dlmZmZ d dlZd dlZd dl	m
Z
 d dlmZmZ d dlmZ i ddd	dd
dddddddddddddddddddddddddddddddiZejejejejejejejd ZejejejejfZG d!d" d"eZdS )#    )cached_property)AnyOptionalN)clip)DtypeSeconds)BackendPCM_S8   PCM_U8PCM_16   PCM_24   PCM_32    FLOATDOUBLE@   ULAWALAWDWVW_12   DWVW_16DWVW_24DPCM_8DPCM_16ALAC_16ALAC_20   ALAC_24ALAC_32)r	   r   r   r   r   r   r   c                       s"  e Zd Zd$dedee def fddZedee fd	d
Z	ede
fddZedee fddZedejfddZede
fddZedefddZedee fddZedefddZedefddZedefddZd%dedee deej fdd Zd!efd"d#Z  ZS )&	SoundFileNFfile
frame_sizeforced_decodingc                    s    t  ||| t|| _d S N)super__init__sfr"   )selfr#   r$   r%   	__class__ U/home/ubuntu/.local/lib/python3.10/site-packages/audiolab/reader/backend/soundfile.pyr(   <   s   zSoundFile.__init__returnc                 C   s   t | jjd S r&   )_subtype_to_bitsgetr)   subtyper*   r-   r-   r.   bits_per_sample@      zSoundFile.bits_per_samplec                 C   s   t  | j j S r&   )r)   available_subtypesr2   r3   r-   r-   r.   codecD   r5   zSoundFile.codecc                 C   s   | j d u rd S t| j | j S r&   )
num_framesr   sample_rater3   r-   r-   r.   durationH   s   
zSoundFile.durationc                 C   s   t | jjtjS r&   )_subtype_to_dtyper1   r)   r2   npfloat64r3   r-   r-   r.   dtypeN   s   zSoundFile.dtypec                 C      | j jS r&   )r)   formatr3   r-   r-   r.   r@   R      zSoundFile.formatc                 C   r?   r&   )r)   channelsr3   r-   r-   r.   num_channelsV   rA   zSoundFile.num_channelsc                 C   s   | j r/d}| j }z| j }|jd }W n tjy'   t| j| _Y nw | | |S | jj	}|t
t
jjkr>d }|S Nr   )r%   r)   tellreadshapeLibsndfileErrorr"   r#   seekframesr<   iinfoint32max)r*   r8   posrJ   r-   r-   r.   r8   Z   s   


zSoundFile.num_framesc                 C   
   | j  S r&   )r)   copy_metadatar3   r-   r-   r.   metadatak      
zSoundFile.metadatac                 C   r?   r&   )r)   
samplerater3   r-   r-   r.   r9   o   rA   zSoundFile.sample_ratec                 C   rO   r&   )r)   seekabler3   r-   r-   r.   rT   s   rR   zSoundFile.seekablenframesr>   c                 C   sP   |d u r| j }| jj||tv r|ntjd}|jd dkr&tt||j	S d S )N)r>   r   )
r>   r)   rF   _supported_dtypesr<   r=   rG   
atleast_2dr   T)r*   rU   r>   rJ   r-   r-   r.   rF   w   s   $zSoundFile.readoffsetc                 C   s   |dkr| j | d S d S rD   )r)   rI   )r*   rY   r-   r-   r.   rI   }   s   zSoundFile.seek)NFr&   )__name__
__module____qualname__r   r   intboolr(   r   r4   strr7   r   r:   r<   r>   r@   rC   r8   dictrQ   r9   rT   r   ndarrayrF   rI   __classcell__r-   r-   r+   r.   r"   ;   s0     "r"   )	functoolsr   typingr   r   numpyr<   	soundfiler)   audiolab.av.framer   audiolab.av.typingr   r   audiolab.reader.backend.backendr   r0   int8uint8int16rL   float32r=   r;   rV   r"   r-   r-   r-   r.   <module>   sl   	

