タイムタグ仕様書(一般者向け)

> Version 1.0β2(2000/5/24)

> 本文は、これが唯一非なるタイムタグの規格仕様書ではありません。いろいろなソフトウェアで許されるフォーマットが様々であり、正式なフォーマットが存在しないので、あくまで、一般的に通用している常識範囲で、タイムタグのフォーマットを説明したものです。

> ただし、このようなフォーマットや解釈が多様化している状況は、必ずしもよいこととは言えません。今後は、なるべく多くのソフトが本仕様に準拠することによって、各ソフト間での矛盾がなくなっていくことを期待します。

> なお、本仕様書は、一般者向けの解説をしています。本仕様に準拠するソフトウェアを開発された場合は、少なくとも、この「TimeTag.html」を改変することなく添付してください。

> また、本仕様書配布場所にて、開発者向けの仕様書（TimeTagDev.html）も配布しております。対応ソフトウェアを開発したい方は、必ずそちらを参照してください。

> 本仕様書はまだ原案段階（β版）ですので、今後しばらくは細かい修正など改訂が続く可能性がありますが、ソフトへの添付の際には、なるべく最新版を添付してください。

> 特に（懸案事項）とある部分（茶色で書かれている部分）では、まだ仕様に不備がありますのでご注意ください。

> 本仕様書配布場所 ： http://get.to/dagashiya

目次

> １．タイムタグの定義
> | 1-1. タイムタグの原則
> | 1-2. 秒単位タイムタグ
> | 1-3. 拡張タイムタグ
> ２．タイムタグ付き歌詞（カラオケタグ付き歌詞）の定義
> | 2-1. 歌詞ファイルフォーマット
> | 2-2. タイムタグ付き歌詞の種類
> | 2-3. タイムタグ付き歌詞の表記法
> | 2-4. カラオケタグ付き歌詞の表記法
> | 2-5. ファイル名など
> |  | 2-5-1. ファイル名
> |  | 2-5-2. 拡張子
> |  | 2-5-3. フォルダ
> |  | 2-5-4. 優先順序
> ３．@タグの定義
> | 3-1. @タグの必要性
> | 3-2. 書式および規則
> |  | 3-2-1. 書式
> |  | 3-2-2. 規則
> | 3-3. 各@タグの定義
> |  | 3-3-1. KRAAMP および Gucchi's Lyrics Plugin で規定されたタグ
> |  | 3-3-2. タイムタグ補正に関するタグ
> |  | 3-3-3. タイムタグ付け情報に関するタグ
> |  | 3-3-4. 現在では新たに付加してはいけないタグ（読み込みの対応は可）
> ４．参考資料
> | 4-1. 従来流通していたが、本仕様書では認めない書き方
> |  | 4-1-1. 行頭タイムタグ付き歌詞におけるリピート拡張
> ５．更新履歴

> 現在の懸案事項の目次
> | 懸案事項2-5-2 対応拡張子
> | 懸案事項2-5-4 優先順序
> | 懸案事項 2-6-2-2 最終タイムタグ行の行末にタイムタグがない場合の補完
> | 懸案事項 2-6-3 行送りタイミング
> | 懸案事項 2-6-2-1 先頭タイムタグ行の行頭にタイムタグがない場合の補完 (Ver1.0β2 にて解決)

１．タイムタグの定義

> 1-1. タイムタグの原則

> > ・ 一つのタイムタグは、半角の "[" "]" で囲まれる。

> > ・ [ ] の間に、分と秒が記述されているものを、「タイムタグ」と呼ぶ。ここでは、「拡張タイムタグ」と区別するために、これを、「秒単位タイムタグ」と表記する。

> > > 例) [03:25]　… 演奏開始から、3分25秒を表す。

> > ・ [ ] の間に、分と秒と1秒以下(1ミリ秒以上)が記述されているものを、「拡張タイムタグ」と呼ぶ。

> > > 例) [03:25:54] … 演奏開始から、3分25秒540ミリ秒を表す。

> 1-2. 秒単位タイムタグ

