专辑信息

对专辑信息的描述存放于元数据仓库下指定的专辑存放目录,以专辑的品番作文件名。

专辑信息通过 toml 格式描述。

艺术家

专辑信息中有 artistartists 字段用于填写艺术家信息。其中 artist 字段较为简单,而 artists 字段则可以表示更加精确的艺术家信息。

artist 字段

专辑、唱片和音轨都拥有 artist 字段,用于表示主要的艺术家信息。主艺术家的选取规则如下:

  1. 当该曲目的类型为 Normal 时,主艺术家为 Vocal。特别地,对于 VOCALOID 或其他歌声合成软件制作的歌曲,Vocal 由P主和歌姬共同构成。
  2. 当该曲目的类型为 Instrumental 时,主艺术家为对应非 Instrumental 版本的 VocalComposer。特别地,当该曲目对应非 Instrumental 曲目为某曲目的 Rearrange 时,主艺术家为对应非 Instrumental 版本的 Vocal 或该曲目的 Arranger
  3. 当该曲目的类型为 Absolute 时,主艺术家为 Composer。特别地,当该曲目为某曲目的 Remix/Rearrange 时,主艺术家为 Arranger

示例如下:

  1. 《Track A》为 Artist A 个人单曲中的某一音轨,曲目类型为 Normal。此时主艺术家为 Vocal,即 Artist A
  2. 《Track B》为 Artist A 个人单曲中的某一音轨,曲目类型为 Instrumental。此时主艺术家可以为 Vocal(即 Artist A),或作曲(Composer)。
  3. 《Track C》为 Artist A 个人单曲中的某一音轨,曲目类型为 Instrumental,且该音轨为 《Track B》 的 Rearrange。此时主艺术家可以为 Vocal(即 Artist A),或《Track C》的 Arranger
  4. 《Track D》为 Artist A 个人单曲中的某一音轨,曲目类型为 Absolute。此时主艺术家为该曲目的作曲(Composer)。
  5. 《Track E》为 Artist A 个人单曲中的某一音轨,曲目类型为 Absolute,且该音轨为 《Track D》 的 Rearrange。此时主艺术家为《Track E》的 Arranger

artists 字段

artists 字段用于描述更加精确的艺术家信息。该字段的继承方式与 artist 相同,但其中字段不继承。如下所示:

# ...
[[discs.tracks]]
title = "夏凪ぎ(Episode 9 Ver.)"
artists.vocal = "やなぎなぎ"
artists.composer = "麻枝准"
artists.lyricist = "麻枝准"
artists.arranger = "MANYO"
artists.piano = "kidlit"
artists.violin = "須原杏、沖増菜摘"
artists.viola = "梶谷裕子"
artists.cello = "渡邉雅弦"
artists.irish-harp = "梅田千晶"

使用 TypeScript 描述的类型表示如下,其中 [] 中的内容表示存在时向 FLAC 文件写入的 Tag 名:

type Artists = ExtendedArtists & Record<string, string>;

interface ExtendedArtists {
  // 歌手
  vocal?: string;
  // 作曲 [COMPOSER]
  composer?: string;
  // 作词 [LYRICIST]
  lyricist?: string;
  // 编曲 [ARRANGER]
  arranger?: string;
}

标签

专辑、光盘和音轨上都可以存在标签。标签可以用于描述专辑、光盘和音轨的性质,语义为「属于」。各个标签相互独立,不存在继承关系。如:

(音轨)夏凪ぎ 属于 OP
(音轨)宝物になった日 属于 ED
(专辑)夏凪ぎ/宝物になった日 属于 神様になった日

当用于检索时,标签使用「向上合并」的语义。即:专辑的合并标签定义为专辑内所有专辑标签、光盘标签和音轨标签的并集。此时标签的语义为「包含」。如:

(专辑)夏凪ぎ/宝物になった日 包含 神様になった日、OP、ED

对于标签的使用方式,作如下约定:

  1. 对单曲碟片中的曲目,同一曲目在其各版本收录单曲中标签应保持一致。
  2. 对专辑碟片中的曲目,如同一曲目在此前发售的单曲碟片中已经存在,则专辑中不需要包括该标签。

音乐类型

对明显有歌、曲的音轨,定义其类型为 Normal;对于此类歌曲的伴奏版本,定义类型为 Instrumental;对于不为上述情况的无人声音轨,或 Vocal & Chorus 音轨,定义其类型为 Absoulte

对于以角色身份进行故事演绎的音轨,定义其类型为 Drama

对于以真人身份进行的,明确以广播形式发行的音轨或广播节目,定义其类型为 Radio

对于以真人身份进行的,但不属于广播的音轨(如 Bonus Track 中的对话),或以角色身份演绎的,仅包含单句或多句语音的短音轨,定义其类型为 Vocal

