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

クラス BmsSpecBuilder


  • public final class BmsSpecBuilder
    extends Object
    BMS仕様を構築するための機能を提供します。

    BMS仕様を表現するBmsSpecオブジェクトを生成するためのビルダークラスです。BmsSpecオブジェクトは 当クラスを通してのみ生成することができます。それ以外の方法で生成する手段はありません。

    ビルダークラスに設定する情報は以下を参照してください。

    ビルダーに全ての設定情報を投入した後、create()を呼び出すことでBMS仕様を生成することができます。 この時、設定内容の整合性チェックが行われ、問題が無ければ生成されたBmsSpecオブジェクトが返されます。 整合性チェックの内容についてはcreate()を参照してください。

    一度BMS仕様の生成に使用したビルダーオブジェクトは使用できなくなります。複数のBMS仕様を生成したい場合は ビルダーオブジェクトのインスタンスを生成し直し、そのインスタンスを使用してください。

    関連項目:
    BmsMeta, BmsChannel, BmsSpec
    • コンストラクタの詳細

      • BmsSpecBuilder

        public BmsSpecBuilder()
        BMS仕様ビルダーオブジェクトを構築します。
    • メソッドの詳細

      • addChannel

        public final BmsSpecBuilder addChannel​(BmsChannel channel)
        BMS仕様にチャンネルを登録します。

        チャンネルは「仕様チャンネル」「ユーザー定義チャンネル」の両方を登録できます。仕様チャンネルは チャンネル番号がBmsSpec.SPEC_CHANNEL_MINBmsSpec.SPEC_CHANNEL_MAXのチャンネルを指し、 ユーザー定義チャンネルはチャンネル番号がBmsSpec.USER_CHANNEL_MINBmsSpec.USER_CHANNEL_MAX のチャンネルを指します。

        ユーザー定義チャンネルは、アプリケーションが独自の処理を行う際の一時的な作業領域として使用することが できるチャンネルです。このチャンネルを使用することでアプリケーションはBMSライブラリが提唱するデータ構造を 再利用することができ、独自のデータ構造を定義せずに目的の処理を実装できる可能性があります。

        パラメータ:
        channel - 登録するチャンネル
        戻り値:
        BMS仕様ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
        NullPointerException - channelがnull
        IllegalArgumentException - 同じチャンネル番号のチャンネルが登録済み
      • getMeta

        public final BmsMeta getMeta​(String name,
                                     BmsUnit unit)
        登録済みのメタ情報を取得します。
        パラメータ:
        name - メタ情報の名称
        unit - メタ情報の単位
        戻り値:
        メタ情報。該当するメタ情報が存在しない場合はnull。
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
        NullPointerException - nameがnull
        NullPointerException - unitがnull
      • getChannel

        public final BmsChannel getChannel​(int number)
        登録済みのチャンネルを取得します。
        パラメータ:
        number - チャンネル番号
        戻り値:
        チャンネル。該当するチャンネルが存在しない場合はnull。
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • containsMeta

        public final boolean containsMeta​(String name,
                                          BmsUnit unit)
        指定されたメタ情報が登録されているかどうかを返します。
        パラメータ:
        name - メタ情報の名称
        unit - メタ情報の単位
        戻り値:
        該当するメタ情報が登録済みの場合はtrue
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
        NullPointerException - nameがnull
        NullPointerException - unitがnull
      • containsChannel

        public final boolean containsChannel​(int number)
        指定されたチャンネルが登録されているかどうかを返します。
        パラメータ:
        number - チャンネル番号
        戻り値:
        該当するチャンネルが登録済みの場合はtrue
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • setInitialBpmMeta

        public final BmsSpecBuilder setInitialBpmMeta​(String name)
        初期BPMのメタ情報を設定します。

        初期BPMは楽曲の演奏開始時のBPMを表します。BMS仕様は、メタ情報として必ず初期BPMを設定しなければなりません。

        初期BPMのメタ情報は、以下の要件を満たしている必要があります。

         
        要素
        構成単位単体
        データ型FLOAT
        初期値BmsSpec.BPM_MINBmsSpec.BPM_MAX
        同一性チェックON
        パラメータ:
        name - 初期BPMのメタ情報名称
        戻り値:
        BMS仕様ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • setBaseChangerMeta

        public final BmsSpecBuilder setBaseChangerMeta​(String name)
        基数選択メタ情報を設定します。

        基数選択メタ情報はBMSコンテンツを構成するにあたり、いくつかの情報の数値で取り扱う基数を選択します。 具体的には、以下の情報が設定した基数でBMSコンテンツの読み込み、書き込みが行われるようになります。

        • 索引付きメタ情報のインデックス値
        • データ型が BmsType.BASE のメタ情報、およびチャンネルの小節データの数値
        • データ型が BmsType.ARRAY のメタ情報、およびチャンネルのノートの配列要素

        基数選択メタ情報は、以下の要件を満たしている必要があります。

         
        要素
        構成単位単体
        データ型INTEGER
        初期値16, 36, 62 のいずれか
        同一性チェックON

        基数選択メタ情報はオプション項目です。デフォルトでは基数選択メタ情報は設定されず、 前述した情報の基数はBmsSpec.BASE_DEFAULTとして動作します。 基数選択メタ情報を未指定にする場合は名称にnullを指定してください。 ※デフォルトでnullに設定されています

        パラメータ:
        name - 基数選択メタ情報のメタ情報名称
        戻り値:
        BMS仕様ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • setLengthChannel

        public final BmsSpecBuilder setLengthChannel​(Integer number)
        小節長変更チャンネルのチャンネル番号を設定します。
        パラメータ:
        number - チャンネル番号。nullを指定すると小節長変更チャンネルのないBMS仕様になります。
        戻り値:
        BMS仕様ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • setBpmChannel

        public final BmsSpecBuilder setBpmChannel​(Integer... numbers)
        BPM変更チャンネルのチャンネル番号を設定します。

        チャンネル番号は複数指定できます。チャンネル番号が0個またはnullを1個指定した場合、 BPM変更チャンネルのないBMS仕様になります。複数個指定する場合にはnullを含めないでください。 nullがあるとBMS仕様生成時に例外がスローされます。

        デフォルトではBPM変更のないBMS仕様になります。そのようなBMS仕様を希望する場合は 当メソッドを使用しないことをお勧めします。

        パラメータ:
        numbers - チャンネル番号
        戻り値:
        BMS仕様ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • setStopChannel

        public final BmsSpecBuilder setStopChannel​(Integer... numbers)
        譜面停止チャンネルのチャンネル番号を設定します。

        チャンネル番号は複数指定できます。チャンネル番号が0個またはnullを1個指定した場合、 譜面停止チャンネルのないBMS仕様になります。複数個指定する場合にはnullを含めないでください。 nullがあるとBMS仕様生成時に例外がスローされます。

        デフォルトではBPM変更のないBMS仕様になります。そのようなBMS仕様を希望する場合は 当メソッドを使用しないことをお勧めします。

        パラメータ:
        numbers - チャンネル番号
        戻り値:
        BMS仕様ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
      • create

        public final BmsSpec create()
        現在のビルダーへの登録内容でBMS仕様オブジェクトを生成します。

        このメソッドで一度BMS仕様オブジェクトを生成したビルダーオブジェクトはオブジェクト生成済み状態となり、 新しいBMS仕様を生成することができなくなります。新しく別のBMS仕様オブジェクトを生成したい場合は再度ビルダーを 生成し、新しいインスタンスでBMS仕様を構築してください。

        ビルダーではBMS仕様を生成するにあたり、各種登録内容の一連の仕様不整合チェックを行います。不整合があると 判定された場合はIllegalStateExceptionをスローします。どのような不整合チェックがあるかはスローする例外の 説明を参照してください。

        BMS仕様には、少なくとも1個の「配列型で同一性チェック対象のチャンネル」が存在しなければなりません。 BMSは元々音楽ゲーム向けのファイルフォーマットであり、プレイヤーがプレー可能なチャンネルを定義するには 先述の条件を満たすチャンネルが不可欠だからです。BMSライブラリでは、そのチャンネルが1個もないBMS仕様は 不適切であると位置付けているため、生成を許可していません。

        戻り値:
        BmsSpecオブジェクト
        例外:
        IllegalStateException - BMS仕様生成後にこのメソッドを呼び出した
        IllegalStateException - ビルダーへの登録内容に以下の整合性違反があった場合
        • チャンネルが1件も存在しない
        • 同一性チェック対象の配列型仕様チャンネルが1件も存在しない
        • ユーザーチャンネルで同一性チェックをONにした
        • 配列型チャンネルで参照先メタ情報の指定がある場合に、索引付きメタ情報に該当する名前のメタ情報がない
        •  (未使用) 配列型で参照先メタ情報指定があるチャンネルで、該当する参照先メタ情報が数値型ではない
        • 初期BPMメタ情報の名称がnull
        • 初期BPMメタ情報の名称に該当するメタ情報が単体メタ情報に存在しない
        • 初期BPMメタ情報の名称に該当するメタ情報のデータ型が数値型ではない
        • 初期BPMメタ情報の名称に該当するメタ情報の初期値がBmsSpec.BPM_MINBmsSpec.BPM_MAXの範囲外
        • 初期BPMメタ情報の名称に該当するメタ情報の同一性チェックがOFF
        • 基数選択メタ情報の名称に該当するメタ情報が単体メタ情報に存在しない
        • 基数選択メタ情報の名称に該当するメタ情報のデータ型がBmsType.INTEGERではない
        • 基数選択メタ情報の名称に該当するメタ情報の初期値が16, 36, 62のいずれでもない
        • 基数選択メタ情報の名称に該当するメタ情報の同一性チェックがOFF
        • 小節長変更チャンネルの番号が指定されているが、当該番号のチャンネルが存在しない
        • 指定された小節長変更チャンネルの番号が仕様チャンネルではない
        • 指定された小節長変更チャンネルのデータ型がBmsType.FLOATではない
        • 指定された小節長変更チャンネルが同一性チェック対象になっていない
        • 指定された小節長変更チャンネルの初期値がBmsSpec.LENGTH_MIN未満またはBmsSpec.LENGTH_MAX超過
        • BPM変更チャンネルの番号が指定されているが、当該番号のチャンネルが存在しない
        • BPM変更チャンネルの番号が重複している
        • 指定されたBPM変更チャンネルの番号がnull
        • 指定されたBPM変更チャンネルの番号が仕様チャンネルではない
        • 指定されたBPM変更チャンネルのデータ型が配列型ではない
        • 指定されたBPM変更チャンネルが同一性チェック対象になっていない
        • 指定されたBPM変更チャンネルに参照先メタ情報がある場合で、索引付きメタ情報に該当する名前のメタ情報がない
        • 指定されたBPM変更チャンネルの参照先メタ情報のデータ型が数値型ではない
        • 指定されたBPM変更チャンネルの参照先メタ情報が同一性チェック対象になっていない
        • 指定されたBPM変更チャンネルの参照先メタ情報の初期値がBmsSpec.BPM_MINBmsSpec.BPM_MAXの範囲外
        • 譜面停止チャンネルの番号が指定されているが、当該番号のチャンネルが存在しない
        • 譜面停止チャンネルの番号が重複している
        • 指定された譜面停止チャンネルの番号がnull
        • 指定された譜面停止チャンネルのデータ型が配列型ではない
        • 指定された譜面停止チャンネルの番号が仕様チャンネルではない
        • 指定された譜面停止チャンネルが同一性チェック対象になっていない
        • 指定された譜面停止チャンネルに参照先メタ情報がある場合で、索引付きメタ情報に該当する名前のメタ情報がない
        • 指定された譜面停止チャンネルの参照先メタ情報のデータ型が数値型ではない
        • 指定された譜面停止チャンネルの参照先メタ情報が同一性チェック対象になっていない
        • 指定された譜面停止チャンネルの参照先メタ情報の初期値がBmsSpec.STOP_MINBmsSpec.STOP_MAXの範囲外