o
    W+ i                     @   s   d dl Z d dlm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 d dlmZmZ d dlmZ d d	lmZ d d
lmZ ejejejdG dd de	ZdS )    N)Dict)Models)
TorchModel)Encoder)SpeakerVerificationCamplus)ConditionGeneratorHiFiGANGenerator)Tensor)MODELS)Tasks)module_namec                       sH   e Zd ZdZdef fddZdeeef deeef fddZ  Z	S )	UnetVCz>A decorator of FRCRN for integrating into modelscope framework	model_dirc                    s  t  j|g|R i | |dd}|| _tj|d}ttj|dtj|d| _t	tj|d|| _
tddd|| _tj|d	}| jtj|d
d d | j  t || _| jtjtj|d| jdd  | j  | j  dS )zzinitialize the frcrn model from the `model_dir` path.

        Args:
            model_dir (str): the model path.
        devicecpuZstaticzencoder_am.mvnzencoder.onnxzcampplus_cn_common.binT)ZunetZ
extra_infozconverter.pthc                 S   s   | S )N )Zstoragelocr   r   p/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/modelscope/models/audio/vc/converter.py<lambda>+   s    z!UnetVC.__init__.<locals>.<lambda>)Zmap_locationzvocoder.pthZ
state_dictN)super__init__getr   ospathjoinr   encoderr   spk_embr   to	converterZload_state_dicttorchloadevalr   vocoderZremove_weight_norm)selfr   argskwargsr   Zstatic_pathZG_path	__class__r   r   r      s@   

zUnetVC.__init__inputsreturnc           
      C   s   |d }|d }|d }t  K | j|| j}| j|| j}| j|| j}| 	|||}| 
|g d}	tj|rTt||	  j d W d    n1 s^w   Y  |	  j S )NZ
target_wavZ
source_wavZ	save_path)r         i>  )r   Zno_gradr   Z	inferencer   r   r   forwardZ	get_featsr   r"   Zpermuter   r   existssfwriteflattenr   datanumpy)
r#   r(   Ztarget_wav_pathZsource_wav_pathZsave_wav_pathZ
source_encr   Zstyle_mcZcoded_sp_converted_normZwavr   r   r   r,   5   s(   
zUnetVC.forward)
__name__
__module____qualname____doc__strr   r   r	   r,   __classcell__r   r   r&   r   r      s    *r   )r   typingr   Z	soundfiler.   r   Zmodelscope.metainfor   Zmodelscope.modelsr   Z&modelscope.models.audio.vc.src.encoderr   Z.modelscope.models.audio.vc.src.sv_models.DTDNNr   Z&modelscope.models.audio.vc.src.vocoderr   r   Zmodelscope.models.baser	   Zmodelscope.models.builderr
   Zmodelscope.utils.constantr   Zregister_moduleZvoice_conversionZ
unetvc_16kr   r   r   r   r   <module>   s   