o
    㥵i                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ h dZ	ddhZ
d	eeB d
edB fddZdd Zdd Ze ddfd	eeef dee deded
ee f
ddZd	eeB d
eeeeeef  fddZdS )    N)Path)Union)logger)	natsorted>
   .aac.aif.m4a.mp3.ogg.wav.wma.aifc.aiff.flacz.mp4z.avipathreturnc                 C   sF   t | }| du rd S t|dtjjd}t|dkrd S |d S )NFz*.ckpt)keyr   )r   existssortedglobosr   getmtimelen)r   ckpt_dirckpts r   J/home/ubuntu/.local/lib/python3.10/site-packages/fish_speech/utils/file.pyget_latest_checkpoint   s   r   c                 C   sL   | rt |  s
d S t| d}| }W d    |S 1 sw   Y  |S )Nrb)r   r   openread)	file_pathwav_filewavr   r   r   audio_to_bytes)   s   

r%   c                 C   sR   t | }| r'| r'|jddd}| W  d    S 1 s"w   Y  | S )Nrutf-8encoding)r   r   is_filer    r!   )ref_textr   filer   r   r   read_ref_text1   s    r-   FT
extensions	recursivesortc                    sL   t  tr	t    std  d fdd|D }|r$t|}|S )ao  List files in a directory.

    Args:
        path (Path): Path to the directory.
        extensions (set, optional): Extensions to filter. Defaults to None.
        recursive (bool, optional): Whether to search recursively. Defaults to False.
        sort (bool, optional): Whether to sort the files. Defaults to True.

    Returns:
        list: List of files.
    z
Directory z does not exist.c                    s&   g | ]}  d | D ]}|qqS )*)rglob).0extr,   r   r   r   
<listcomp>Q   s   & zlist_files.<locals>.<listcomp>)
isinstancestrr   r   FileNotFoundErrorr   )r   r.   r/   r0   filesr   r5   r   
list_files9   s   
r;   c                 C   sh  t  }g }d\}}ddgddgdgd}t| dddw}| D ]j}| jd	d
d}t|dkr:td|  q |\}	}
}}t|	}| 	 }|dkrPd}|dv s[J d| || }||v rptd|  |d7 }q |
 std|  |d7 }q |||
||f q W d   n1 sw   Y  |dkrtd|  |dkrtd|  |S )z+
    Load a Bert-VITS2 style filelist.
    )r   r   zhenjp)r<   r>   r=   r&   r'   r(   |   )maxsplit   zInvalid line: jazInvalid language zDuplicated file:    zFile not found: Nr   zTotal duplicated files: zTotal files not found: )setr    	readlinesstripsplitr   r   warningr   lowerr   append)r   r:   resultscount_duplicatedcount_not_foundLANGUAGE_TO_LANGUAGESflinesplitsfilenamespeakerlanguagetextr,   	languagesr   r   r   load_filelistY   sH   rX   )r   pathlibr   typingr   logurur   natsortr   AUDIO_EXTENSIONSVIDEO_EXTENSIONSr8   r   r%   r-   rE   boollistr;   tuplerX   r   r   r   r   <module>   s6    


* 