Skip to content

Commit

Permalink
Create Rev2.4_ja-JP.md
Browse files Browse the repository at this point in the history
  • Loading branch information
AioiLight authored Mar 9, 2022
1 parent 3f8caa1 commit 9e3e1ab
Showing 1 changed file with 294 additions and 0 deletions.
294 changes: 294 additions & 0 deletions Rev2.4_ja-JP.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,294 @@
# 「Open Taiko Chart」とは?
太鼓譜を記述するためのフォーマットです。太鼓譜を記述するためのフォーマットとして、「.tjf」や「.tja」等がありますが、複数の難易度、ダブルプレイを記述する場合複雑なテキストファイルとなり、さらにソフトウェア側でのパースも難解な処理になってしまうという欠点がありました。また、これらのファイルフォーマットで使用されているエンコーディングは Shift-JIS であり、ソフトウェアの国際化が顕著な今日では、とても扱いが難しいエンコーディングでもあります。「Open Taiko Chart」では、エンコーディングを UTF-8 とし、どの言語、どの環境でも扱えるオープンなフォーマットとして公開します。

# 「Open Taiko Chart」のファイル構成

「Open Taiko Chart」では複数のファイルを使用し、「ひとつの作品」として成り立ちます。

## 「Open Taiko Chart Infomation」 (.tci)

このファイルには、その太鼓譜の名前やアーティスト、使用する音源のファイル名などの作品の情報と、各種難易度である「Open Taiko Chart Course」の情報が格納されます。

## 「Open Taiko Chart Course」 (.tcc)

このファイルは、「Open Taiko Chart Infomation」から呼び出されます。このファイルには、実際の譜面内容と固有の情報が記述されます。

## 「Open Taiko Chart Medley」 (.tcm)

このファイルは、複数の「Open Taiko Chart Infomation」を使用して、メドレー形式で再生する機能です。また、条件を付与することで段位認定としても機能します。

## その他のファイル

譜面で使用する音源ファイルや、動画ファイルなどがこれに当てはまります。「Open Taiko Chart Infomation」と同じフォルダに入れておく必要があります。対応するコーデックやコンテナは、各ソフトウェアの実装で変わります。

## これらのファイルの制約

* 「Open Taiko Chart Infomation」は、「ひとつの作品」に対して 2 つ以上作成してはいけません。
* 「Open Taiko Chart Medley」は、1 つ以上の「Open Taiko Chart Infomation」を記述する必要があります。

# 「Open Taiko Chart Infomation」の記法

* エンコーディングは「BOM 無し UTF-8」です。改行コードの指定はありません(理由は後述)。
* 「Open Taiko Chart Infomation」では、フォーマットに JSON を採用しています。エンコーディングが「BOM 無し UTF-8」である理由は、このJSONフォーマットで決まっているからです(HAVE TO ではなく MUST)。改行してもしなくても問題ありません。
* JSON フォーマット採用しているため、多くのプログラミング言語ではデシリアライズが可能です。

## 「Open Taiko Chart Infomation」の書き方

サンプル

```json
{
"title": "The Sample M@ster",
"subtitle": "Sample Song",
"artist": [ "Tanaka Ichiro", "Tanaka Jiro", "Tanaka Saburo"],
"creator": [ "Suzuki Ichiro" ],
"audio": "Audio-Source.wav",
"songpreview": 68.2,
"background": "Background-Image.png",
"bpm": 160,
"offset": 2.416,
"courses":
[
{
"difficulty": "oni",
"level": 9,
"single": "Oni.tcc"
},
{
"difficulty": "edit",
"level": 10,
"single": "Edit.tcc",
"multiple": [ "Edit_1P.tcc", "Edit_2P.tcc" ]
}
]
}
```

これらは、譜面の基本的な情報を指定するものです。

| 変数名 | 説明 | 種類 ||
| --- | --- | --- | --- |
| title | その譜面のタイトルを指定する。 | 文字列 | ``"name": "The Sample M@ster"`` |
| subtitle | その譜面のサブタイトルを指定する。 | 文字列 | ``"subtitle": "Sample Song"`` |
| albumart | その譜面のアルバムアートを指定する。対応しているフォーマットはソフトウェアによって異なる。 | 文字列 | ``"albumart": "Album-Art.png"`` |
| artist | その曲のアーティストを指定する。 | 配列、文字列 | ``"artist": [ "Tanaka Ichiro", "Tanaka Jiro", "Tanaka Saburo"]`` |
| creator | その譜面の作成者を指定する。 | 配列、文字列 | ``"creator": [ "Suzuki Ichiro" ]`` |
| audio | その曲のファイル名を指定する。対応しているコーデック、コンテナはソフトウェアによって異なる。 | 文字列 | ``"audio": "Audio-Source.wav"`` |
| songpreview | その曲のプレビューが開始する時間を指定する。 | 数値 | ``"songpreview": 68.2`` |
| background | 再生時に表示される背景画像・動画を指定する。対応しているコーデック、コンテナはソフトウェアによって異なる。 | 文字列 | ``"background": "Background-Image.png"`` |
| movieoffset | 背景動画が始まる時間を指定する。 | 数値 | ``"movieoffset": -1.2`` |
| bpm | その曲の基本BPMを指定する。 | 数値 | ``"bpm": 160`` |
| offset | その曲の 1 小節目が始まる時間を指定する。 | 数値 | ``"offset": 2.416`` |
| courses | コースを情報を格納する。 | 配列、オブジェクト | (後述) |

