
    0;ji                     |    d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ ddl	m
Z
 ddlmZmZ dZ G d	 d
          ZdS )    )PathN)hf_hub_download)	load_file   )S3_SR)S3GEN_SRS3GenzResembleAI/chatterboxc                   z    e Zd Zdez  Zdez  Z	 ddedede	fdZ
edd	            Zedd
            Zd Z	 ddZdS )ChatterboxVC   
   Ns3gendeviceref_dictc                     t           | _        || _        | _        t	          j                    | _        |	d | _        d S fd|                                D             | _        d S )Nc                 n    i | ]1\  }}|t          j        |          r|                              n|2S  )torch	is_tensorto).0kvr   s      G/root/voice-cloning/.venv/lib/python3.11/site-packages/chatterbox/vc.py
<dictcomp>z)ChatterboxVC.__init__.<locals>.<dictcomp>!   sL       Aq 5?1#5#5<144<<<1      )	r   srr   r   perthPerthImplicitWatermarkerwatermarkerr   items)selfr   r   r   s     ` r   __init__zChatterboxVC.__init__   st     
 9;; DMMM   $NN,,  DMMMr   returnc                    t          |          }|dv rt          j        d          }nd }d }|dz  x}                                rt          j        ||          }|d         }t                      }|                    t          |dz            d           |                    |          	                                  | |||	          S )
N)cpumpsr&   conds.pt)map_locationgens3gen.safetensorsF)strict)r   )
r   r   r   existsloadr	   load_state_dictr   r   eval)clsckpt_dirr   r)   r   builtin_voicestatesr   s           r   
from_localzChatterboxVC.from_local&   s    >> ^## <..LLL%
22M::<< 	%ZLIIIFe}Hh!4455e 	 	
 	
 	
 	s5&84444r   c                 b   |dk    rgt           j        j                                        sDt           j        j                                        st          d           nt          d           d}dD ]}t          t          |          }|                     t          |          j
        |          S )Nr'   zUMPS not available because the current PyTorch install was not built with MPS enabled.z~MPS not available because the current MacOS version is not 12.3+ and/or you do not have an MPS-enabled device on this machine.r&   )r+   r(   )repo_idfilename)r   backendsr'   is_availableis_builtprintr   REPO_IDr5   r   parent)r1   r   fpath
local_paths       r   from_pretrainedzChatterboxVC.from_pretrained=   s     U??5>#5#B#B#D#D?>%..00 Xmnnnn  W  X  X  XF6 	J 	JE(5IIIJJ~~d:..5v>>>r   c                     t          j        |t                    \  }}|d | j                 }| j                            |t          | j                  | _        d S )Nr   )r   )librosar.   r   DEC_COND_LENr   	embed_refr   r   )r"   	wav_fpaths3gen_ref_wav_srs       r   set_target_voicezChatterboxVC.set_target_voiceL   sR    $\)AAAs%&8t'8&89
,,]HT[,YYr   c                    |r|                      |           n| j        
J d            t          j                    5  t	          j        |t                    \  }}t          j        |                                          	                    | j
                  d         }| j                            |          \  }}| j                            || j                  \  }}|                    d                                                                                                          }| j                            || j                  }d d d            n# 1 swxY w Y   t          j        |                              d          S )NzBPlease `prepare_conditionals` first or specify `target_voice_path`rC   N)speech_tokensr   r   )sample_rate)rJ   r   r   inference_moderD   r.   r   
from_numpyfloatr   r   r   	tokenizer	inferencesqueezedetachr&   numpyr    apply_watermarkr   	unsqueeze)r"   audiotarget_voice_pathaudio_16_	s3_tokenswavwatermarked_wavs           r   generatezChatterboxVC.generateS   s   
  	s!!"34444=,,.r,,,!## 
	Y 
	Y!,u777KHa'117799<<T[II%QH://99LIqZ))' *  FC ++a..''))--//5577C".>>sPTPW>XXO
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 
	Y 00::1===s   DEE ErL   )r$   r   )__name__
__module____qualname__r   ENC_COND_LENr   rE   r	   strdictr#   classmethodr5   rA   rJ   r`   r   r   r   r   r      s        u9L=L 	   	   $ 5 5 5 [5, ? ? ? [?Z Z Z > > > > > >r   r   )pathlibr   rD   r   r   huggingface_hubr   safetensors.torchr   models.s3tokenizerr   models.s3genr   r	   r=   r   r   r   r   <module>rm      s             + + + + + + ' ' ' ' ' ' % % % % % % ) ) ) ) ) ) ) ) "X> X> X> X> X> X> X> X> X> X>r   