o GgpH@sddlZddlZddlmZddlmZddlmZddlm Z ddlZddl m Z ddl mZddlZddlmZddlZddlmZddlZddlZddlZejZej jd d d gd Zd dgZdedefddZdefddZGdddZ GdddZ!GdddZ"Gdddej#j$j%Z&ddZ'e(d krd!gZ)d"gZ*d#gZ+ e&e)e*e+d$d%d&d$d'ddd'd'd(d)d*Z,ee,d'd+d'd e'd,Z-dZ.ee-D]*Z/e/d-e/d.e/d/Z0Z1Z2e3e1e3e,j45e1dde/d0d67e3d1e.dSdS)2N)TextData) FloatData)Base) LanceReader) DataLoader)tqdm) pad_sequencespawnT)force)u 纯音乐u编曲u作词u作曲u调音u 制作人u 录音师musicendtimelyriccCsX|dkrdStD] }||vrdSqtD] }||kr!dSqt|dkr*dSdS)Ng?FrT)filter_keyword_listfilter_full_liststriplowerlen)r rfilter_keyword filter_fullr/mnt/sfs/music/hkchen/workspace/F5-TTS-HW/exps/base_model_without_bpm_pure_music_mulan_style_emb/f5_tts/model/custom_dataset.py check_lyric&s rlyricscCsg}|}|dD]9}z2|dd|dd}}|}|d\}}t|dt|}t||s7Wq |||fWq Yq |S)N  :<)rsplitintfloatrappend)rlyrics_with_timeliner rminssecsrrr parse_lyrics4s r(c@$eZdZddZddZddZdS)TiktokenTokenizercCstd|_dS)Ngpt2)tiktoken get_encoding tokenizerselfrrr__init__HszTiktokenTokenizer.__init__cCs|j|}dd|D}|S)NcSg|]}|dqSrr.0xrrr Lz,TiktokenTokenizer.encode..)r.encode)r0texttokenrrrr9Js zTiktokenTokenizer.encodecCs|jdd|DS)NcSsg|]}|dqSr3rr4rrrr7Pr8z,TiktokenTokenizer.decode..)r.decoder0r;rrrr<OszTiktokenTokenizer.decodeN__name__ __module__ __qualname__r1r9r<rrrrr*Gs r*c@r)) CNENTokenizercCftdd}t|d|_Wdn1swYdd|jD|_ddlm}||_dS)N./f5_tts/g2p/g2p/vocab.jsonrvocabcSi|]\}}||qSrrr5kvrrr Vz*CNENTokenizer.__init__..r) chn_eng_g2p) openjsonloadphone2iditemsid2phonef5_tts.g2p.g2p_generationrMr.)r0filerMrrrr1S   zCNENTokenizer.__init__cCs ||\}}dd|D}|S)NcSr2r3rr4rrrr7[r8z(CNENTokenizer.encode..)r.r0r:phoner;rrrr9YszCNENTokenizer.encodecdfdd|DS)N|cg|] }j|dqSr3rSr4r/rrr7^z(CNENTokenizer.decode..joinr=rr/rr<]zCNENTokenizer.decodeNr>rrrrrBR rBc@r))MaskGCTTokenizercCrC)NrDrErFcSrGrrrHrrrrKerLz-MaskGCTTokenizer.__init__..r)text_tokenizer) rNrOrPrQrRrSrTrcr.)r0rUrcrrrr1brVzMaskGCTTokenizer.__init__cCs&|j|dd\}}dd|D}|S)NautocSr2r3rr4rrrr7jr8z+MaskGCTTokenizer.encode..)r.tokenizerWrrrr9hszMaskGCTTokenizer.encodecrY)NrZcr[r3r\r4r/rrr7mr]z+MaskGCTTokenizer.decode..r^r=rr/rr<lr`zMaskGCTTokenizer.decodeNr>rrrrrbararbc @seZdZedddddddddddf d eed eed eefd d ZddeedefddZddZ ddZ ddZ ddZ dS)LanceDiffusionDatasetrDTFr+fp16 prompt_lances lrc_lances latent_lancescCs\||_||_||_| |_||_||_||_d|_||||_|dkr(t |_ n|dkr1t |_ n|dkrEt dddl m}m}t|_ g|_i|_||jtdd ||jtd |jrg||jtd | rm| rmJ||_| |_| |_| |_| |_t|j|_|d krtj|_n|d krtj |_n|dkrtj!|_n|dkrtj |_t"#ddS)Nrhr+ZcnenZmaskgctz!!!herer)rMrclatentTlrcpromptrjbf16fp32fp8*)$rkrlrmuse_style_prompt max_frames min_frames sampling_ratedownsample_ratemax_secsr*r.rBprintrTrMrcrblance_connectionsfile_lst load_lancerrr( align_lyrics lyrics_sliceskip_empty_lyrics lyrics_shiftlistvaluestorchfloat16 feature_dtypebfloat16float32randomseed)r0rkrlrmrvrwrxryr(rrrrurtokenizer_type precisionrMrcrrrr1psN      zLanceDiffusionDataset.__init__ lance_paths target_clsc Cst|j}g}t|D]K\}}t||d} | } t| d|d|dD]+} |j| jd} | dur@| ||f|j| j|<q%|rO|| ||fi|j| j<q% q%| | q |j |dS)uI lance_paths是路径, target_cls为对应类别 )rzload z, idx )descN) rr| enumeraterget_idsrr}getdata_idr#extend) r0rr target_fieldcreateconnection_offset connectionsidxlpreaderidsiitemrrrr~s   z LanceDiffusionDataset.load_lancec CsRz||\}}|j||jgd}W|Sty(}zWYd}~dSd}~ww)Nr)r|get_datas_by_rowids_rowid Exception)r0rfield reader_idxerrr load_items zLanceDiffusionDataset.load_itemc CsN||d}|j}|jrt|jdkrtd|||d}|jr)||d}nd}t|j}d}|durL|j rBtd|tj dtj d}n |j rDt |j}|j rtj |jftj d}|D][\}} ||jkrnqd|j| } |t| 7}tj| tj d} t||j|j} |jdkrt|j |j} | | } td| } | |jkrqd| d|j| || t|j| | jd<qdn|j rt|dkrtd|tdt|d} || \}}|| d \}}t||j|j} t||j|j}|dddd| |f}|j|}tj|tj d}n>g}|D]}|d|jkr)n||j|d d 7}qtj|tj d}t|}n|j|j}tj|tj d}t|}|jrj|dkrjtd |d ||jrwt|j}nt d d}|d}|ddd|jf}|ddd }||j}||j}|||fS)NrorzEmpty or short lyrics: rnrpr)dtyper.zEmpty or short lyrics(z): i) rdatarr ValueErrorrur from_numpycopyrzeroslongr(rrvrzr.r9tensorr!rxryrrrandintmaxminshapesqueeze transposetor)r0rroZ input_lrcrnrpZ lrc_count lrc_with_time time_startr%Zlrc_line_tokens frame_start shift_framesZlrc_idxtime_end_ frame_endZ lrc_tokensrrrr get_triples            .           z LanceDiffusionDataset.get_triplec Csz|} z||j|\}}}|jd|jkr|||d}|WSty<}ztd|d}WYd}~qd}~ww)NTri)rprornrr) rr}rrwrrr__len__ __getitem__)r0indexrrprornrrrrrrs  z!LanceDiffusionDataset.__getitem__cCs t|jS)N)rr}r/rrrr2s zLanceDiffusionDataset.__len__N)F) r?r@rAMAX_INTrstrr1rr~rrrrrrrrrfos $7Q rfcCsPdd|D}dd|D}dd|D}tdd|D}tdd|D}tdd|D}|}|}|} g} |D]} tjj| d|| jd f} | | qCg} |D]}tjj|d||jd f}| |q^g}|D]}tjj|d||jd f}||qyt| }t| }t|}||||||d S) NcSg|]}|dqS)rnrr5rrrrr76r8z%custom_collate_fn..cSr)rprrrrrr77r8cSr)rorrrrrr78r8cSg|]}|jdqSrir)r5rnrrrr7:rLcSrrr)r5rprrrr7;rLcSrrr)r5rorrrr7<rLrri)rprornprompt_lengths lrc_lengthslatent_lengths) r LongTensoramaxnn functionalpadrr#stack)batch latent_list prompt_listlrc_listrrrmax_prompt_lengthmax_latent_lengthmax_lrc_lengthpadded_prompt_listrp padded_promptZpadded_lrc_listroZ padded_lrcpadded_latent_listrn padded_latent prompt_tensor lrc_tensor latent_tensorrrrcustom_collate_fn5s2      r__main__z@/home/node59_tmpdata3/zqning/testdata/dit_test_lance/lance_t5ebdz>/home/node59_tmpdata3/zqning/testdata/dit_test_lance/lance_lrczA/home/node59_tmpdata3/zqning/testdata/dit_test_lance/lance_latentrhdrgrrir+)r(rrrrurrF)dataset batch_sizeshuffle num_workers pin_memory collate_fnrprornrzcnt: )8r torch_npuZ%f5_tts.model.alsp_lance.data.textdatarZ$f5_tts.model.alsp_lance.data.npydatarZ!f5_tts.model.alsp_lance.data.baserZf5_tts.model.alsp_lance.toolsrtorch.multiprocessingmultiprocessingmptorch.utils.datarrrr,torch.nn.utils.rnnr tracebacksysrOmaxsizerset_start_methodrrr"rrr(r*rBrbutilsrDatasetrfrr?Z prompt_pthZlrc_pthZ latent_pthldd dataloadercntrrprornr{r.r<numpytolistrrrrsn          G%J ,