> > ・ 形式例 : [xx:yy]

> > ・ [ と ] の間は、必ず半角の数字2文字 (上の例の xx の部分) と、半角のコロン ":" と、半角の数字2文字 (上の例の yy の部分) が入る。よって、[ ] を含め、全部で半角 7 文字でなければならない。

> > ・ xx は分単位の数字が入り、1桁の場合は、頭に 0 を付け、必ず2桁にする。同様に、分が 0 分だった場合、xx は 00 となる。よって、xx の最大値は 99 となり、これ以上の時間を表現することはできない。(してはいけない)

> > ・ yy は秒単位の数字が入り、1桁の場合は、頭に 0 を付け、必ず2桁にする。同様に、秒が 0 秒だった場合、yy は 00 となる。yy の最大値は 59 であり、たとえば、[00:65]という表現をしてはいけない。(この場合、[01:05] と表現しなければならない。)

> > ・ よって、秒単位タイムタグの最大値は、[99:59] であり、これ以上の時間を表現してはいけない。最小値は [00:00] である。

> > ・ 1分5秒を示すのに、[1:05] や [01:5] や [1:5] のような表記は本仕様書では許可しません。

> 1-3. 拡張タイムタグ

> > ・ 形式例 : [xx:yy:zz]

> > ・ [ と ] の間は、必ず半角の数字2文字 (上の例の xx の部分) と、半角のコロン ":" と、半角の数字2文字 (上の例の yy の部分) と、半角のコロン ":" と、半角の数字2文字 (上の例の zz の部分)が入る。よって、[ ] を含め、全部で半角10文字でなくてはならない。

> > ・ xx yy については、1-2.と同様である。

> > ・ zz は10ミリ秒単位の数字が入り、1桁の場合は、頭に 0 を付け、必ず2桁にする。同様に、ミリ秒が 0 ミリ秒だった場合、zz は 00 となる。zz の最大値は 99 である。

> > ・ よって、拡張タイムタグの最大値は、[99:59:99] であり、これ以上の時間を表現してはいけない。最小値は [00:00:00] である。

> > ・ [00:00:123]のように、1ミリ秒単位での表記は本仕様書では許可しません。また、[00:00:1]のような表記は、解釈によって、[00:00:10] とも [00:00:01] とも受け取れるため、これも本仕様書では許可しません。

> > ・ 1分5秒80ミリ秒 を示すのに、[1:05:80] や [01:5:80] や [1:5:80] などのような表記も本仕様書では許可しません。

２．タイムタグ付き歌詞（カラオケタグ付き歌詞）の定義

> 2-1. 歌詞ファイルフォーマット

> > ・ 歌詞ファイルは、一般的な テキスト形式とする。

> > ・ 文字コードは、原則として、SHIFT-JIS を用いる。ただし、ソフトによって、他コードへも対応することに対して制限はない。

> > ・ 改行文字は、0x0d,0x0a / 0x0d / 0x0a （ vbCrLf / vbCr / vbLf ）のいずれかとする。

> > ・ 歌詞を表現する文字列、タイムタグ、@タグを含む。（@タグについては、３．を参照すること。）

> 2-2. タイムタグ付き歌詞の種類

> > ・ タイムタグが記述されたいずれかの行において、歌詞の一部分よりも後にタイムタグがあり、さらにその行に複数のタイムタグがある場合、この歌詞ファイルを「カラオケタグ付き歌詞」という。この条件に合う行が一行でもあれば、それは「カラオケタグ付き歌詞」である。

> > 例) | [00:17:47]だっ[00:17:93]て「[00:18:54]つまずき[00:19:11]な[00:19:38]が[00:19:64]ら」っ[00:20:15]て
> > [00:20:70]口[00:21:01]で[00:21:09]言う[00:21:49]程[00:22:11]
> > [00:22:53]楽[00:23:06]じゃ[00:23:31]な[00:23:57]い
> > [00:24:15]は[00:24:42]ず[00:24:64]で[00:25:18]しょ[00:25:83]

