From ded2d689a361b5e98e1148b894660c60a92c61b3 Mon Sep 17 00:00:00 2001 From: Khanh Le Date: Thu, 18 Jun 2026 05:53:43 -0500 Subject: [PATCH] fix: handle missing realtime audio defaults --- api_231006.py | 28 +++++++++++++++++++++++----- api_240604.py | 28 +++++++++++++++++++++++----- gui_v1.py | 38 ++++++++++++++++++++------------------ 3 files changed, 66 insertions(+), 28 deletions(-) diff --git a/api_231006.py b/api_231006.py index 56e26e25b4..0bac244258 100644 --- a/api_231006.py +++ b/api_231006.py @@ -68,24 +68,42 @@ def __init__(self) -> None: self.delay_time = 0 self.rvc = None # Initialize RVC object as None + def get_default_device(self, devices, device_indices, default_device): + if default_device in device_indices: + return devices[device_indices.index(default_device)] + return devices[0] if devices else "" + def load(self): - input_devices, output_devices, _, _ = self.get_devices() + ( + input_devices, + output_devices, + input_device_indices, + output_device_indices, + ) = self.get_devices() try: with open("configs/config.json", "r", encoding='utf-8') as j: data = json.load(j) data["rmvpe"] = True # Ensure rmvpe is the only f0method if data["sg_input_device"] not in input_devices: - data["sg_input_device"] = input_devices[sd.default.device[0]] + data["sg_input_device"] = self.get_default_device( + input_devices, input_device_indices, sd.default.device[0] + ) if data["sg_output_device"] not in output_devices: - data["sg_output_device"] = output_devices[sd.default.device[1]] + data["sg_output_device"] = self.get_default_device( + output_devices, output_device_indices, sd.default.device[1] + ) except Exception as e: logger.error(f"Failed to load configuration: {e}") with open("configs/config.json", "w", encoding='utf-8') as j: data = { "pth_path": " ", "index_path": " ", - "sg_input_device": input_devices[sd.default.device[0]], - "sg_output_device": output_devices[sd.default.device[1]], + "sg_input_device": self.get_default_device( + input_devices, input_device_indices, sd.default.device[0] + ), + "sg_output_device": self.get_default_device( + output_devices, output_device_indices, sd.default.device[1] + ), "threhold": "-60", "pitch": "0", "index_rate": "0", diff --git a/api_240604.py b/api_240604.py index 08227ceb6f..bcca657344 100644 --- a/api_240604.py +++ b/api_240604.py @@ -107,23 +107,41 @@ def initialize_queues(self): p.daemon = True p.start() + def get_default_device(self, devices, device_indices, default_device): + if default_device in device_indices: + return devices[device_indices.index(default_device)] + return devices[0] if devices else "" + def load(self): - input_devices, output_devices, _, _ = self.get_devices() + ( + input_devices, + output_devices, + input_device_indices, + output_device_indices, + ) = self.get_devices() try: with open("configs/config.json", "r", encoding='utf-8') as j: data = json.load(j) if data["sg_input_device"] not in input_devices: - data["sg_input_device"] = input_devices[sd.default.device[0]] + data["sg_input_device"] = self.get_default_device( + input_devices, input_device_indices, sd.default.device[0] + ) if data["sg_output_device"] not in output_devices: - data["sg_output_device"] = output_devices[sd.default.device[1]] + data["sg_output_device"] = self.get_default_device( + output_devices, output_device_indices, sd.default.device[1] + ) except Exception as e: logger.error(f"Failed to load configuration: {e}") with open("configs/config.json", "w", encoding='utf-8') as j: data = { "pth_path": "", "index_path": "", - "sg_input_device": input_devices[sd.default.device[0]], - "sg_output_device": output_devices[sd.default.device[1]], + "sg_input_device": self.get_default_device( + input_devices, input_device_indices, sd.default.device[0] + ), + "sg_output_device": self.get_default_device( + output_devices, output_device_indices, sd.default.device[1] + ), "threhold": -60, "pitch": 0, "formant": 0.0, diff --git a/gui_v1.py b/gui_v1.py index c5e7179aa9..3e1523d535 100644 --- a/gui_v1.py +++ b/gui_v1.py @@ -149,6 +149,20 @@ def __init__(self) -> None: self.update_devices() self.launcher() + def get_default_input_device(self): + if sd.default.device[0] in self.input_devices_indices: + return self.input_devices[ + self.input_devices_indices.index(sd.default.device[0]) + ] + return self.input_devices[0] + + def get_default_output_device(self): + if sd.default.device[1] in self.output_devices_indices: + return self.output_devices[ + self.output_devices_indices.index(sd.default.device[1]) + ] + return self.output_devices[0] + def load(self): try: if not os.path.exists("configs/inuse/config.json"): @@ -170,20 +184,12 @@ def load(self): ): self.update_devices() data["sg_hostapi"] = self.hostapis[0] - data["sg_input_device"] = self.input_devices[ - self.input_devices_indices.index(sd.default.device[0]) - ] - data["sg_output_device"] = self.output_devices[ - self.output_devices_indices.index(sd.default.device[1]) - ] + data["sg_input_device"] = self.get_default_input_device() + data["sg_output_device"] = self.get_default_output_device() else: data["sg_hostapi"] = self.hostapis[0] - data["sg_input_device"] = self.input_devices[ - self.input_devices_indices.index(sd.default.device[0]) - ] - data["sg_output_device"] = self.output_devices[ - self.output_devices_indices.index(sd.default.device[1]) - ] + data["sg_input_device"] = self.get_default_input_device() + data["sg_output_device"] = self.get_default_output_device() except: with open("configs/inuse/config.json", "w") as j: data = { @@ -191,12 +197,8 @@ def load(self): "index_path": "", "sg_hostapi": self.hostapis[0], "sg_wasapi_exclusive": False, - "sg_input_device": self.input_devices[ - self.input_devices_indices.index(sd.default.device[0]) - ], - "sg_output_device": self.output_devices[ - self.output_devices_indices.index(sd.default.device[1]) - ], + "sg_input_device": self.get_default_input_device(), + "sg_output_device": self.get_default_output_device(), "sr_type": "sr_model", "threhold": -60, "pitch": 0,