* アルバムアートはソフトウェアによって自動的に拡大縮小されます。推奨されるアスペクト比は 1:1 です。
* ``movieoffset````offset``の位置からの時間の差を入力します。

これらは、courses の中のオブジェクトで使用可能なものです。各難易度の情報を指定するものです。

| 変数名 | 説明 | 種類 ||
| --- | --- | --- | --- |
| difficulty | その難易度の難易度を指定します。 | 文字列 | ``"difficulty": "oni"`` |
| level | その難易度の難易度を指定します(0~10)。 | 数値 | ``"level": 9`` |
| single | その難易度の 1 人用譜面を指定します。 | 文字列 | ``"single": "Oni.tcc"`` |
| multiple | その難易度の n 人用譜面を指定します。 | 配列、文字列 | ``"multiple": [ "Edit_1P.tcc", "Edit_2P.tcc" ]`` |

# 「Open Taiko Chart Course」の記法

* エンコーディングは「BOM 無し UTF-8」です。改行コードの指定はありません(理由は後述)。
* 「Open Taiko Chart Course」では、フォーマットに JSON を採用しています。エンコーディングが「BOM 無し UTF-8」である理由は、このJSONフォーマットで決まっているからです(HAVE TO ではなく MUST)。
* JSON フォーマット採用しているため、多くのプログラミング言語ではデシリアライズが可能です。

## 「Open Taiko Chart Course」の書き方

サンプル

```json
{
"scoreinit": 800,
"scorediff": 200,
"scoreshinuchi": 1200,
"balloon": [ 6, 10, 24 ],
"measures":
[
[ "1" ],
[ "3030" ],
[ "40", "#gogobegin", "40" ],
[ "#gogoend", "70008010" ],
[ "7" ],
[ "8" ],
[ "#scroll 2", "1011102010111070" ],
[ "0" ],
[ "0" ],
[ "8" ]
]
}
```

| 変数名 | 説明 | 種類 ||
| --- | --- | --- | --- |
| scoreinit | その難易度の初項を指定します。 | 数値 | ``"scoreinit": 800`` |
| scorediff | その難易度の公差を指定します。 | 数値 | ``"scorediff": 200`` |
| scoreshinuchi | その難易度の真打配点を指定します。 | 数値 | ``"scoreshinuchi": 1200`` |
| balloon | その難易度のふうせん連打を指定します。 | 配列、数値 | ``"balloon": [ 6, 10, 24 ]`` |
| measures | その難易度の譜面を記述します。 | 配列、配列、文字列 | (後述) |

### measures内の書き方

* 配列 1 つにつき 1 小節とします。
* 小節の途中で命令を挟む場合、複数の配列に分割します、命令も1つの配列に単体で入れる必要があります。
* また譜面の書き方として数字を使い、次のように記述します。
* 0: 空白
* 1: ドン
* 2: カツ
* 3: ドン(大)
* 4: カツ(大)
* 5: 連打
* 6: 連打(大)
* 7: ふうせん連打
* 8: 連打終了
* 連打中は 0 以外の数字を入れてはいけません(e.g. ``50001008``)。
* 連打の数字を終端まで続けるような書き方をしてはいけません(e.g. `666668`)。

#### 命令

``#<command> <params>`` という書き方で譜面を変化させる命令を付与することができます。

| 命令名 | 説明 | パラメータ ||
| --- | --- | --- | --- |
| ``#bpm n1`` | BPMを変更します。 | n1: BPM。 | ``#bpm 120.00`` |
| ``#scroll n1`` | スクロール速度を変更します。 | n1: スクロール速度(1を等倍とする)。 | ``#scroll 3.9`` |
| ``#tsign n1/n2`` | n2 分の n1 拍子を変更します。 | n1: 分子。n2: 分母。 | ``#tsign 3/4`` |
| ``#gogobegin`` | ゴーゴータイムを開始します。 | - | ``#gogobegin`` |
| ``#gogoend`` | ゴーゴータイムを終了します。 | - | ``#gogoend`` |
| ``#rotate n1`` | n1 度そのあとに続く譜面の音符を回転します。 | n1: 回転させる度数。度数法で表す。 | ``#rotate 180`` |
| ``#delay n1`` | n1 秒その後に続く譜面をずらします。 | n1: ずらす秒数。 | ``#delay 3.14`` |
| ``#bar visible`` | 小節線の表示/非表示を切り替えます。 | visible: show (小節線を表示) / hide (小節線を非表示) | ``#bar hide`` |

## デシリアライズ