> > ・上記条件を満たさないタイムタグ付きの歌詞ファイルを「タイムタグ付き歌詞」という。（「行頭タイムタグ付き歌詞」ともいう。）

> > 例) | [00:17:47]だって 「つまずきながら」って
> > [00:20:70]口で言う程 楽じゃないはずでしょ

> 2-3. タイムタグ付き歌詞（行頭タイムタグ付き歌詞）の表記法

> ・ タイムタグがある行は、一つのタイムタグと一行の歌詞を表す文字列からなり、常にタイムタグは行の先頭になくてはならない。

> ・ 一つの歌詞ファイル中に、通常タイムタグと拡張タイムタグの両方が混在してはいけない。一つの歌詞ファイル中のタイムタグは、全て同一の桁数にする。

> > [00:10]あいうえお
> > [00:10:50]かきくけこ

> > というような書き方をしてはいけない。

> ・ タイムタグの逆転はあってはいけない。ファイル中で後に続くタイムタグは、常にそれより前のタイムタグより大きい時間を指定しなくてはならない。

> > [00:10:00]あいうえお
> > [00:09:00]かきくけこ

> > というような書き方をしてはいけない。

> ・ 同じ時間を示すタイムタグが続いてはいけない。

> > [00:10:00]あいうえお
> > [00:10:00]かきくけこ

> > というような書き方をしてはいけない。

> ・ 一行中で、歌詞と歌詞の間に、タイムタグが1つだけある場合、

> > あいう[00:10:00]えお

> このような場合、他の行にカラオケタグがついていなければ、この歌詞はタイムタグ付き歌詞と判断されるが、このような表記をしてはいけない。なお、他にカラオケタグ付きの行があれば、この書き方は許される。

> ・ 行頭にタイムタグが連続してある場合、

> > [00:10:00][01:40:00]あいうえお
> > [00:11:00][01:41:00]かきくけこ

> > 本仕様書では、このような書き方を認めない。詳細は、4-1-1. を参照すること。

> 2-4. カラオケタグ付き歌詞の表記法

> ・ すべてのタイムタグは拡張タイムタグでなくてはならない。（秒単位タイムタグでカラオケ的表現をするのは、たいていの場合、困難である。）

> ・ 一行中では、タイムタグは、歌詞を挟みながら、いくつあってもよい。

> ・ 歌詞を挟まずに2つのタイムタグを記述してよい。歌詞を挟まずに3つ以上タイムタグがある場合は、最初と最後のタイムタグだけが有効となる。

> > [00:10:00]あいうえお[00:20:00][00:25:00][00:30:00]かきくけこ[00:40:00]

> > は、

> > [00:10:00]あいうえお[00:20:00][00:30:00]かきくけこ[00:40:00]

> > と同じである。

> ・ 必ずしも行の先頭にタイムタグが無くてもよい。また、行の最後にもタイムタグが無くてもよい。

> > あいうえお[00:10:00]かきくけこ[00:20:00]

> > や、

> > [00:10:00]あいうえお[00:20:00]かきくけこ

> > という書き方をしてもよい。

> ・ タイムタグの逆転はあってはならない。

> > [00:10:00]あいうえお[00:09:00]かきくけこ[00:20:00]

> > というような書き方をしてはいけない。

> ・ 同じ時間を示すタイムタグがあってもよい。

> > [00:10:00]あいうえお[00:10:00]

> > というような書き方をしてもよい。

> 2-5. ファイル名など

> > 2-5-1. ファイル名

> > ・歌詞ファイル名は、拡張子より前の部分が、対応させる曲ファイルと同じでなければならない。

> > > ABC.mp3 と対応する歌詞ファイルは、ABC.lrc ABC.txt ABC.kra である。

> > 2-5-2. 拡張子（懸案事項2-5-2）

> > ・歌詞ファイルとして認められる拡張子は、lrc kra txtである。ただし、カラオケ非対応のソフトでは、kra に対応してはいけない。これらの優先順序については、2-5-4. を参照すること。

> > おそらく他に流通している拡張子はないと思われるが、本当にこれだけでいいのだろうか？

