refactor: QQ → OBv11 重命名 + 平台格式统一抽象

- 所有对外称呼从 QQ 改为 OBv11(注释/提示词/日志/配置项)
- 新增 PlatformFormat 结构体,统一管理平台消息标记格式
- defaultPlatformFormats() 注册表替代硬编码 qqTargetRe
- extractProactiveMessage 改为 Thinker 方法,遍历格式注册表匹配
- 配置项重命名: QQ_BOT_PORT → OBV11_BOT_PORT, QQBotPort → OBv11BotPort
- 标记格式: 【QQ群聊】→【OBv11群聊】、【QQ私聊】→【OBv11私聊】

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-06-22 20:48:07 +08:00
parent 70dbb23234
commit 41f653b672
25 changed files with 1609 additions and 82 deletions
+85
View File
@@ -0,0 +1,85 @@
#!/usr/bin/env python3
"""
使用 AnimeWwise 引擎提取所有 HSR 音频(不依赖 map)。
输出文件以 Wwise ID 命名,后续可交叉引用角色映射。
"""
import os
import sys
AWW_DIR = r"D:\Project\Code\Uni\Cyrene-Voice-Model\tools\AnimeWwise"
sys.path.insert(0, AWW_DIR)
os.chdir(AWW_DIR)
from extract import WwiseExtract
HSR_AUDIO = r"D:\MeowG\HonkaiStar_Rail\StarRail_Data\Persistent\Audio\AudioPackage\Windows\Chinese(PRC)"
OUTPUT_DIR = r"D:\Project\Code\Uni\Cyrene-Voice-Model\data\all_extracted"
print("=" * 60)
print("HSR 全部语音提取 (无 map)")
print("=" * 60)
extractor = WwiseExtract()
# 只提取 VoBanks 文件(角色语音)+ 3.x 剧情
pck_files = sorted([
os.path.join(HSR_AUDIO, f)
for f in os.listdir(HSR_AUDIO)
if f.endswith(".pck") and (
f.startswith("VoBanks") or
"External_del_3." in f or
"External_del_4." in f
)
])
print(f"\n加载 {len(pck_files)} 个 .pck 文件...")
def progress(data):
if data[0] == "total" and int(data[1]) % 25 == 0:
print(f" {int(data[1])}%")
file_structure = extractor.load_folder(
_map=None, # 不用 map
files=pck_files,
diff_path="",
base_path=HSR_AUDIO,
progress=progress,
)
# 收集所有文件
def collect_all(structure, prefix=""):
files = []
for folder_name, folder_content in structure.get("folders", {}).items():
sub = f"{prefix}/{folder_name}" if prefix else folder_name
files.extend(collect_all(folder_content, sub))
for file_entry in structure.get("files", []):
name, meta = file_entry[0], file_entry[1]
path_parts = prefix.split("/") if prefix else []
files.append({
"path": path_parts,
"name": name,
"source": meta["source"],
"offset": meta["offset"],
"size": meta["size"],
"original_name": meta["original_name"],
})
return files
all_files = collect_all(file_structure)
print(f"\n找到 {len(all_files)} 个音频文件")
# 提取为 WAV
print(f"\n提取到 {OUTPUT_DIR}...")
os.makedirs(OUTPUT_DIR, exist_ok=True)
extractor.extract_files(
_input=HSR_AUDIO,
files=all_files,
output=OUTPUT_DIR,
_format="wav",
progress=progress,
)
print(f"\n完成!文件保存在: {OUTPUT_DIR}")
extractor.reset()