o
    Qi                     @   sf   d dl Z d dlmZ d dlZd dlZd dlZd dlZdZdd Z	de
e e
e
e  B defdd	ZdS )
    N)BytesIOi>  c                 C   s&   t | }dd |jD }|sdS dS )Nc                 S   s   g | ]	}|j d kr|qS )audio)type).0stream r   V/home/ubuntu/.local/lib/python3.10/site-packages/qwen_omni_utils/v2_5/audio_process.py
<listcomp>   s    z-_check_if_video_has_audio.<locals>.<listcomp>FT)avopenstreams)
video_path	containeraudio_streamsr   r   r   _check_if_video_has_audio   s
   
r   conversationsuse_audio_in_videoc                 C   sj  g }t | d tr| g} | D ]}|D ]}t |d tsq|d D ]}|d dkrd|v s3d|v r|d|d}|dd}|dd	}t |tjro|jd
krWtd||t	t
| |d	u red	nt	t
|   q"|dr|dd
\}	}
tt|
}n|ds|drtj|}n{|dr|tdd	 }nm|}njtd||r|d dkrd|v sd|v r|d|d}|dd}|dd	}t|sJ d|ds|drtj|}n"|drtj|tdd	 }ntj|}ntd|q"|tj|t
||d	ur || nd	dd  q"qqt|dkr3d	}|S )z
    Read and process audio info

    Support dict keys:

    type = audio
    - audio
    - audio_start
    - audio_end

    type = video
    - video
    - video_start
    - video_end
    r   contentr   r   	audio_urlaudio_startg        	audio_endN   zSupport only mono audioz
data:audiozbase64,zhttp://zhttps://zfile://zUnknown audio {}video	video_urlvideo_start	video_endz7Video must has audio track when use_audio_in_video=TruezUnknown video {})sroffsetduration)
isinstancedictlistgetnpndarrayndim
ValueErrorappendintSAMPLE_RATE
startswithsplitr   base64	b64decode	audioreadffdecFFmpegAudioFilelenformatr   librosaload)r   r   audiosconversationmessageelepathr   r   _base64_datadatar   r   r   process_audio_info   sz   


&

5r=   )r,   ior   r.   r
   r3   numpyr#   r)   r   r!   r    boolr=   r   r   r   r   <module>   s    &