Files
soprano_to_rvc/__pycache__/headless_rvc.cpython-310.pyc

142 lines
13 KiB
Plaintext
Raw Normal View History

2026-01-13 00:20:55 +02:00
o
Nvei<65>T<00>@s<>dZddlZddlZddlZddlZddlZddlZddlmZej ej
2026-01-13 00:20:55 +02:00
dd<05>e<05> e <0C>Z dejd<ejdkr<d ejd
<ee<10>jZe<01><13>Zed Zej<16>dee<15><01>ddlZdd lmZmZddlZddlZddl Z ddl!m"m#Z$ddl%Z%dd l&m'Z'ddl(m)Z*ddl+m,Z-ddl.m/Z/e<1A>Z0e<1A>Z1e2e<1B>d<10>Z3ga4Gdd<12>dej5<6A>Z6e7e3<65>D]Z8e6e0e1<65>Z9de9_:e9<65>;<3B>t4<74><e9<65>q<>dd<15>Z=e<06>>e=<3D>dd<17>Z?Gdd<19>d<19>Z@Gdd<1B>d<1B>ZAdd<1D>ZBe dkr<>eB<65>dSdS)z<>
Headless RVC Voice Conversion
Uses the RVC GUI logic without the GUI window for headless operation.
Configuration via JSON file or command-line arguments.
<EFBFBD>N)<01>Pathz%(levelname)s: %(message)s)<02>level<65>format<61>4ZOMP_NUM_THREADS<44>darwin<69>1ZPYTORCH_ENABLE_MPS_FALLBACKz&Retrieval-based-Voice-Conversion-WebUI)<02>Queue<75> cpu_count)<01> TorchGate)<01>rtrvc)<01>Config<69>c@seZdZdd<02>Zdd<04>ZdS)<06>HarvestcCstj<01>|<00>||_||_dS<00>N)<05>multiprocessing<6E>Process<73>__init__<5F>inp_q<5F>opt_q)<03>selfrr<00>r<00>)/data/NVMe/AI/soprano2RVC/headless_rvc.pyr9s 
2026-01-13 00:20:55 +02:00
zHarvest.__init__c
Cslddl}ddl} |j<02><03>\}}}}}|j|<04>|j<06>ddddd<07>\}} |||<t|<05><08><00>|kr5|j <09>
|<07>q )Nr<00><00><>>iL<00>2<00>
)<04>fsZf0_ceilZf0_floorZ frame_period) <0B>numpy<70>pyworldr<00>get<65>harvest<73>astype<70>double<6C>len<65>keysr<00>put)
r<00>npr<00>idx<64>xZres_f0<66>n_cpu<70>ts<74>f0<66>trrr<00>run>s
2026-01-13 00:20:55 +02:00

<EFBFBD> <02>z Harvest.runN)<05>__name__<5F>
__module__<EFBFBD> __qualname__rr-rrrrr8s rTcCs<tD]
}|<00><01>r |<00><02>qtD]}|jdd<02>qt<00><04>dS)z*Terminate all harvest processes gracefullyg<79><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?)<01>timeoutN)<05>harvest_processes<65>is_alive<76> terminate<74>join<69>clear)<01>prrr<00>cleanup_harvest_processesWs<02> r8cCsFt<00>||<00>}tj<02>||<00>}tj<02>||<00>}t<00>|<05>t<00>|<06>}|jd}|ddkr7|dd<04>d9<n
2026-01-13 00:20:55 +02:00
|dd<05>d9<t<00>|<05>} t<00>|<06>}
|
| } | dtjt<00> | dtjd<00>} dtjt<00>
|dd<00><01> |<00>| } t<00>
|<08><01> d<04><01> |<00>|} ||d||dt<00> |t<00>| | | <00>d<04>||}|S)z$Phase vocoder for smooth crossfadingr<00>r<00><><EFBFBD><EFBFBD><EFBFBD>N<EFBFBD><00>?)<0F>torch<63>sqrt<72>fft<66>rfft<66>abs<62>shape<70>angler&<00>pi<70>floor<6F>arange<67>to<74> unsqueeze<7A>sum<75>cos)<0F>a<>bZfade_outZfade_in<69>window<6F>fa<66>fbZabsab<61>nZphiaZphibZ
deltaphase<EFBFBD>wr,<00>resultrrr<00> phase_vocodergs*
2026-01-13 00:20:55 +02:00
 

