39 lines
1.3 KiB
Python
39 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
||
"""资产引用校验:game.js 引用的每个音频 id 都必须有 .ogg 和 .m4a 文件。"""
|
||
import re, sys, pathlib
|
||
|
||
root = pathlib.Path('/home/xsl/SoundGame/web/escape')
|
||
src = (root / 'game.js').read_text(encoding='utf-8')
|
||
|
||
ids = set()
|
||
# 1) 静态字符串 id:'sfx/xxx' / 'voice/xxx' / 'bgm/xxx'
|
||
for m in re.finditer(r"['\"]((bgm|voice|sfx)/[a-z0-9_]+)['\"]", src):
|
||
ids.add(m.group(1))
|
||
# 2) 动态数字播报 voice/n${...} → n0..n9
|
||
if re.search(r"voice/n\$\{", src):
|
||
ids.update(f'voice/n{i}' for i in range(10))
|
||
|
||
missing = []
|
||
for aid in sorted(ids):
|
||
for ext in ('.ogg', '.m4a'):
|
||
if not (root / 'audio' / (aid + ext)).is_file():
|
||
missing.append(aid + ext)
|
||
|
||
print(f'引用的音频 id 数: {len(ids)}')
|
||
for aid in sorted(ids):
|
||
print(' ', aid)
|
||
if missing:
|
||
print('\n缺失文件:')
|
||
for f in missing:
|
||
print(' MISSING', f)
|
||
sys.exit(1)
|
||
print('\nOK:所有引用的 id 均有 .ogg 和 .m4a')
|
||
|
||
# 反向检查:目录里是否存在从未被引用的音频(仅提示,不算失败)
|
||
import os
|
||
on_disk = {str(p.relative_to(root / 'audio'))[:-4]
|
||
for p in (root / 'audio').rglob('*.ogg')}
|
||
unused = on_disk - ids
|
||
if unused:
|
||
print('未被代码引用(仅提示):', ', '.join(sorted(unused)))
|