Sink 模块 · XiStudio
摘要
Sink 是 XiStudio 链路中的输出终点模块。当前前端以 sink_v1 为唯一默认产品入口,通过 outputMode 在 wav 与 device 两种输出模式之间切换,并额外支持设备输出场景下的 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 采用固定结构:
- 启用/禁用开关
- Preset 面板
- 输出模式切换栏
- 当前激活状态栏
- 对应输出模式参数区
4.2 两种输出模式的差异
| 模式 | 关键参数 | 当前实现特征 |
|---|---|---|
| WAV 文件 | wavPath、wavFilename、runMode |
实时显示拼接后的完整输出路径 |
| 设备输出 | outputDeviceId、驱动类型、wavLogEnabled |
支持设备选择与日志录制 |
4.3 设备输出的附加能力
设备输出页的前端行为包括:
- 刷新输出设备列表;
- 在
DirectX/ASIO间切换驱动类型; - 选择输出设备后立即写入
outputDeviceId; - 开启
WAV 日志录制后补充wavLogPath与wavLogFilename; - 显示日志文件完整路径预览。
Sink 与 Source 的核心差异
Source 的重点是“生成/采集什么信号”;Sink 的重点是“把最终信号送到哪里,以及是否顺手录一份调试证据”。这也是两者文档看起来相似、但绝不能互相复制的原因。
5. 运行时与链路行为
5.1 默认布点
linkStore.clearLink() 与 addDefaultModules() 会默认向画布加入:
source_v1sink_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 负责统一承接链路终点,wav 与 device 两个分支覆盖文件导出、实时监听与日志留存三类产品需求。