K-Shoot MANIA v2では、従来のKSH形式は非推奨となり、新たにKSON形式が標準フォーマットとして使用されるようになりました。
本記事では、新しい譜面フォーマットKSONについて、主に互換性周りで注意すべき点を紹介します。
※本記事の内容は、KSON形式バージョン1.0.0時点の内容となります。
KSON形式とは?
KSON形式は、K-Shoot MANIA用の新しい譜面形式です。
以下のページで譜面フォーマットの仕様が公開されています。
主に以下の改善を目的としています。
- 外部ツール作成の容易化
- JSON形式は多くのプログラミング言語で標準で読み書きできるので、外部ツールの作成が容易になります。
- 従来形式(KSH)は人間には読みやすいものの、1小節の譜面行数を調べてからでないとノーツの位置や長さが判明せず、かつ小節をまたいだノーツの処理も必要になるため、読み込みに複雑な実装が必要でした。
- 1/32以下の長さのレーザーが直角扱いになってしまう問題の解消
- KSON形式では直角レーザーは長さを持たなくなったため、1/32以下のレーザーも直角化せず挿入できるようになりました。
- これにより、直角レーザーに対して曲線レーザーを接続した場合の仕様上の一貫性も向上しました。
- ファイルサイズ削減
- 読み込みパフォーマンス向上
- 今後の機能拡張のしやすさ向上
KSONファイルの中身は、JSON形式と呼ばれるWeb等で一般的に利用されているフォーマットで記述されています。
これはテキストデータのため、従来通りテキストエディタで直接開くことができます。
おおよそ以下のような見た目です。
ファイルサイズ節約のためにぎゅっと1行にまとめられていますが、このままだと読みづらいです。

そのため、手動でのテキスト編集が必要な場合はVSCode等のテキストエディタを利用して見やすく自動整形してから編集するとよいでしょう。
↓ JSON自動整形した後の見た目

Q&A
Q1. 同名の.kshファイルと.ksonファイルを両方配置した場合はどうなりますか?
v2では.ksonファイルのみが使用され、.kshファイルは無視されます。
(例)
songs/package/music/music_ex.kson
songs/package/music/music_ex.ksh
の両方がある場合、music_ex.ksonのみが読み込まれる
そのため、KSON形式から自動変換した.kshファイルを同名で同梱しておくことで、v2の挙動を維持しつつv1ユーザー向けにもある程度同じ譜面を遊べるようにすることが可能です。
※ v2の新機能を使用した譜面はv1では正常に再生されません。そのためv1では、レーザーの曲線パラメータ・レーン回転(rotation_deg)・譜面速度(scroll_speed)を含むKSHファイルはインターネットランキングのスコア送信対象外となるよう対策しています。
※ v1ユーザー向けに別譜面(曲線レーザーの再現など)をKSH形式で作成して同梱することはおすすめしません。これは、インターネットランキング上で別譜面扱いになってしまうためです。あくまで同名で同梱する.kshファイルは自動変換したものに限ることを推奨します。
Q2. KSON形式では、インターネットランキングの譜面ハッシュ値はどのように計算されますか?
KSON→KSH形式に自動変換した上で、下記の記事のルールに従って計算されます。
そのため、KSON→KSH形式へ自動変換したファイルであれば譜面ハッシュ値は必ず同一となります。
Q3. 過去の譜面を再配布する場合、KSON形式に変換して配布した方が良いのですか?
いいえ。変換しないことを推奨します。
過去にKSH形式で配布したことがある譜面は、変換せずKSH形式のまま配布することが望ましいです。
これは、KSON形式へ変換することでインターネットランキングの譜面ハッシュ値が変化する場合があるためです。
Q4. 新機能を使っていない場合、KSH形式とKSON形式のどちらを使うべきでしょうか?
KSH形式は今後非推奨になっていくため、基本的にはKSON形式を推奨します。
ただし、v2が十分に普及するまでの間は、移行期間としてKSH形式を同梱することもご検討ください。
KSON形式・KSH形式の相互変換の制約について
いくつかの制約がありますが、KSH形式とKSON形式は相互変換が可能です。
K-Shoot Editor v2で開いて再保存するか、「ファイル>ファイル一括変換...」からフォルダ指定で一括変換することが可能です。

