クラス BeMusicBmsonLoader
-
public class BeMusicBmsonLoader extends BmsLoader
bmson形式のJSONからBMSコンテンツを生成するBMSローダクラスです。当クラスでサポートするbmsonは、下記外部サイトにて規定されているbmson仕様に準拠したJSON形式のフォーマットを読み込みます。 ※表記のURLは外部サイトへのリンクのため予期せず更新・移動・削除される場合があります
bmsonの標準的な仕様:https://bmson-spec.readthedocs.io/en/master/index.html
beatorajaのBMSON拡張定義:https://github.com/exch-bms2/beatoraja/wiki/楽曲製作者向け資料具体的には、以下のようなフォーマットで記述されたJSONオブジェクトの読み込みに対応しています。
{ "version": "1.0.0", "info": { "title": "#TITLE", "subtitle": "#SUBTITLE", "artist": "#ARTIST", "subartists": [ "#SUBARTIST", "#SUBARTIST(2件目)", ... ], "genre": "#GENRE", "mode_hint": "beat-7k", #PLAYER "chart_name": "#CHARTNAME", "level": 3, #PLAYLEVEL "init_bpm": 150, #BPM "judge_rank": 100, #DEFEXRANK "total": 300, #TOTAL "back_image": "#BACKBMP", "eyecatch_image": "#EYECATCH", "title_image": "#STAGEFILE", "banner_image": "#BANNER", "preview_music": "#PREVIEW", "resolution": 240 }, "lines": [ #Ch:02(4/4拍子でない小節のみ) { "y": 0 }, { "y": 960 }, { "y": 1920 }, ... ], "bpm_events": [ #BPMxx, Ch:08 { "y": 480, "bpm": 180 }, ... ], "scroll_events": [ #SCROLLxx, Ch:SC { "y": 960, "rate": 0.5 }, { "y": 1440, "rate": 1.0 }, ... ], "stop_events": [ #STOPxx, Ch:09 { "y": 960, "duration": 120 }, ... ], "sound_channels": [ #WAVxx, Ch:01,1x,2x,5x,6x { "name": "track01.wav", "notes": [ { "x": 1, "y": 0, "l": 0, "c": false, "t": 0, "up": false }, { "x": 2, "y": 240, "l": 480, "c": true", "t": 2, "up": false }, ... ] }, { "name": "track02.wav", "notes": [ ... ] }, ... ], "mine_channels": [ #WAV00, #Ch:Dx,Ex { "name": "mine.wav", "notes": [ { "x": 7, "y": 240, "damage": 1 }, { "x": 6, "y": 240, "damage": 2 }, ... ] }, ... ], "key_channels": [ #WAVxx, Ch:3x,4x { "track91.wav", "notes": [ { "x": 3, "y": 960 }, { "x": 5, "y": 1200 }, { "x": 7, "y": 1200 }, ... ] }, ... ], "bga": { "bga_header": [ #BMPxx { "id": 1, "name": "image01.bmp" }, { "id": 2, "name": "image02.bmp" }, { "id": 100, "name": "layer.bmp" }, { "id": 101, "name": "miss.bmp" }, ... ], "bga_events": [ #Ch:04 { "y": 0, "id": 1 }, { "y": 960, "id": 2 }, ... ], "layer_events": [ #Ch:07 { "y": 0, "id": 100 }, ... ], "poor_events": [ #Ch:06 { "y": 0, "id": 101 }, ... ] } }
当クラスでのbmsonの読み込み仕様については以下の記述を参照してください。 記述のない動作については冒頭の外部リンクの仕様に準拠し、非準拠の箇所が検出されると原則的に読み込みエラーとなります。 ただし、読み込みが続行可能であればエラー報告のみとなる場合があります。
- 対応するbmsonのバージョンは "1.0.0" です。それ以外のバージョンのbmsonは読み込みエラーとなります。
- 対応する "mode_hint" の値は "beat-5k", "beat-7k", "beat-10k", "beat-14k" です。それ以外の値は読み込みエラーとなります。
- "chart_name" の値が
BeMusicDifficulty
の定義と同じ場合、値はBeMusicMeta.DIFFICULTY
に設定されます。 - "judge_rank" の値は
BeMusicMeta.DEFEXRANK
に設定され、BeMusicMeta.RANK
には値は設定されません。 - 4/4拍子ではない小節は小節長変更チャンネル
BeMusicChannel.LENGTH
が出力されます。 - "sound_channels" のノート定義では、beatoraja固有の定義 "t", "up" は省略可能です。
- "sound_channels" で定義されたロングノートはMGQ形式(
BeMusicChannel.LONG_1P_01
参照}に出力されます。 - "mine_channels" で複数トラック定義されても音声ファイルは全て #WAV00 にアサインされ、後発の定義が優先されます。
BmsLoader.setSkipReadTimeline(boolean)
でタイムライン読み込みを無効化している場合、全てのチャンネルは出力されません。- 索引付きメタ情報のインデックス値が
BmsSpec.INDEXED_META_INDEX_MAX
を超えるような定義は全てBmsErrorType.WRONG_DATA
として処理されます。この制限事項の影響を受けるのは "bpm_events", "scroll_events", "stop_events", "sound_channels", "key_channels", "bga_header" です。
-
-
フィールドの概要
-
クラスから継承されたフィールド BmsLoader
DEFAULT_HANDLER
-
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 BeMusicBmsonLoader()
bmson形式のJSONからのBMSローダオブジェクトを構築します。
-
メソッドの概要
すべてのメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 protected BmsErrorParsed
beginParse(BmsLoaderSettings settings, BmsSource source)
BMSの解析処理開始を通知します。protected BmsErrorParsed
endParse()
BMSの解析処理終了を通知します。protected BmsParsed
nextElement()
BMSの解析によって得られたBMSコンテンツの要素を1件返します。-
クラスから継承されたメソッド BmsLoader
getLastProcessedCharset, getLastProcessedHasBom, getSettings, isBinaryFormat, isStandard, load, load, load, load, load, load, setAllowRedefine, setCharsets, setFixSpecViolation, setHandler, setIgnoreUnknownChannel, setIgnoreUnknownMeta, setIgnoreWrongData, setSkipReadTimeline, setSpec, setStrictly, setSyntaxErrorEnable
-
-
-
-
メソッドの詳細
-
beginParse
protected BmsErrorParsed beginParse(BmsLoaderSettings settings, BmsSource source) throws BmsCompatException
BMSの解析処理開始を通知します。※当メソッドはBMSライブラリの一般利用者が参照する必要はありません。
当メソッドが呼ばれた時点でBMSローダが持つパーサ部を初期化することを求めます。 入力引数でローダの設定と解析対象の入力データが通知されるので、パーサ部の動作に必要な初期化処理を行ってください。
パーサ部の初期化完了後に
BmsLoader.nextElement()
が呼び出され、BMSコンテンツの各構成要素を返すモードに遷移します。 しかし、当メソッドの実行で以下の条件のいずれかを満たすと、パーサ部の初期化エラーと見なしBMS読み込みは中止されBmsException
がスローされます。- 戻り値でnullを返した
- 戻り値でエラー(
BmsErrorParsed.isFail()
がtrueになるオブジェクト)を返した(BmsLoadException
) - 当メソッドから実行時例外がスローされた
- 当メソッドから意図的に
BmsException
をスローした
当メソッドが呼ばれると、上記の実行結果に関わらず
BmsLoader.endParse()
が必ず呼び出されます。- 定義:
beginParse
クラス内BmsLoader
- パラメータ:
settings
- ローダの設定source
- 解析対象の入力データ- 戻り値:
- 初期化結果を表すエラー情報要素
- 例外:
BmsCompatException
-
endParse
protected BmsErrorParsed endParse()
BMSの解析処理終了を通知します。※当メソッドはBMSライブラリの一般利用者が参照する必要はありません。
当メソッドは
BmsLoader.beginParse(BmsLoaderSettings, BmsSource)
が呼ばれると、その実行の成否に関わらず必ず呼ばれます。 BMSローダのパーサ部が使用したリソースを確実に解放する契機を確保するためです。パーサ部の初期化途中で実行時例外がスローされ、初期化が中途半端な状態で当メソッドが実行される可能性がありますので、 それを踏まえたうえで当メソッドの処理を実装するようにしてください。
当メソッドの実行で以下の条件のいずれかを満たすと読み込まれたBMSコンテンツは破棄され
BmsException
がスローされます。- 戻り値でnullを返した
- 戻り値でエラー(
BmsErrorParsed.isFail()
がtrueになるオブジェクト)を返した(BmsLoadException
) - 当メソッドから実行時例外がスローされた
パーサ部の初期化エラー後に当メソッドが呼ばれ実行時例外がスローされた場合、BMSローダは未定義の動作となります。 当メソッドは極力、実行時例外がスローされる契機がないよう実装してください。
-
nextElement
protected BmsParsed nextElement() throws BmsCompatException
BMSの解析によって得られたBMSコンテンツの要素を1件返します。※当メソッドはBMSライブラリの一般利用者が参照する必要はありません。
当メソッドでは、bmson仕様に規定されている要素をJSONオブジェクトから読み取り、 標準フォーマットのメタ情報、チャンネルに変換して返します。具体的なbmsonの読み取り手順については、
BeMusicBmsonLoader
のドキュメントを参照してください。- 定義:
nextElement
クラス内BmsLoader
- 戻り値:
- BMSコンテンツの要素、またはエラー要素。これ以上要素がない場合はnull。
- 例外:
BmsCompatException
- BMSライブラリで表現できない定義を検出した時- 関連項目:
BmsDeclarationParsed
,BmsMetaParsed
,BmsTimelineParsed
,BmsErrorParsed
-
-