> > 2-5-3. フォルダ

> > ・原則として歌詞ファイルは曲ファイルと同じフォルダになくてはならない。

> > ・ただし、プレイヤーのオプションとして、特定の歌詞ファイル用フォルダを指定し、その中から歌詞ファイルを検索させてもよい。また、その場合に限り、サブフォルダを検索対象にしてもよい。

> > ・ただし、このオプション仕様を実装する場合に、複数のフォルダに対応する歌詞ファイルが存在した場合、優先順序問題が発生する。これについては、2-5-4. を参照すること。

> > 2-5-4. 優先順序（懸案事項2-5-4）

> > ・拡張子の優先順序は、カラオケ対応ソフトでは、 kra > lrc > txt 、非対応ソフトでは、lrc > txt とすべきだと思われる。

> > > なぜなら、まず txt は、最も汎用性のある拡張子であり、歌詞ファイル以外の情報ファイルである可能性も考えられるため、優先順序は低くした方がよいと思われる。

> > > また、kra と lrc では、kra がカラオケタグのみだと思われるのに対し、lrc はカラオケタグあるいは行頭タグのどちらかであると思われるので、 kra > lrc とすべきである。

> > ・フォルダの優先順序は、まず、歌詞用フォルダ内に関しては、指定されたフォルダを優先し、次いで最初に見つかったサブフォルダ内を検索し、最初に見つかった歌詞とする。この見つけ方のアルゴリズムによっては、様々な順序になる可能性があるが、これに関しては、ここで規定すべきではないと思われる。（規定するのが難しいからということもあるが^^;）

> > また、曲ファイルと同じフォルダ と 歌詞用フォルダ のどちらを優先するかは、難しい問題である。

> > 一見すると、曲ファイルと同じフォルダの方を優先する方が自然かもしれないが、例えば、CD-R にタイムタグ付き歌詞と曲ファイルを同時に焼いたとして、その後、カラオケタグ付き歌詞を作成した場合、このカラオケタグ付き歌詞を優先したくなるだろう。

> > このような場合を考えると、歌詞用フォルダ（およびそのサブフォルダ）を優先させた方がよいかもしれない。

> > ・また、拡張子とフォルダとどちらを優先すべきか、という問題がある。

> > > 例えば、歌詞用フォルダ＞曲ファイルフォルダ 、 lrc > txt という優先順序だった場合、

> > > 歌詞用フォルダに ABC.txt が、
> > > 曲ファイルフォルダに ABC.lrc が、

> > > あった場合、どちらが優先されるかである。

> > > これに関しては、フォルダのシーク処理を何度も繰り返すと、重くなるという観点から、ABC.txt すなわち、フォルダの方を優先すべきだと思われる。

> > ・ 最後に、これらのような曲ファイルとは別の歌詞ファイル と LYRICS3v2.00 などの内蔵された歌詞 との優先順序の問題がある。

> > > これも、一見すると、内蔵歌詞を優先するのが自然かもしれないが、上述の CD-R のような例と同様な解釈も生じる。

３．@タグの定義

> 3-1. @タグの必要性

> > タイムタグ付き歌詞を取り扱うソフトウェアとして、注意を払わねばならない問題点の1つとして、「Winamp時間」と「標準時間」の違いがある。

> > 今やもっともポピュラーな Windows 用 mp3 プレイヤーである Winamp には、大きなバグ（？）がある。それは、演奏中に正しい時間を示さない ということである。 正確に言うと、演奏するファイルのフォーマット( mp3, wave, wma など) や、サンプリングレートによっては、時間の進み方が遅くなるのである。特に、一番用いられているであろう、44.1kHz の場合、その3つのフォーマットとも、進み方が遅くなってしまう。また、そのズレ方も、mp3 と wave では同じだが、wma ではまた違ったズレ方をする。このような Winamp での演奏時間のことを 「WinAmp時間」 と呼ぶ。

> > 一方、当然だが、Winamp 以外のプレイヤーでは、意図的に時間の調整を行わない限り、どんなファイルでも正しく時間が進む。これを 「 標準時間 」 と呼ぶ。

