File size: 2,652 Bytes
dd3664d
 
 
 
 
 
2389910
ced1d79
dd3664d
 
d510ab9
dd3664d
 
d510ab9
dd3664d
 
d510ab9
 
dd3664d
d510ab9
 
dd3664d
d510ab9
 
 
dd3664d
 
 
 
 
 
 
 
d510ab9
4533a55
 
 
d510ab9
4533a55
d510ab9
 
 
 
 
 
dd3664d
d510ab9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dd3664d
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
import argparse
import os
import sys
from dotenv import load_dotenv
from scipy.io import wavfile

from config import Config
from modules import VC


def arg_parse() -> argparse.Namespace:
    parser = argparse.ArgumentParser()
    parser.add_argument("--f0up_key", type=int, default=0)
    parser.add_argument("--input_path", type=str, help="input path", required=True)
    parser.add_argument("--index_path", type=str, help="index path")
    parser.add_argument("--f0method", type=str, default="harvest", help="harvest or pm")
    parser.add_argument("--opt_path", type=str, help="output path", required=True)
    parser.add_argument("--model_name", type=str, help="model name (stored in assets/weight_root)", required=True)
    parser.add_argument("--index_rate", type=float, default=0.66, help="index rate")
    parser.add_argument("--device", type=str, help="device (e.g., cuda or cpu)")
    parser.add_argument("--is_half", type=bool, help="use half precision (True or False)", default=False)
    parser.add_argument("--filter_radius", type=int, default=3, help="filter radius")
    parser.add_argument("--resample_sr", type=int, default=0, help="resample sampling rate")
    parser.add_argument("--rms_mix_rate", type=float, default=1, help="RMS mix rate")
    parser.add_argument("--protect", type=float, default=0.33, help="protect value")

    args = parser.parse_args()
    return args


def main():
    load_dotenv()
    args = arg_parse()

    config = Config()
    config.device = args.device if args.device else config.device
    config.is_half = args.is_half if args.is_half else config.is_half

    vc = VC(config)

    # Add a check for the model name
    if not args.model_name:
        print("Error: Model name must be provided.")
        sys.exit(1)

    vc.get_vc(args.model_name)

    # Process the audio file
    try:
        sid, wav_opt = vc.vc_single(
            0,
            args.input_path,
            args.f0up_key,
            None,
            args.f0method,
            args.index_path,
            None,
            args.index_rate,
            args.filter_radius,
            args.resample_sr,
            args.rms_mix_rate,
            args.protect,
        )

        if sid is None:
            print("Warning: sid is None. Skipping sid-related operations.")
        else:
            print(f"Processed sid: {sid}")

        # Save the processed audio
        wavfile.write(args.opt_path, wav_opt[0], wav_opt[1])
        print(f"Output saved to: {args.opt_path}")

    except Exception as e:
        print(f"An error occurred during processing: {e}")
        sys.exit(1)


if __name__ == "__main__":
    main()