o
    ~Ÿiÿ  ã                	   @   sˆ  d Z ddlZddlZddlZddlmZ ddlmZ dgZG dd„ deƒZ	e
dkrÂddlZej ¡ r4dnd	Zd
ZdZdD ]WZe	eed ¡  e¡ZedkrVe edd¡ ¡ ne ee¡ e¡Ze ¡ ( eeƒZeejƒ e ¡ Zeejƒ edv r„e e¡Zeejƒ W d  ƒ n1 sŽw   Y  q<e d¡\Z Ze	eƒ ¡ Ze ¡  ee ƒZ!W d  ƒ n1 s´w   Y  e "de!e¡ dS dS )z0BigCodec (see https://arxiv.org/abs/2409.05377).é    N)Úsnapshot_download)ÚCodecÚBigCodecc                       sZ   e Zd ZdgZdgZ				d‡ fdd„	Ze ¡ dd„ ƒZd	d
„ Z	dd„ Z
dd„ Z‡  ZS )r   úAlethia/BigCodecúbigcodec.ptÚreconstructTc           
         s  z&t j t j t¡¡‰ dd„ tjD ƒ}‡ fdd„tjD ƒt_dd l}|t_W n ty1   tdƒ‚w tƒ  	|d|¡ d| _
d| _|| _t|d	}t j ||¡}	tj|	d
d}| ¡ | _| j |d ¡ | ¡ | _| j |d ¡ | jj| _|dkr~d | _d S |dkr‡d | _d S d S )Nc                 S   s   g | ]}|‘qS © r   ©Ú.0Úxr   r   úH/home/ubuntu/.local/lib/python3.10/site-packages/audiocodecs/bigcodec.pyÚ
<listcomp>.   s    z%BigCodec.__init__.<locals>.<listcomp>c                    s   g | ]}ˆ |vr|‘qS r   r   r	   ©Úroot_dirr   r   r   /   s    r   zV`pip install git+https://github.com/lucadellalib/BigCodec.git@main` to use this modulei€>  é   i    )Úrepo_idÚcpu)Úmap_locationÚCodecEncÚ	generatorÚencodeÚdecode)ÚosÚpathÚdirnameÚrealpathÚ__file__ÚsysÚbigcodecÚImportErrorÚsuperÚ__init__Únum_codebooksÚ
vocab_sizeÚlatentr   ÚjoinÚtorchÚloadÚCodecEncoderÚencoderÚload_state_dictÚCodecDecoderÚdecoderÚ	quantizer)
ÚselfÚsample_rateÚmodeÚsourceÚ
checkpointr$   Úsys_pathr   r   Úcheckpoint_path©Ú	__class__r   r   r!   #   s8   
ÿÿ





ÿzBigCodec.__init__c                 C   sL   | j r| j ¡ d }|d  }|S | j ¡ d }|d  }| jjd  |¡}|S ©Nr   )r$   r-   Úget_embÚlayersÚout_proj)r.   Úembsr   r   r   r;   L   s   zBigCodec.embsc                 C   sB   |   |d d …d f ¡}|  |¡\}}}|dd d …d d …d f }|S r7   )r)   r-   )r.   ÚsigÚlengthÚfeatsÚ_Útoksr   r   r   Ú_sig_to_toksX   s   zBigCodec._sig_to_toksc                 C   sd   | j r|  |d d …d f ¡}| dd¡}| jjd  |¡}|S |  |d d …d f ¡}| dd¡}|S )Néÿÿÿÿéþÿÿÿr   )r$   r)   Úmovedimr-   r9   Úin_proj)r.   r<   r=   r>   r   r   r   Ú_sig_to_feats`   s   zBigCodec._sig_to_featsc                 C   s2   | j  |¡}| j| dd¡ddd d …df }|S )NrB   rC   F)Úvqr   )r-   Úvq2embr,   rD   )r.   r@   r=   Úqfeatsr<   r   r   r   Ú_toks_to_sigl   s   "zBigCodec._toks_to_sig)r   r   r   T)Ú__name__Ú
__module__Ú__qualname__ÚSOURCESÚCHECKPOINTSr!   r&   Úno_gradr;   rA   rF   rJ   Ú__classcell__r   r   r5   r   r      s    ú)
Ú__main__Úcudar   i'  é   )r   r   r   )r0   r   é
   r   )r   r   zexample.wavzreconstruction.wav)#Ú__doc__r   r   r&   Úhuggingface_hubr   Úaudiocodecs.codecr   Ú__all__r   rK   Ú
torchaudiorS   Úis_availableÚdevicer/   Ú
batch_sizer0   ÚevalÚtoÚcodecÚzerosÚlongÚrandnÚinputrP   ÚoutputÚprintÚshaper;   Úsig_to_featsr'   r<   Úrec_sigÚsaver   r   r   r   Ú<module>   sL   Uÿ
ü




€ù€	

ÿå