From 35d7692835f91646c0d4a556e424501d31137326 Mon Sep 17 00:00:00 2001 From: the1812 Date: Sat, 16 Dec 2023 17:02:36 +0800 Subject: [PATCH] Remove local-mp3 and local-json source --- README.md | 195 +++++++++++++-------------- src/cli/options.ts | 2 +- src/core/metadata/source-mappings.ts | 4 - 3 files changed, 92 insertions(+), 109 deletions(-) diff --git a/README.md b/README.md index 43ebed2..860fb25 100644 --- a/README.md +++ b/README.md @@ -113,24 +113,93 @@ thtag --source xxx thtag -s doujin-meta ``` -#### local-mp3 -从 MP3 文件提取曲目信息, 通常用于 FLAC 文件未填信息, 而已有填好信息的 MP3 文件. 可以使用此数据源按专辑进行信息复制. +### 下载歌词 +`可自动保存的选项` + +歌词相关的处理, 除了 `--lyric` 外的选项都会自动保存. + +#### 选项说明 +- `-l` / `--lyric`: 启用歌词下载 +- `-t` / `--lyric-type`: 歌词类型 + - **`original`(默认)**: 原版歌词 + - `translated`: 译文歌词, 没有译文时会回退到原版歌词 + - `mixed`: 混合原文和译文的歌词, 没有译文时同原版歌词 +- `-o` / `--lyric-output`: 歌词输出 + - **`metadata`(默认)**: 写入到元数据中 + - `lrc`: 创建额外的`.lrc`歌词文件 (**⚠此功能尚未完善**) +- `--no-lyric-time`: 禁用元数据歌词时轴 +- `-lcs` / `--lyric-cache-size`: 设置歌词最大缓存数量, 用来加速重复曲目的歌词下载, **默认 16** + +#### 示例 +启用歌词下载, 写入原版歌词到元数据中 +```powershell +thtag -l +``` +启用歌词下载, 写入混合原文和译文的歌词到元数据中 +```powershell +thtag -l -t mixed +``` + +### 禁止交互 +不做任何询问, 按照理想行为运行到底, 例如: +- 专辑名称不再询问, 直接取文件夹的名称 +- 根据文件夹名称搜索: + - 搜索不到专辑时: 判为失败并退出 + - 搜索到多个专辑时: 只有一个结果就取这个结果, 否则判为失败并退出 +```powershell +thtag --no-interactive +``` + +### 批量运行 +假设总的文件夹叫 `folder`, 里面有多个文件夹, 每个文件夹包含一张专辑, 文件夹名称为专辑名称 +> 当前路径就在 `folder` 里的时候, 用 `thtag -b .` 就行了, `.` 表示当前文件夹 + +```powershell +thtag -b folder +``` +或 ```powershell -thtag -s local-mp3 +thtag --batch folder +``` +程序会将里面的子文件夹逐个进行专辑信息获取. + +#### 设置文件夹层级 +如果专辑文件夹并不是直接放在 `folder` 下的, 而是有更深的层级, 可以更改批量运行时搜索文件夹的层级来获取正确的专辑文件夹列表. + +例如按社团分类后, 专辑相对于 `folder` 隔了两层: +``` +folder + ├─社团1 + │ └─专辑A + └─社团2 + └─专辑B ``` -在启动后, 询问专辑名称时填入 MP3 文件所在的文件夹即可. -> 注意此数据源需要填入 MP3 的文件夹路径, 因此不能用于批量模式中 +将层级设为 `2` 就可以检测到里面的专辑: +```powershell +thtag -bd 2 +``` +或 +```powershell +thtag --batch-depth 2 +``` -#### local-json -从 JSON 文件读取曲目信息, JSON 内数据的类型为 `Metadata[]` (定义位于 `src/core/metadata.ts`). 可以使用此数据源处理一些原创专辑, 用法与 `local-mp3` 基本相同. +### 超时 / 重试 +`可自动保存的选项` -> 如果已存在名为 `metadata.json` 的文件, 程序会直接使用其中的曲目信息, 跳过曲目信息下载. 事先在各个文件夹中准备好 `metadata.json` 的话也是可以使用批量模式的. +默认 30 秒后无法完成专辑信息下载判定为超时, 并自动进行重试, 总尝试次数到达默认的 3 次后, 程序会判为失败并停止. +可以通过相应的开关调整以上的数值, 下面的例子为 60 秒超时, 最多试 5 次: ```powershell -thtag -s local-json +thtag --timeout 60 --retry 5 ``` +## 专辑配置 +### 曲目信息配置 +在下载曲目信息前, 如果文件夹下已存在名为 `metadata.json` 的文件, 程序会直接使用其中的曲目信息, 跳过曲目信息下载. + +`metadata.json` 中数据的类型为 `Metadata[]` (定义位于 `src/core/metadata.ts`) + 为了方便使用, JSON 的内容可以进行一些省略: - 整张专辑中相同的数据, 例如专辑名称 / 社团名称等, 只需要在第一首曲目中写上即可, 后续曲目均会使用相同的数据. - 编曲者 (artists) 和作曲者 (composers) 相同时, 可以只写作曲者. (但不能只写编曲者, 因为东方同人曲的编曲者和作曲者一般是不同的, 作曲者从原曲信息就可以推断, 所以作曲者通常是省略的. 如果只写编曲者, 程序会让作曲者留空) @@ -280,87 +349,27 @@ thtag -s local-json +### Touhou Tagger 运行配置 +可以为每一张专辑保存不同的运行配置, 无论是单独进行写入还是批量模式, 程序都会尝试读取专辑文件夹下的 `thtag.json` 文件. 可配置的内容有: +- `defaultAlbumHint`: 默认用于搜索的专辑名称 +- `source`: 使用的数据源 -### 下载歌词 -`可自动保存的选项` - -歌词相关的处理, 除了 `--lyric` 外的选项都会自动保存. - -#### 选项说明 -- `-l` / `--lyric`: 启用歌词下载 -- `-t` / `--lyric-type`: 歌词类型 - - **`original`(默认)**: 原版歌词 - - `translated`: 译文歌词, 没有译文时会回退到原版歌词 - - `mixed`: 混合原文和译文的歌词, 没有译文时同原版歌词 -- `-o` / `--lyric-output`: 歌词输出 - - **`metadata`(默认)**: 写入到元数据中 - - `lrc`: 创建额外的`.lrc`歌词文件 (**⚠此功能尚未完善**) -- `--no-lyric-time`: 禁用元数据歌词时轴 -- `-lcs` / `--lyric-cache-size`: 设置歌词最大缓存数量, 用来加速重复曲目的歌词下载, **默认 16** - -#### 示例 -启用歌词下载, 写入原版歌词到元数据中 -```powershell -thtag -l -``` -启用歌词下载, 写入混合原文和译文的歌词到元数据中 -```powershell -thtag -l -t mixed -``` - -### 禁止交互 -不做任何询问, 按照理想行为运行到底, 例如: -- 专辑名称不再询问, 直接取文件夹的名称 -- 根据文件夹名称搜索: - - 搜索不到专辑时: 判为失败并退出 - - 搜索到多个专辑时: 只有一个结果就取这个结果, 否则判为失败并退出 -```powershell -thtag --no-interactive -``` - -### 批量运行 -假设总的文件夹叫 `folder`, 里面有多个文件夹, 每个文件夹包含一张专辑, 文件夹名称为专辑名称 -> 当前路径就在 `folder` 里的时候, 用 `thtag -b .` 就行了, `.` 表示当前文件夹 - -```powershell -thtag -b folder -``` -或 -```powershell -thtag --batch folder -``` -程序会将里面的子文件夹逐个进行专辑信息获取. - -#### 设置文件夹层级 -如果专辑文件夹并不是直接放在 `folder` 下的, 而是有更深的层级, 可以更改批量运行时搜索文件夹的层级来获取正确的专辑文件夹列表. - -例如按社团分类后, 专辑相对于 `folder` 隔了两层: +例子: ``` folder - ├─社团1 - │ └─专辑A - └─社团2 - └─专辑B + ├─专辑A + │ └─thtag.json -> { "defaultAlbumHint": "Album A" } + ├─专辑B + │ └─thtag.json -> { "source": "doujin-meta" } + └─专辑C ``` -将层级设为 `2` 就可以检测到里面的专辑: -```powershell -thtag -bd 2 -``` -或 +当批量运行时 ```powershell -thtag --batch-depth 2 +thtag -b folder ``` -### 超时 / 重试 -`可自动保存的选项` - -默认 30 秒后无法完成专辑信息下载判定为超时, 并自动进行重试, 总尝试次数到达默认的 3 次后, 程序会判为失败并停止. - -可以通过相应的开关调整以上的数值, 下面的例子为 60 秒超时, 最多试 5 次: -```powershell -thtag --timeout 60 --retry 5 -``` +对 `专辑A`, 会使用 `Album A` 去 THBWiki 搜索; 对 `专辑B`, 会使用 `专辑B` 去 Doujin Meta 搜索; 对 `专辑C`, 会使用 `专辑C` 去 THBWiki 搜索. ## 提取曲目信息 在专辑文件夹中运行: @@ -374,28 +383,6 @@ thtag dump - `--debug`: 额外保存一个 `metadata.debug.json` 文件, 记录原始的数据结构 - `--batch`: 批量进行提取 -## 专辑配置 -可以为每一张专辑保存不同的配置, 无论是单独进行写入还是批量模式, 程序都会尝试读取专辑文件夹下的 `thtag.json` 文件. 可配置的内容有: -- `defaultAlbumHint`: 默认用于搜索的专辑名称 -- `source`: 使用的数据源 - -例子: -``` -folder - ├─专辑A - │ └─thtag.json `{ "defaultAlbumHint": "Album A" }` - ├─专辑B - │ └─thtag.json `{ "source": "doujin-meta" }` - └─专辑C -``` - -当批量运行时 -```powershell -thtag -b folder -``` - -对 `专辑A`, 会使用 `Album A` 去 THBWiki 搜索; 对 `专辑B`, 会使用 `专辑B` 去 Doujin Meta 搜索; 对 `专辑C`, 会使用 `专辑C` 去 THBWiki 搜索. - ## 特别感谢 - [THBWiki](http://thwiki.cc/首页) - [dizzylab](https://www.dizzylab.net/) diff --git a/src/cli/options.ts b/src/cli/options.ts index f1b1efa..6829e47 100644 --- a/src/cli/options.ts +++ b/src/cli/options.ts @@ -64,7 +64,7 @@ const readCliOptionsFromFile = () => { alias: 's', type: 'string', default: 'thb-wiki', - choices: ['thb-wiki', 'thb-wiki-cache', 'doujin-meta', 'local-mp3', 'local-json'], + choices: ['thb-wiki', 'thb-wiki-cache', 'doujin-meta'], description: '设置数据源', }) .option('lyric', { diff --git a/src/core/metadata/source-mappings.ts b/src/core/metadata/source-mappings.ts index c9f1ab8..9befda5 100644 --- a/src/core/metadata/source-mappings.ts +++ b/src/core/metadata/source-mappings.ts @@ -1,13 +1,9 @@ import { thbWiki, thbWikiCache } from './thb-wiki/thb-wiki' import { MetadataSource } from './metadata-source' -import { localMp3 } from './local-mp3/local-mp3' -import { localJson } from './local-json/local-json' import { doujinMeta } from './doujin-meta/doujin-meta' export const sourceMappings = { 'thb-wiki': thbWiki, 'thb-wiki-cache': thbWikiCache, - 'local-mp3': localMp3, - 'local-json': localJson, 'doujin-meta': doujinMeta, } as { [type: string]: MetadataSource }