Arcaea 自制谱面 | 学习笔记
0 写在前面
仅作为近几天的学习记录.
I 图形化制谱工具
关于 Arcade 的使用请参考: https://note.com/nesiddo/n/nd54c0c766c8a
II 准备音频
下载等待制谱的音乐文件, 导入 Adobe Audition 进行编辑. 音乐时长应控制在 2 ~ 3min, 音乐开始前建议有 1000ms 左右的静音.
音频导出为 OGG 格式, 加载 Arcade 谱面后调整延迟, 使得第一条网格线与音乐第一拍重合.
建议开启打击音效, 这样更易判断采音是否准确.
III 关于采音
音频准备完成后 (确保延迟 < 10ms) 就可以开始采音工作了. 通常先用 tap 采完全曲的音 (可用不同轨道代表不同音高或音色), 后进行排键配置. 采音常常具有高度的对称性.
Arcade 中节拍细分默认为 4, 即 1/4 拍的 16 分音. 大部分的歌曲都是 4 拍, 少数如 To: Alice Liddell 属于 3 拍.
一般而言, 舒缓的音色 (例如和弦) 和慢速过渡的节奏 (例如吟唱) 适合采用 arc 和 hold, 而激烈的音色 (例如鼓) 和快速激昂的段落 (例如钢琴华彩) 适合采用 tap 和 arctap. 如果根据节拍强弱来分类, 那么 arctap < tap < 双押, 部分采音也可以用黑线代替.
请一定避免虚空采音.
IV 常见键型
交互
直交互 (交互线平行于轨道)


斜交互 (交互线倾斜于轨道)


位移交互 (交互线不固定, 也称散打)


三角交互 (三个音为一组)

2+2 交互 (天-天-地-地)

1+3 交互 (天-地-地-地)

纵连

叠键

双押 (多押)
单点双押交替

快速多次双押

多押


V 关于黑线
黑线的作用有二: 引导和表演.
除去顶角为起点的 arc, 所有 arc 必须由黑线引导. Arctap 也必须出现在黑线上.
黑线常常有三种来源: 一个点, 一段 arc, 或一个图案.



