move cli and api into wrapper

This commit is contained in:
Ftps
2024-03-07 21:50:15 +09:00
parent 0c3c512396
commit 785abd7830
12 changed files with 75 additions and 19 deletions

33
rvc/wrapper/cli/cli.py Normal file
View File

@@ -0,0 +1,33 @@
import re
from typing import Optional, Pattern
import click
from rvc.wrapper.cli.handler.infer import infer
from rvc.wrapper.cli.handler.train import train
from rvc.wrapper.cli.handler.uvr5 import uvr
from rvc.wrapper.cli.utils.dlmodel import dlmodel
from rvc.wrapper.cli.utils.env import env
from rvc.wrapper.cli.utils.initialize import init
@click.group(
context_settings={"help_option_names": ["-h", "--help"]},
help="rvc cli feature list",
)
def cli():
pass
def main():
cli.add_command(infer)
cli.add_command(train)
cli.add_command(uvr)
cli.add_command(dlmodel)
cli.add_command(env)
cli.add_command(init)
cli()
if __name__ == "__main__":
main()

View File

@@ -0,0 +1,132 @@
import logging
from pathlib import Path
import click
from dotenv import load_dotenv
from scipy.io import wavfile
logging.getLogger("numba").setLevel(logging.WARNING)
@click.command(
context_settings={"help_option_names": ["-h", "--help"]},
help="inference audio",
)
@click.option(
"-m",
"--modelPath",
is_flag=False,
type=str,
help="Model path or filename (reads in the directory set in env)",
required=True,
)
@click.option(
"-i",
"--inputPath",
is_flag=False,
type=Path,
help="input audio path or folder",
required=True,
)
@click.option(
"-o",
"--outputPath",
is_flag=False,
type=Path,
help="output audio path or folder",
required=True,
)
@click.option(
"-s", "--sid", is_flag=False, type=int, help="Speaker/Singer id", default=0
)
@click.option("-fu", "--f0upkey", is_flag=False, type=int, help="Transpose", default=0)
@click.option(
"-fm",
"--f0method",
is_flag=False,
type=str,
help="Pitch extraction algorith",
default="rmvpe",
)
@click.option(
"-ff", "--f0file", is_flag=False, type=Path, help="F0 curve file (optional)"
)
@click.option("-if", "--indexFile", is_flag=False, type=Path, help="Feature index file")
@click.option(
"-ir",
"--indexRate",
is_flag=False,
type=float,
help="Search feature ratio",
default=0.75,
)
@click.option(
"-fr",
"--filterRadius",
is_flag=False,
type=int,
help="Apply median filtering",
default=3,
)
@click.option(
"-rsr",
"--resamplesr",
is_flag=False,
type=int,
help="Resample the output audio",
default=0,
)
@click.option(
"-rmr",
"--rmsmixrate",
is_flag=False,
type=float,
help="Adjust the volume envelope scaling",
default=0.25,
)
@click.option(
"-p",
"--protect",
is_flag=False,
type=float,
help="Protect voiceless consonants and breath sounds",
default=0.33,
)
def infer(
modelpath,
inputpath,
outputpath,
sid,
f0upkey,
f0method,
f0file,
indexfile,
indexrate,
filterradius,
resamplesr,
rmsmixrate,
protect,
):
from rvc.modules.vc.modules import VC
load_dotenv()
vc = VC()
vc.get_vc(modelpath)
tgt_sr, audio_opt, times, _ = vc.vc_single(
sid,
inputpath,
f0upkey,
f0method,
f0file,
indexfile,
indexrate,
filterradius,
resamplesr,
rmsmixrate,
protect,
)
if outputpath:
wavfile.write(outputpath, tgt_sr, audio_opt)
click.echo(times)
click.echo(f"Finish inference. Check {outputpath}")
return tgt_sr, audio_opt, times

View File

@@ -0,0 +1,6 @@
import click
@click.command()
def train():
pass

View File

@@ -0,0 +1,45 @@
from pathlib import Path
import click
from rvc.modules.uvr5.modules import UVR
@click.command()
@click.option(
"-m",
"--modelName",
is_flag=False,
type=str,
help="Model path or filename (reads in the directory set in env)",
# required=True,
)
@click.option(
"-i",
"--inputPath",
is_flag=False,
type=Path,
help="input audio path or folder",
# required=True,
)
@click.option(
"-o",
"--outputPath",
is_flag=False,
type=Path,
help="output audio path or folder",
required=True,
)
@click.option(
"-f",
"--format",
is_flag=False,
type=str,
help="output Format",
)
def uvr(modelname, inputpath, outputpath, format):
uvr_module = UVR()
uvr_module.uvr_wrapper(
inputpath, outputpath, model_name=modelname, export_format=format
)
click.echo(f"Finish uvr5. Check {outputpath}")

View File

@@ -0,0 +1,9 @@
import urllib
import click
@click.command()
def dlmodel() -> None:
# Download models [harvest, uvr5, and more ]
pass

View File

@@ -0,0 +1,40 @@
"""
setup or cleanup enviroment file
usage: rvc env [create / cleanup]
Default: [nowDir/.env]
"""
import os
import click
@click.group()
def env():
pass
@env.command()
def create():
env_file_path = os.path.join(os.getcwd(), ".env")
if not os.path.exists(env_file_path):
default_values = {
"weight_root": "",
"weight_uvr5_root": "",
"index_root": "",
"rmvpe_root": "",
"hubert_path": "",
"save_uvr_path": "",
"TEMP": "",
"pretrained": "",
}
with open(env_file_path, "w") as env_file:
for key, value in default_values.items():
env_file.write(f"{key}={value}\n")
click.echo(f"{env_file_path} created successfully.")
else:
click.echo(f"{env_file_path} already exists, no change")

View File

@@ -0,0 +1,11 @@
"""
Uage: rvc init
download model and setup environmmnt file
"""
import click
@click.command()
def init():
pass