&&

<02>$<02><02>rRc@s.eZdZdZd dd<04>Zdd<06>Zedd<08><00>ZdS)
2026-01-13 00:20:55 +02:00
<EFBFBD>HeadlessRVCConfigz(Configuration for headless RVC operationNcCs<>d|_d|_d|_d|_d|_d|_d|_d|_d|_d|_ d|_
d |_ d |_ d |_ d|_d|_d
|_d |_ttd <0C>|_|rR|<01><14>D]\}}t||<02>rQt|||<03>qBdSdS) N<>r<00>g<00>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?g@<40><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>rmvpeFi<46><69>r9<00>)<17>pth_path<74>
2026-01-13 00:20:55 +02:00
index_path<EFBFBD>pitch<63>formant<6E>
block_time<EFBFBD>crossfade_time<6D>
extra_time<EFBFBD> threshold<6C>
index_rate<EFBFBD> rms_mix_rate<74>f0method<6F>I_noise_reduce<63>O_noise_reduce<63>use_pv<70> input_device<63> output_device<63>
samplerate<EFBFBD>channels<6C>minr)<00>items<6D>hasattr<74>setattr)r<00> config_dict<63>key<65>valuerrrr<00>s4 
2026-01-13 00:20:55 +02:00
 <02><04>zHeadlessRVCConfig.__init__cCsTdd<02>|j<00><01>D<00>}t|d<03><02>}tj||dd<05>Wd<00>dS1s#wYdS)zSave configuration to JSON filecSs i|] \}}|<01>d<00>s||<02>qS)<01>_)<01>
startswith)<03>.0<EFBFBD>k<>vrrr<00>
<dictcomp><3E>s  <0C>z*HeadlessRVCConfig.save.<locals>.<dictcomp>rPr9)<01>indentN)<05>__dict__rl<00>open<65>json<6F>dump)r<00>pathro<00>frrr<00>save<76>s "<22>zHeadlessRVCConfig.savecCsBt|d<01><02>}t<01>|<02>}Wd<00>||<03>S1swY||<03>S)z!Load configuration from JSON file<6C>rN)rzr{<00>load)<04>clsr}r~rorrrr<><00>s  
<EFBFBD><10>zHeadlessRVCConfig.loadr)r.r/r0<00>__doc__rr<00> classmethodr<64>rrrrrS<00>s 
&rSc@sLeZdZdZdefdd<04>Zdd<06>Zdejdejfd d
2026-01-13 00:20:55 +02:00
<EFBFBD>Z d d <0C>Z
d d<0E>Z dS)<10> HeadlessRVCz&Headless RVC processor using GUI logic<69>configcCsn||_tj<02><03>}tjdgt_t<04><05>}t<04>tt<08><01>t <09>|_
t<04>|<03>|t_d|_ d|_ d|_ d|_d|_dS)NrF<>vc)<10>
gui_config<EFBFBD>sys<79>argv<67>copy<70>os<6F>getcwd<77>chdir<69>str<74>rvc_dirr r<><00>running<6E>stream<61>function<6F>rvc<76>tgt_sr)rr<>Z
saved_argv<EFBFBD> saved_cwdrrrr<00>s
2026-01-13 00:20:55 +02:00


