用途:为生成的游戏生成符合类型的音效与循环背景音乐,可在美术生成阶段并行运行,也可对已有游戏追加声音或音乐。
主要能力:两层音频系统。模式 A 在设置 ELEVENLABS_API_KEY 时,对每个音效动作调用 POST https://api.elevenlabs.io/v1/sound-generation,使用 eleven_text_to_sound_v2 模型与带类型风格提示词,将 MP3 保存到 public/assets/sfx/<name>.mp3,并在 sfx.json 各条目加入 mp3Path;请求顺序发送,遇 HTTP 429 自动重试。模式 B 无密钥或使用 --no-elevenlabs 时,仅把振荡器参数(freq、dur、type、vol)写入 sfx.json,运行时用 OscillatorNode 生成,无音频文件、无网络请求、可离线。AudioManager.play 优先使用 mp3Path,缺失或加载失败则回退振荡器参数,单个音效失败不影响其他音效。
输出:public/assets/sfx.json、public/assets/music.json(BPM 与五声音阶音符序列)、模式 A 的 MP3 文件、固定模板 src/audio/AudioManager.js;game-state.json 增加 state.audio(sfxPath、musicPath、managerPath、elevenlabs、mp3Count)。
用法:运行 scripts/compose_audio.mjs <project-dir> [--bpm N] [--no-elevenlabs];--bpm N 覆盖音乐速度,--no-elevenlabs 强制振荡器模式。代码中 import AudioManager from '../audio/AudioManager.js',在 create() 调用 AudioManager.init(this),在事件中调用 AudioManager.play('jump') 等,游戏结束调用 AudioManager.stopMusic(),可选 mute()/unmute()。init 会注册一次性 pointerdown 与 keydown 监听以解锁 AudioContext,满足 Safari iOS 用户手势要求。
类型预设:action-platformer/platformer 130 BPM,音效 jump、land、hit、pickup、death、win;top-down-adventure/dungeon-crawler 100 BPM,hit、pickup、death、win;top-down-rpg 88 BPM,pickup、hit、win;shoot-em-up 160 BPM,shoot、explosion、hit、death、win;beat-em-up 140 BPM,hit、death、win。
限制:模式 A 依赖 ELEVENLABS_API_KEY 与网络,受 ElevenLabs 速率限制;模式 B 为合成音色,非真实录音;AudioManager.js 为固定模板不重新生成;其他平台兼容性与收费信息暂未提供。