sus形式

概要

基本的にはSusフォーマット - Seaurchin Wikiに準拠しています。

細かいところはSeaurchinとの違いをご覧ください。

単語の定義

このsus-analyzerでも使われている独自単語一覧です。

公式
Seaurchinの事を指します。ややこしくてすみません。
本家
名前は伏せますが、ゲーセンにあるアレです。
公式sus
Seaurchin WikiにあるSusフォーマット - Seaurchin Wikiの事を指します。
メタデータ
曲名やBPM等が該当します。#の直後が英字の行です。
譜面データ
ノーツが定義されている行です。#の直後が数字の行です。

メタデータ

sus-analyzerでは下記メタ情報に対応しています。
Seaurchinとは違い、全てのメタデータを"で囲う事が出来ます。しかし、Seaurchinとの互換性を維持するために、公式susに準拠する事を強くおすすめします。

sus-analyzerには独自の概念として、必須項目任意項目が存在します。 譜面を構成するにあたって最低限必要だろうと考えられるものです。 必須項目は赤、任意項目は青に分類してあります。

#SONGID

楽曲IDを文字列で指定します。並び替え等に使用されます。差分譜面等でも楽曲が同一であればSONGIDは統一されるべきです。

#TITLE

楽曲の曲名を文字列で指定します。

#ARTIST

楽曲のアーティストを文字列で指定します。

#DESIGNER

譜面デザイナーを文字列で指定します。 ネタを仕込むのは構いませんが、バラバラにしすぎるとソート等で若干困るかもしれません。

#DIFFICULTY

譜面の難易度を数値特定形式の文字列を指定します。レベルではありません。

数値は下記の通りになります。

  • 0: BASIC
  • 1: ADVANCED
  • 2: EXPERT
  • 3: MASTER
  • 4: WORLD'S END

文字列を指定する場合は2種類の記法があります。 どちらでも指定出来る内容は変わりません。

  • "4:☆☆両"
  • "両:☆☆"

#PLAYLEVEL

譜面のレベルを基本的に数値で指定します。

Tip

#PLAYLEVELは必須扱いになっていますが、WORLD'S ENDではPLAYLEVELを使用しません。 そのため、WORLD'S ENDの譜面に限り不要です。 WORLD'S ENDのsusファイルに記載することは可能ですが、処理には影響しません。

#WAVE

楽曲の音楽ファイルをsusからの相対パスで指定します。 拡張子は、sus-analyzerを依存しているパッケージによります。 そのため、sus-analyzerでは拡張子の制限はありません。

また、WAVEは実質的に必須項目だと思いますが、音源の入手元が個人により違う事等を考え、譜面ファイルとしては任意項目扱いにしています。

#WAVEOFFSET

楽曲のオフセットを秒単位で指定します。正の値を指定すると譜面より遅れて再生が開始します。 この項目は、WAVEを指定している時に限り必須です。

#MOVIE

背景動画をsusからの相対パスで指定します。サイズは16:9推奨です。 こちらも、拡張子はsus-analyzerを依存しているパッケージによります。 そのため、sus-analyzerでは拡張子の制限はありません。

#MOVIEOFFSET

拝啓動画のオフセットを秒単位で指定します。正の値を指定すると譜面より遅れて再生が開始します。 この項目は、MOVIEを指定している時に限り必須です。

#JACKET

ジャケットの画像をsusからの相対パスで指定します。 サイズは1:1推奨です。

#BACKGROUND

背景画像をsusからの相対パスで指定します。 こちらも拝啓動画と同じくサイズは16:9推奨です。

#BASEBPM

楽曲の基本となるBPMを数値で指定します。

譜面データ

ノーツを表現するには2種類の構文存在します。

1
2
#mmmtl: <NOTES>
#mmmtlx: <NOTES>

というものです。

実際に数値に置き換えてみると

1
2
#00114: 1400 0000
#00128A: 1400 2400

といった感じになります。

上記の2行を例に説明していきたいと思います。

1-3桁目 - 小節番号

#00114: 1400 0000
#00128A: 1400 2400

まず、上3桁について説明します。

ここには小節番号を整数3桁で指定します。 000が1小節目、001が2小節目、といった感じです。

4桁目 - レーン種別

#00114: 1400 0000
#00128A: 1400 2400

4桁目には、レーン種別を整数1桁で指定します。

  • 1: ショートノーツレーン
  • 2: HOLDロングノーツレーン
  • 3: SLIDEロングノーツレーン
  • 4: AIR HOLD(Action含む)ロングノーツレーン
  • 5: AIRノーツレーン

5桁目 - レーン番号

#00114: 1400 0000
#00128A: 1400 2400

5桁目にはレーン番号を指定します。

レーンはスライダーに合わせて16分割されていて、左から0,1,2の順で最後が16になります。 ただし、レーン番号に指定出来るのは1桁なので、16進数に変換して指定します。

0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

6桁目 - 識別番号

#00128A: 1400 2400

6桁目は少し特殊で、ロングレーンの識別番号を指定します。

ロングレーンというのは4桁目が2,3,4に該当するものです。 ロングノーツは重なる可能性があるので、識別番号で分けてあげる感じですね。

ロングレーンの識別番号は、扱いがやや特殊です。

全ての識別番号は、終了を同じタイミングで開始を行えます。
全ての識別番号は、種別(SLIDE/HOLD/AIR)が違えば、同じ識別番号を同時に使用する事が可能です。
HOLDの識別番号はレーンが違えば、同じ識別番号を同時に使用する事が可能です。

要するに、可能な限り使い回しが出来るようになっています。

5桁と6桁 - ショートノーツとロングノーツ

一つ前の項目で説明したとおり、6桁目にはロングレーン識別番号を指定します。 つまり、6桁の構文はロングノーツ専用の構文となります。

ショートノーツレーン(種別が1,5)は5桁、ロングノーツレーン(種別が2,3,4)は6桁だという事を覚えておきましょう。