zHeadlessRVC.__init__cCs<>t|jj<02>}|<01><03>st|<00><05>}t|jj<06>}|<02><03>s t|<00><05>}td|<01><00><02>td|<02><00><02>t<08> <09>}t<08>
2026-01-13 00:20:55 +02:00
t t <0C><01>z+t <0A>|jj|jjt |<01>t |<02>|jj|jjtt|jt|d<03>rZ|jnd<04>
|_Wt<08>
|<03>nt<08>
|<03>wt|jd<05>r{|jjr{|jj|_n
t<19>d<06>|jj|_|jr<>|jn|jj|j_|jjd|_tt<1E>|jj |jj|j<00>|j<00>|_!d|j!|j|_"tt<1E>|jj#|jj|j<00>|j<00>|_$t%|j$d |j<00>|_&|j|_'tt<1E>|jj(|jj|j<00>|j<00>|_)t*j+|j)|j$|j'|j!|jj,t*j-d
<EFBFBD>|_.|j.<2E>/<2F>|_0t*j+d|j.j1d |j|jj,t*j-d
<EFBFBD>|_2tj+d |jd d <0A>|_3t*j+|j&|jj,t*j-d
<EFBFBD>|_4|j4<6A>/<2F>|_5|j.<2E>/<2F>|_6t|j)|j<00>|_7|j!|j&|j'|j|_8t*<2A>9dtj:t*j;dd|j&|jj,t*j-d<11><00>d|_<d|j<|_=t>j?|jjdddddt*j-d<19><07>@|jj,<2C>|_A|j|jjk<03>r<>t>j?|j|jjddddt*j-d<19><07>@|jj,<2C>|_Bnd|_BtC|jjdd<1B><02>@|jj,<2C>|_Dtd<1C>dS)z-Initialize RVC model (same as GUI's start_vc)zLoading RVC model: zLoading index: r<>Nr<4E>z,RVC tgt_sr not set, using config sample rate<74>d<00><>rX)<02>device<63>dtyper<00>float32)r<>r;rU<00><00>?)<03>stepsr<73>r<>r9rr<00><>g<>G<EFBFBD>z<14><>?Zsinc_interp_kaisergQaTi<10>-@)Z orig_freq<65>new_freqZlowpass_filter_widthZrolloffZresampling_method<6F>betar<61>T)<02>srZ nonstationaryu&✓ RVC model initialized successfully)Err<>rY<00> is_absolute<74>
SCRIPT_DIR<EFBFBD>resolverZ<00>printr<74>r<>r<>r<>r<><00>rvc_for_realtimeZRVCr[r\rar)rrr<>rmr<>r<><00>logger<65>warningri<00>zc<7A>intr&<00>roundr]<00> block_frame<6D>block_frame_16kr^Zcrossfade_framerk<00>sola_buffer_frame<6D>sola_search_framer_<00> extra_framer<<00>zerosr<73>r<><00> input_wav<61>clone<6E>input_wav_denoiserA<00> input_wav_res<65>
rms_buffer<EFBFBD> sola_buffer<65> nr_buffer<65> output_buffer<65> skip_head<61> return_length<74>sinrC<00>linspace<63>fade_in_window<6F>fade_out_window<6F>tatZResamplerF<00> resampler<65>
resampler2r
<00>tg)rrYrZr<>rrr<00>initialize_rvc<76>s<>    <08>  

