This repository has been archived on 2026-08-12. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
Cyrene/scripts/voice/extract_all_headless.py
T
AskaEth 41f653b672 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>
2026-06-22 20:48:07 +08:00

86 lines
2.3 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()