#!/usr/bin/env python3 """ 快速音频设置脚本 为游戏创建音频文件 - 组合了下载和占位文件创建 """ import os import requests import time from pathlib import Path TARGET_DIR = "app/src/main/res/raw" # 可靠的免费音频下载链接 RELIABLE_DOWNLOADS = { # 从 opengameart.org 和其他可靠的免费资源 "button_click.mp3": "https://opengameart.org/sites/default/files/button-09.wav", "notification_beep.mp3": "https://opengameart.org/sites/default/files/notification.wav", "error_alert.mp3": "https://opengameart.org/sites/default/files/error.wav", "discovery_chime.mp3": "https://opengameart.org/sites/default/files/pickup.wav", } # 无法下载的文件将创建占位符 ALL_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", "按钮点击音效 - UI反馈"), ("notification_beep.mp3", "通知提示音 - 系统通知"), ("error_alert.mp3", "错误警报音 - 错误提示"), ("discovery_chime.mp3", "发现音效 - 物品发现"), ("time_distortion.mp3", "时间扭曲音效 - 特殊事件"), ("oxygen_leak_alert.mp3", "氧气泄漏警报 - 紧急情况"), ] def create_directories(): """创建必要的目录""" Path(TARGET_DIR).mkdir(parents=True, exist_ok=True) print(f"📁 目录已准备: {TARGET_DIR}") def try_download(url, filename): """尝试下载文件""" file_path = Path(TARGET_DIR) / filename if file_path.exists(): print(f"✅ 已存在: {filename}") return True print(f"⬇️ 尝试下载: {filename}") try: headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36'} response = requests.get(url, headers=headers, timeout=10, stream=True) if response.status_code == 200: with open(file_path, 'wb') as f: for chunk in response.iter_content(chunk_size=8192): if chunk: f.write(chunk) print(f"✅ 下载成功: {filename}") return True else: print(f"❌ 下载失败: {filename} (HTTP {response.status_code})") return False except Exception as e: print(f"❌ 下载错误: {filename} - {e}") return False def create_audio_placeholder(filename, description): """创建音频占位文件""" file_path = Path(TARGET_DIR) / filename if file_path.exists(): return # 创建一个简单的文本占位文件 placeholder_content = f"""AUDIO PLACEHOLDER FILE 音频占位文件 文件名: {filename} 描述: {description} 这是一个占位文件,用于测试音频系统架构。 要获得完整的游戏体验,请下载真实的音频文件。 推荐下载网站: 1. https://pixabay.com/sound-effects/ (免费,无需注册) 2. https://freesound.org/ (免费,需注册) 3. https://opengameart.org/ (开源游戏音频) 下载后,请将文件重命名为: {filename} 并放置在目录: {TARGET_DIR}/ 提示: 运行 ./audio_rename.sh 可以自动重命名下载的文件 """ try: with open(file_path, 'w', encoding='utf-8') as f: f.write(placeholder_content) print(f"📄 占位符已创建: {filename}") except Exception as e: print(f"❌ 创建占位符失败: {filename} - {e}") def create_download_instructions(): """创建下载说明文件""" instructions_file = Path(TARGET_DIR) / "README_AUDIO.txt" instructions = """音频文件下载说明 ================= 本目录包含游戏所需的 18 个音频文件。 当前状态: - ✅ 部分文件可能已通过脚本自动下载 - 📄 其他文件为占位符,需要手动下载替换 手动下载步骤: 1. 访问 https://pixabay.com/sound-effects/ 2. 搜索对应的音效类型 (例如: "button click", "ambient space") 3. 下载 MP3 格式的音频文件 4. 重命名为对应的文件名 (如 button_click.mp3) 5. 替换本目录中的占位符文件 自动化工具: - 运行 ../../../audio_rename.sh 自动重命名下载的文件 - 查看 ../../../AUDIO_DOWNLOAD_GUIDE.md 获取详细下载指南 测试音频系统: 即使使用占位文件,游戏的音频系统也能正常运行, 这样你就可以先测试功能,稍后再添加真实音频。 编译游戏: cd ../../../ ./gradlew assembleDebug 下载完成后,游戏将拥有完整的音频体验! """ try: with open(instructions_file, 'w', encoding='utf-8') as f: f.write(instructions) print(f"📖 说明文件已创建: {instructions_file.name}") except Exception as e: print(f"❌ 创建说明文件失败: {e}") def main(): """主函数""" print("🎵 快速音频设置工具") print("=" * 40) print("🎯 目标: 为游戏设置完整的音频文件集") print("💡 策略: 下载 + 占位符 = 立即可测试") print() # 创建目录 create_directories() # 尝试下载可靠的文件 print("⬇️ 尝试下载可用的音频文件...") download_count = 0 for filename, url in RELIABLE_DOWNLOADS.items(): if try_download(url, filename): download_count += 1 time.sleep(1) # 避免请求过频 print(f"\n📊 下载统计: {download_count}/{len(RELIABLE_DOWNLOADS)} 个文件成功下载") # 为所有文件创建占位符(如果不存在) print(f"\n📄 创建完整的音频文件集 ({len(ALL_AUDIO_FILES)} 个文件)...") for filename, description in ALL_AUDIO_FILES: create_audio_placeholder(filename, description) # 创建说明文件 create_download_instructions() # 检查结果 audio_files = list(Path(TARGET_DIR).glob("*")) print(f"\n📂 音频目录文件总数: {len(audio_files)}") # 最终说明 print("\n🎉 音频设置完成!") print("\n✅ 你现在可以:") print(" 1. 立即编译并测试: ./gradlew assembleDebug") print(" 2. 音频系统界面将正常显示") print(" 3. 所有音频功能都可以测试") print("\n🎵 要获得完整音频体验:") print(" 1. 访问 https://pixabay.com/sound-effects/") print(" 2. 下载对应类型的音频文件") print(" 3. 使用 ./audio_rename.sh 自动重命名") print(" 4. 或查看 AUDIO_DOWNLOAD_GUIDE.md 详细指南") if download_count > 0: print(f"\n🎊 已有 {download_count} 个真实音频文件!") print(f"\n📁 音频文件位置: {TARGET_DIR}/") print("🔧 占位符确保系统正常运行,真实音频提升体验") if __name__ == "__main__": try: main() except KeyboardInterrupt: print("\n⏹️ 设置中断") except Exception as e: print(f"\n💥 设置错误: {e}") print("请检查目录权限和网络连接")