Last active
August 18, 2024 16:13
-
-
Save kb10uy/c171c175ba913dc40a73c6ce69da9859 to your computer and use it in GitHub Desktop.
Revisions
-
kb10uy revised this gist
Nov 20, 2020 . 1 changed file with 21 additions and 1 deletion.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,4 @@ # SUS Format Specification v2.7 (rev2) 注: **SUS** は今や *Sliding Universal Score* の略であり、 *SeaUrchin Score* ではありません。 ## 1. 概要 @@ -162,6 +162,26 @@ #NOSPEED ``` ### `#MEASUREBS` 小節番号ベース値 * 指定した時点から、データ行の小節番号に常に指定された値が加算されるようになる。 * 複数回指定した場合は最後に指定した値で加算値が上書きされる。 ``` ... 0-999 #MEASUREBS 1000 ... 1000-1999 #MEASUREBS 2000 ... 2000-2999 ``` ### `#MEASUREHS` 小節線スピード変化指定 * アプリケーションが小節線の表示をサポートする場合、その小節線のスピード変化を指定できる。 * 指定する値は `#TIL` と同じもの。 ``` #MEASUREHS 01 ``` ### `#mmm1x` タップ * 位置が移動しない単押しのノーツ。 * 仕様として予約されているのは以下の 3 つである。 -
kb10uy created this gist
Oct 12, 2020 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,221 @@ # SUS Format Specification v2.7 注: **SUS** は今や *Sliding Universal Score* の略であり、 *SeaUrchin Score* ではありません。 ## 1. 概要 * テキストデータであり、全て printable character で構成される。 * 拡張子: `*.sus` * EOL: **CRLF** もしくは **LF** * エンコード: 常に **UTF-8** * `#` で始まる行がデータとして意味を持ち、それ以外の行はコメントとして無視される。 * 文字列データを指定する部分は `" ~ "` でクォートする。 ## 2. メタデータ行 * `#` に続けて以下で列挙する各種命令を記述する。 * `(ASCII)` と書かれている項目は、内容に ASCII 文字のみが利用可能。 * `(UTF-8)` と書かれている項目は、内容に ASCII 文字以外も利用可能。 ### `#TITLE` 楽曲タイトル (UTF-8) * `#TITLE "Song Title"` ### `#SUBTITLE` 楽曲サブタイトル (UTF-8) * `#SUBTITLE "Song Subtitle"` ### `#ARTIST` 楽曲アーティスト (UTF-8) * `#ARTIST "Artist"` ### `#GENRE` 楽曲ジャンル (UTF-8) * `#GENRE "Genre"` ### `#DESINGER` 譜面デザイナー (UTF-8) * `#DESIGNER "Designer"` ### `#DIFFICULTY` 譜面難易度種別 (ASCII/UTF-8) * 整数値または文字列で譜面の難易度の種類を指定する。 * 数値指定について、仕様として予約されているのは以下の 5 つ。 * `#DIFFICULTY 0` * `#DIFFICULTY 1` * `#DIFFICULTY 2` * `#DIFFICULTY 3` * `#DIFFICULTY 4` * 文字列で指定することもできるが、その処理はアプリケーションごとに異なる。 ### `#PLAYLEVEL` 譜面レベル (ASCII) * 整数値で譜面のレベルを指定する。 * `#PLAYLEVEL 10` * 末尾に `+` を指定することも可能。 * `#PLAYLEVEL 14+` ### `#SONGID` 楽曲 ID (ASCII) * この値の処理はアプリケーションごとに異なる。 * `#SONGID "songid"` ### `#WAVE` 音声ファイル * sus ファイルからの相対パスで指定する。 * 対応ファイルフォーマットはアプリケーションごとに異なる。 * `#WAVE "filename.wav"` ### `#WAVEOFFSET` 音声ファイルオフセット * 譜面再生開始と音声ファイルの再生タイミングの差を指定する。 * 単位は秒。小数で指定可能 * 正の値を指定すると、譜面が先に流れる。 * 負の値を指定すると、音声が先に流れる。 * `#WAVEOFFSET 0.5` ### `#JACKET` 楽曲ジャケット * sus ファイルからの相対パスで指定する。 * 対応ファイルフォーマットはアプリケーションごとに異なる。 * `#JACKET "jacket.jpg"` ### `#BACKGROUND` 背景画像ファイル * sus ファイルからの相対パスで指定する。 * 対応ファイルフォーマットはアプリケーションごとに異なる。 * `#BACKGROUND "jacket.jpg"` ### `#MOVIE` 背景動画ファイル * sus ファイルからの相対パスで指定する。 * 対応ファイルフォーマットはアプリケーションごとに異なる。 * `#MOVIE "movie.mp4"` ### `#MOVIEOFFSET` 背景動画ファイルオフセット * 譜面再生開始と動画ファイルの再生タイミングの差を指定する。 * 単位は秒。小数で指定可能 * 正の値を指定すると、譜面が先に流れる。 * 負の値を指定すると、動画が先に流れる。 * `#MOVIEOFFSET 0.5` ### `#BASEBPM` スクロール速度算出用テンポ * スクロール速度の基準となるテンポを指定する。 * 実際のスクロール速度は、この値に対する比率で変化する。 * 指定しない場合、最初の BPM 変化の値になる。 * `#BASEBPM 120.0` ### `#REQUEST` 特殊属性 * アプリケーションに対して特殊な命令を送信する。 * 4 にて後述する。 * `#SUBTITLE "Song Subtitle"` ## 3. 譜面データ行 * 各行は「ヘッダ部、 `:` 、 データ部」という構成をとる。 * ヘッダ部の後に `:` を付与する必要がある。 * データ部は 2 桁で 1 セットであり、セット数で小節を分割し、それぞれのタイミングとする。 * 例えば `11111111` と指定した場合、 4 分間隔で配置される。 * 最大分割数はアプリケーションごとに異なるが、少なくとも 512 分割(データ部 1024byte)をサポートするべきである。 * 2 桁のデータについて、 1 桁目はデータ種類ごとに異なるが、 `0` は常に無配置である。 * 2 桁目は常にノーツの幅を表し、同様に 1 ~ z で 1 幅 ~ 35 幅を表す。 * よって、ノーツの存在しない位置については `00` で埋めるべきである。 * `mmm` * 特定の文字列の場合特殊データである。 * それ以外の場合は一般データであり、小節番号である。 * 小節番号は 0 からスタートする。 * `x` * ノーツの左端のレーンを指定する。 * 左側から 0, 1, 2, ..., 9, a, b, c, ... と続く。 * 大小文字は区別されない。 * `y` * ノーツごとのチャンネルを指定する。 * `x` と同様に、 0 ~ z までを使用可能。 * 大小文字は区別されない。 * `zz` * 特殊データの番号を指定する。 * Base36 で 01 ~ zz までを使用可能。 ### `#mmm02` 小節長 * その小節番号以降の小節長を拍数で指定する。 * 小数値が指定可能。ただし、 **M / 2^n (M, n ∈ N)** となる値が望ましい。 ### `#BPMzz`, `#mmm08` BPM 定義・変化 * その地点以降のテンポを BPM 定義から参照して指定する。 * テンポの値は小数値が指定可能。 * `#BPM01: 140.0` * `#00008: 01` ### `#ATRzz`, `#ATTRIBUTE zz`, `#NOATTRIBUTE` ノーツ属性定義 * ATR でノーツ属性のセットを定義する。 * 文字列で定義し、コンマで複数の値を区切る。 * `rh:<小数>` ディレクショナルのロール速度 * `h:<小数>` ノーツの高さ * `pr:<整数>` ノーツの描画優先度 * `#ATTRIBUTE zz` を記述すると、その行以降のデータに `zz` のノーツ属性が適用される。 * `#NOATTRIBUTE` を記述すると、その行以降のデータにはノーツ属性は適用されなくなる。 ``` #ATR01: "pr:100, h: 1.5" #ATTRIBUTE 01 #00010: 14141414 #NOATTIRBUTE ``` ### `#TILzz`, `#HISPEED zz`, `#NOSPEED` スピード変化定義 * ノーツごとに異なる速度を適用する(以下ハイスピード定義)ことができる。 * ハイスピード定義は文字列で定義し、コンマで複数の値を区切る。 * `meas'tick:speed` 形式の文字列。 * `meas` 小節番号(整数) * `tick` ティック(整数) (小節をさらに分割する単位。デフォルトでは 1 拍は 480tick となっているため、1 小節で 1920tick となる) * `speed` 速度(小数) (負の値も指定可能) * `#ATTRIBUTE zz` を記述すると、その行以降のデータに `zz` のハイスピード定義が適用される。 * `#NOATTRIBUTE` を記述すると、その行以降のデータにはハイスピード定義は適用されなくなる。 ``` #TIL01: "0'0:1.0, 0'960:2.0" #HISPEED 01 #00010: 14141414 #NOSPEED ``` ### `#mmm1x` タップ * 位置が移動しない単押しのノーツ。 * 仕様として予約されているのは以下の 3 つである。 * `1?` タップ 1 * `2?` タップ 2 * `3?` タップ 3 * `4?` タップ 4 * `5?` タップ 5 * `6?` タップ 6 * `#00010: 2414141434141414` ### `#mmm2xy` ホールド * 位置が移動しない長押しのノーツ。 * 全ての点において同じ幅を指定しなければならない。 * チャンネルが同じもの同士が連結する。 * `1?` 開始点 * `2?` 終了点 * `3?` 中継点 * `#00020a: 14002400` ### `#mmm3xy` スライド 1 * 位置が移動する長押しのノーツ。 * 各点ごとに異なる幅を設定可能。 * ベジエ曲線によってなめらかに形状を設定することができる。 * 曲線の形状については、各中継点と制御点のノーツの中心を結んだ連続する線分によって定義される。 * チャンネルが同じもの同士が連結する。 * `1?` 開始点 * `2?` 終了点 * `3?` 中継点 * `4?` ベジエ曲線制御点 * `5?` 不可視中継点 * `#00030a: 14340024` ### `#mmm4xy` スライド 2 * 位置が移動する長押しのノーツ。 * 基本的な仕様はスライド 1 と同等なので省略。 ### `#mmm5x` ディレクショナル * 方向のあるノーツ定義。 * 必ずしも他のノーツの上に重ねる必要はなく、単独で配置することも可能である。 * `1?` 上 * `2?` 下 * `3?` 左上 * `4?` 右上 * `5?` 左下 * `6?` 右下 * `#00050: 14241424` ## 4. `#REQUEST` で指定できる特殊属性 仕様として定義されているのは以下の通りである。 ### `ticks_per_beat` 拍あたりの tick 数の変更 * `#REQUEST "ticks_per_beat <整数>` * 譜面で n 分音符を使用する場合、小節拍数 * tick 数 の約数になるように指定するべきである。 ### `enable_priority` 優先度付きノーツ描画の有効・無効切り替え * `#REQUEST "enable_priority true/false"`