跳转至
DRAFT

XiStudio · Source 模块前端实现说明 v1.1

文档定位

本文档不再沿用旧的 Source/Sink 联合规范,而是直接以 frontend_vue3 当前代码为准,描述 Source 模块在前端中的真实实现状态。目标不是定义理想态,而是回答“现在的代码到底怎么工作”。

本版结论

当前 Source 的真实实现是 tone / noise / file / device 四分支;旧文档中关于 wav upload、统一状态灯与 useSourceStateStore 的描述,并未在当前前端代码里落地。

1. 实现入口

类型 文件 作用
调参对话框 src/components/SourceTuningDialog.vue Source 主交互入口
内建模块定义 src/stores/moduleLibrary.ts 定义 source_v1 及拆分 source_*_v1
链路与端口传播 src/stores/linkStore.ts 默认加点、参数写入、端口传播
输入设备缓存 src/stores/deviceStore.ts 维护输入设备列表与驱动分组缓存
图标定义 src/utils/moduleIcons.ts 为拆分 Source 模块提供独立图标

2. 当前模块模型

2.1 source_v1

source_v1 是当前默认 Source 入口,定义如下:

项目 当前实现
mode builtin_normal
category source
输入端口
输出端口 1 个动态输出端口
默认 sourceType tone
默认 runMode pc

输出端口的关键 Argument 参数由 moduleLibrary.ts 给出:

  • numChannels
  • blockSize
  • sampleRate
  • signalType
  • dataType
  • isComplex

2.2 已进入模块库的拆分 Source

当前模块库已经包含拆分后的 Source 定义:

分组 模块
Tone source_sine_v1 / source_sweep_v1 / source_triangle_v1 / source_square_v1 / source_saw_v1
Noise source_noise_white_v1 / source_noise_pink_v1 / source_noise_brown_v1
其他 source_wav_v1 / source_device_v1

这些模块在模块库中已经可见,并有独立图标,但默认画布初始化依旧优先使用 source_v1

3. 调参窗口的真实行为

3.1 固定骨架

SourceTuningDialog.vue 的界面结构是固定的:

  1. 顶部启用/禁用按钮
  2. 标题与关闭按钮
  3. PresetPanel
  4. Source 类型切换栏
  5. 当前激活状态栏
  6. 参数区域
  7. 底部统一的 runMode 切换

3.2 Source 类型切换

当前前端写死了 4 个 Source 类型:

标签
tone 音调
noise 噪声
file 音频文件
device 声卡输入

切换逻辑:

  • 先写入 linkStore.setParamValue(instanceId, 'sourceType', type)
  • 再发送 WebSocket set_param
  • 若切到 device,会立即请求输入设备列表;
  • 若引擎正在运行:
  • device 参与切换时,调用 engineStore.startEngine() 重启引擎;
  • device 之间切换时,调用 engineStore.syncSourceSignal() 热更新。

3.3 Tone 分支

Tone 分支支持以下参数:

参数 说明
activeChannels 有效通道数量
toneWaveform sweep / sine / triangle / sawtooth / square
toneStartFreq 单频或扫频起始频率
toneEndFreq 扫频终止频率
sweepDurationSec 扫频时长
toneAmplitude 幅度,单位 dBFS
toneDurationSec 播放时长,0 表示循环
toneFadeInMs / toneFadeOutMs 淡入淡出

3.4 Noise 分支

Noise 分支支持:

参数 说明
activeChannels 有效通道数量
noiseType black / white / pink / brown
noiseDist gaussian / uniform
noiseChannelMode uncorrelated / correlated
noiseAmplitude 幅度,单位 dBFS
noiseDurationSec 播放时长
noiseFadeInMs / noiseFadeOutMs 淡入淡出

3.5 File 分支

当前代码中的文件源不是拖拽上传,而是路径输入型实现

参数 说明
filePath 文本路径
playMode loop / once
fileGain 文件增益,单位 dBFS

重要区分

旧文档把这一分支描述为 wav 加载器,包含拖拽上传、进度条和元信息表;当前前端代码没有这套 UI。若后续重新做文件上传,应该另起一版文档,不应继续沿用过时描述。

3.6 Device 分支

设备输入分支包含以下行为:

能力 当前实现
设备刷新 按钮触发 get_audio_devices
驱动类型 DirectX / ASIO
设备列表显示 显示 namechannelssampleRate
设备选择参数 inputDeviceId
错误反馈 监听 set_param_ack 失败消息,显示 devError

4. 设备与 WebSocket 行为

4.1 主动发送的消息

场景 消息
切换 Source 类型 set_param
修改普通参数 set_param
刷新输入设备列表 get_audio_devicesdirection: 'input'
运行中切换输入设备 set_audio_input_device

4.2 监听的消息

消息 用途
audio_devices 回填输入设备列表
set_param_ack 检查设备切换失败

5. 与链路系统的关系

5.1 默认工程骨架

linkStore.addDefaultModules() 会自动向空链路加入 source_v1sink_v1。因此 Source 不是可选配角,而是默认拓扑的一部分。

5.2 端口传播

linkStore.ts 中 Source 相关的关键点:

  • resolveOutputChannels()resolveOutputSampleRate() 等函数会从 Source 输出端开始向下游传播;
  • setParamValue() 修改到端口属性参数时,会重建 ports 并触发 propagatePortInfo()
  • Source 输出端运行时的 channels / blockSize / sampleRate 由参数值决定,而非静态写死。

6. 模块库与兼容态

6.1 模块库面板

ModuleLibraryPanel.vue 在正常模式下会显示 source 分类下的所有内建 Source 模块;在兼容模式下则只展示 source / sink 两类重点入口。

6.2 图标策略

moduleIcons.ts 已为以下拆分模块提供独立图标:

  • source_sine_v1
  • source_sweep_v1
  • source_triangle_v1
  • source_square_v1
  • source_saw_v1
  • source_noise_white_v1
  • source_noise_pink_v1
  • source_noise_brown_v1
  • source_wav_v1
  • source_device_v1

这意味着前端视觉层已经为拆分态做好准备,只是默认交互入口尚未完全切换。

7. 当前已知差距

主题 当前状态
wav upload 未在当前前端实现
Source 状态灯 未看到独立 SourceStatusDot 体系落地
采样率不匹配告警 未看到独立 UI 呈现
拆分模块专属调参窗 当前仍以 source_v1 专属调参体验为主

8. 结论

结论

当前 Source 前端实现的关键词不是“统一规范”,而是“兼容入口仍在服役,拆分模块已经入库,文件源仍是路径输入,设备源具备基本枚举与切换能力”。任何后续文档、测试与 PR 说明,都应以上述事实为准。