事实上除黑线外, 黑线的投影以及 arc 的投影线也可以绘制图案.
VI 谱面特效
变速
Timing 函数的 BPM 参数可用于改变谱面流速.
例如希望将 BPM 从 100 上升至 200, 可以写为
timing(0,100.00,4.00);
timing(250,125.00,4.00);
timing(500,150.00,4.00);
timing(750,175.00,4.00);
timing(1000,200.00,4.00);
写为多个 timing 的优势是谱面流速变化更为平滑.
如果将 BPM 短暂设置为 0, 那么将产生停顿效果, 例如 Sheriruth
timing(85297,0.00,4.00);
timing(85459,370.00,4.00);
arc(85459,85621,0.00,0.00,s,1.00,1.00,0,none,true);
arc(85459,85621,1.00,1.00,s,1.00,1.00,0,none,true);
timing(85621,185.00,4.00);
请注意停顿后应将 BPM 短暂调为双倍原速, 否则会很难看.
在 Nhelv 的谱面中出现了逆行
timing(138838,-32.74,3.00);
timing(141072,174.59,3.00);
短短两行就可以实现效果.
不过如果写下例如
timing(0,100.00,4.00);
timing(1000,-100.00,4.00);
timing(1750,100.00,4.00);
timing(2000,100.00,4.00);
(2000,4);
会发现 note 在逆行前穿过了判定线. 怎样办呢?
考虑 note 的判定时间是固定的, 我们从 timing 2000 倒推. 逆行的时间有 750ms, 而顺行的时间仅有 250ms, 那么需要将 timing 1750 的速度至少调整为 300.00 就可以避免.
在 Stasis 的谱面中, 有一段结束后突然凭空出现很多音符, 这可以通过瞬间提升流速实现
timing(21333,999999.00,999999.00);
在 Fracture Ray 的爆发段前, 轨道上的小节线变得非常密集, 这可以通过降低拍号实现
timing(102900,200.00,0.10);
6k
Scenecontrol 中的 enwidenlanes / enwidencamera 函数可用于实现 6k
(timing,enwidencamera or enwidenlanes,转换持续时间,0 或 1);
例如
(2000,enwidencamera,2000.00,1);
(2000,enwidenlanes,2000.00,1);
开启 6k 后, 原本梯形域范围 (-0.5,0), (0,1), (1,1), (1.5,0) 转变为 (-1,0), (-0.25,1.61), (1.25,1.61), (2,0). 6k 时所有天空中 arctap 的高度应保持在 1.61.
伪键
Timinggroup (时间组) 就像是板绘中的 "图层", 可以在不同时间组中添加 note, 对任一时间组操作只会影响该时间组中 note 的行为.
定义 timinggroup 时加入 noinput 参数可以产生 "伪键" 效果, 也就是无需点击且不计入判定的 note
timinggroup(noinput){}
例如
timinggroup(noinput){
timing(0,200.00,4.00);
arc(2000,2001,0.25,0.25,s,4.00,4.00,0,none,false);
arc(2000,2001,0.75,0.75,s,4.00,4.00,1,none,false);
}
虚化
Scenecontrol 中的 trackshow / trackhide / trackdisplay 能够控制轨道透明度
(timing,trackhide or trackshow);
(timing,trackdisplay,转换持续时间,0 - 255);
例如
scenecontrol(2000,trackdisplay,0.30,200);
scenecontrol(3000,trackhide);
Scenecontrol 中的 hidegroup 能够控制 note 的透明度
(timing,hidegroup,0.00,0 - 255);
例如
scenecontrol(2000,hidegroup,0.00,200);
scenecontrol(3000,hidegroup,0.00,0);
课后练习
介绍了这么多特效.. 做一些题目巩固一下自己吧.
Qn1 请写出一个 tap, 满足以下条件:
1) 突然出现;
2) 突然消失;
3) 定在原地;
4) 它不能被判定, 即 "伪键".
Qn2 请写出如下配置:
1) 6k;
2) 镜头拉宽;
3) 一个 arctap 逆向到达判定线;
4) 判定前有 arctap 的黑线轮廓提示.
Qn3 请写出如下特效:
1) 一个 tap 到达判定线并被判定;
2) Tap 被弹起后再次到达判定线, 共计两次判定.
参考答案
Sol1
timinggroup(noinput){
timing(0,200.00,4.00);
scenecontrol(0,hidegroup,0.00,0);
scenecontrol(1000,hidegroup,0.00,255);
timing(1000,0.01,4.00);
timing(2000,200.00,4.00);
(2500,1);
scenecontrol(2000,hidegroup,0.00,0);
};
Sol2
timinggroup(){
timing(0,200.00,4.00);
scenecontrol(0,hidegroup,0.00,0);
scenecontrol(0,enwidenlanes,900.00,1);
scenecontrol(0,enwidencamera,900.00,1);
timing(900,-200.00,4.00);
scenecontrol(900,hidegroup,0.00,255);
arc(1000,1001,0.00,0.00,s,1.00,1.00,0,none,true)[arctap(1000)];
};
timinggroup(){
timing(0,200.00,4.00);
arc(1000,1000,-0.25,0.25,s,1.06,1.06,0,none,true);
arc(1000,1000,-0.25,0.25,s,0.94,0.94,0,none,true);
arc(1000,1000,-0.25,-0.25,s,0.94,1.06,0,none,true);
arc(1000,1000,0.25,0.25,s,0.94,1.06,0,none,true);
arc(1000,1020,-0.25,-0.25,s,0.94,0.94,0,none,true);
arc(1000,1020,-0.25,-0.25,s,1.06,1.06,0,none,true);
arc(1000,1020,0.25,0.25,s,0.94,0.94,0,none,true);
arc(1000,1020,0.25,0.25,s,1.06,1.06,0,none,true);
arc(1020,1020,-0.25,0.25,s,1.06,1.06,0,none,true);
arc(1020,1020,-0.25,0.25,s,0.94,0.94,0,none,true);
arc(1020,1020,-0.25,-0.25,s,0.94,1.06,0,none,true);
arc(1020,1020,0.25,0.25,s,0.94,1.06,0,none,true);
};
Sol3
timinggroup(){
timing(0,200.00,4.00);
(1000,2);
(2000,2);
timing(1000,-175.00,4.00);
timing(1125,-135.00,4.00);
timing(1250,-75.00,4.00);
timing(1375,-37.50,4.00);
timing(1500,37.50,4.00);
timing(1625,75.00,4.00);
timing(1750,135.00,4.00);
timing(1875,175.00,4.00);
timing(2000,200.00,4.00);
};