File size: 3,404 Bytes
a8c39f5
 
1378843
a8c39f5
 
 
1378843
 
 
a8c39f5
 
 
 
 
 
 
 
 
 
 
 
 
 
1378843
a8c39f5
1378843
a8c39f5
 
1378843
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a8c39f5
 
 
 
 
1378843
a8c39f5
 
 
 
 
 
 
 
 
1378843
a8c39f5
 
 
 
 
 
 
1378843
a8c39f5
 
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import os
import subprocess
import sys
from functools import lru_cache

from rvc.lib.tools.model_download import model_download_pipeline
from rvc.lib.tools.prerequisites_download import prequisites_download_pipeline
from tts_service.utils import cache_path
from tts_service.voices import voice_manager

python = sys.executable


@lru_cache(maxsize=None)
def import_voice_converter():
    from rvc.infer.infer import VoiceConverter

    return VoiceConverter()


# TTS
def run_tts_script(
    tts_text: str,
    voice_name: str,
    tts_rate: int,
) -> tuple[str, str]:
    tts_script_path = os.path.join("rvc", "lib", "tools", "tts.py")

    voice = voice_manager.voices[voice_name]
    format = "wav"

    output_tts_path = cache_path(voice.tts, tts_text, extension=format)
    if not os.path.exists(output_tts_path):
        command_tts = [
            *map(
                str,
                [
                    python,
                    tts_script_path,
                    "",  # tts_file
                    tts_text,
                    voice.tts,
                    tts_rate,
                    output_tts_path,
                ],
            ),
        ]
        subprocess.run(command_tts)

    output_rvc_path = cache_path(voice.tts, voice.name, tts_text, extension=format)
    if not os.path.exists(output_rvc_path):
        infer_pipeline = import_voice_converter()
        infer_pipeline.convert_audio(
            pitch=voice.pitch,
            filter_radius=voice.filter_radius,
            index_rate=voice.index_rate,
            volume_envelope=voice.rms_mix_rate,
            protect=voice.protect,
            hop_length=voice.hop_length,
            f0_method=voice.f0_method,
            audio_input_path=str(output_tts_path),
            audio_output_path=str(output_rvc_path),
            model_path=voice.model,
            index_path=voice.index,
            split_audio=False,
            f0_autotune=voice.autotune is not None,
            f0_autotune_strength=voice.autotune,
            clean_audio=voice.clean is not None,
            clean_strength=voice.clean,
            export_format=format.upper(),
            upscale_audio=voice.upscale,
            f0_file=None,
            embedder_model=voice.embedder_model,
            embedder_model_custom=None,
            sid=0,
            formant_shifting=None,
            formant_qfrency=None,
            formant_timbre=None,
            post_process=None,
            reverb=None,
            pitch_shift=None,
            limiter=None,
            gain=None,
            distortion=None,
            chorus=None,
            bitcrush=None,
            clipping=None,
            compressor=None,
            delay=None,
            sliders=None,
        )

    return "Text synthesized successfully.", str(output_rvc_path)


# Download
def run_download_script(model_link: str):
    model_download_pipeline(model_link)
    return "Model downloaded successfully."


# Prerequisites
def run_prerequisites_script(
    pretraineds_v1_f0: bool,
    pretraineds_v1_nof0: bool,
    pretraineds_v2_f0: bool,
    pretraineds_v2_nof0: bool,
    models: bool,
    voices: bool,
):
    prequisites_download_pipeline(
        pretraineds_v1_f0,
        pretraineds_v1_nof0,
        pretraineds_v2_f0,
        pretraineds_v2_nof0,
        models,
        voices,
    )
    return "Prerequisites installed successfully."