o
    )i                  	   @   s$  d dl Z d dlmZ d dlmZ d dlmZmZ d dlZ	d dl
mZ d dlmZ ddlmZ zd dlZW n eyA   edZY nw zd dlZW n eyU   ed	ZY nw d
eje	j dededeje	j fddZd
eje	j dedefddZG dd dZG dd deeejef  ZdS )    N)BytesIO)Path)LiteralOptional)PlaceholderModule   )MediaIOlibrosa	soundfileaudioorig_sr	target_srreturnc                C   s   t j| ||dS )Nr   r   )r	   resample)r   r   r    r   a/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/multimodal/audio.pyresample_audio_librosa   s   r   c                C   sD   dd l }||kr|j| d|| S ||k r |j| || dS | S )Nr   r   )Zscipy.signalsignalZresample_poly)r   r   r   scipyr   r   r   resample_audio_scipy#   s   r   c                   @   sV   e Zd ZdZ		ddee ded fddZd	ej	e
j d
edej	e
j fddZdS )AudioResamplerz,Resample audio data to a target sample rate.Nr	   r   method)r	   r   c                 C   s   || _ || _d S N)r   r   )selfr   r   r   r   r   __init__6   s   
zAudioResampler.__init__r   r   r   c                C   sX   | j d u r	td| jdkrt||| j dS | jdkr#t||| j dS td| j d)NzBAudio resampling is not supported when `target_sr` is not providedr	   r   r   zInvalid resampling method: z.. Supported methods are 'librosa' and 'scipy'.)r   RuntimeErrorr   r   r   
ValueError)r   r   r   r   r   r   r   >   s   


zAudioResampler.resample)Nr	   )__name__
__module____qualname____doc__r   floatr   r   nptNDArraynpfloatingr   r   r   r   r   r   3   s     


r   c                       s   e Zd Zd fddZdedeejef fddZ	de
de
deejef fd	d
Zdedeejef fddZdeejef de
fddZ  ZS )AudioMediaIOr   Nc                    s   t    || _d S r   )superr   kwargs)r   r)   	__class__r   r   r   V   s   

zAudioMediaIO.__init__datac                 C   s   t jt|d dS N)sr)r	   loadr   )r   r,   r   r   r   
load_bytes`   s   zAudioMediaIO.load_bytes
media_typec                 C   s   |  t|S r   )r0   base64	b64decode)r   r1   r,   r   r   r   load_base64c   s   zAudioMediaIO.load_base64filepathc                 C   s   t j|d dS r-   )r	   r/   )r   r5   r   r   r   	load_filej   s   zAudioMediaIO.load_filemediac                 C   sX   |\}}t  }tj|||dd | }W d    n1 sw   Y  t|dS )NZWAV)formatzutf-8)r   r
   writegetvaluer2   	b64encodedecode)r   r7   r   r.   bufferr,   r   r   r   encode_base64m   s   
zAudioMediaIO.encode_base64)r   N)r   r   r    r   bytestupler#   r$   r"   r0   strr4   r   r6   r>   __classcell__r   r   r*   r   r'   T   s    

$r'   )r2   ior   pathlibr   typingr   r   numpyr%   Znumpy.typingr#   Z
vllm.utilsr   baser   r	   ImportErrorr
   r$   r&   r"   r   r   r   r@   r'   r   r   r   r   <module>   sH   


	

"!