谱面定数与相关文件
2024年4月14日大约 3 分钟
歌曲谱面数据
谱面定数存储在主数据库 database/arcaea_database.db
的 chart
表中:
song_id
为唯一主键,与songlist
中的id
应当一致。name
是方便人类理解的歌曲名称,对客户端而言并无实际作用,可以留空,但仍建议填写。目前并不支持多语言。rating_***
为不同难度的谱面定数,在数据库中使用整数,是真实值的十倍。另外,负数代表此谱面不存在或者谱面不计入潜力值。
需要下载的数据
客户端中需要远程下载的数据存储在服务端的 database/songs
文件夹中,每个歌曲的数据放在同一个子文件夹中,文件夹名称为唯一的 song_id
。
各类文件说明
谱面文件
谱面文件为 UTF-8 无签名编码格式的文本文件,文件名必须为 *.aff
,星号是难度数字 0~4
,其具体格式在此不赘述。
歌曲文件
- 歌曲文件为 OGG 格式的音频文件,文件名固定为
base.ogg
,请注意进行格式转换。 - 对于特殊的 Beyond 谱面音频,文件名固定为
3.ogg
。 - 视频的音频文件,文件名固定为
video_audio.ogg
。
视频文件
- 视频文件为 MPEG-4 格式,文件名固定为
video.mp4
,其音频文件即video_audio.ogg
。 - 特殊的背景视频文件,文件名为
video_720.mp4
和video_1080.mp4
,注意视频尺寸比例,以及不应有音频。
特殊的 songlist
你可以选择性地放置 database/songs/songlist
文件。此文件会被用来限制可下载的文件,未提及的曲目文件则不作限制。反过来说,当此文件不存在时,服务端会认为 database/songs/<song_id>
文件夹中的所有符合前述命名规范的文件都是需要提供的,这可能会导致冗余下载。
此文件还有另一个作用,在配置文件中打开 DOWNLOAD_FORBID_WHEN_NO_ITEM
,可以给服务端提供购买物品信息,限制未购买用户下载曲包和单曲。
客户端下载机制
- 客户端只会且只需要下载它缺少的文件,冗余下载会出现问题。
- 客户端需要下载所有缺少的文件,如服务端无法尽数提供,则客户端会提示继续下载以致无法游玩。
- 可正确下载的文件存在最小文件大小,请不要使用空文件占位(特别是谱面文件)。可能也存在最大文件大小,尚不明确。
- 对于曲包下载来说,你需要提供曲包内所有曲目的全部数据,否则客户端同样会提示继续下载。
- 特殊的文件——目前是一些视频文件——有客户端硬编码限制,不具有普遍下载的可能性。
服务端缓存
- 在服务端启动时,或者在第一次接收到对应请求时,服务端会获取、计算并缓存歌曲相关数据,此后对于
database/songs
文件夹中的任何修改将不会生效。除非重启服务端,或在前端页面进行缓存刷新。 - 缓存内容包括
database/songs
文件夹中的所有文件的文件名、songlist
文件内容以及需要下载的文件的 MD5 hash 值。
提示
缓存计算可能耗费大量时间,若有需要,你可以通过配置文件来调整缓存计算的时机。但无论如何,此计算是必须完成的,否则文件下载功能失效。