o hee*@sddlZddlZddlZddlmZddlmZddlmZej e Z ej e dZej e dZeZdZeeZhdZd d Zid d d d dd dddddddddddddddddd dd dd dddd d!d id"d d#d d$d d%d d&d d'd d(d d)d d*d d+d d,d d-d d.d d/d0d1d0d2d0d3d0d d d4Zd5d6Zd7d8Zd9d:Zd;d<ZeZd=d>Zd?d@ZddlZddlZeZ e!dAZ"e!dBZ#e!dCZ$e!dDZ%e!dEZ&e!dFZ'dGdHdIDZ(dJdHdKDZ)dLdHdMDZ*dNdHdODZ+dPdQZ,dRdSZ-dTdUZ.dVdWZ/dXdYZ0dZd[Z1d\d]Z2d^d_Z3d`daZ4dbdcZ5dddeZ6e7dfkrMe8e5dgdSdS)hN)G2p)DebertaV2Tokenizer)symbolsz cmudict.repzcmudict_cache.picklezmicrosoft/deberta-v3-large>GZHZUW2ZUH1ZIY2ZIY0ZOY2ZER1ZAE2ZAH1ZEY2ZAA2BZOW1SNVZJHZAO1ZER2ZAE0ZOY0ZIH2LZEH0CHZOW2ZEH2DZER0PZEY1WZSHTHZIH0ZEH1ZAO0TFZAA1ZIHZOY1ZUH0KZDHZOW0MZYZEY0ZAE1ZIY1ZAY2ZAH2ZUH2ZNGZIH1ZAY0ZUW1ZAW1ZAW2GERZAW0ZAA0ZAY1ZUW0RZAH0ZAO2HHcCsPdddddddddddddd }||vr||}|tvr |S|tvr&d}|S) N,.!?...r ) :;,。!? ·、…··· ・・・vUNK)keysr)phrep_mapr0!D:\Code\tts-9nine\text\english.pypost_replace_ph\s* r2rrr r!r"rr#rr$rr%u.r(rr)r*r&u・r'$u“'u”"u‘u’u(u)()u《u》u【u】[]u—-u−u~~)u「u」cCs2tdddtD}|dd|}|S)N|css|]}t|VqdSN)reescape).0pr0r0r1 sz&replace_punctuation..cSs t|Sr=)r/group)xr0r0r1s z%replace_punctuation..)r>compilejoinr/r-sub)textpattern replaced_textr0r0r1replace_punctuations rLc Csi}d}ttP}|}d}|rP||kr>|}|d}|d}|dd}g||<|D]}|d} ||| q/|d}|}|sWd|SWd|S1s[wY|S)N1z rz -  )open CMU_DICT_PATHreadlinestripsplitappend) g2p_dict start_lineflineZ line_indexZ word_splitwordZsyllable_splitZsyllableZ phone_splitr0r0r1 read_dicts2     r[cCs<t|d}t||WddS1swYdS)Nwb)rPpickledump)rV file_path pickle_filer0r0r1 cache_dicts "racCsZtjtr#ttd}t|}Wd|S1swY|St}t|t|S)Nrb) ospathexists CACHE_PATHrPr]loadr[ra)r`rVr0r0r1get_dicts     rhcCs8d}td|rt|dd}|dd}||fS)Nrz\d$rN)r>searchintlower)phntoner0r0r1 refine_phs    rocCsTg}g}|D]}tt|D]}||}t|\}}||||qq||fSr=)rangelenrorU)Z syllablestonesphonemesZphn_listirmrnr0r0r1refine_syllabless   ruz([0-9][0-9\,]+[0-9])z([0-9]+\.[0-9]+)u£([0-9\,]*[0-9]+)z\$([0-9\.\,]*[0-9]+)z[0-9]+(st|nd|rd|th)z[0-9]+cCs*g|]}td|dtj|dfqS)z\b%s\.rrN)r>rF IGNORECASEr@rDr0r0r1 srx))ZmrsZmisess)mrZmister)drZdoctor)stZsaint)coZcompany)ZjrZjunior)majmajor)gengeneral)ZdrsZdoctors)revZreverend)ltZ lieutenant)ZhonZ honorable)sgtZsergeant)captZcaptain)ZesqZesquire)ltdZlimited)colZcolonel)ftZfortcC&g|]}td|d|dfqSz%srrNr>rFrwr0r0r1rx) ruɹ)æe)uɑa)uɔoðzuθs)uɛr)uɪrt)uʊu)ʒʥ)ʤruˈu↓cCrrrrwr0r0r1rx%r)rrr)ruʑ)rudʑrcCrrrrwr0r0r1rx2s)r)rudʒ)uʧutʃcCs|d}|d}t|dkr|dS|drt|dnd}t|dkr0|dr0t|dnd}|rN|rN|dkrrH_comma_number_rer _pounds_re _dollars_rer_decimal_number_rer _ordinal_rer _number_rerrIr0r0r1normalize_numbersisrcCs"t|}t|}tdd|}|S)Nz([,;.\?\!])([\w])z\1 \2)rrLr>rHrr0r0r1text_normalizessrcCs>dg|}t|D]}t|}||}||d7<q |S)NrrN)rpminindex)n_phonen_wordphones_per_wordtask min_tasks min_indexr0r0r1distribute_phonezs   rcCstd|}dd|D}|S)Nz([,;.\?\!\s+])cSsg|] }|dkr|qS)r)rS)r@rZr0r0r1rxszsep_text..)r>rT)rIwordsr0r0r1sep_texts rcCsg}g}t|}dd|D}|D]d}|tvr3tt|\}}|dd|D||qttddt|}g}g}|D]!} | tvr[t | \} } || || qD|| |dqD|dd|D||qg} t ||D]\} } t | }t | }t ||}| |7} q}dgd d|Ddg}dgd d|Ddg}d g| d g} t |t |ksJ|t |t | ksJ|||| fS) NcSsg|]}t|qSr0) tokenizertokenizer@rtr0r0r1rxszg2p..cSg|]}t|qSr0r2rr0r0r1rxcSs|dkS)NrOr0)rAr0r0r1rEszg2p..rcSrr0rrr0r0r1rxr_cSg|] }|D]}|qqSr0r0r@rtjr0r0r1rxcSrr0r0rr0r0r1rxrrN)ruppereng_dictrurUlistfilter_g2parparoziprqrsum)rIphonesrrrtokensrZZphnsZtnsZ phone_listr.tnword2phtokenphoneme phone_lenword_lenaaar0r0r1g2psB           rcCsddlm}|||S)Nr)english_bert_mock)rIrget_bert_feature)rIrrr0r0r1rs  r__main__zBIn this paper, we propose 1 DSPGAN, a GAN-based universal vocoder.)9r]rcr>Zg2p_enr transformersrrIrrddirname__file__current_file_pathrGrQrfrZ LOCAL_PATHfrom_pretrainedrrr2r/rLr[rarhrroruinflectenginerrFrrrrrrZ_abbreviationsZ _lazy_ipaZ _lazy_ipa2Z _ipa_to_ipa2rrrrrrrrrrr__name__printr0r0r0r1s     K      !"#(           .