o
    ~iR                     @   sD   d Z ddlmZmZ ddlZddlZdgZG dd dejjeZ	dS )zCodec interface.    )ABCabstractmethodNCodecc                       s~   e Zd Zg dZd fdd	ZdddZddd	Zdd
dZdddZe	dd Z
e	dd Ze	dd Ze	dd Z  ZS )r   )encodedecodereconstructr   c                    sF   t    || jvrtd| d| j || _|| _|| _d | _d S )Nz`mode` (z) must be one of )super__init___MODES
ValueErrorsample_rateorig_sample_ratemode_dist)selfr   r   r   	__class__ E/home/ubuntu/.local/lib/python3.10/site-packages/audiocodecs/codec.pyr	   $   s   


zCodec.__init__Nc                 C   s^   | j dkr| ||}|S | j dkr| ||}|S | j dkr-| ||}| ||}|S d S )Nr   r   r   )r   sig_to_tokstoks_to_sig)r   inputlengthtokssigr   r   r   forward-   s   


zCodec.forwardc                 C   <   t j|| j| j}|d u rtjt||jd}| 	||S N)device)

torchaudio
functionalresampler   r   torchoneslenr   _sig_to_toksr   r   r   r   r   r   r   9      zCodec.sig_to_toksc                 C   r   r   )
r   r    r!   r   r   r"   r#   r$   r   _sig_to_featsr&   r   r   r   sig_to_featsD   r'   zCodec.sig_to_featsc                 C   s@   |d u rt jt||jd}| ||}tj|| j| j	}|S r   )
r"   r#   r$   r   _toks_to_sigr   r    r!   r   r   )r   r   r   r   r   r   r   r   O   s   zCodec.toks_to_sigc                 C      t NNotImplementedError)r   r   r   r   embs[   s   z
Codec.embsc                 C   r+   r,   r-   r&   r   r   r   r%   _      zCodec._sig_to_toksc                 C   r+   r,   r-   r&   r   r   r   r(   d   r0   zCodec._sig_to_featsc                 C   r+   r,   r-   )r   r   r   r   r   r   r*   i   r0   zCodec._toks_to_sig)r   r,   )__name__
__module____qualname__r
   r	   r   r   r)   r   r   r/   r%   r(   r*   __classcell__r   r   r   r   r   !   s    
	





)
__doc__abcr   r   r"   r   __all__nnModuler   r   r   r   r   <module>   s   