File size: 2,274 Bytes
222e3bd
ea6a933
c79df46
2ddb634
 
222e3bd
c79df46
2ddb634
 
 
5c4653b
2ddb634
5c4653b
 
2ddb634
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4ea5474
5c4653b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
222e3bd
ea6a933
 
222e3bd
ea6a933
 
 
 
 
 
 
2ddb634
 
 
 
 
 
 
 
 
ea6a933
2ddb634
222e3bd
4ea5474
 
2ddb634
 
 
4ea5474
222e3bd
4ea5474
 
2ddb634
 
 
 
222e3bd
2ddb634
 
4ea5474
 
2ddb634
4ea5474
2ddb634
 
 
 
 
 
 
 
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
import os
import requests
from subprocess import Popen, PIPE
import time
import threading
import gradio as gr


def run_xvaserver():
	try:
		import logging
		# start the process without waiting for a response
		logging.info('loginfo: Running xVAServer subprocess...')
		print('Running xVAServer subprocess...')
		xvaserver = Popen(['python', 'server.py'], stdout=PIPE, stderr=PIPE, universal_newlines=True)
	except:
		import logging
		logging.error(f'Could not run xVASynth.')
		sys.exit(0)

	# Read and print stdout and stderr of the subprocess
	while True:
		output = xvaserver.stdout.readline()
		if output == '' and xvaserver.poll() is not None:
			break
		if output:
			print(output.strip())

		error = xvaserver.stderr.readline()
		if error == '' and xvaserver.poll() is not None:
			break
		if error:
			print(error.strip(), file=sys.stderr)

	# Wait for the process to exit
	xvaserver.wait()

def load_model():
	model_type = 'xVAPitch'
	language = 'en'

	data = {
		'outputs': None,
		'version': '3.0',
		'model': 'ccby/ccby_nvidia_hifi_6670_M',
		'modelType': model_type,
		'base_lang': language,
		'pluginsContext': '{}',
	}
	requests.post('http://0.0.0.0:8008/loadModel', json=data)
	return

def predict(input, pacing):
	model_type = 'xVAPitch'
	line = 'Test'
	pace = pacing if pacing else 1.0
	save_path = 'test.wav'
	language = 'en'
	base_speaker_emb = []
	use_sr = 0
	use_cleanup = 0

	data = {
		'modelType': model_type,
		'sequence': line,
		'pace': pace,
		'outfile': save_path,
		'vocoder': 'n/a',
		'base_lang': language,
		'base_emb': base_speaker_emb,
		'useSR': use_sr,
		'useCleanup': use_cleanup,
	}
	requests.post('http://0.0.0.0:8008/synthesize', json=data)
	return 22100, os.open(save_path, "rb")

input_textbox = gr.Textbox(
	label="Input Text",
	lines=1,
	autofocus=True
)
slider = gr.Slider(0.0, 2.0, value=1.0, step=0.1, label="Pacing")

gradio_app = gr.Interface(
	predict,
	[
		input_textbox,
		slider
	],
	outputs= "audio",
	title="xVASynth",
)


if __name__ == "__main__":
	# Run the web server in a separate thread
	web_server_thread = threading.Thread(target=run_xvaserver)
	web_server_thread.start()

	gradio_app.launch()

	# Wait for the web server thread to finish (shouldn't be reached in normal execution)
	web_server_thread.join()