Fisrt version
This commit is contained in:
185
Audio/scripts/verify_audio_names.py
Executable file
185
Audio/scripts/verify_audio_names.py
Executable file
@@ -0,0 +1,185 @@
|
||||
#!/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}")
|
||||
Reference in New Issue
Block a user