<06><02><06><02><06><02><06><02><02><02><08> <08><08>  <02><02><06><02><04><02><02> <02><04> <04>
2026-01-13 00:20:55 +02:00
<04>
<04>
<06>
<04>
<04> zHeadlessRVC.initialize_rvc<76>indata<74>outdatac Cs<>ddl}t<01><02>}t<01>tt<05><01><00>z,|<06><06>}t<07>|j <09>}|j
j dkr<>t <0C> |j|<01>}tjj|d|j|jd<05>dd<02>dd<02>f} |d|jd<02>|jdd<02><|d|j|jdd<02>}tj| dd <09>d|j
j k}
t|
jd<00>D]} |
| r<>d|| |j| d
|j<00><qm||jdd<02>}|j|jd<02><00><17>|jd|j <00><t<18>|<01><01>|jj<1C>|j|jd d<02><|j|jd<02><00><17>|jd|j <00><|j
j<1F>rF|j |jd<02><00><17>|j d|j <00><|j|j! |jd<02>} |<00>"| <0C>#d<01>|j<15>#d<01><01><02>$d<01>} | d|j!<21>|j%9<| d|j!<21>|j&|j'7<| d|j<16>|j |j d<02><| |jd<02>|j&dd<02><|<00>(|j |j d|jd<02><00>d d<02>|j|j d d<02><n&|<00>(|j|jd d|jd<02><00>d d<02>|jd |jd|jd
d<02><|j)<29>*|j|j|j+|j,|j
j-<2D>} |j.du<01>r<>|<00>.| <0A>} |j
j/<2F>r<>|j0|jd<02><00><17>|j0d|j <00><| |j d<02>|j0|j d<02><|<00>"| <0A>#d<01>|j0<6A>#d<01><01><02>$d<01>} |j
j1d
k<00>re|j
j<1F>r<>|j |j2d<02>n|j|j2d<02>} tjj| d| jd<00><00>3<EFBFBD><00>4<EFBFBD>d|j|jd<05>}t<18>|<0E><01>|jj<1C>}t5j6|<0E>#d<01>| jdd
d dd<0F>dddd<10>f}tjj| dd<02><00>3<EFBFBD><00>4<EFBFBD>d|j|jd<05>}t<18>|<0F><01>|jj<1C>}t5j6|<0F>#d<01>| jdd
d dd<0F>dddd<10>f}t<18>7|t<18>8|<0F>d<00>}| t<18>9||t<18>:d
|j
j1<00><01>9} | ddd|j!|j;<00>f}t5<74><||j=dddd<02>f<00>}t<18>>t5<74><|dtj?d
d
|j!|jjd<12><04>d<00>}t@jAdk<02>r<>t<18>7|d|d<00>\}}|<14>B<EFBFBD>}n t<18>C|d|d<00>}| |d<02>} dt|jj<1C>v<00>s<>|j
jD<EFBFBD>s<>| d|j!<21>|j%9<| d|j!<21>|j=|j'7<ntE|j=| d|j!<21>|j'|j%<25>| d|j!<21><| |j|j|j!<00>|j=dd<02><| d|j<16><00>F|j
jGd
<EFBFBD><02>H<EFBFBD><00>3<EFBFBD><00>4<EFBFBD>|dd<02><|<06><06>|}tI<74>Jd|d<18>d<19><03>Wt<01>|<07>dSt<01>|<07>w)z?
Audio processing callback (same logic as GUI)
rNrVrX)<03>yZ frame_length<74>
hop_lengthr9<00><><EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>)<01>refrr<>i`<60><><EFBFBD><EFBFBD>linearT)<03>size<7A>mode<64> align_cornersr:g<><67><EFBFBD><EFBFBD>MbP?)r<>g:<3A>0<EFBFBD><30>yE>r)rr<00> privateuseonez Infer time: z.2f<EFBFBD>s)K<>timer<65>r<>r<>r<>r<><00> perf_counter<65>librosaZto_mono<6E>Tr<54>r`r&<00>appendr<64><00>feature<72>rmsr<73>Zamplitude_to_db<64>rangerAr<>r<>r<>r<<00>
from_numpyrFr<>r<>r<>r<>rdr<>r<>r<>rG<00>squeezer<65>r<>r<>r<>r<><00>inferr<72>r<>rcr<>rer<>rbr<><00>cpur<00>F<> interpolate<74>max<61>
zeros_like<EFBFBD>pow<6F>tensorr<72><00>conv1dr<64>r=<00>onesr<73><00>platform<72>item<65>argmaxrfrR<00>repeatrjr,r<><00>debug)rr<>r<><00>frames<65>times<65>statusr<73>r<><00>
start_timer<EFBFBD>Z db_threshold<6C>ir<69>Z infer_wavZrms1Zrms2Z
conv_inputZcor_nomZcor_denrrZ sola_offset<65>
total_timerrr<00>audio_callbackZs<>  <04><04><02><02>"&"
2026-01-13 00:20:55 +02:00
" <02><18>, <20><04> 

" *<06> <04> <04><06> <04> <04><06><04><02><02><04> 
   <0E><0E>  
