o
    ~iK                  	   @   sl  d Z ddlZddlmZ dgZG dd deZedkrddlZej	 r&dndZ
d	Zd
ZdD ]WZeeed e
ZedkrHeedd neeee
Ze ( eeZeej e Zeej edv rveeZeej W d   n1 sw   Y  q.ed\ZZee Ze  eeZW d   n1 sw   Y  edee dS dS )z2FocalCodec (see https://arxiv.org/abs/2502.04465).    N)Codec
FocalCodecc                       sV   e Zd Zg dZ				d fdd	Ze dd	 Zd
d Zdd Z	dd Z
  ZS )r   )lucadellalib/focalcodec_50hzzlucadellalib/focalcodec_25hzzlucadellalib/focalcodec_12_5hz       reconstructr   c                    s   zdd l }W n ty   tdw t |d| || _|| _|dks(J ||dks0J |tjjdd|d| _	|d	krHd | j	_
d | j	_d S |d
krVd | j	_d | j	_d S d S )Nr   z,`pip install safetensors` to use this modulei>  r   r   zlucadellalib/focalcodec
focalcodec)configencodedecode)safetensorsImportErrorsuper__init__num_codebooks
vocab_sizetorchhubloadmodeldecompressordecoderencoder
compressor)selfsample_rater   r   moder	   r   	__class__ J/home/ubuntu/.local/lib/python3.10/site-packages/audiocodecs/focalcodec.pyr   "   s(   zFocalCodec.__init__c                 C   s   | j j}|S N)r   codebook)r   embsr   r   r    r#   B   s   zFocalCodec.embsc                 C   s   | j ||}|d S )N).N)r   sig_to_toks)r   siglengthtoksr   r   r    _sig_to_toksH   s   zFocalCodec._sig_to_toksc                 C   s   | j ||}|S r!   )r   sig_to_lats)r   r%   r&   featsr   r   r    _sig_to_featsN   s   zFocalCodec._sig_to_featsc                 C   s   |d }| j |}|S )N).r   )r   toks_to_sig)r   r'   r&   r%   r   r   r    _toks_to_sigT   s   zFocalCodec._toks_to_sig)r   r   r   r   )__name__
__module____qualname__CONFIGSr   r   no_gradr#   r(   r+   r-   __classcell__r   r   r   r    r      s    	 
__main__cudacpui'     )r
   r   r   )r   r   
   r   )r
   r   zexample.wavzreconstruction.wav)__doc__r   audiocodecs.codecr   __all__r   r.   
torchaudior5   is_availabledevicer   
batch_sizer   evaltocodeczeroslongrandninputr2   outputprintshaper#   sig_to_featsr   r%   rec_sigsaver   r   r   r    <module>   sR   A






	

