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

クラス BeMusicLoadHandler

  • すべての実装されたインタフェース:
    BmsContent.Creator, BmsLoadHandler, BmsNote.Creator

    public class BeMusicLoadHandler
    extends Object
    implements BmsLoadHandler
    Be-Music用BMSコンテンツ読み込み時のハンドラです。

    当ハンドラでは、Be-Music特有の仕様をBMSコンテンツのローダーに付与します。 具体的には「CONTROL FLOW機能」を提供します。これは「#RANDOM」による乱数の生成と「#IF」等によるコンテンツ読み込みの ランダム化を実現するものとなっており、CONTROL FLOWを記述したBe-Music用BMSコンテンツでは読み込み毎に異なるデータを 読み込むことが可能となるものです。

    • コンストラクタの詳細

      • BeMusicLoadHandler

        public BeMusicLoadHandler()
    • メソッドの詳細

      • setEnableControlFlow

        public final BeMusicLoadHandler setEnableControlFlow​(boolean isEnable)
        CONTROL FLOWの有効状態を設定します。

        有効にすると、#RANDOMによる乱数生成と#IF~#ELSEIF~#ELSE~#ENDIFによるフロー制御が可能になります。 無効にするとこれらのフロー制御は非対応になり、解析エラーになります。

        デフォルトではCONTROL FLOWは無効に設定されています。

        パラメータ:
        isEnable - CONTROL FLOW有効状態
        戻り値:
        このオブジェクトのインスタンス
      • setForceRandomValue

        public final BeMusicLoadHandler setForceRandomValue​(Long value)
        CONTROL FLOWにおける乱数生成の値を強制します。

        1以上の値を指定すると#RANDOMの実行結果が必ず指定値となります。

        0を指定すると全ての#IF, #ELSEIFが「真」を示さなくなり、必ず#ELSEブロックが処理されるようになります。

        マイナス値またはnullを指定すると値の強制はOFFになり、ランダムな値が生成されるようになります。

        デフォルトでは乱数値の強制はOFFになっています。

        この値はCONTROL FLOWが有効になっている場合のみ使用されます。無効の場合、BMS読み込みに対しての作用はありません。

        パラメータ:
        value - 強制する乱数の値
        戻り値:
        このオブジェクトのインスタンス
      • startLoad

        public void startLoad​(BmsLoaderSettings spec)
        BmsLoaderの読み込み処理にて読み込みが開始された時に一度だけ呼び出されます。

        当メソッドは1個のBMSの読み込みが開始される度に、アプリケーション固有の何らかの初期化処理を行いたい場合を想定して 用意されています。そのような事情が無い場合は何も行う必要はありません。

        当メソッドで例外をスローすると、後の処理で呼ばれる検査メソッドは一切呼ばれず、スローされた例外を内包した BmsExceptionがスローされます。

        定義:
        startLoad インタフェース内 BmsLoadHandler
        パラメータ:
        spec - BMSローダーの設定
      • testMeta

        public BmsLoadHandler.TestResult testMeta​(BmsMeta meta,
                                                  int index,
                                                  Object value)
        1個のメタ情報を解析した時に呼び出されます。

        当メソッドが呼び出される契機は、BMS仕様に定義のあるメタ情報の解析が正常に行われた後です。デフォルトの動作では、 BMS仕様に準拠したメタ情報は全てBMSコンテンツ内に記録されます。アプリケーションが個々のメタ情報に対して固有の検査を行う必要が ある場合は当メソッドで検査処理を実装してください。

        解析されたメタ情報の検査結果は戻り値でBMSローダに報告します。

        BMS仕様に無いメタ情報を検出しても当メソッドは呼び出されず、直接BmsLoadHandler.parseError(com.lmt.lib.bms.BmsLoadError)が呼び出されます。

        当メソッドで例外をスローした場合、当該例外を内包したBmsExceptionがスローされます。

        定義:
        testMeta インタフェース内 BmsLoadHandler
        パラメータ:
        meta - メタ情報
        index - インデックス
        value - 解析後の値。データ型は当該メタ情報のデータ型に依存します。
        戻り値:
        BmsLoadHandler.TestResult参照
        関連項目:
        BmsMeta, BmsType, BmsLoadHandler.TestResult
      • testChannel

        public BmsLoadHandler.TestResult testChannel​(BmsChannel channel,
                                                     int index,
                                                     int measure,
                                                     Object value)
        1個のチャンネルデータを解析した時に呼び出されます。

        当メソッドが呼び出される契機は、BMS仕様に定義のあるチャンネルが正常に解析された後です。デフォルトの動作では BMS仕様に準拠したチャンネルデータは全てBMSコンテンツ内に記録されます。アプリケーションが個々のチャンネルデータに対して 固有の検査を行う必要がある場合は当メソッドで検査処理を実装してください。

        解析されたチャンネルデータの検査結果は戻り値でBMSローダに報告します。

        BMS仕様に無いチャンネルを検出しても当メソッドは呼び出されず、直接BmsLoadHandler.parseError(com.lmt.lib.bms.BmsLoadError)が呼び出されます。

        当メソッドで例外をスローした場合、当該例外を内包したBmsExceptionがスローされます。

        定義:
        testChannel インタフェース内 BmsLoadHandler
        パラメータ:
        channel - チャンネル
        index - チャンネルインデックス
        measure - 小節番号
        value - チャンネルの値。データ型は当該チャンネルのデータ型に依存します。
        戻り値:
        BmsLoadHandler.TestResult参照
        関連項目:
        BmsChannel, BmsType, BmsLoadHandler.TestResult
      • testContent

        public BmsLoadHandler.TestResult testContent​(BmsContent content)
        BMSコンテンツの読み込みが完了した時に呼び出されます。

        BmsLoaderのBMSコンテンツ読み込みメソッドで指定した入力ソースからのBMSコンテンツ読み込みの全工程が完了した後、 最後に当メソッドが呼び出されます。当メソッドの目的は読み込まれたBMSコンテンツの最終チェックを行うことにあります。 例えば、BMSコンテンツ内に特定のメタ情報やチャンネルが定義されているかをチェックしたり、読み込み工程における状態の最終値が 期待する値であるかをチェックしたりなどです。

        読み込みの全工程が完了する前に検査失敗や何らかの読み込みエラーが発生し、読み込み処理が停止した場合には 当メソッドは実行されません。1回の読み込み処理毎に必ず当メソッドが実行されるわけではないことに注意してください。

        当メソッドの引数で渡されるBMSコンテンツは編集しても構いません。ただし、当メソッドを抜ける前に必ず BmsContent.endEdit()を実行して編集モードを完了させてください。編集モードのまま処理を終了すると BMSコンテンツの読み込み処理失敗と判定されてしまいます。

        当メソッドから返す検査結果にBmsLoadHandler.TestResult.RESULT_FAILを設定するとBMSコンテンツ読み込みは失敗します。 それ以外の検査結果は全て読み込み成功と判定されます。

        当メソッドで例外をスローした場合、当該例外を内包したBmsExceptionがスローされます。

        当メソッドの既定の動作ではBmsLoadHandler.TestResult.OKを返します。

        定義:
        testContent インタフェース内 BmsLoadHandler
        パラメータ:
        content - 読み込みの完了したBMSコンテンツ
        戻り値:
        検査結果