Live 播放器:AWB 解码、人声分谱与音频同步

Live 播放器:AWB 解码、人声分谱与音频同步 由 Archify 生成的架构图。 演出音乐初始化 · Director.InitializeMusic · 架构组件 演出音乐初始化 Director.InitializeMusic 独立听歌列表 · UmaViewerUI.ListLiveSounds · 架构组件 · 不是 Director 演出路径 独立听歌列表 UmaViewerUI.ListLiveSounds 不是 Director 演出路径 列表试听与歌曲预览 · LoadLiveSound / loadLivePreviewSound · 架构组件 · 试听不使用 Live part 分谱 列表试听与歌曲预览 LoadLiveSound / loadLivePreviewSound 试听不使用 Live part 分谱 按资源名查找 AWB · AbSounds / ApplySound · 架构组件 · 伴奏 SONG_PATH;缺人声才随机 按资源名查找 AWB AbSounds / ApplySound 伴奏 SONG_PATH;缺人声才随机 读取独立 AWB 容器 · LoadAudio → AwbReader · 架构组件 · Live 不解析 ACB cue 表 读取独立 AWB 容器 LoadAudio → AwbReader Live 不解析 ACB cue 表 授权音频密钥 · Config.GetAudioKey → MixKey · 架构组件 · 不是资源包 ABKey / FKey 授权音频密钥 Config.GetAudioKey → MixKey 不是资源包 ABKey / FKey 解密 HCA 并逐块解码 · UmaWaveStream / HcaWaveStream · 架构组件 解密 HCA 并逐块解码 UmaWaveStream / HcaWaveStream 输入失败:异常向上冒泡 · AudioKey / AFS2 / HcaDecoder · 架构组件 · 文件不存在:返回空 clip 列表 输入失败:异常向上冒泡 AudioKey / AFS2 / HcaDecoder 文件不存在:返回空 clip 列表 生成流式 Unity 音频片段 · AudioClip.Create(stream: true) · 架构组件 · PCM 读取与 seek 回调持续持有 stream 生成流式 Unity 音频片段 AudioClip.Create(stream: true) PCM 读取与 seek 回调持续持有 stream 每个 wave 建立一个播放音源 · CuteAudioSource.sourceList · 架构组件 · 人声按 PartForm 标记;伴奏 part = -1 每个 wave 建立一个播放音源 CuteAudioSource.sourceList 人声按 PartForm 标记;伴奏 part = -1 统一播放与时间控制所有者 · Director.Play / OnTimelineUpdate · 架构组件 · AudioSource 不是独立时间轴驱动器 统一播放与时间控制所有者 Director.Play / OnTimelineUpdate AudioSource 不是独立时间轴驱动器 进度拖动与时间显示 · LiveViewerUI / SliderControl · 架构组件 · 界面读 Director;不接管主时钟 进度拖动与时间显示 LiveViewerUI / SliderControl 界面读 Director;不接管主时钟 人声分谱与歌手数量 · partInfo:PartEntry · 架构组件 · time 毫秒;列名规范化 人声分谱与歌手数量 partInfo:PartEntry time 毫秒;列名规范化 选择发声片段并应用混音 · UmaViewerAudio.AlterUpdate · 架构组件 · 非 solo 才执行;0 为静音 选择发声片段并应用混音 UmaViewerAudio.AlterUpdate 非 solo 才执行;0 为静音 拖动暂停与释放重新同步 · Director.Update → SetTime / Play · 架构组件 · 释放强制重算分谱;重置 _syncTime 拖动暂停与释放重新同步 Director.Update → SetTime / Play 释放强制重算分谱;重置 _syncTime Unity 音源输出伴奏与人声 · AudioSource.Play / volume / panStereo · 架构组件 · 静音波形仍在同步播放 Unity 音源输出伴奏与人声 AudioSource.Play / volume / panStereo 静音波形仍在同步播放 离场销毁场景中的音源对象 · ExitLive → UnloadSceneAsync · 架构组件 · 按场景销毁,不是 Stop/Dispose 总线 离场销毁场景中的音源对象 ExitLive → UnloadSceneAsync 按场景销毁,不是 Stop/Dispose 总线 解码流没有显式释放闭环 · LoadAudio:无 Dispose / clip Destroy · 架构组件 · 不能把 Bundle 释放等同 AWB 流释放 解码流没有显式释放闭环 LoadAudio:无 Dispose / clip Destroy 不能把 Bundle 释放等同 AWB 流释放 初始化人声与伴奏 点击试听 同一 LoadAudio 找到的 AWB 逐 wave 子流 混合密钥 输入无效时 PCM 格式与样本 clip 绑定 建轨后进入 Play 非 solo:当前时间 当前 time 行 触摸 / 释放 控制暂停与定位 片段选择、音量、声像 全部轨道定位后播放 Esc / 曲终 未见解码对象清理 图例 前端 后端 数据库 安全 外部系统