KSH(旧)→KSON(新)形式の変換
KSH→KSON変換は、基本的には全ての内容が変換されます。
ただし細かい点として、以下のデータは失われます。
- 1/32未満の長さの直角レーザーの長さ情報は失われます。
- 変換後のKSON形式のまま使用する分には問題ありませんが、KSH→KSON→KSH形式へ再変換した場合に直角の長さが1/32(または衝突しないそれ以下の長さ)に変更されるため、元の譜面とは一致しません。
- 1小節のタイミングの分解能は960へ丸められます。
- KSON形式は、ノーツ等のタイミングを1小節=960(※4/4拍子の場合)で換算した数値として記録します。
- そのため、KSH形式をテキスト編集で1小節を960で割り切れない行数で分割していた譜面の場合、KSON形式への変換で最も近いタイミングへ丸められます。
- インターネットランキング用の譜面ハッシュ値がまれに一致しないことがあります。
- KSH→KSON→KSH変換時、同一時間位置にあるオプション行(視点変更等)の行順序が入れ替わる場合があるため、まれにハッシュ値が維持されない場合があります。
- そのほか、ver=160未満のKSH譜面は、KSH→KSON→KSH変換時にver=160に変換されるため、譜面ハッシュ値は維持されません(これは既存のv1エディタでの再保存と同様の制約)。
これらの制約があるため、これまでKSH形式で配布されていた譜面データは基本的にKSH形式のまま使用することを推奨します。
なお、以下の情報はKSON形式への変換後も保持されます。
- KSH形式の互換性バージョン情報は保持されます。
- ver=160未満のバージョンについては、KSH→KSON→KSH変換時にKSHバージョン自体はver=160に更新されるものの、別途ver_compat=として元のKSHバージョンが互換性対応用に保持されます。
- KSHファイルにテキスト編集で挿入した独自の行や、廃止済みのオプション内容(chiprate, longrate, laserrate)はデータ上保持されます。
- ヘッダ部のオプション行(「=」を含む行)はKSON内のcompat.ksh_unknown.metaへ保持されます。
- 譜面部のオプション行(「=」を含む行)は、KSON内のcompat.ksh_unknown.optionへ保持されます。
- オプション行以外(「=」を含まない行)は、KSON内のcompat.ksh_unknown.lineへ保持されます。
- 保持される内容の詳細はKSON譜面フォーマット仕様書の該当箇所をご覧ください。
KSON(新)→KSH(旧)形式の変換
新形式から旧形式への逆変換も可能です。
前述の制約を除き、元々KSHから変換して作成したKSONファイルであれば、KSON(新)→KSH(旧)への逆変換で元のKSHファイルと同一内容になることが多いです。
ただし、KSON形式で新しく導入された機能を利用している場合、逆変換時はKSH形式で表現できない情報は失われます。具体的には、KSH形式に変換すると以下のデータが失われます。
- ロングFXノーツ毎の個別パラメータ上書きは、KSH形式に逆変換すると失われます。
- レーザー横位置の分解能は、KSH形式に逆変換すると51段階に制限されます。
- 各種パラメータ値の小数は、KSH形式に逆変換すると丸められます。
- 視点変更等は整数に丸められます。
- BPMや曲線パラメータ等は小数第3位へ四捨五入されます。
- 1/32以下の長さの非直角レーザーは、KSH形式では表現できないため直角レーザーとして変換されます。
以下の情報はKSH形式に逆変換した場合でも保持されます。ただし、これらはv2の新機能のため、v1では再生されません。
- 曲線パラメータa,b
- レーン回転角度(rotation_deg)
- 譜面速度(scroll_speed)
- 曲のタイトルの英字表記(title_translit)、アーティスト名の英字表記(artist_translit)
- ユーザー定義エフェクトの新しい種類 peaking_filter, low_pass_filter, high_pass_filter 、およびそのパラメータ値
※ユーザー定義エフェクトの新しい種類は旧v1エディタでは開くことができないため、v1エディタで再保存すると情報が失われます(v1エディタで開いたときに警告ダイアログが表示されます)。

























←わーい
(なぜか接続できない)




