JavaScript の場合 ``eval()````JSON.parse`` 、C# の場合、[Json.NET](https://github.com/JamesNK/Newtonsoft.Json) 等を使用することで、そのままデシリアライズすることが可能です。もちろん、他の言語でもシリアライザーがあればそのままデータを利用することができます。

```cs
public class OpenTaikoChartInfomation
{
[JsonProperty("title")]
public string Title { get; set; }
[JsonProperty("subtitle")]
public string SubTitle { get; set; }
[JsonProperty("artist")]
public string[] Artist { get; set; }
[JsonProperty("creator")]
public string[] Creator { get; set; }
[JsonProperty("audio")]
public string Audio { get; set; }
[JsonProperty("background")]
public string Background { get; set; }
[JsonProperty("bpm")]
public double? BPM { get; set; }
[JsonProperty("offset")]
public double? Offset { get; set; }
[JsonProperty("courses")]
public OpenTaikoChartInfomation_Courses[] Courses { get; set; }
}

public class OpenTaikoChartInfomation_Courses
{
[JsonProperty("difficulty")]
public string Difficulty { get; set; }
[JsonProperty("level")]
public int? Level { get; set; }
[JsonProperty("single")]
public string Single { get; set; }
[JsonProperty("multiple")]
public string[] Multiple { get; set; }
}

public class OpenTaikoChartCourse
{
[JsonProperty("scoreinit")]
public int? ScoreInit { get; set; }
[JsonProperty("scorediff")]
public int? ScoreDiff { get; set; }
[JsonProperty("scoreshinuchi")]
public int? ScoreShinuchi { get; set; }
[JsonProperty("balloon")]
public int?[] Balloon { get; set; }
[JsonProperty("measures")]
public string[][] Measures { get; set; }
}
```

# 「Open Taiko Chart Medley」の記法

* エンコーディングは「BOM 無し UTF-8」です。改行コードの指定はありません (理由は後述)。
* 「Open Taiko Chart Medley」では、フォーマットに JSON を採用しています。エンコーディングが「BOM 無し UTF-8」である理由は、この JSON フォーマットで決まっているからです(HAVE TO ではなく MUST)。改行してもしなくても問題ありません。
* JSON フォーマット採用しているため、多くのプログラミング言語ではデシリアライズが可能です。

## 「Open Taiko Chart Medley」の書き方

```json
{
"title": "サンプル メドレー",
"subtitle": "サンプルのメドレーです。",
"albumart": "albumart.png",
"exams":
[
{
"type": "gauge",
"range": "more",
"value": [ 95, 100 ]
},
{
"type": "combo",
"range": "more",
"value": [ 400, 450 ]
},
{
"type": "judgebad",
"range": "less",
"value": [ 20, 10 ]
}
],
"charts":
[
{
"file": "Song-1\\Sample-Master.tci",
"difficulty": "oni"
},
{
"file": "Song-2\\Sample-Theme-Song.tci",
"difficulty": "oni"
},
{
"file": "Song-3\\Sample-Boss-Song.tci",
"difficulty": "edit"
}
]
}
```

| 変数名 | 説明 | 種類 ||
| --- | --- | --- | --- |
| title | メドレーのタイトル。 | 文字列 | ``"title": "サンプル メドレー"`` |
| subtitle | メドレーのサブタイトル。 | 文字列 | ``"subtitle": "サンプルのメドレーです。"`` |
| albumart | メドレーのアルバムアートを指定する。対応しているフォーマットはソフトウェアによって異なる。 | 文字列 | ``"albumart": "Album-Art.png"`` |
| exams | メドレー再生中の条件。 | 配列、オブジェクト | - |
| charts | メドレーの曲。 | 配列、オブジェクト | - |

exams の中はこのようなパラメータがあります。

| 変数名 | 説明 | 種類 ||
| --- | --- | --- | --- |
| type | 条件種別。<br>``gauge``: ゲージの値<br>``judgeperfect``: 良の数<br>``judgegood``: 可の数<br>``judgebad``: 不可の数<br>``score``: スコア<br>``roll``: 連打数<br>``hit``: たたけた数<br>``combo``: コンボ数 | 文字列 | ``"type": "gauge"`` |
| range | 条件範囲。<br>``more``: 以上<br>``less``: 以下 | 文字列 | ``"range": "more"`` |
| value | 条件の値。1つのみでもよい。2つめ以降の扱いはソフトウェアによって異なる。 | 配列、数値 | ``"value": [ 95, 100 ]`` |

charts の中はこのようなパラメータがあります。

| 変数名 | 説明 | 種類 ||
| --- | --- | --- | --- |
| file | Open Taiko Chart Infomation のファイル名。 | 文字列 | ``"file": "Song-1\\Sample-Master.tci"`` |
| difficulty | 難易度。その難易度が存在しなければ、1 番難易度が低いコースを使用する。 | 文字列 | ``"difficulty": "oni"`` |

* ファイル名は、自分自身 (.tcmファイル) からの相対パスを入力します。JSON フォーマットの使用上、パスの区切りである``\````\\``と記述する必要があります。

0 comments on commit 9e3e1ab

Please sign in to comment.