186 lines
6.0 KiB
Python
Executable File
186 lines
6.0 KiB
Python
Executable File
#!/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}")
|