o
    i                     @   s^   d Z ddlZddlZddlmZmZ ddlZddlZddlm	Z	 ddl
mZ G dd dZdS )z
ZipEnhancer Module - Audio Denoising Enhancer

Provides on-demand import ZipEnhancer functionality for audio denoising processing.
Related dependencies are imported only when denoising functionality is needed.
    N)OptionalUnion)pipeline)Tasksc                	   @   sR   e Zd ZdZddefddZdefddZ			
ddedee dedefddZ	d	S )ZipEnhancerz$ZipEnhancer Audio Denoising Enhancer-iic/speech_zipenhancer_ans_multiloss_16k_base
model_pathc                 C   s   || _ ttj| j d| _dS )zr
        Initialize ZipEnhancer
        Args:
            model_path: ModelScope model path or local path
        )modelN)r   r   r   acoustic_noise_suppression	_pipeline)selfr    r   F/home/ubuntu/.local/lib/python3.10/site-packages/voxcpm/zipenhancer.py__init__   s
   zZipEnhancer.__init__wav_pathc                 C   s@   t |\}}t j||}t j|d| }t ||| dS )zk
        Audio loudness normalization
        
        Args:
            wav_path: Audio file path
        iN)
torchaudioload
functionalloudnessgainsave)r   r   audiosrr   normalized_audior   r   r   _normalize_loudness   s   zZipEnhancer._normalize_loudnessNT
input_pathoutput_pathnormalize_loudnessreturnc                 C   s   t j|std| |du r+tjddd}|j}W d   n1 s&w   Y  z| j||d |r:| | |W S  t	yh } z |r]t j|r]zt 
| W n	 ty\   Y nw td| d}~ww )a  
        Audio denoising enhancement
        Args:
            input_path: Input audio file path
            output_path: Output audio file path (optional, creates temp file by default)
            normalize_loudness: Whether to perform loudness normalization
        Returns:
            str: Output audio file path
        Raises:
            RuntimeError: If pipeline is not initialized or processing fails
        z!Input audio file does not exist: NFz.wav)deletesuffix)r   z#Audio denoising processing failed: )ospathexistsFileNotFoundErrortempfileNamedTemporaryFilenamer   r   	ExceptionunlinkOSErrorRuntimeError)r   r   r   r   tmp_fileer   r   r   enhance+   s*   
zZipEnhancer.enhance)r   )NT)
__name__
__module____qualname____doc__strr   r   r   boolr.   r   r   r   r   r      s    r   )r2   r!   r%   typingr   r   r   torchmodelscope.pipelinesr   modelscope.utils.constantr   r   r   r   r   r   <module>   s    