> > これによって発生する問題は、

> > > 「Winamp で再生しながら、タイムタグを付けた歌詞を、Winamp 以外のプレイヤーで再生したら、」

> > > 「Winamp を用いずにタイムタグを付けた歌詞を、Winamp用プラグインソフトで表示したら、」

> > 時間が進むにつれて、歌詞を表示するタイミングがズレていってしまうことである。

> > この問題に、Winamp 以外の製作者が対応するためには、この時間のズレを是正して表示するしかない。

> > そのためには、歌詞ファイルに、「タイムタグを付けた時にどういうズレ方で演奏されていたか（またはズレていなかったか）」という情報を埋め込んでおく必要がある。このズレ比率値 ( @TimeRatio ) さえ分かれば、演奏時にそれを是正することができるからだ。

> > この @TimeRatio の他にも、歌詞に様々な情報を付加しておくための規格フォーマットが @タグ である。

> 3-2. 書式および規則

> > 3-2-1. 書式 :

> > @タグ名=内容

> > > タグ名 : タグの名前を示す文字列。

> > > 内容 : タグ名の内容を示す値や文字列。

> > 3-2-2. 規則

> > ・１つの@タグ行は１行の文字列で表される。

> > ・@タグ行は歌詞テキスト中のどこにあってもかまわず、その順序も問わない。

> > ・ただし、行中では、以下の規則が適用される。

> > > ・@タグ名と内容の間には、必ず1つだけ半角イコール記号(=)が必要であり、幾つかの半角スペースが入ってもよい。

> > > ・@の前には、余計な文字があってはならない。

> > > ・@タグ行には、いかなるタイムタグも付けてはならない。

> > > ・タグ名 は 大文字小文字の区別はしないが、全角を使ってはいけない。

> > > ・内容が 値 である場合、半角数字以外を記述してはいけない。
> > > 単位も記述してはいけない。内容が空欄であってもいけない。

> > > ・内容が 文字列 である場合、1つの@タグ行は半角 1024文字分 以内とする。 0 文字でもよい。

> > ・以上の規則に当てはまらない場合、その@タグは無効である。

> > ・同一歌詞ファイル中に、同じ@タグが複数存在することは許されない。

> > ・歌詞表示プレイヤーは、行頭が @ である行を表示してはならない。

> 3-3. 各@タグの定義

> > 3-3-1. KRAAMP および Gucchi's Lyrics Plugin で規定されたタグ

> > @Artist | アーティスト名。
> > @Title | タイトル。
> > @Album | アルバム名。
> > @Bgfile | Gucchi's Lyrics Plugin の Karaoke Displayer での 背景ファイル名。
> > @Bgfolder | Gucchi's Lyrics Plugin の Karaoke Displayer での 背景フォルダ名。

> > 注: Gucchi's Lyrics Plugin の開発は現在終了しているが、これらの @タグ は 本仕様書でも引き継がれている。

> > 3-3-2. タイムタグ補正に関するタグ

> > @TimeRatio |
> > ・ | タイムタグが、標準時間に対してどれだけズレているかを表す割合を表す値。
> > ・ | 必ず 0 より大きくなければならない。また、現状では、1 を越えるべきではない。なぜなら、そのようなズレ方をするプレイヤーがないからである。
> > ・ | 1 である場合、その歌詞が標準時間であることを示す。
> > @Offset |
> > ・ | 演奏時に、すべてのタイムタグに適用するズレ幅を標準時間で表した値。整数。 [ms]
> > ・ | 負値ならばタイムタグを早める方向にずらす。
> > ・ | この値は主にユーザーが調整するために手動で書き加えるものである。したがってタイムタグ変換ユーティリティーやタイムタグ付けソフトでは、この値を新たに追加するべきではない。
> > ・ | プレイヤーがこの値を適用した結果、タイムタグが負になった場合は 0 とすること。その際、複数のタイムタグが 0 となった場合、最後のタイムタグのみ有効とする。
> > ・ | @Offset で変換した後、歌詞を保存するときは、@Offset=0 を書き加える。（@Offset行を削除してはいけない。）
> > @SilencemSec |
> > ・ | タイムタグ作成時に再生されたサウンドデータの曲前部の無音部長さを標準時間で表した値。整数。[ms]
> > ・ | 曲ファイルごとの無音部の長さの違いを補正するときに用いる。（歌詞中のタイムタグからこの値を減算し、演奏する曲の無音部長さを加算する。）
> > ・ | ただし、プレイヤーや歌詞表示プラグインでは @SilencemSec に対応してはいけない(あっても無視すること)。
> > ・ | @Offset行 がある場合は、@SilencemSec に関する処理をしてはいけない。（保存時には @SilencemSec行を削除すること。）
> > ・ | この値を適用した結果が負になった場合は 0 とすること。

