波形文件 .pulse
DG-LAB 官方在 3.4.4 版本开放了波形文件导出功能。.pulse 是官方定义的波形文件格式,社区可通过 DG-BBS 波形分享 分享和预览波形。
整体结构
Dungeonlab+pulse:<波形描述>=<小节描述>+section+<小节描述>+section+...
- 小节之间使用
+section+分隔 - 每个波形至多 10 个小节
波形描述
pulse:<休息时长>,<速度倍率>,<未知>=
| 参数 | 说明 |
|---|---|
| 休息时长 | 播完所有小节后的休息时长 (滑块值 x0.1 = 秒) |
| 速度倍率 | 播放速度,可选 1, 2, 4 |
| 未知 | 默认 16,作用尚不明确 |
小节描述
<频率A>,<频率B>,<小节时长>,<频率模式>,<小节开关>/<脉冲数据>
| 参数 | 说明 | 取值 |
|---|---|---|
| 频率A | 频率变化初值索引 | 0~83 |
| 频率B | 频率变化终值索引 | 0~83 |
| 小节时长 | 时长索引 | 0~99 |
| 频率模式 | 频率变化规律 | 1~4 |
| 小节开关 | 是否启用 | 0/1 |
频率模式
| 值 | 名称 | 说明 |
|---|---|---|
| 1 | 固定 | 频率恒定为频率A |
| 2 | 节内渐变 | 整个小节内频率从A渐变到B |
| 3 | 元内渐变 | 每个脉冲元内频率从A到B (周期性) |
| 4 | 元间渐变 | 脉冲元内频率固定,但逐个脉冲元从A渐变到B |
频率索引映射
频率值单位为 ms (10ms = 100Hz, 20ms = 50Hz):
const FREQ_SLIDER_VALUE_MAP = [
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 52, 54, 56, 58, 60, 62, 64, 66, 68,
70, 72, 74, 76, 78,
80, 85, 90, 95,
100, 110, 120, 130, 140, 150, 160, 170, 180, 190,
200, 233, 266, 300, 333, 366,
400, 450, 500, 550,
600, 700, 800, 900, 1000
]; // 索引 0~83
小节时长映射
const SECTION_TIME_MAP = [
0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, // 0-9
1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, // 10-19
2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, // 20-29
3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8, 3.9, 4.0, // 30-39
4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9, // 40-48
5, 5.2, 5.4, 5.6, 5.8, 6, 6.2, 6.4, 6.6, 6.8, // 49-58
7, 7.2, 7.4, 7.6, 7.8, // 59-63
8, 8.5, 9, 9.5, // 64-67
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, // 68-77
20, 23.4, 26.6, 30, 33.4, 36.6, // 78-83
40, 45, 50, 55, // 84-87
60, 70, 80, 90, // 88-91
100, 120, 140, 160, 180, // 92-96
200, 250, 300 // 97-99
]; // 索引 0~99,单位秒
脉冲元形状
小节开关后以 / 分隔,后接脉冲数据:
<强度>-<类型>,<强度>-<类型>,...
| 参数 | 说明 | 取值 |
|---|---|---|
| 强度 | 脉冲强度 | 0~100 |
| 类型 | 0 = 普通 (自动插值), 1 = 锚点 (可编辑) |
0/1 |
每根"竖条"代表 0.1s 的输出,脉冲元最少 2 根竖条 (0.2s)。锚点间的普通脉冲由线性插值自动计算。
完整示例: 弹跳.pulse
以下是 DG-LAB 官方内置波形「弹跳」的完整 .pulse 文件。
原始数据
Dungeonlab+pulse:20,1,16=0,30,44,2,1/0.00-1,33.30-0,66.65-0,100.00-1+section+0,20,19,1,0/0.00-1,100.00-1+section+0,20,19,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1+section+0,20,0,1,0/0.00-1,100.00-1
格式化拆分
添加换行和空格后:
Dungeonlab+pulse: 20, 1, 16 =
0, 30, 44, 2, 1 / 0.00-1, 33.30-0, 66.65-0, 100.00-1 +section+
0, 20, 19, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 19, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1 +section+
0, 20, 0, 1, 0 / 0.00-1, 100.00-1
波形描述
20, 1, 16
| 参数 | 值 | 含义 |
|---|---|---|
| 休息时长 | 20 |
20 x 0.1 = 2.0 秒 |
| 速度倍率 | 1 |
1x 正常速度 |
| 未知 | 16 |
默认值 |
小节 1 (唯一启用的小节)
0, 30, 44, 2, 1 / 0.00-1, 33.30-0, 66.65-0, 100.00-1
小节参数:
| 参数 | 值 | 查表 | 含义 |
|---|---|---|---|
| 频率A | 0 |
FREQ[0] = 10ms | 100 Hz (冲击感) |
| 频率B | 30 |
FREQ[30] = 40ms | 25 Hz (缓慢) |
| 小节时长 | 44 |
TIME[44] = 4.5s | 持续 4.5 秒 |
| 频率模式 | 2 |
节内渐变 | 频率从 100Hz 渐变到 25Hz |
| 小节开关 | 1 |
启用 |
脉冲元形状 (4 根竖条 = 0.4s 一个周期):
| 竖条 | 强度 | 类型 | 说明 |
|---|---|---|---|
| 1 | 0.00% | 锚点 | 起始,无输出 |
| 2 | 33.30% | 插值 | 线性上升 |
| 3 | 66.65% | 插值 | 继续上升 |
| 4 | 100.00% | 锚点 | 峰值,满强度 |
这组脉冲元形成了一个 0% → 100% 的线性爬升,每 0.4s 重复一次。配合频率从快到慢的渐变,产生"弹跳"的触感。
小节 2~10 (全部禁用)
所有剩余小节的 小节开关 = 0,不会播放。这些是 APP 导出时的占位数据。