跳转至
DRAFT

Sink 模块 · XiStudio

摘要

Sink 是 XiStudio 链路中的输出终点模块。当前前端以 sink_v1 为唯一默认产品入口,通过 outputModewavdevice 两种输出模式之间切换,并额外支持设备输出场景下的 WAV 调试录制能力。

1. 当前实现快照

维度 当前实现
默认入口 sink_v1
模块模式 builtin_normal
分类 sink
端口形态 1 个动态输入端口,无输出端口
默认调参入口 src/components/SinkTuningDialog.vue
默认画布行为 新建/清空工程时自动放置一个 sink_v1
输出模式 wav / device

当前代码对应关系

  • 模块定义:src/stores/moduleLibrary.ts
  • 默认加点与参数补齐:src/stores/linkStore.ts
  • 调参界面:src/components/SinkTuningDialog.vue
  • 设备缓存与预取:src/stores/deviceStore.ts

2. 产品定位

Sink 负责把链路最终音频落地到外部世界,当前产品面聚焦两种输出终态:

类型 前端模式值 当前交互方式 典型用途
文件输出 wav 填写目录与文件名 导出链路结果、离线对比
设备输出 device 选择声卡输出设备 实时监听、联调、回放

此外,设备输出模式下还提供 wavLogEnabled 能力,用于把设备输出数据同步落盘,方便调试与复盘。

3. 前端已落地的能力边界

3.1 sink_v1 是当前唯一主入口

与 Source 不同,Sink 当前前端代码中尚未出现拆分后的 sink_* 内建模块体系。产品层面可认定:

  • sink_v1 是唯一默认输出模块;
  • 模块的业务分化主要通过 outputMode 完成;
  • 设备输出附带 wav log 录制,是当前 Sink 的特有能力。

3.2 动态输入继承

Sink 不主动声明固定输入格式,输入端口运行时属性由上游链路传播决定,因此它更像“终端消费节点”而不是“再加工节点”。

属性 当前行为
输入通道数 继承上游
输入采样率 继承上游
输入块长 继承上游
输出端口

4. Sink 的交互定义

4.1 调参窗口结构

当前 SinkTuningDialog.vue 采用固定结构:

  1. 启用/禁用开关
  2. Preset 面板
  3. 输出模式切换栏
  4. 当前激活状态栏
  5. 对应输出模式参数区

4.2 两种输出模式的差异

模式 关键参数 当前实现特征
WAV 文件 wavPathwavFilenamerunMode 实时显示拼接后的完整输出路径
设备输出 outputDeviceId、驱动类型、wavLogEnabled 支持设备选择与日志录制

4.3 设备输出的附加能力

设备输出页的前端行为包括:

  • 刷新输出设备列表;
  • DirectX / ASIO 间切换驱动类型;
  • 选择输出设备后立即写入 outputDeviceId
  • 开启 WAV 日志录制 后补充 wavLogPathwavLogFilename
  • 显示日志文件完整路径预览。

Sink 与 Source 的核心差异

Source 的重点是“生成/采集什么信号”;Sink 的重点是“把最终信号送到哪里,以及是否顺手录一份调试证据”。这也是两者文档看起来相似、但绝不能互相复制的原因。

5. 运行时与链路行为

5.1 默认布点

linkStore.clearLink()addDefaultModules() 会默认向画布加入:

  • source_v1
  • sink_v1

因此 Sink 与 Source 一样,属于默认工程骨架的一部分。

5.2 运行中修改的处理策略

操作 当前行为
运行中切换 outputMode 重启音频引擎
运行中切换 outputDeviceId 发送专用输出设备切换消息
运行中切换 runMode 重启音频引擎
开关 wavLogEnabled 或修改日志路径 作为普通参数写入当前模块

5.3 默认补齐的日志参数

linkStore.ts 会在 sink_v1 导出/初始化时自动补齐:

参数 默认值
wavLogEnabled false
wavLogPath ./output
wavLogFilename wasapi_log.wav

这说明 WAV 日志录制 虽然在模块定义中不是主 tunable 参数,却已经是当前产品行为的一部分。

6. 文档索引

类型 文件 说明
架构 review 00-architecture.md Source/Sink 联合架构与历史决议
前端实现说明 20-frontend.md 基于当前 Vue3 前端代码的实现说明
ADR 决策记录 adr/ 待补
Phase 计划 phases/ 待补
测试报告 tests/ 待补
Bug 复盘 postmortems/ 待补

7. 当前结论

一句话结论

Sink 当前是单入口、多输出模式的实现状态:sink_v1 负责统一承接链路终点,wavdevice 两个分支覆盖文件导出、实时监听与日志留存三类产品需求。