Files
zeling_v2/Docs/DesignSpec/11_AudioSystem.md
2026-05-08 11:04:00 +08:00

5.6 KiB
Raw Permalink Blame History

11 · 音频系统规范

所属文档集 ← 返回索引
摘要:音频分层架构、自适应音乐系统、音效触发契约与音量管理。


目录

  1. 音频设计原则
  2. 音频分层架构
  3. 自适应音乐系统
  4. 音效SFX规范
  5. 音频总线与混音
  6. 音频事件目录

1. 音频设计原则

原则 说明
情境响应 音乐随战斗/探索状态自动切换层级
游戏反馈优先 每个玩家动作都有清晰音效反馈(攻击/受伤/弹反)
非侵入性 非战斗状态音乐保持安静,不与游戏音效竞争
数据驱动 音频配置和触发条件通过数据定义,不硬编码

2. 音频分层架构

AudioSystem协调器
├── MusicPlayer          ← 背景音乐、自适应分层
├── AmbiencePlayer       ← 环境音效(风声、水声等)
├── SFXPool              ← 音效池,管理 SFX 实例
└── VoicePlayer          ← 对话/语音(若有)

3. 自适应音乐系统

3.1 音乐状态机

[Silence] ──加载区域──► [Exploration]
[Exploration] ──感知敌人──► [CombatIntro]
[CombatIntro] ──0.5s──► [Combat]
[Combat] ──清场/脱战─────► [CombatOutro]
[CombatOutro] ──1.0s────► [Exploration]
[Exploration] ──进入Boss房间──► [BossIntro]
[BossIntro] ──播放完毕──► [BossPhase1]
[BossPhase1] ──阶段转换──► [BossPhase2]
[BossPhase2] ──Boss死亡──► [BossVictory]
[BossVictory] ──播放完毕──► [Exploration]

3.2 音乐分层Layer

每首区域音乐由多个同步的音频层叠加:

说明 探索 战斗
Base 旋律主干
Percussion 打击乐
Tension 紧张弦乐
Ambient 环境填充
BossLayer Boss 专属 Boss战

层级混合通过音量淡入淡出crossfade实现切换时间可配置。

3.3 音乐数据模型

DataModel MusicData {
    musicId         : ID
    regionId        : ID                  // 归属区域
    ──────────────────────────────────
    layers          : Map<MusicLayer, AudioID>  // 各层音频资源
    bpm             : Integer             // 用于节拍同步切换
    loopStart       : Duration
    loopEnd         : Duration
    ──────────────────────────────────
    transitionMode  : TransitionMode      // 即时/等待小节/淡入淡出
    crossfadeDuration: Duration
}

4. 音效SFX规范

4.1 音效触发契约

Interface IAudioTrigger {
    playOneShot(audioId: AudioID, position: Optional<Vector2>) → Void
    playLooping(audioId: AudioID, handle: out AudioHandle) → Void
    stopLooping(handle: AudioHandle) → Void
    playWithVariation(audioId: AudioID, pitchRange: {min,max}) → Void
}

4.2 玩家动作音效列表

动作 音效 变调范围
普通攻击 1/2/3 sfx_attack_1/2/3 ±0.05
受伤 sfx_hurt ±0.1
死亡 sfx_death
弹反成功 sfx_parry_success
弹反失败(时机错误) sfx_parry_fail
跳跃 sfx_jump ±0.08
双跳 sfx_double_jump ±0.05
冲刺 sfx_dash
空中冲刺 sfx_aerial_dash
下冲落地 sfx_plunge_land
墙跳 sfx_wall_jump ±0.05
形态切换 sfx_form_switch_{formId}
技能施放 sfx_skill_{skillId}
灵泉使用 sfx_spring_use
拾取 Geo sfx_geo_collect ±0.1

4.3 音效变调规则

  • 随机变调pitchVariation相同音效连续触发时随机微调音调避免"机器声"感
  • 连击变调:攻击 1→2→3 音效各自递进(音调略微提升,体现连击感)

5. 音频总线与混音

5.1 音频总线层级

Master Bus
├── Music Bus
│   ├── Exploration Layer
│   ├── Combat Layer
│   └── Boss Layer
├── SFX Bus
│   ├── Player SFX
│   ├── Enemy SFX
│   └── World SFX
└── UI Bus
    ├── Menu SFX
    └── Notification SFX

5.2 音量控制规范

总线 用户可调 默认值
Master Bus 100%
Music Bus 80%
SFX Bus 100%
UI Bus 90%

所有用户音量设置持久化到 UserSettings独立于 SaveData


6. 音频事件目录

音频系统监听以下事件执行音频响应:

监听事件 音频响应
OnPlayerAttack 播放攻击音效
OnPlayerHurt 播放受伤音效
OnPlayerDied 播放死亡音效,切换到 Silence
OnParrySuccess 播放弹反成功音效 + 子弹时间音效处理
OnFormChanged 播放形态切换音效
OnBonfireRested 播放存档音效
OnBossEncounterBegin 切换到 BossIntro 音乐
OnBossPhaseChanged 切换音乐层/音乐轨道
OnBossDefeated 播放 BossVictory 音乐
OnRoomTransitionBegin 淡出当前音乐
OnRoomTransitionComplete 根据新房间/区域加载新音乐
OnCollectiblePickedUp 播放拾取音效(按类型)
OnEnemyDied 播放敌人死亡音效