Skip to content

从 THBWiki 自动填写东方Project CD曲目信息.

License

Notifications You must be signed in to change notification settings

OminousBlackCat/Touhou-Tagger

 
 

Repository files navigation

Touhou Tagger

THBWiki 自动填写东方Project CD曲目信息.

支持的曲目信息包括:

  • 标题
  • 作者 (Vocal + 编曲者, 原创曲时为作曲者)
  • 曲目编号
  • 光盘编号
  • 作曲者 (通常是原创曲时出现)
  • 注释 (原曲信息)
  • 作词者
  • 专辑名称
  • 专辑作者 (通常为社团名称)
  • 流派
  • 发布年份
  • 封面图片

安装

npm install -g touhou-tagger

使用

假设您为一个专辑的音乐建立了单独的文件夹, 在专辑文件夹中运行:

thtag

启动后会询问专辑名称, 如果留空直接回车就取文件夹的名字; 如果按照这个名称没有精确匹配的专辑(精确匹配在 THBWiki 中表现为输入到搜索框回车能直接跳转到词条), 则会列出以此名称在 THBWiki 中的搜索结果, 可以继续选择一项作为专辑信息. (有精确匹配的话会直接开始下载专辑信息)

图片示例: bunny rhyTHm - 覚めぬ夢 届かぬ恋 example

选项

保存封面为单独的文件

(文件名为 cover, 类型取决于 THBWiki 上的资源)

thtag -c

thtag --cover

更换数据源

(默认为 thb-wiki)

thtag -s 'xxx'

thtag --source 'xxx'

待填的坑

  • 错误处理: 非同人专辑词条
  • FLAC 支持
  • 歌词获取

魔改示例

(需要已安装 Node.jsTypescript)

安装依赖项

npm install

添加其他数据源

src/core/metadata/中添加文件xxx.ts, 实现MetadataSource接口:

import { MetadataSource } from './metadata-source'
import { Metadata } from './metadata'

export const xxx: MetadataSource = {
  // 搜索专辑, 返回 string 表示精确匹配, 返回 string[] 表示未找到精确匹配, 内容是根据 albumName 搜索得到的结果
  async resolveAlbumName(albumName: string): Promise<string[] | string> { /* ... */ }
  // 下载专辑信息, 返回 Metadata[]
  async getMetadata(albumName: string): Promise<Metadata[]> { /* ... */ }
}

然后在src/core/metadata/source-mappings.ts中添加对应项:

import { thbWiki } from './thb-wiki';
import { xxx } from './xxx';
import { MetadataSource } from './metadata-source';

export const sourceMappings = {
  'thb-wiki': thbWiki,
  'xxx': xxx,
} as { [type: string]: MetadataSource }

添加其他文件类型支持

src/core/writer/中添加文件xxx-writer.ts, 继承MetadataWriter类:

import { MetadataWriter } from './metadata-writer'
import { Metadata } from './metadata'

export class XxxWriter extends MetadataWriter {
  // 将专辑信息写入文件
  async write(metadata: Metadata, filePath: string): Promise<void> { /* ... */ }
}
export const xxxWriter = new XxxWriter()

然后在src/core/writer/writer-mappings.ts中添加对应项:

import { MetadataWriter } from './metadata-writer'
import { mp3Writer } from './mp3-writer'
import { xxxWriter } from './xxx-writer'

export const writerMappings = {
  '.mp3': mp3Writer,
  '.xxx': xxxWriter,
} as { [type: string]: MetadataWriter }

编译

tsc

About

从 THBWiki 自动填写东方Project CD曲目信息.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 85.2%
  • JavaScript 14.8%