用途:在 Bevy 0.19 中实现音频。用 AudioPlayer 与 sink 组件生成或控制音频片段与循环,处理音乐和环境音过渡、混音分类、闪避、暂停策略,添加空间声源/听者,并界定内置 HRTF/效果边界。
主要能力:Bevy 会在非空间播放开始后插入 AudioSink,空间播放插入 SpatialAudioSink。可通过查询 sink 控制实时音量、静音、暂停、速度、位置、跳转与停止。PlaybackSettings 提供 ONCE、LOOP、DESPAWN、REMOVE,定义播放完成后的归属。
使用方式:用 AudioPlayer::new(assets.load("...")) 配合 PlaybackSettings::LOOP 等生成播放器;查询 AudioSink 进行运行时控制。混音可将 Master、Music、Sfx、Dialogue、Ambience、Ui 建模为应用状态并标记实体,按 master×分组×过渡/闪避×源增益计算有效增益后写入 sink。音乐切换时重叠新旧循环并交叉淡入淡出,旧实体在 sink 静音前不要销毁。空间音频需保持恰好一个 SpatialListener 并绑定权威听者/相机姿态,必要时配置 SpatialScale。
限制与注意事项:PlaybackSettings 和 GlobalVolume 只影响初始播放,不更新已播放的 sink;sink 仅在播放开始后出现,应可选查询;已耗尽的 ONCE 播放若不替换音频组件无法重放;移除 sink 而保留未变的 player 会重新开始音源。内置空间音频只是左右声道声像,不提供 HRTF 或完整效果图。浏览器通常需用户激活才能播放,应把音频解锁作为显式状态处理。需要总线/效果、采样级调度或 HRTF 时可评估 bevy_seedling 0.8,使用它时需禁用 Bevy 内置音频特性,HRTF 需启用其 hrtf 特性。