目前确定ET值
最准的方法,就是先后多次在Unity编辑器和手游端通过用耳朵听来综合判断。
写在前面的话
一千人眼里有一千个哈姆雷特
每个人都有每个人的方法,不一定我的就是最好的,如果你按照自己的方法能更好地测出ET值,请选择直接忽略本文。
如果不明白为什么要进行某个步骤时,建议多看看加粗或加斜文字。
后面也会讲到不建议用其他方法测ET的理由,想了解的可以先看。
一、方法和步骤
(一)工具
1. 音频波形编辑软件
比如Adobe Audition CS6 或更高版本、Cool Edit Pro、GoldWave。
2. 测BPM软件
比如MixMiester BPM Analyzer。
3. Unity编辑器
(二)操作步骤
这里结合Adobe Audition 13.0.2.35来讲解。
1. 导入歌曲
打开Adobe Audition,导入或拖入mp3文件至图1标红框位置,并按照图2调整好【时间显示】项。
图2调整项:
①【时间格式】选择“小节与节拍”。
这里是将【时间格式】由“时间”变为“节拍”。
②【节奏】改成测定好的BPM值。
这里需要提前用测BPM软件测BPM值,比如MixMiester BPM Analyzer。
③【细分】改成“8”。
这里是为了迎合Unity编辑器每小节每一拍都有8个Note键位。
④【拍子记号】选择“4/4”。
这里是为了迎合Unity编辑器每小节有4拍。
其他默认不变即可。


2. 在想要最开始放置键位的位置插入标记提示
按空格键开始播放音频,在听到想要最开始放置Note键位的时候按空格暂停播放音频,这时有一条竖线(即时间选择工具)会自动停在这个位置上,按F8插入标记提示,这里假设出现了【标记03】。将鼠标移到【标记03】处,调整鼠标滚轮放大波形,单击长按【标记03】移动到更加精准的位置,如图3。
Adobe Audition【编辑器】的滚轮作用是移动波形视图,【编辑器】和【编辑器】的滚轮见图4


3. 移动波形(剪辑音频)
注意查看本步骤末尾加粗加斜文字,如果不需要进行移动波形可直接跳到第6步。
第1步已经将【时间格式】选择为“小节与节拍”,图4中的【时间格式】已经按照“小节与节拍”来显示,正好对应图5中Unity编辑器的节拍、段落和动作。
现在以图6为例,假设开场小节数是4,那么应该让第2步中插好的【标记03】正好落在Unity编辑器中的第5小节开始处(同理,如果开场小节数为8,那么应该让第2步中插好的【标记03】正好落在Unity编辑器中的第9小节开始处),也就是说应该将【标记03】处的波形移动到第5小节的开始处(即5:1处)。
波形的移动方法如图7,在Adobe Audition【编辑器】第5小节的开始处(即5:1处)插入新的标记提示(为【标记04】),并将两个标记提示之间长按鼠标左键选中,选中后将【时间格式】调成“十进制”,并查看【选区/视图】一栏中【选区】一行对应的【持续时间】(假如这个【持续时间】是2.229,意思是选中的这段波形有2.229秒),如图8。再通过长按单击【编辑器】的滚轮将波形视图移动至最开始处(即1:1处或0秒处),单击0秒处,在选区的【持续时间】处输入2.229并按回车键,【编辑器】会自动选中相关区域,之后按F8插入新的标记提示(这个新的标记提示是区间型的),重新选中这段时间为2.229的波形并按Del键将其删除,如图9。删除后再将【时间格式】选择“小节与节拍”后可以看到【标记03】已经移动到“5:1处”了,如图10。
如果开场小节数为4,而且插入标记提示后,标记提示的位置在5:1之后的(即有足够的小节数满足开场的),其实可以直接进入第6步。另外,谱师一般都是在Unity编辑器中边听边做谱,如果谱子的节奏有规律,基本不会出现Note键位放置不准的情况,但也有一些节奏不规律的歌曲,单用耳朵听很难判断应该放置在哪个键位。本步骤中将插入的标记移动到5:1处的目的是在遇到单靠耳朵听无法判断键位位置时,可以通过查看波形的频谱频率(即红色的波形)判断出节奏,从而更好地放置Note键位,如图11。如果自认为不需要移动波形,可直接查看第6步。







