Files
ToTheMoon/Audio/scripts/verify_audio_names.py
2025-08-27 18:40:30 +08:00

186 lines
6.0 KiB
Python
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
"""
音频文件命名验证脚本
检查所有音频文件是否按照系统要求正确命名
"""
import os
from pathlib import Path
# 从音频系统定义中提取的必需文件名
REQUIRED_AUDIO_FILES = [
"ambient_mystery.mp3",
"electronic_tension.mp3",
"orchestral_revelation.mp3",
"epic_finale.mp3",
"ventilation_soft.mp3",
"heart_monitor.mp3",
"reactor_hum.mp3",
"space_silence.mp3",
"wind_gentle.mp3",
"rain_light.mp3",
"storm_cyber.mp3",
"solar_storm.mp3",
"button_click.mp3",
"notification_beep.mp3",
"error_alert.mp3",
"discovery_chime.mp3",
"time_distortion.mp3",
"oxygen_leak_alert.mp3"
]
TARGET_DIR = Path("app/src/main/res/raw")
def check_audio_files():
"""检查音频文件命名"""
print("🎵 音频文件命名验证")
print("=" * 50)
if not TARGET_DIR.exists():
print(f"❌ 目录不存在: {TARGET_DIR}")
return
print(f"📂 检查目录: {TARGET_DIR}")
print()
# 获取目录中的所有音频文件
existing_files = [f.name for f in TARGET_DIR.glob("*.mp3")]
existing_files.extend([f.name for f in TARGET_DIR.glob("*.wav")])
existing_files.extend([f.name for f in TARGET_DIR.glob("*.ogg")])
print("📋 必需的音频文件检查:")
print("-" * 30)
missing_files = []
present_files = []
for required_file in REQUIRED_AUDIO_FILES:
if required_file in existing_files:
file_path = TARGET_DIR / required_file
file_size = file_path.stat().st_size
if file_size > 1000: # 假设真实音频文件大于1KB
print(f"{required_file} (真实音频, {file_size:,} bytes)")
present_files.append((required_file, "真实"))
else:
print(f"📄 {required_file} (占位符, {file_size} bytes)")
present_files.append((required_file, "占位符"))
else:
print(f"{required_file} (缺失)")
missing_files.append(required_file)
print()
print("📊 统计结果:")
print("-" * 30)
print(f"✅ 存在文件: {len(present_files)}/{len(REQUIRED_AUDIO_FILES)}")
print(f"❌ 缺失文件: {len(missing_files)}")
# 分类统计
real_audio = [f for f, t in present_files if t == "真实"]
placeholder = [f for f, t in present_files if t == "占位符"]
print(f"🎵 真实音频: {len(real_audio)}")
print(f"📄 占位符: {len(placeholder)}")
# 检查额外的文件
extra_files = [f for f in existing_files if f not in REQUIRED_AUDIO_FILES and not f.startswith('readme')]
if extra_files:
print()
print("⚠️ 额外的音频文件:")
for extra_file in extra_files:
print(f" - {extra_file}")
print(" (这些文件不会被音频系统使用)")
# 检查命名规范
print()
print("📝 命名规范检查:")
print("-" * 30)
naming_issues = []
for file in existing_files:
# 检查是否包含大写字母
if any(c.isupper() for c in file):
naming_issues.append(f"{file} - 包含大写字母")
# 检查是否包含空格
if ' ' in file:
naming_issues.append(f"{file} - 包含空格")
# 检查是否包含特殊字符
allowed_chars = set('abcdefghijklmnopqrstuvwxyz0123456789_.')
if not set(file.lower()).issubset(allowed_chars):
naming_issues.append(f"{file} - 包含特殊字符")
if naming_issues:
print("❌ 发现命名问题:")
for issue in naming_issues:
print(f" - {issue}")
else:
print("✅ 所有文件命名符合Android资源规范")
# 总结和建议
print()
print("💡 建议:")
print("-" * 30)
if missing_files:
print("📥 缺失的文件需要下载:")
for missing in missing_files:
print(f" - {missing}")
print(" 运行: python3 quick_audio_setup.py")
if len(real_audio) < 5:
print("🎵 建议下载更多真实音频文件以获得完整体验")
print(" 查看: AUDIO_DOWNLOAD_GUIDE.md")
if len(present_files) == len(REQUIRED_AUDIO_FILES):
print("🎉 所有音频文件已准备就绪!")
print("✨ 可以编译并测试音频系统: ./gradlew assembleDebug")
return len(missing_files) == 0 and len(naming_issues) == 0
def fix_naming_issues():
"""修复常见的命名问题"""
print("\n🔧 修复命名问题...")
# 检查常见的错误命名模式
common_fixes = {
"ambient_mystery.MP3": "ambient_mystery.mp3",
"ambient_mystery.wav": "ambient_mystery.mp3",
"Ambient_Mystery.mp3": "ambient_mystery.mp3",
"ambient-mystery.mp3": "ambient_mystery.mp3",
"ambient mystery.mp3": "ambient_mystery.mp3",
}
fixed_count = 0
for old_name, new_name in common_fixes.items():
old_path = TARGET_DIR / old_name
new_path = TARGET_DIR / new_name
if old_path.exists() and not new_path.exists():
try:
old_path.rename(new_path)
print(f"✅ 重命名: {old_name} -> {new_name}")
fixed_count += 1
except Exception as e:
print(f"❌ 重命名失败: {old_name} - {e}")
if fixed_count > 0:
print(f"🎉 修复了 {fixed_count} 个命名问题")
else:
print(" 没有发现需要修复的命名问题")
if __name__ == "__main__":
try:
success = check_audio_files()
if not success:
print("\n❓ 是否尝试自动修复命名问题? (y/n)")
# 在脚本环境中,我们直接尝试修复
fix_naming_issues()
print("\n🔄 重新检查...")
check_audio_files()
except Exception as e:
print(f"💥 检查过程中出错: {e}")