> > 3-3-3. タイムタグ付け情報に関するタグ

> > @TaggingBy | ・タイムタグ付けした人の名前。
> > @EditedBy | ・タイムタグを修正した人の名前。

> > 3-3-4. 現在では新たに付加してはいけないタグ（読み込みの対応は可）

> > @Silence | タイムタグ作成時に再生されたサウンドデータの曲前部の無音部のフレーム数。
> > @Flames | タイムタグ作成時に再生されたサウンドデータの総フレーム数。正しくは Frames のはずですが、間違ったままずっと使われていました^^;
> > @TotalSec | タイムタグ作成時に再生されたサウンドデータの総演奏時間。[s]
> > @TimeType | タイムタグ作成時の再生時間の種類。WinAmp か Normal のどちらかを指定。この２単語のみ有効（大小文字を区別しない）。これら以外の文字列は無効である。これらの文字列の後ろに余計な文字列を記入してもいけない。

> > 注 ： これらの@タグは、「りりくす」でサポートされていたが、「りりくすEx」では新たにこれらの@タグを付加しない。

４．参考資料

> 4-1. 従来流通していたが、本仕様書では認めない書き方

> 曖昧な記述に対応する仕様を決めるより、曖昧な記述をさせないようなシンプルかつ明瞭な仕様をめざす。よって、現在流通している曖昧な書き方は勇気をもって(^^;仕様外とし、仕様文書とは別の参考資料で触れるにとどめる。

> > 4-1-1. 行頭タイムタグ付き歌詞におけるリピート拡張

> > 従来では、いわゆるサビのリピートなど、ある歌詞を後で再度表示したい場合、行の先頭に複数のタイムタグをつけて表現する書き方があった。

> > > [00:15][00:45]あいうえお
> > > [00:16]かきくけこ
> > > …

> > > このような歌詞は、従来の解釈では、15秒に、「あいうえお」 が表示され、16秒に、「かきくけこ」 が表示され、以降、続く行が表示され、45秒にまた、あいうえお が表示されていた。

> > > しかし、このような表現をするならば、

> > > [00:15]あいうえお
> > > [00:16]かきくけこ
> > > …
> > > [00:45]あいうえお

> > > と表記することが可能である。この書き方を許すメリットよりも、このような曖昧な書き方が、カラオケタグ付き歌詞との区別や、両者の共通解釈をする上での混同を引き起こしてしまうデメリットの方が遙かに大きいと考えられる。

> > > したがって、この書き方はカラオケタグ付き歌詞のなかった時代に生み出された書き方ではあるが、カラオケタグ付き歌詞に正式に対応しようとする本仕様書ではこの書き方を認めていない。

５．更新履歴

> 1.0β2 ( 2000/5/24 )

> > ・開発者向けの2-6-2. の「行頭にタイムタグがない場合」の補完方法を修正した。これに伴い、懸案事項2-6-2-1 は自動的に解消された。

> > ・仕様外の説明を、仕様本文から、参考資料へ移動した。

> > ・2-6-3. に「内蔵歌詞との優先順序」問題を追加した。

> 1.0β1 ( 2000/5/23 )

> > ・AtMarkTag.html と統合し、また、TimeTagDev.html と切り離した。その他いろいろと交通整理。