羲音锻造台 · 算法 IP 调音工具设计器 + 算法源码生成器
基础控件
🎚Slider
🎛Knob
ComboBox
Toggle
🔘Button
🅰Label
布局容器
📑Tabs
Group
Grid
Splitter
数据可视化
📈FreqChart
📊Spectrum
🌊Waveform
🎯RTA
📉Meter
🔷VuMeter
DSP 专用
🔢EQGraph
XYPad
🎙MicArray
🚗CarSeats
📄 PEQ_8band_v2.xiforge 画布尺寸 1200 × 720 · 网格 16px 吸附
100%
🎚 PEQ 调音 · 8 段
120 Hz
+3.0 dB
Q · 1.4
🎚 W2 · Slider
id: freq_slider · type: Slider

Layout 布局

Style 样式

Binding 数据绑定

Events 事件

onChange setParam('freq')
onMouseUp commitUndo()
onDoubleClick resetToDefault()
+ 添加事件
⚡ 算法源码 (peq.cpp) 📋 参数 Schema (peq_params.json) 📦 UI 描述 (peq.xiforge) 实时生成中 · 与 UI 设计同步
// ⚡ XiForge 自动生成 · 修改 UI → 此处 Param Schema 同步刷新 // 文件: peq.cpp · 算法 ID: PEQ_8band_v2 · 套件: XiAlgo-FX #include "xicore/dsp.h" struct PEQ8Band final : public XiModule { // 参数(从 UI 控件 W2/W3/W4/W5 自动推导) struct Params { f32 freq[8] = { 120, 300, 800, 2000, ... }; // W2 Slider f32 gain[8] = { 3.0f, 0.0f, ... }; // W3 Slider f32 q[8] = { 1.4f, 1.0f, ... }; // W4 Knob u8 type[8] = { PEAK, PEAK, ... }; // W5 ComboBox } params; BiQuad filters[8]; void init() override { for (int i = 0; i < 8; ++i) { filters[i].setPeq(params.freq[i], params.gain[i], params.q[i], params.type[i]); } } void process(f32* in, f32* out, int n) override { for (int i = 0; i < n; ++i) { f32 y = in[i]; for (int b = 0; b < 8; ++b) y = filters[b].tick(y); out[i] = y; } } // onChange 钩子(来自 W2 Events.onChange = setParam('freq')) void onParamChange(const char* key, f32 v) override { if (strcmp(key, "freq") == 0) { /* ... 重新计算系数 ... */ } } };
my_peq_v2.xiforge 项目
📁 PEQ_8band_v2/
📄 peq.cpp [自动生成]
📄 peq.h
📄 peq_params.json
📄 peq.xiforge [UI 描述]
📁 tests/
test_peq_unit.cpp
test_peq_freq.cpp
AI 助手
💡 检测到 W4 Knob 的 Q 范围 (1-100) 与 BiQuad 推荐范围 (0.5-10) 不一致,建议修正?
✓ 参数命名规范检查通过 · 4/4 控件已绑定
📄 peq.cpp [gen] 📄 peq.h 📄 peq_params.json
1// ============================================ 2// XiForge 自动生成 · 不要手动修改下方 [GEN] 区 3// 文件: peq.cpp · 算法 PEQ_8band_v2 4// 源 UI 描述: peq.xiforge · 控件 W1-W8 5// ============================================ 6 7#include "xicore/dsp.h" 8#include "xicore/biquad.h" 9 10// ─── [GEN-START params] 自动同步自 UI 控件 ───
11struct PEQ8BandParams {
12 f32 freq[8] { 120, 300, 800, 2000, 4000, 8000, 12000, 16000 };
13 f32 gain[8] { 3.0, 0.0, -2.0, 0.0, 0.0, 1.5, 0.0, -3.0 };
14 f32 q[8] { 1.4, 1.0, 0.7, 1.0, 1.0, 1.4, 2.0, 0.7 };
15 u8 type[8] { PEAK, PEAK, PEAK, PEAK, PEAK, PEAK, HSHELF, LSHELF };
16};
17// ─── [GEN-END params] ─── 18 19class PEQ8Band final : public XiModule { 20 private: 21 PEQ8BandParams params_; 22 BiQuad filters_[8]; 23 24 public: 25 void init() override { 26 for (int i = 0; i < 8; ++i) 27 filters_[i].setPeq(params_.freq[i], params_.gain[i], 28 params_.q[i], params_.type[i]); 29 } 30 31 void process(f32* in, f32* out, int n) override { 32 for (int i = 0; i < n; ++i) { 33 f32 y = in[i]; 34 for (int b = 0; b < 8; ++b) 35 y = filters_[b].tick(y); 36 out[i] = y; 37 } 38 } 39 40// ─── [GEN-START events] 自动同步自 UI Events ───
41 void onParamChange(const char* key, int idx, f32 v) override {
42 if (strcmp(key, "freq") == 0) params_.freq[idx] = v;
43 else if (strcmp(key, "gain") == 0) params_.gain[idx] = v;
44 else if (strcmp(key, "q") == 0) params_.q[idx] = v;
45 else if (strcmp(key, "type") == 0) params_.type[idx] = (u8)v;
46 filters_[idx].setPeq(params_.freq[idx], params_.gain[idx],
47 params_.q[idx], params_.type[idx]);
48 }
49// ─── [GEN-END events] ─── 50};

🎬 用户运行时实际看到的 Tuning 工具

🎚 PEQ 调音 · 8 段 (运行时)
120 Hz
+3.0 dB
Q · 1.4
↑ 实时预览 · 修改左侧 UI 设计后此处自动更新

📊 算法功能验证

单元测试 32/32 通过
• setPeq() 系数计算正确
• process() 输入 1kHz 正弦,输出衰减 -3dB at fc=2kHz
• onParamChange() 8 个参数全部响应
• 频响测量误差 RMS < 0.05 dB
UI 绑定一致性
• 8 控件均已绑定 paramStore
• Events 钩子全部触发 onParamChange
• 撤销/重做集成正常
性能警告
• CPU 估算 2.3% · MemPool 12 KB(合格)
• W6 FreqChart 重绘频率 60fps,可降至 30fps 节省 CPU 0.4%
建议:在 props 面板调整 FreqChart.refreshRate
💡 XiForge 集成测试流程:
① UI 设计 → 自动生成 cpp 骨架
② 算法填充实现 → 自动跑单元测试
③ UI + 算法联动 → 仿真试听
④ 性能 / 准确度达标 → 一键发布到 XiAlgo 私有库
⑤ 在 XiStudio 中即可拖用本 IP
⚒ XiForge PEQ_8band_v2 · v2.0.0-rc 8 控件 · 已绑定 8/8 32 单元测试 · 全部通过 CPU 估算 2.3% 实时同步
UTF-8 master XiForge v1.0
×

👋 XiForge · UI 设计器

• 顶部 3 视图:UI 设计 / 算法源码 / 仿真测试
• 左栏:基础控件库 + 我的 IP 工具列表
• 中央:调音工具 UI 画布(拖拽控件 + 自由布局)
• 右栏:选中控件的 Layout / Style / Binding / Events
• 底部:算法源码 实时自动生成(带 [GEN] 标记区域)
• 完成后 → "发布到 XiAlgo 私有库" → XiStudio 直接拖用