o
    *j(                     @   s   d dl Z d dlmZmZ d dl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 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ejejejd
G dd deZdS )    N)AnyDict)File)	Pipelines)
OutputKeys)InputPipeline)	PIPELINES)
audio_norm)Tasks)module_namec                          e Zd ZdZdZ fddZdedeee	f fddZ
deee	f deee	f fd	d
Zdeee	f deee	f fddZ  ZS )ANSPipelineANS (Acoustic Noise Suppression) Inference Pipeline .

    When invoke the class with pipeline.__call__(), it accept only one parameter:
        inputs(str): the path of wav file
    >  c                    2   t  jdd|i| | j  |dd| _dS z
        use `model` and `preprocessor` to create a kws pipeline for prediction
        Args:
            model: model id on modelscope hub.
        modelstream_modeFN super__init__r   evalgetr   selfr   kwargs	__class__r   h/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/pipelines/audio/ans_pipeline.pyr         
zANSPipeline.__init__inputsreturnc                 K      | j rtdt|trtt|\}}nt|tr,t	|}tt|\}}n
tdt
| dt|jdkrE|d d df }|| jkrStj||| jd}t|}|tj}t|d|jd g}||jd dS Nz(This model does not support stream mode!zUnsupported type .   r   )Zorig_srZ	target_sr)ndarraynsamplesr   	TypeError
isinstancebytessfreadioBytesIOstrr   typelenshapeSAMPLE_RATElibrosaZresampler
   astypenpfloat32Zreshaper   r"   Zpreprocess_paramsZdata1fsZ
file_bytesdatar   r   r    
preprocess)   $   



zANSPipeline.preprocessc                 K   s  |d }t |tjr|  }|d }d}d}t|d }td|j |j\}}	|	|d kr3d}|	|k rJt	
|t	|jd	 ||	 fgd
}nM|	|| k rn|| |	 }
td|
 t	
|t	|jd	 |
fgd
}n)|	| | d	kr|	|	| | |  }
td|
 t	
|t	|jd	 |
fgd
}td|j t  tt	|| j}|j\}}	|rt	|	}|| d }d	}|| |	krtd| t|d d ||| f d}| |d d	   }|| | }|d	kr|d |  |||< n|||  ||| |< ||7 }|| |	ksn| t|dd d	   }W d    n	1 s9w   Y  |d | d t	j }tj|iS )Nr(   r)   Fr         ?	inputs:{}x   Tr   r'   padding: {}inputs after padding:{}   zcurrent_idx: {}Znoisywav_l2   r,   torchZTensorcpunumpyintprintformatr5   r9   ZconcatenateZzerosZno_gradZ
from_numpyr:   toZdevicedictr   r8   int16tobytesr   
OUTPUT_PCMr   r"   Zforward_paramsr(   r)   decode_do_segementZwindowZstridebtpaddingZoutputsZgive_up_lengthZcurrent_idxZ	tmp_inputZ
tmp_outputZ	end_indexr   r   r    forward=   s   





zANSPipeline.forwardc                 K   6   d|  v rt|d tj|tj tjd| j |S NZoutput_path)Zdtype	keysr.   writer9   Z
frombufferr   rT   rR   r6   r   r"   r   r   r   r    postprocessv      zANSPipeline.postprocess__name__
__module____qualname____doc__r6   r   r   r   r2   r   r>   rZ   ra   __classcell__r   r   r   r    r      s    


*9r   c                       r   )ANSZipEnhancerPipeliner   r   c                    r   r   r   r   r   r   r    r      r!   zANSZipEnhancerPipeline.__init__r"   r#   c                 K   r$   r%   r*   r;   r   r   r    r>      r?   z!ANSZipEnhancerPipeline.preprocessc                 K   s  |d }t |tjr|  }|d }d}d}t|d }td|j |j\}}	|	|d kr7d}td	 |	|k rNt	
|t	|jd
 ||	 fgd}nS|r|	|| k rt|| |	 }
td|
 t	
|t	|jd
 |
fgd}n-|	| | d
kr|	| | d | | |	 }
td|
 t	
|t	|jd
 |
fgd}td|j t  tt	|| j}|j\}}	|r7t	|	}|| d }d
}|| |	kr.td||d |	 dd t|d d ||| f d}| |d d
   }|| | }|d
kr|d |  |||< n|||  ||| |< ||7 }|| |	kstd|d n| t|dd d
   }W d    n	1 sRw   Y  |d | d t	j }tj|iS )Nr(   r)   Fi }  r@   rA      TrV   r   r'   rC   rD   rE   zcurrent_idx: {} {:.2f}%d    )endrF   rG   rH   rI   rU   r   r   r    rZ      s   
	




zANSZipEnhancerPipeline.forwardc                 K   r[   r\   r]   r`   r   r   r    ra      rb   z"ANSZipEnhancerPipeline.postprocessrc   r   r   r   r    ri      s    


*Iri   )r0   typingr   r   r7   rL   r9   Z	soundfiler.   rJ   Zmodelscope.fileior   Zmodelscope.metainfor   Zmodelscope.outputsr   Zmodelscope.pipelines.baser   r   Zmodelscope.pipelines.builderr	   Z"modelscope.utils.audio.audio_utilsr
   Zmodelscope.utils.constantr   Zregister_moduleZacoustic_noise_suppressionZspeech_frcrn_ans_cirm_16kr   Z)speech_zipenhancer_ans_multiloss_16k_baseri   r   r   r   r    <module>   s.   h