4. 插入空白音
如果想从音乐一开始响起就放置键位的话,则需要增加空白音,也就是说没有足够的小节数开场的情况下需要通过增补相当小节的空白音来填补开场小节。
为了防止ET值出现负数,最好在音乐的最开始处加入1小节的空白音。
在【时间格式】为“小节与节拍”的状态下单击任意一处波形,然后在【选区/视图】一栏中【选区】一行对应的【持续时间】中输入1,意味着自动选取了1小节的波形,同理输入2意味着自动选取2小节波形。然后Ctrl+C复制波形,再单击音频波形最开始处(即0秒处)后Ctrl+V粘贴波形,在选中这段波形的状态下,在波形处单击右键选择【静音】,这样就相当于在音频前面插入了1小节空白音。注意,波形放大后,我们在静音了的这段波形的最结尾看到并没有完全静音,我们再将这一没有完全静音的小段选中,单击右键选择【静音】即可。
其实,在进行第3步的时候就将【标记03】处的波形移动到第6小节的开始处(即6:1处,这里假设开场小节数是4,同理如果开场小节数为8,那么应该让第2步中插好的【标记03】正好落在Unity编辑器中的第10小节开始处),也就意味着留了1小节的波形,这样也就省去了插入空白音的做法了。
5. 保存文件
Ctrl+S 保存文件(覆盖原文件)
Ctrl+Shift+S 另存为新文件
6. 用Adobe Audition查看m4a文件
因为在手机或PAD端游玩游戏的时候加载的音频文件是m4a文件,所以这里必须用Adobe Audition查看m4a文件来更好地测定ET值。
用Unity编辑器导入第5步保存好的音频文件,待Unity编辑器转换好音频格式后,用Adobe Audition打开编辑器目录下的m4a文件,m4a文件夹目录为\LevelEditor_ForPlayer_8.0\client\Assets\resources\audio\bgm。
这时发现,转换后的m4a文件和导入Unity编辑器之前的mp3文件相比,音频的整体波形大概向后移动了0.047s(也可能是其他数值)。
转换后的m4a文件大概是500Kb-1.7MB之间,通过右键属性查看m4a文件的码率为32Kbps,说明m4a文件的音质很差。用Adobe Audition查看m4a文件的波形后,频谱频率(红色的波形)整体被削减很多,而且绿色波形可能稍有变化。
将【时间格式】选择“小节与节拍”,并找到mp3波形文件中放置【标记03】的位置(如果开场小节数为4,而且前面保留了1小节空白音的话,那么这个位置应该在6:1后;同理如果开场小节数为4,那么这个位置应该在10:1后;如果没有进行过第3步的移动波形的话,自己找一下大概位置即可),按F8插入新的标记提示(假如是【标记01】),鼠标单击【标记01】的位置,【选区/视图】一栏中【选区】一行对应的【结束】假如显示为6:1.2,再将左边的【开始】调成2:1.2(可以看到右边的【持续时间】变为4:0.0,这样做的意思就是在【标记01】的位置向前寻找4小节,即寻找到了开场4小节最开始的位置,就是ET值所在的时间刻度),这时编辑器也自动选中了4小节的波形,按F8插入新的标记提示(假如是【标记02】,是区间型的标记提示),单击长按【标记02】的最开始处并选中到0秒处,将【时间格式】调成“十进制”,【选区/视图】一栏中【选区】一行对应的【持续时间】就是大概的ET值。
7.微调ET值
其实在微调ET值之前,你就可以先把谱子做好,等做好了,再微调ET值会更好。
将第6步得到的ET值填入Unity编辑器中,从第5小节开始,每一拍的最开始处都放置一个Note键(或者按照音乐鼓点放置),大约放置到10-15小节(甚至更多)后,把Unity编辑器的“按键音量”调大,然后播放谱面。用耳朵听音乐鼓点和按键音是否重叠,若过快或过慢则需要通过加减ET值来进行微调,达到自认为理想的状态后上传服务器,获得二维码后用手机或PAD端游戏扫码测试谱面,这里建议将游戏的局内按键音打开测试(前提是将游戏设置中的“音符校准”恢复成默认值0),通过Unity编辑器和手机端游戏循环多次测试后,达到自认为最理想的ET值即可。
二、不建议用其他方法测ET的理由
目前发现其他测ET方法:
- 直接通过Adobe Audition查看m4a文件波形找到的ET值(可以粗略计算)
- 直接用Unity编辑器测定的ET值(因为是自动测定,所以部分情况下可以粗略计算)
- 用osu!或Malody测定的ET值(如果是自动测定,部分情况下可以粗略计算;如果是手动校准,则可粗略计算)
- 用TimingAnlyz 0.32.4测定的ET值(因为是自动测定,所以部分情况下可以粗略计算)
我想说,都不是很准!如果准的话,也是小概率发生事件。
(一)游戏Bug:m4a文件音质越好,延迟越大
一般Unity编辑器8.0版本导入mp3文件后,自动生成的m4a文件的音质较差,码率为32Kbps(HE-AAC CVBR)。所以我想到是否能用更好音质的m4a文件来替换掉\LevelEditor_ForPlayer_8.0\client\Assets\resources\audio\bgm这个文件夹里的m4a文件呢?答案是可以的。我用Foobar2000转换后得到一个码率为80Kbps(HE-AAC CVBR)的文件,通过Adobe Audition分析,这个80Kbps的m4a文件和Unity编辑器导入后自动生成的32Kbps的文件波形位置是一样的,但是在Unity编辑器和游戏端体验时发现,在XML文件中设置的ET值和m4a文件的波形位置都相同的情况下,80Kbps的m4a文件比32Kbps的m4a文件延迟高。
为了证明上面的发现,我用Foobar2000转化出32Kbps-320Kbps之间一系列的m4a文件,在XML文件设置统一个ET值的情况下,在Unity编辑器端播放测试发现320Kbps的m4a文件的谱子已经慢了大约半个拍子,就是说m4a音质越好,延迟就越大,ET就越离谱。再有,我还用Unity编辑器分别导入了32Kbps-320Kbps之间一系列的m4a文件,发现导入后Unity编辑器自动测定的ET值基本相同,这更加说明我们不能相信Unity编辑器自动测定的ET值,也不能将直接通过Adobe Audition查看m4a文件波形找到的ET值作为最准确的ET值。
(想说个题外话,如果m4a文件超过2MB,谱子则会上传失败,而且歌曲时长不能超过5分钟。8.0编辑器的对音频文件的转码方式是【AAC(Apple)→约束VBR→32kbps品质→使用HE-AAC】,如果想替换掉编辑器自动生成的低音质m4a文件的话,可以用Foobar2000转换,具体操作见我另一篇文章《【QQ炫舞自制】如何提升m4a音频音质》。)
(二)通过osu!和malody判断ET值所存在的问题
osu!仅支持mp3文件导入,malody仅支持mp3和ogg文件导入,且二者都不支持m4a文件导入,加之上述谜一样的游戏bug,就更加不准了。而且我感觉osu!和malody判断歌曲的OFFSET(偏移量,即QQ炫舞里所谓的ET)的方法和QQ炫舞也不一样,他们的作用无非可以是粗略测得ET值。
(三)通过用TimingAnlyz 0.32.4判断的ET值存在的问题
TimingAnlyz 0.32.4倒是可以导入m4a文件,但是它和Unity编辑器一样,导入了32Kbps-320Kbps之间一系列的m4a文件后,所有的ET值都是一样的,而且也不准。
综合以上原因,我认为微调ET值是必须的,而且单靠频谱频率和波形来判断ET是不准确的,必须通过先后多次在Unity编辑器和手游端通过用耳朵听来综合判断。