# 音频预缓存实用程序, 独立于主程序之外, 但依赖 particles 组件 import particles as pt import edge_tts as tts from pathlib import Path import shutil def precache(text: str): """预缓存单个文本的音频""" cache_dir = Path("./cache/voice/") cache_dir.mkdir(parents=True, exist_ok=True) cache = cache_dir / f"{text}.wav" if not cache.exists(): communicate = tts.Communicate(text, "zh-CN-YunjianNeural") communicate.save_sync(f"./cache/voice/{text}.wav") def proc_file(path: Path): """处理单个文件""" nu = pt.NucleonUnion(path) c = 0 for i in nu.nucleons: c += 1 print(f"预缓存 [{nu.name}] ({c}/{len(nu)}): {i['content'].replace('/', '')}") precache(i['content'].replace('/', '')) def walk(path_str: str): """遍历目录处理所有文件""" path = Path(path_str) print(f"正在遍历目录: {path}") for item in path.iterdir(): if item.is_file() and item.suffix == ".toml": print(f"正预缓存文件: {item.name}") proc_file(item) elif item.is_dir(): print(f"进入目录: {item.name}") if __name__ == "__main__": print("音频预缓存实用程序") print("A: 全部缓存") print("C: 清空缓存") choice = input("输入选项 $ ").upper() if choice == "A": walk("./nucleon") elif choice == "C": shutil.rmtree("./cache/voice", ignore_errors=True) print("缓存已清空")