<EFBFBD> zHeadlessRVC.audio_callbackcCs<>|jr td<01>dS|jdur|<00><03>td<03>td|jj<05><00><02>td|jj<06><00><02>td|jj<07><00><02>d|_tj |j
|j |jj|jj d|jj|jjfd <09>|_ |j <0A><0E>td
<EFBFBD>dS) zStart the audio streamzAlready runningNzStarting audio stream...z Input: z
Output: z Sample rate: Tr<54>)<06>callback<63> blocksizerirjr<>r<>u✓ Audio stream started)r<>r<>r<>r<>r<>rgrhri<00>sd<73>Streamr<6D>r<>rjr<><00>start<72>rrrrr<><00>s(
2026-01-13 00:20:55 +02:00
<08>
 zHeadlessRVC.startcCsF|jsdSd|_|jdur|j<01><02>|j<01><03>d|_t<04>td<03>dS)zStop the audio streamNFu✓ Audio stream stopped)r<>r<><00>abort<72>closer8r<>r<>rrr<00>stops
2026-01-13 00:20:55 +02:00


 zHeadlessRVC.stopN) r.r/r0r<>rSrr<>r&<00>ndarrayr<79>r<>r<>rrrrr<><00>s  r<>cCs<>tjdd<02>}|jdtdd<05>|jdtdd<05>|jdtd d<05>|jd
2026-01-13 00:20:55 +02:00
td d d <0A>|jdtdd<05>|jdtdd<05>|jdtdgd<14>dd<16>|jdtddd <0A>|jdtdd<05>|<00><06>}|jrjt<08> |j<07>}t
d|j<07><00><02>nt<08>}|j rt|j |_ |j r{|j |_|jd kr<>|j|_|jr<>|j|_|jr<>|j|_|jr<>|j|_|jr<>|j|_|jr<>|<02>|j<14>t
d|j<14><00><02>dS|j s<>t
d<1E>dSt
d<1F>t
d<01>t
d<1F>t|<02>}|<03><17>z$z t
d <20> t<18>d"<22>q<>ty<>t
d#<23>YnwW|<03><1B>t
d$<24>dS|<03><1B>t
d$<24>w)%NzHeadless RVC Voice Conversion)<01> descriptionz--configzPath to JSON configuration file)<02>type<70>helpz--pthzPath to RVC model (.pth file)z--indexzPath to index filez--pitchrzPitch shift in semitones)r<><00>defaultr<74>z--input-devicezInput audio devicez--output-devicezOutput audio devicez
--f0methodrW)<05>pmr <00>creperW<00>fcpezF0 extraction method)r<>r<><00>choicesr<73>z --index-raterUzIndex feature ratio (0-1)z --save-configzSave configuration to filezLoaded configuration from: zSaved configuration to: z2Error: --pth or --config with pth_path is requiredzF======================================================================z
2026-01-13 00:20:55 +02:00
Press Ctrl+C to stop...Ti<54>z
Stopping...zGoodbye!)<1C>argparse<73>ArgumentParser<65> add_argumentr<74>r<><00>float<61>
parse_argsr<EFBFBD>rSr<>r<><00>pthrY<00>indexrZr[rgrhrcra<00> save_configrr<>r<>r<><00>sleep<65>KeyboardInterruptr<74>)<04>parser<65>argsr<73>r<>rrr<00>mainsr 
2026-01-13 00:20:55 +02:00
<06> 
 
<02>  <02> <08>
r<00>__main__)Cr<43>r<>r<>r{r<00>logging<6E>atexit<69>pathlibr<00> basicConfig<69>INFO<46> getLoggerr.r<><00>environr<6E><00>__file__<5F>parentr<74>r<><00> ORIGINAL_DIRr<52>r}<00>insertr<74>rrr rr&<00> sounddevicer<65>r<Ztorch.nn.functional<61>nn<6E>
functionalr<EFBFBD>r<>Ztools.torchgater
Ztorchaudio.transforms<6D>
transformsr<EFBFBD>Z infer.libr r<>Zconfigs.configr rrrkr)r2rrr<>rrr7<00>daemonr<6E>r<>r8<00>registerrRrSr<>rrrrr<00><module>sh <06>
2026-01-13 00:20:55 +02:00




      
 
7iE
2026-01-13 00:20:55 +02:00
<04>