import os import sys from pathlib import Path import numpy as np import torch def intersperse(lst, item): # Adds blank symbol result = [item] * (len(lst) * 2 + 1) result[1::2] = lst return result def to_numpy(tensor): if isinstance(tensor, np.ndarray): return tensor elif isinstance(tensor, torch.Tensor): return tensor.detach().cpu().numpy() elif isinstance(tensor, list): return np.array(tensor) else: raise TypeError("Unsupported type for conversion to numpy array") def get_user_data_dir(appname="matcha_tts"): MATCHA_HOME = os.environ.get("MATCHA_HOME") if MATCHA_HOME is not None: ans = Path(MATCHA_HOME).expanduser().resolve(strict=False) elif sys.platform == "win32": import winreg # pylint: disable=import-outside-toplevel key = winreg.OpenKey( winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", ) dir_, _ = winreg.QueryValueEx(key, "Local AppData") ans = Path(dir_).resolve(strict=False) elif sys.platform == "darwin": ans = Path("~/Library/Application Support/").expanduser() else: ans = Path.home().joinpath(".local/share") final_path = ans.joinpath(appname) final_path.mkdir(parents=True, exist_ok=True) return final_path def assert_model_downloaded(checkpoint_path, url, use_wget=True): if Path(checkpoint_path).exists(): return raise FileNotFoundError(f"Model not found at {checkpoint_path}! Standalone mode requires models to be pre-downloaded.")