示例

######################################################
# 专辑信息
[album]
#
# 专辑 ID [必填项]
#
# 表示为随机生成的 UUID
album_id = "572c5c19-0080-404b-9d8b-2eb864aea75d"
#
# 专辑名称 [必填项][ALBUM]
#
# 专辑的标题,盘片类型信息需要填写到专辑类型下。
title = "夏凪ぎ/宝物になった日"
#
# 专辑类型 [可选项][ALBUM]
#
# 当该项非空时,写入 ALBUM 中的专辑名为 "{title}【{edition}】"。
edition = ""
#
# 专辑品番 [必填项]
#
# 当存在多张时用 ~ 隔开,如:
# catalog = "ALBUM-01~50"
catalog = "KSLA-0178"
#
# 专辑艺术家 [必填项]
#
# 使用「Anni 艺术家别名嵌套」格式表示具体的艺术家。
artist = "やなぎなぎ"
#
# 专辑的发行日期 [必填项][DATE]
#
# 日期有两种表示方法:
# date = 2021-06-22
# date = "2021-06"
# 
# 日期表达形式更加精确,当没有精确日期时则可以使用字符串表达模糊的年月。
# 在字符串表达格式通过 `-` 分隔年月日,月和日都可以省略。
# 尽量精确到日,如果无法确定则精确到月或年。
date = 2020-12-16
#
# 专辑的标签 [可选项]
#
# 会和光盘/音轨的标签取并集,共同描述专辑中所含内容的分类。
tags = [
  # 使用标签的 type 指定重名 Tag 的具体指代对象
  # 标签名称前后的空格会被自动剔除
  "group:4U",
  # 当没有指定标签类型时,如果仓库内存在类型不同的同名标签,则会抛出错误
  # 当该标签名称唯一时,则不会报错
  "神様になった日",
]
#
# 音乐类型 [必填项]
#
# 可选项如下所示:
# normal(默认):有人声的歌曲。
# instrumental:无人声的伴奏。
# absolute:纯音乐。
# drama:以人声为主的单元剧。
# radio:以人声为主的广播节目。
# vocal:纯人声,如音乐现场的 MC 等。
type = "normal"

######################################################
# 光盘信息
[[discs]]
# 光盘名称 [可选项]
title = "夏凪ぎ/宝物になった日"
# 光盘艺术家 [可选项]
artist = "やなぎなぎ"
#
# 光盘品番 [必填项]
#
# 只允许表示一张光盘,不得出现 ~ 连接符。
catalog = "KSLA-0178"
#
# 光盘标签 [可选项]
#
# 会和专辑的标签取并集,共同描述专辑中所含内容的分类。
tags = []
#
# 音乐类型 [可选项]
#
# 用于覆盖专辑的音乐类型。
type = "normal"

######################################################
# 音轨信息
[[discs.tracks]]
# 音轨标题 [必填项][TITLE]
title = "夏凪ぎ"
#
# 音轨标签 [可选项]
#
# 会和专辑的标签取并集,共同描述专辑中所含内容的分类。
tags = ["OP"]

[[discs.tracks]]
title = "宝物になった日"
tags = ["ED"]

[[discs.tracks]]
title = "夏凪ぎ(Episode 9 Ver.)"
#
# 音轨详细艺术家 [可选项]
#
artists.vocal = "やなぎなぎ"
artists.composer = "麻枝准"
artists.lyricist = "麻枝准"
artists.arranger = "MANYO"
artists.piano = "kidlit"
artists.violin = "須原杏、沖増菜摘"
artists.viola = "梶谷裕子"
artists.cello = "渡邉雅弦"
artists.irish-harp = "梅田千晶"

[[discs.tracks]]
title = "宝物になった日(Episode 5 Ver.)"

[[discs.tracks]]
title = "夏凪ぎ(Instrumental)"
#
# 艺术家 [可选项][ARTIST]
#
# 省略时,默认以光盘艺术家 -> 专辑艺术家的顺序寻找存在项。
artist = "麻枝准"
#
# 音乐类型 [可选项]
#
# 用于覆盖唱片的音乐类型,最终形成每个音轨的音乐类型。
type = "instrumental"

[[discs.tracks]]
title = "宝物になった日(Instrumental)"
artist = "麻枝准"
type = "instrumental"

品番冲突

当出现品番冲突时,原本以单一品番命名的文件需要升级为以品番命名的目录

目录中的专辑信息以 {catalog}.{index}.toml 命名,索引从 0 开始。

如:专辑 TEST-001 发生品番冲突,则目录结构如下:

├── album
│   └── TEST-001
│     ├── TEST-001.0.toml
│     └── TEST-001.1.toml