クラス BmsSpecBuilder
- Object
-
- BmsSpecBuilder
-
public final class BmsSpecBuilder extends Object
BMS仕様を構築するための機能を提供します。BMS仕様を表現する
BmsSpec
オブジェクトを生成するためのビルダークラスです。BmsSpec
オブジェクトは 当クラスを通してのみ生成することができます。それ以外の方法で生成する手段はありません。ビルダークラスに設定する情報は以下を参照してください。
- メタ情報を登録する:
addMeta(com.lmt.lib.bms.BmsMeta)
- チャンネルを登録する:
addChannel(com.lmt.lib.bms.BmsChannel)
- 小節長変更チャンネルを設定する:
setLengthChannel(java.lang.Integer)
- BPM変更チャンネルを設定する:
setBpmChannel(java.lang.Integer...)
- 譜面停止チャンネルを設定する:
setStopChannel(java.lang.Integer...)
ビルダーに全ての設定情報を投入した後、
create()
を呼び出すことでBMS仕様を生成することができます。 この時、設定内容の整合性チェックが行われ、問題が無ければ生成されたBmsSpec
オブジェクトが返されます。 整合性チェックの内容についてはcreate()
を参照してください。一度BMS仕様の生成に使用したビルダーオブジェクトは使用できなくなります。複数のBMS仕様を生成したい場合は ビルダーオブジェクトのインスタンスを生成し直し、そのインスタンスを使用してください。
- 関連項目:
BmsMeta
,BmsChannel
,BmsSpec
- メタ情報を登録する:
-
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 BmsSpecBuilder()
BMS仕様ビルダーオブジェクトを構築します。
-
メソッドの概要
すべてのメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 BmsSpecBuilder
addChannel(BmsChannel channel)
BMS仕様にチャンネルを登録します。BmsSpecBuilder
addMeta(BmsMeta meta)
BMS仕様にメタ情報を登録します。boolean
containsChannel(int number)
指定されたチャンネルが登録されているかどうかを返します。boolean
containsMeta(String name, BmsUnit unit)
指定されたメタ情報が登録されているかどうかを返します。BmsSpec
create()
現在のビルダーへの登録内容でBMS仕様オブジェクトを生成します。BmsChannel
getChannel(int number)
登録済みのチャンネルを取得します。BmsMeta
getMeta(String name, BmsUnit unit)
登録済みのメタ情報を取得します。BmsSpecBuilder
setBaseChangerMeta(String name)
基数選択メタ情報を設定します。BmsSpecBuilder
setBpmChannel(Integer... numbers)
BPM変更チャンネルのチャンネル番号を設定します。BmsSpecBuilder
setInitialBpmMeta(String name)
初期BPMのメタ情報を設定します。BmsSpecBuilder
setLengthChannel(Integer number)
小節長変更チャンネルのチャンネル番号を設定します。BmsSpecBuilder
setStopChannel(Integer... numbers)
譜面停止チャンネルのチャンネル番号を設定します。
-
-
-
メソッドの詳細
-
addMeta
public final BmsSpecBuilder addMeta(BmsMeta meta)
BMS仕様にメタ情報を登録します。- パラメータ:
meta
- 登録するメタ情報- 戻り値:
- BMS仕様ビルダーオブジェクトのインスタンス
- 例外:
IllegalStateException
- BMS仕様生成後にこのメソッドを呼び出したNullPointerException
- metaがnullIllegalArgumentException
- メタ情報単位がSINGLE
またはMULTIPLE
の時、 同じ名前のメタ情報がSINGLE/MULTIPLEのいずれかに登録済みIllegalArgumentException
- メタ情報単位がINDEXED
の時、同じ名前のメタ情報が INDEXEDに登録済み
-
addChannel
public final BmsSpecBuilder addChannel(BmsChannel channel)
BMS仕様にチャンネルを登録します。チャンネルは「仕様チャンネル」「ユーザー定義チャンネル」の両方を登録できます。仕様チャンネルは チャンネル番号が
BmsSpec.SPEC_CHANNEL_MIN
~BmsSpec.SPEC_CHANNEL_MAX
のチャンネルを指し、 ユーザー定義チャンネルはチャンネル番号がBmsSpec.USER_CHANNEL_MIN
~BmsSpec.USER_CHANNEL_MAX
のチャンネルを指します。ユーザー定義チャンネルは、アプリケーションが独自の処理を行う際の一時的な作業領域として使用することが できるチャンネルです。このチャンネルを使用することでアプリケーションはBMSライブラリが提唱するデータ構造を 再利用することができ、独自のデータ構造を定義せずに目的の処理を実装できる可能性があります。
- パラメータ:
channel
- 登録するチャンネル- 戻り値:
- BMS仕様ビルダーオブジェクトのインスタンス
- 例外:
IllegalStateException
- BMS仕様生成後にこのメソッドを呼び出したNullPointerException
- channelがnullIllegalArgumentException
- 同じチャンネル番号のチャンネルが登録済み
-
getMeta
public final BmsMeta getMeta(String name, BmsUnit unit)
登録済みのメタ情報を取得します。- パラメータ:
name
- メタ情報の名称unit
- メタ情報の単位- 戻り値:
- メタ情報。該当するメタ情報が存在しない場合はnull。
- 例外:
IllegalStateException
- BMS仕様生成後にこのメソッドを呼び出したNullPointerException
- nameがnullNullPointerException
- 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がnullNullPointerException
- 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_MIN
~BmsSpec.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_MIN
~BmsSpec.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_MIN
~BmsSpec.BPM_MAX
の範囲外 - 譜面停止チャンネルの番号が指定されているが、当該番号のチャンネルが存在しない
- 譜面停止チャンネルの番号が重複している
- 指定された譜面停止チャンネルの番号がnull
- 指定された譜面停止チャンネルのデータ型が配列型ではない
- 指定された譜面停止チャンネルの番号が仕様チャンネルではない
- 指定された譜面停止チャンネルが同一性チェック対象になっていない
- 指定された譜面停止チャンネルに参照先メタ情報がある場合で、索引付きメタ情報に該当する名前のメタ情報がない
- 指定された譜面停止チャンネルの参照先メタ情報のデータ型が数値型ではない
- 指定された譜面停止チャンネルの参照先メタ情報が同一性チェック対象になっていない
- 指定された譜面停止チャンネルの参照先メタ情報の初期値が
BmsSpec.STOP_MIN
~BmsSpec.STOP_MAX
の範囲外
-
-