o
    㥵i_                     @   s  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 d dlZd dlZd dlZd dlZd dlmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZmZmZ ede  e! Z"de"v rmdZ#ndZ#e$e j%&dd Z'e$e j%&ddZ(dZ)ej*dde' de( id e+  ej,ej-e)d edd			d3de.de.de.ej/B fddZ0e1 d e2e
 d!e3fd"d#Z4e5 e6d$ej7d%dd&ej7d'dd&ej7d(dd&ej7d)d*d&ej7d+de
d,d$e.d-e$de.de.d.e$d/e
fd0d1Z8e9d2kre8  dS dS )4    N)	timedelta)	lru_cache)Path)Random)compose
initialize)instantiate)logger)	OmegaConf)AUDIO_EXTENSIONS
list_filesload_filelistevalffmpeg	soundfileSLURM_PROCIDSLURM_NTASKS   z<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> | {extra[rank]} - <level>{message}</level>rankzRANK: z / )extra)format)maxsizemodded_dac_vq'checkpoints/openaudio-s1-mini/codec.pthcudaconfig_namecheckpoint_pathdevicec                 C   s   t ddd t| d}W d    n1 sw   Y  t|}tj||d}d|v r.|d }tdd |D r@d	d
 | D }|j|dd |  |	| t
d |S )Nz1.3z../../fish_speech/configs)version_baseconfig_path)r   )map_location
state_dictc                 s   s    | ]}d |v V  qdS )	generatorN ).0kr#   r#   J/home/ubuntu/.local/lib/python3.10/site-packages/tools/vqgan/extract_vq.py	<genexpr>@   s    zget_model.<locals>.<genexpr>c                 S   s&   i | ]\}}d |v r| d d|qS )z
generator. )replace)r$   r%   vr#   r#   r&   
<dictcomp>A   s
    zget_model.<locals>.<dictcomp>F)strictzLoaded model)r   r   r   torchloadanyitemsload_state_dictr   tor	   info)r   r   r   cfgmodelr!   r#   r#   r&   	get_model/   s&   

r6   filesreturnc                 C   s  g }g }g }d }}| D ]k}zt jt|td\}}	W n ty8 }
 ztd| d|
  W Y d }
~
qd }
~
ww |jd dkrG|jddd}t j	
| |	|jjd }|t||jj 7 }t|t|}|| |t| || q|} t|D ]\}}tjj	|d|t| fd||< q~tj|dd	d d d f }tj||jtjd
}|||\}}|  }t| |||D ].\}}}}|d d d |f }t|dd}t || W d    n1 sw   Y  q|S )Nr   )backendzError reading z: r   T)dimkeepdimconstant)r:   )r   dtype.npywb)!
torchaudior.   strr9   	Exceptionr	   errorshapemean
functionalresampler   spec_transformsample_ratelenmaxappend	enumerater-   nnpadstacktensorr   longencodecpunumpyzipopenwith_suffixnpsave)r7   r5   wavsaudio_lengths	new_files
max_length
total_timefilewavsreiaudiosindicesfeature_lengthsoutputslengthfeatureaudio_lengthfr#   r#   r&   process_batchO   sT   
$rm   folderz--num-workers)defaultz--config-namez--checkpoint-pathz--batch-size@   z
--filelist)ro   typenum_workers
batch_sizefilelistc                 C   sz  |dkrt |krt dksJ dtd| d tj r9tjdd }|d u r3t	t
tj }n	|d}ndg}g }t
|D ]0}tj }	t||t|  |	d< t||	d< t||	d	< |tjtjgtj  |	d
 qB|D ]}
|
  qutd d S td |rdd t|D }nt| tddd}tdt| d dd |D }t|}|td t  }tdt| d| d d}t }d}t||}tt
dt||D ]L\}}||||  }t||}||7 }|t|7 }|d d dkr)t | | t||  }td| d|d dddt t!|d d   qtd!t| d|d dd" d S )#Nr   z6You should either use SLURM or this launcher, not bothz	Spawning z workersCUDA_VISIBLE_DEVICES,r(   r   r   )envzAll workers finishedzStarting workerc                 S   s   g | ]}|d  qS )r   r#   )r$   rd   r#   r#   r&   
<listcomp>   s    zmain.<locals>.<listcomp>TF)	recursivesortzFound z filesc                 S   s&   g | ]}t |d  st |qS )r>   )r   rX   exists)r$   rl   r#   r#   r&   rx      s   & zProcessing /r   
   z
Processed z files, i  z.2fz hours of audio, zETA: )secondsszFinished processing z hours of audio)"
WORLD_SIZEr	   r3   r-   r   is_availableosenvirongetlistrangedevice_countsplitcopyrA   rJ   rL   spPopensys
executableargvwaitr   r   r   printRANKtimer6   rM   rm   r   round)rn   rr   r   r   rs   rt   visible_devices	processesrd   rw   pr7   total_filesr_   
begin_timeprocessed_filesr5   n_batchidxbatch
batch_timeetar#   r#   r&   main   sv   








r   __main__)r   r   r   ):r   
subprocessr   r   r   datetimer   	functoolsr   pathlibr   randomr   clickrU   rY   r-   r@   hydrar   r   hydra.utilsr   logurur	   	omegaconfr
   fish_speech.utils.filer   r   r   register_new_resolverr   list_audio_backendsbackendsr9   intr   r   r   r   logger_format	configureremoveaddstderrrA   r   r6   inference_moder   floatrm   commandargumentoptionr   __name__r#   r#   r#   r&   <module>   s    7
V
