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

クラス BeMusicChartBuilder


  • public class BeMusicChartBuilder
    extends Object
    BMSコンテンツからBe Music仕様のBMS譜面オブジェクトを構築するためのビルダーです。

    当ビルダーでは、BMS譜面オブジェクトにどのような情報を含めるかを選択し、楽曲の先頭から末尾までをスキャンします。 譜面を画面に表示し、音声・アニメーションの再生までをカバーするようなBMS譜面オブジェクトを構築する場合には 当ビルダーがサポートする全ての情報を含めなければなりません。視聴覚の演出を必要としないBMS譜面オブジェクトで 良いのであれば音声・アニメーションの情報を除外した状態でBMS譜面オブジェクトを構築しても構いません。

    但し、どのような用途のBMS譜面オブジェクトであったとしても以下の情報だけは必ず含まれることになります。 これらは総じて「時間」に関連する情報となっています。

    • 小節長の明示的な指定
    • スクロール速度変化に関する情報
    • BPM変化に関する情報
    • 譜面停止に関する情報

    以下に、当ビルダーの代表的な使い方を示す簡単なサンプルコードを示します。

     private BeMusicChart buildMyChart(BmsContent targetContent) {
         // 以下はBMS譜面の分析処理に必要な最低限の情報を含めたい場合の設定です。
         BeMusicChartBuilder builder = new BeMusicChartBuilder(targetContent)
             .setSeekMeasureLine(true)  // 小節線を含む
             .setSeekVisible(true)      // 可視オブジェを含む
             .setSeekInvisible(false)   // 不可視オブジェは無視する
             .setSeekMine(true)         // 地雷オブジェを含む
             .setSeekBgm(false)         // BGMは無視する
             .setSeekBga(false)         // BGA(レイヤー、ミス画像含む)は無視する
             .setSeekText(false);       // テキストは無視する
    
         // 上記ビルダーで設定した条件でBMS譜面オブジェクトを構築します。
         BeMusicChart myChart = builder.createChart();
    
         // 構築したBMS譜面オブジェクトを返します。
         return myChart;
     }
     
    • コンストラクタの詳細

      • BeMusicChartBuilder

        public BeMusicChartBuilder​(BmsContent content)
        BMS譜面ビルダーオブジェクトを構築します。

        BMS譜面ビルダーは必ず対象となるBMSコンテンツを指定する必要があります。また、当該BMSコンテンツは BeMusicSpecで生成されたBMS仕様に基づいたコンテンツでなければなりません。そうでない場合には 当ビルダーでの動作保証外になります。

        当コンストラクタで構築したBMS譜面ビルダーはデフォルトで全ての情報をシークする設定になっています。

        パラメータ:
        content - BMSコンテンツ
        例外:
        NullPointerException - contentがnull
      • BeMusicChartBuilder

        public BeMusicChartBuilder​(BmsContent content,
                                   boolean isSeekAll)
        BMS譜面ビルダーオブジェクトを構築します。

        BMS譜面ビルダーは必ず対象となるBMSコンテンツを指定する必要があります。また、当該BMSコンテンツは BeMusicSpecで生成されたBMS仕様に基づいたコンテンツでなければなりません。そうでない場合には 当ビルダーでの動作保証外になります。

        当コンストラクタはオブジェクト構築時に全ての情報をシークするか、または最小限の情報のみシークするかを決定できます。 isSeekAll引数をtrueにすると全ての情報をシークし、falseにすると最小限の情報のみシークします。

        パラメータ:
        content - BMSコンテンツ
        isSeekAll - 全情報シーク有無
        例外:
        NullPointerException - contentがnull
    • メソッドの詳細

      • setSeekMeasureLine

        public final BeMusicChartBuilder setSeekMeasureLine​(boolean seek)
        小節線を楽曲位置情報に含めるかどうかを設定します。

        小節線は、ある小節の刻み位置0であることを示します。通常、どの楽曲位置でも小節データ、ノートが全く存在しない 場合には楽曲位置情報は生成対象になりませんが、小節線を含めることで小節毎に必ず楽曲位置情報が含まれることを 保証することができます。アプリケーションの実装都合に合わせて小節線有無を決定してください。

        パラメータ:
        seek - 小節線有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setSeekVisible

        public final BeMusicChartBuilder setSeekVisible​(boolean seek)
        可視オブジェを楽曲位置情報に含めるかどうかを設定します。
        パラメータ:
        seek - 可視オブジェ有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setSeekInvisible

        public final BeMusicChartBuilder setSeekInvisible​(boolean seek)
        不可視オブジェを楽曲位置情報に含めるかどうかを設定します。
        パラメータ:
        seek - 不可視オブジェ有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setSeekMine

        public final BeMusicChartBuilder setSeekMine​(boolean seek)
        地雷オブジェを楽曲位置情報に含めるかどうかを設定します。
        パラメータ:
        seek - 地雷オブジェ有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setSeekBgm

        public final BeMusicChartBuilder setSeekBgm​(boolean seek)
        BGMを楽曲位置情報に含めるかどうかを設定します。
        パラメータ:
        seek - BGM有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setSeekBga

        public final BeMusicChartBuilder setSeekBga​(boolean seek)
        BGAを楽曲位置情報に含めるかどうかを設定します。
        パラメータ:
        seek - BGA有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setSeekText

        public final BeMusicChartBuilder setSeekText​(boolean seek)
        テキストを楽曲位置情報に含めるかどうかを設定します。
        パラメータ:
        seek - テキスト有無
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
      • setPointCreator

        public final BeMusicChartBuilder setPointCreator​(Supplier<BeMusicPoint> creator)
        楽曲位置情報生成関数を設定します。

        当メソッドで設定された関数は、BMS譜面を生成する過程で1個の楽曲位置情報オブジェクトを構築しようとする度に 1回実行されます。関数は、実行される度に新しい楽曲位置情報オブジェクトを生成して返してください。 生成済みの楽曲位置情報オブジェクトを返してはいけません。それを行った場合BMS譜面は正しく構築されず、 一切の動作保証外となります。また、nullを返すとBMS譜面構築時に例外がスローされます。

        デフォルトではBeMusicPointを生成する関数が設定されています。

        パラメータ:
        creator - 楽曲位置情報生成関数
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
        NullPointerException - creatorがnull
      • setChartCreator

        public final BeMusicChartBuilder setChartCreator​(Supplier<BeMusicChart> creator)
        BMS譜面生成関数を設定します。

        当メソッドで設定された関数は、createChart()でBMS譜面を生成しようとする際に BeMusicChart.create(List, Supplier)に渡されます。その時に指定されたBMS譜面生成関数を1度だけ実行し、 BMS譜面オブジェクトを構築します。指定した関数がnullを返す動作にならないよう注意してください。

        createChart()を使用しない場合、当メソッドで指定した関数が参照されることはありません。

        デフォルトではBeMusicChartを生成する関数が設定されています。

        パラメータ:
        creator - BMS譜面生成関数
        戻り値:
        このBMS譜面ビルダーオブジェクトのインスタンス
        例外:
        IllegalStateException - BMS譜面生成中
        NullPointerException - creatorがnull
      • getContent

        public final BmsContent getContent()
        処理対象のBMSコンテンツを取得します。
        戻り値:
        処理対象のBMSコンテンツ
      • first

        public final BeMusicPoint first()
        このBMS譜面ビルダーオブジェクトに指定された条件でBMS譜面構築を開始し、最初に楽曲位置情報を返します。

        BMS譜面構築を開始すると、楽曲位置情報の生成が完了するまでビルダーの条件を変更できなくなります。

        当メソッドはビルダーの状態に関わらずいつでも実行できます。

        指定の条件に該当する楽曲位置が全く存在しない場合、当メソッドはnullを返します。

        当メソッドとnext()メソッドは低レベルAPIです。これらのメソッドを用いてBMS譜面を構築することは 推奨されません。代わりにcreateList()またはcreateChart()を使用してください。

        戻り値:
        楽曲位置情報
        例外:
        IllegalStateException - 処理対象BMSコンテンツが参照モードではない
      • next

        public final BeMusicPoint next()
        このBMS譜面ビルダーオブジェクトに指定された条件で次の楽曲位置を検索し、該当する楽曲位置の楽曲位置情報を返します。

        当メソッドを呼び出す前にはfirst()が実行されている必要があります。その後、当メソッドが最後の楽曲位置まで 検索し終え、nullを返すまで繰り返し当メソッドを実行してください。nullを返すと当ビルダーのBMS譜面生成中状態が解除され、 再びSetterを実行可能になります。

        当メソッドとfirst()メソッドは低レベルAPIです。これらのメソッドを用いてBMS譜面を構築することは 推奨されません。代わりにcreateList()またはcreateChart()を使用してください。

        戻り値:
        楽曲位置情報
        例外:
        IllegalStateException - BMS譜面生成中ではない(first()が実行されていない)
        IllegalStateException - 処理対象BMSコンテンツが参照モードではない
      • createList

        public final List<BeMusicPoint> createList()
        このBMS譜面ビルダーオブジェクトに指定された条件で譜面を最初から最後まで検索し、楽曲位置情報リストを構築します。

        当メソッドはfirst()next()を使用して以下のサンプルと同様の処理を行います。

         List<BeMusicPoint> list = new ArrayList<>();
         for (BeMusicPoint point = first(); point != null; point = next()) {
             list.add(point);
         }
         
        戻り値:
        楽曲位置情報リスト
      • createChart

        public final BeMusicChart createChart()
        このBMS譜面ビルダーオブジェクトに指定された条件でBMS譜面オブジェクトを構築します。

        当メソッドはcreateList()で生成した楽曲位置情報リストをBeMusicChart.create(List, Supplier)に渡し、 BeMusicChartオブジェクトを構築する手順を簡略化するヘルパーメソッドです。

        戻り値:
        BMS譜面オブジェクト
      • createChart

        public static BeMusicChart createChart​(BmsContent content)
        指定したBMSコンテンツからBMS譜面を生成します。

        当メソッドを使用すると以下の記述を簡略化できます。

        new BeMusicChartBuilder(content).createChart();
        パラメータ:
        content - BMSコンテンツ
        戻り値:
        BMS譜面オブジェクト
        例外:
        NullPointerException - contentがnull