Phichain 谱面格式
Phichain 谱面格式是制谱器使用的谱面格式,包含高阶功能
格式版本
Phichain 谱面格式通常会随制谱器的功能变化产生频繁更新
当前 Phichain 谱面格式的版本为 3
在制谱器中打开低版本的 Phichain 谱面时,制谱器将自动尝试迁移谱面至最新版本
结构
typescript
// 谱面根节点
type PhichainChart = {
// 谱面的格式版本,目前恒定为 3
format: number
// 以毫秒为单位的谱面偏移
offset: number
// BPM 列表
bpm_list: BpmList
// 判定线列表
lines: Line[]
}
// 拍数,[a, b, c] 代表 a+b/c 拍
type Beat = [number, number, number]
// 单个 BPM 点,代表一次 BPM 的变化
type BpmPoint = {
// BPM 点所在的拍数
beat: Beat
// BPM 值
bpm: number
}
// BPM 列表
type BpmList = BpmPoint[]
// 判定线
type Line = {
// 判定线的名称
name: string
// 判定线的所有音符
notes: Note[]
// 判定线的所有事件
events: Event[]
}
// 音符的类型
type NoteKind =
| 'tap'
| 'drag'
| 'flick'
// Hold 音符,包含 Hold 持续时间
| {
hold: { hold_beat: Beat }
}
// 音符
type Note = {
// 音符的类型
kind: NoteKind
// 音符判定的拍数
beat: Beat
// 音符的 x 坐标
x: number
// 音符是否在判定线上方
above: boolean
// 音符的速度因子
speed: number
}
// 事件缓动
type Easing =
| 'linear'
| 'ease_in_sine'
| 'ease_out_sine'
| 'ease_in_out_sine'
| 'ease_in_quad'
| 'ease_out_quad'
| 'ease_in_out_quad'
| 'ease_in_cubic'
| 'ease_out_cubic'
| 'ease_in_out_cubic'
| 'ease_in_quart'
| 'ease_out_quart'
| 'ease_in_out_quart'
| 'ease_in_quint'
| 'ease_out_quint'
| 'ease_in_out_quint'
| 'ease_in_expo'
| 'ease_out_expo'
| 'ease_in_out_expo'
| 'ease_in_circ'
| 'ease_out_circ'
| 'ease_in_out_circ'
| 'ease_in_back'
| 'ease_out_back'
| 'ease_in_out_back'
| 'ease_in_elastic'
| 'ease_out_elastic'
| 'ease_in_out_elastic'
| 'ease_in_bounce'
| 'ease_out_bounce'
| 'ease_in_out_bounce'
// 自定义缓动,元组中的四个数分别代表三次贝塞尔曲线的两个控制点的坐标
// https://cubic-bezier.com
| { custom: [number, number, number, number] }
// 判定线事件
type Event = {
// 事件的类型
kind: 'x' | 'y' | 'rotate' | 'alpha' | 'speed'
// 事件开始的拍数
start_beat: Beat
// 事件结束的拍数
end_beat: Beat
// 事件的值
value: EventValue
}
// 事件的值
type EventValue =
// 过渡
| {
transition: {
start: number
end: number
easing: string
}
}
// 常量
| { constant: number }