46 lines
1.2 KiB
Python
46 lines
1.2 KiB
Python
import os
|
||
import sys
|
||
import subprocess
|
||
import logging
|
||
|
||
logger = logging.getLogger("Opus")
|
||
|
||
|
||
def setup_opus():
|
||
libs_dir = ""
|
||
lib_path = ""
|
||
|
||
logger.info("正在加载 Opus 动态库,请耐心等待...")
|
||
|
||
if sys.platform == "win32":
|
||
libs_dir = os.path.dirname(os.path.abspath(__file__))
|
||
lib_path = os.path.join(libs_dir, "opus.dll")
|
||
elif sys.platform == "darwin":
|
||
result = subprocess.check_output(
|
||
"brew list opus | grep libopus.dylib", shell=True
|
||
)
|
||
lib_path = result.decode("utf-8").strip()
|
||
if not lib_path.endswith("libopus.dylib"):
|
||
raise RuntimeError("请先安装 Opus: brew install opus")
|
||
libs_dir = os.path.dirname(lib_path)
|
||
else:
|
||
raise RuntimeError(f"暂不支持 {sys.platform} 平台")
|
||
|
||
import ctypes.util
|
||
|
||
original_find_library = ctypes.util.find_library
|
||
|
||
def patched_find_library(name):
|
||
if name == "opus":
|
||
return lib_path
|
||
return original_find_library(name)
|
||
|
||
ctypes.util.find_library = patched_find_library
|
||
|
||
if hasattr(os, "add_dll_directory"):
|
||
os.add_dll_directory(libs_dir)
|
||
|
||
os.environ["PATH"] = libs_dir + os.pathsep + os.environ.get("PATH", "")
|
||
|
||
ctypes.CDLL(lib_path)
|