41f653b672
- 所有对外称呼从 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>
86 lines
2.3 KiB
Python
86 lines
2.3 KiB
Python
#!/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\Honkai:Star_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()
|