パッケージ com.lmt.lib.bms.bemusic

クラス 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" です。
    • コンストラクタの詳細

      • BeMusicBmsonLoader

        public BeMusicBmsonLoader()
        bmson形式のJSONからのBMSローダオブジェクトを構築します。
    • メソッドの詳細

      • 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ローダは未定義の動作となります。 当メソッドは極力、実行時例外がスローされる契機がないよう実装してください。

        定義:
        endParse クラス内 BmsLoader
        戻り値:
        終了処理結果を表すエラー情報要素
      • nextElement

        protected BmsParsed nextElement()
                                 throws BmsCompatException
        BMSの解析によって得られたBMSコンテンツの要素を1件返します。

        ※当メソッドはBMSライブラリの一般利用者が参照する必要はありません。

        当メソッドでは、bmson仕様に規定されている要素をJSONオブジェクトから読み取り、 標準フォーマットのメタ情報、チャンネルに変換して返します。具体的なbmsonの読み取り手順については、 BeMusicBmsonLoaderのドキュメントを参照してください。

        定義:
        nextElement クラス内 BmsLoader
        戻り値:
        BMSコンテンツの要素、またはエラー要素。これ以上要素がない場合はnull。
        例外:
        BmsCompatException - BMSライブラリで表現できない定義を検出した時
        関連項目:
        BmsDeclarationParsed, BmsMetaParsed, BmsTimelineParsed, BmsErrorParsed