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

クラス BeMusicChart

  • すべての実装されたインタフェース:
    Iterable<BeMusicPoint>

    public class BeMusicChart
    extends Object
    implements Iterable<BeMusicPoint>
    BMS譜面全体とその統計情報を表します。

    BMS譜面全体とは、楽曲位置情報であるBeMusicPointの集合(リスト)を示します。 当クラスが保有する楽曲位置情報は時間軸で昇順ソートされています。アプリケーションは当クラスが持つイテレータや 楽曲位置情報を取得するためのGetter、およびストリームを用いて楽曲位置情報を参照することができます。

    楽曲位置情報の集合からは様々な分析を行うことができ、代表的な統計情報の収集は当クラスの構築時に行われます。 統計情報にはGetterからアクセスすることが可能で、アプリケーションの要求に応じてそれらの情報を活用することが 可能になっています。より高度な統計情報を集計したい場合はBeMusicStatisticsBuilderを参照してください。

    また、小節番号・刻み位置や時間を用いて時間軸への高速なアクセスを行ったり、条件を指定して楽曲位置情報を 検索する等の機能を提供し、Be-Musicに関するアプリケーション開発のアシストを行います。

    当クラスが持つ情報や機能では足りない場合には、当クラスを拡張し、処理や機能を追加してください。そのための 処理実装はonCreate()で行うことを想定しています。

    導入されたバージョン:
    0.0.1
    • コンストラクタの詳細

      • BeMusicChart

        public BeMusicChart()
        BMS譜面オブジェクトを構築します。

        当クラスはアプリケーションからこのコンストラクタ単体でオブジェクトを生成し、独自に使用することを 想定していません。オブジェクトの生成はcreate(List, Supplier)のオブジェクトクリエータで インスタンス生成されることを意図しています。

    • メソッドの詳細

      • create

        public static BeMusicChart create​(List<BeMusicPoint> list)
        指定した楽曲位置情報リストを用いてBMS譜面オブジェクトを構築します。

        当メソッドではBeMusicChartクラスのインスタンスを生成してオブジェクトを構築します。 それ以外の動作仕様についてはcreate(List, Supplier)を参照してください。

        パラメータ:
        list - 楽曲位置情報リスト
        戻り値:
        BMS譜面オブジェクト
        関連項目:
        create(List, Supplier)
      • create

        public static <S extends BeMusicChart> S create​(List<BeMusicPoint> list,
                                                        Supplier<S> creator)
        指定した楽曲位置情報リストを用いてBMS譜面オブジェクトを構築します。

        BMSコンテンツから楽曲位置情報を抽出したリストから、BMS譜面オブジェクトクリエータで生成したオブジェクトを 生成しデータを構築します。楽曲位置情報の抽出についてはBeMusicChartBuilderを参照してください。

        通常、当メソッドは当クラスの拡張を行わない限り使用されることはありません。アプリケーションによって 当クラスの拡張を行い、情報・機能を追加する場合にのみ参照することを推奨します。ライブラリが提供する BMS譜面オブジェクトを用いる場合はcreate(List)またはBeMusicChartBuilder.createChart()を 使用してBMS譜面オブジェクトを生成してください。

        楽曲位置情報リストは小節番号・刻み位置と時間が昇順でソートされていなければなりません。 リストが前述のような状態になっていない場合はBMS譜面オブジェクトは生成されず例外がスローされます。

        型パラメータ:
        S - BMS譜面オブジェクト(拡張したものを含む)
        パラメータ:
        list - 楽曲位置情報リスト
        creator - BMS譜面オブジェクトクリエータ
        戻り値:
        BMS譜面オブジェクト
        例外:
        NullPointerException - listがnull
        NullPointerException - creatorがnull
        NullPointerException - creatorがnullを返した
        IllegalArgumentException - 楽曲位置情報リストで小節番号・刻み位置が後退した
        IllegalArgumentException - 楽曲位置情報リストで時間が後退した
        関連項目:
        BeMusicChartBuilder, create(List)
      • getPoint

        public BeMusicPoint getPoint​(int index)
        楽曲位置情報を取得します。
        パラメータ:
        index - インデックス
        戻り値:
        楽曲位置情報
        例外:
        IndexOutOfBoundsException - indexがマイナス値またはgetPointCount()以上
      • getPoints

        public List<BeMusicPoint> getPoints()
        楽曲位置情報リストのコピーを取得します。

        当メソッドはBMS譜面オブジェクトが持つ楽曲位置情報リストの完全なコピーを返します。従って、 頻繁に実行するとアプリケーションのパフォーマンスが大幅に低下する可能性がありますので注意が必要です。

        戻り値:
        楽曲位置情報リスト
      • getPointCount

        public int getPointCount()
        楽曲位置情報の数を取得します。
        戻り値:
        楽曲位置情報の数
      • getNoteCount

        public int getNoteCount()
        総ノート数を取得します。
        戻り値:
        総ノート数
      • getNoteCount

        public int getNoteCount​(BeMusicLane lane)
        指定レーンの総ノート数を取得します。
        パラメータ:
        lane - レーン
        戻り値:
        指定レーンの総ノート数
        例外:
        NullPointerException - laneがnull
        導入されたバージョン:
        0.9.0
      • getNoteCount

        public int getNoteCount​(BeMusicDevice device)
        指定入力デバイスの総ノート数を取得します。
        パラメータ:
        device - 入力デバイス
        戻り値:
        指定入力デバイスの総ノート数
        例外:
        NullPointerException - deviceがnull
      • getLongNoteCount

        public int getLongNoteCount()
        ロングノート数を取得します。
        戻り値:
        ロングノート数
      • getLongNoteCount

        public int getLongNoteCount​(BeMusicLane lane)
        指定レーンのロングノート数を取得します。
        パラメータ:
        lane - レーン
        戻り値:
        指定レーンのロングノート数
        例外:
        NullPointerException - laneがnull
        導入されたバージョン:
        0.9.0
      • getLongNoteCount

        public int getLongNoteCount​(BeMusicDevice device)
        指定入力デバイスのロングノート数を取得します。
        パラメータ:
        device - 入力デバイス
        戻り値:
        指定入力デバイスのロングノート数
        例外:
        NullPointerException - deviceがnull
      • getMineCount

        public int getMineCount()
        地雷オブジェの数を取得します。
        戻り値:
        地雷オブジェの数
      • getMineCount

        public int getMineCount​(BeMusicLane lane)
        指定レーンの地雷オブジェ数を取得します。
        パラメータ:
        lane - レーン
        戻り値:
        指定レーンの地雷オブジェ数
        例外:
        NullPointerException - laneがnull
        導入されたバージョン:
        0.9.0
      • getMineCount

        public int getMineCount​(BeMusicDevice device)
        指定入力デバイスの地雷オブジェ数を取得します。
        パラメータ:
        device - 入力デバイス
        戻り値:
        指定入力デバイスの地雷オブジェ数
        例外:
        NullPointerException - deviceがnull
      • getPlayTime

        public double getPlayTime()
        この譜面の演奏時間を秒単位で取得します。

        当メソッドが返す演奏時間は譜面の先頭から最後の操作可能ノートに到達するまでの時間を表します。 それ以降のBGM/BGA等の有無や音声の再生状態は演奏時間には含まれません。

        操作可能ノートのない譜面、または譜面が空の場合は演奏時間は0になります。

        使用するサウンドの再生時間を考慮した演奏時間を計算したい場合は computeActualPlayTime(IntToDoubleFunction) を使用してください。

        戻り値:
        この譜面の演奏時間
        関連項目:
        computeActualPlayTime(IntToDoubleFunction)
      • getChangeScrollCount

        public int getChangeScrollCount()
        スクロール速度の変化回数を取得します。
        戻り値:
        スクロール速度の変化回数
        導入されたバージョン:
        0.6.0
      • getChangeBpmCount

        public int getChangeBpmCount()
        BPM変化回数を取得します。
        戻り値:
        BPM変化回数
      • getStopCount

        public int getStopCount()
        譜面停止回数を取得します。
        戻り値:
        譜面停止回数
      • getRecommendTotal1

        public double getRecommendTotal1()
        推奨TOTAL値を取得します。

        この値は総ノート数をもとに、以下の計算式で算出されたものです。

         #TOTAL = 7.605 * N / (0.01 * N + 6.5)
         ※N = 総ノート数
        戻り値:
        推奨TOTAL値
        導入されたバージョン:
        0.3.0
      • getRecommendTotal2

        public double getRecommendTotal2()
        推奨TOTAL値を取得します。

        この値は総ノート数をもとに、以下の計算式で算出されたものです。

         N < 400 : #TOTAL = 200 + N / 5
         N < 600 : #TOTAL = 280 + (N - 400) / 2.5
         N >= 600: #TOTAL = 360 + (N - 600) / 5
         ※N = 総ノート数
        戻り値:
        推奨TOTAL値
        導入されたバージョン:
        0.3.0
      • getScratchMode

        public BeMusicScratchMode getScratchMode()
        スクラッチモードを取得します。
        戻り値:
        スクラッチモード
        導入されたバージョン:
        0.7.0
      • hasLongNote

        public boolean hasLongNote()
        ロングノート有無を取得します。
        戻り値:
        ロングノート有無
      • hasLongNote

        public boolean hasLongNote​(BeMusicLane lane)
        指定レーンのロングノート有無を取得します。
        パラメータ:
        lane - レーン
        戻り値:
        指定レーンにロングノートが含まれていればtrue
        例外:
        NullPointerException - laneがnull
        導入されたバージョン:
        0.9.0
      • hasLongNote

        public boolean hasLongNote​(BeMusicDevice device)
        指定入力デバイスのロングノート有無を取得します。
        パラメータ:
        device - 入力デバイス
        戻り値:
        指定入力デバイスにロングノートが含まれていればtrue
        例外:
        NullPointerException - deviceがnull
        導入されたバージョン:
        0.9.0
      • hasMine

        public boolean hasMine()
        地雷オブジェ有無を取得します。
        戻り値:
        地雷オブジェ有無
      • hasMine

        public boolean hasMine​(BeMusicLane lane)
        指定レーンの地雷オブジェ有無を取得します。
        パラメータ:
        lane - レーン
        戻り値:
        指定レーンに地雷オブジェが含まれていればtrue
        例外:
        NullPointerException - laneがnull
        導入されたバージョン:
        0.9.0
      • hasMine

        public boolean hasMine​(BeMusicDevice device)
        指定入力デバイスの地雷オブジェ有無を取得します。
        パラメータ:
        device - 入力デバイス
        戻り値:
        指定入力デバイスに地雷オブジェが含まれていればtrue
        例外:
        NullPointerException - deviceがnull
        導入されたバージョン:
        0.9.0
      • hasBgm

        public boolean hasBgm()
        BGM有無を取得します。
        戻り値:
        BGM有無
      • hasBga

        public boolean hasBga()
        BGA有無を取得します。
        戻り値:
        BGA有無
      • hasChangeScroll

        public boolean hasChangeScroll()
        スクロール速度の変化有無を取得します。
        戻り値:
        スクロール速度の変化有無
        導入されたバージョン:
        0.6.0
      • hasChangeBpm

        public boolean hasChangeBpm()
        BPM変化有無を取得します。
        戻り値:
        BPM変化有無
      • hasChangeSpeed

        public boolean hasChangeSpeed()
        速度変更有無を取得します。

        当メソッドは、譜面内にBPMの途中変更、またはスクロール速度変更があった場合にtrueを返します。

        戻り値:
        速度変更有無
        導入されたバージョン:
        0.6.0
        関連項目:
        hasChangeBpm(), hasChangeScroll()
      • hasStop

        public boolean hasStop()
        譜面停止有無を取得します。
        戻り値:
        譜面停止有無
      • hasGimmick

        public boolean hasGimmick()
        ギミック有無を取得します。

        当メソッドは、譜面内にBPMの途中変更、スクロール速度変更、譜面停止、地雷オブジェのいずれかが 存在した場合にtrueを返します。

        戻り値:
        ギミック有無
        導入されたバージョン:
        0.6.0
        関連項目:
        hasChangeSpeed(), hasChangeBpm(), hasChangeScroll(), hasStop(), hasMine()
      • points

        public Stream<BeMusicPoint> points()
        楽曲位置情報リストを走査するストリームを返します。

        楽曲位置情報リストは、楽曲位置の時間で昇順ソートされていることを保証します。

        戻り値:
        楽曲位置情報リストを走査するストリーム
        導入されたバージョン:
        0.1.0
      • points

        public Stream<BeMusicPoint> points​(int start,
                                           int end)
        指定範囲の楽曲位置情報リストを走査するストリームを返します。

        引数に指定可能な値は 0~getPointCount()-1 の範囲です。

        パラメータ:
        start - 走査を開始する楽曲位置情報リストのインデックス(この値を含む)
        end - 走査を終了する楽曲位置情報リストのインデックス(この値を含まない)
        戻り値:
        楽曲位置情報リストを走査するストリーム
        例外:
        IndexOutOfBoundsException - startが 0~getPointCount()-1 の範囲外
        IndexOutOfBoundsException - endが 0~getPointCount() の範囲外
        導入されたバージョン:
        0.8.0
      • indexOf

        public int indexOf​(Predicate<BeMusicPoint> tester)
        楽曲位置情報リスト全体から指定条件に該当する最初の楽曲位置情報のインデックスを返します。

        当メソッドはindexOf(0, getPointCount(), tester)を実行します。

        パラメータ:
        tester - 条件のテスター
        戻り値:
        指定条件に最初に該当した楽曲位置情報のインデックス。条件に該当する楽曲位置情報がない場合-1。
        関連項目:
        indexOf(int, int, Predicate)
      • indexOf

        public int indexOf​(int beginIndex,
                           int endIndex,
                           Predicate<BeMusicPoint> tester)
        楽曲位置情報リストの指定範囲から指定条件に該当する最初の楽曲位置情報のインデックスを返します。
        パラメータ:
        beginIndex - テスト範囲FROM(このインデックスを含む)
        endIndex - テスト範囲TO(このインデックスを含まない)
        tester - 条件のテスター
        戻り値:
        指定条件に最初に該当した楽曲位置情報のインデックス。条件に該当する楽曲位置情報がない場合-1。
        例外:
        IndexOutOfBoundsException - beginIndexがマイナス値またはgetPointCount()超過
        IndexOutOfBoundsException - endIndexがマイナス値またはgetPointCount()超過
        NullPointerException - testerがnull
      • lastIndexOf

        public int lastIndexOf​(Predicate<BeMusicPoint> tester)
        楽曲位置情報リスト全体から指定条件に該当する最後の楽曲位置情報のインデックスを返します。

        当メソッドはlastIndexOf(0, getPointCount(), tester)を実行します。

        パラメータ:
        tester - 条件のテスター
        戻り値:
        指定条件に最後に該当した楽曲位置情報のインデックス。条件に該当する楽曲位置情報がない場合-1。
        関連項目:
        lastIndexOf(int, int, Predicate)
      • lastIndexOf

        public int lastIndexOf​(int beginIndex,
                               int endIndex,
                               Predicate<BeMusicPoint> tester)
        楽曲位置情報リストの指定範囲から指定条件に該当する最後の楽曲位置情報のインデックスを返します。
        パラメータ:
        beginIndex - テスト範囲FROM(このインデックスを含む)
        endIndex - テスト範囲TO(このインデックスを含まない)
        tester - 条件のテスター
        戻り値:
        指定条件に最後に該当した楽曲位置情報のインデックス。条件に該当する楽曲位置情報がない場合-1。
        例外:
        IndexOutOfBoundsException - beginIndexがマイナス値またはgetPointCount()超過
        IndexOutOfBoundsException - endIndexがマイナス値またはgetPointCount()超過
        NullPointerException - testerがnull
      • floorPointOf

        public int floorPointOf​(BmsAt at)
        指定楽曲位置以前(この位置を含む)で最大の楽曲位置を持つ楽曲位置情報のインデックスを返します。
        パラメータ:
        at - 楽曲位置
        戻り値:
        条件に該当するインデックス。そのような楽曲位置情報がない場合-1。
        例外:
        NullPointerException - atがnull
      • floorPointOf

        public int floorPointOf​(int measure,
                                double tick)
        指定楽曲位置以前(この位置を含む)で最大の楽曲位置を持つ楽曲位置情報のインデックスを返します。
        パラメータ:
        measure - 小節番号
        tick - 小節の刻み位置
        戻り値:
        条件に該当するインデックス。そのような楽曲位置情報がない場合-1。
      • floorPointOf

        public int floorPointOf​(double time)
        指定時間以前(この時間を含む)で最大の時間を持つ楽曲位置情報のインデックスを返します。
        パラメータ:
        time - 時間
        戻り値:
        条件に該当するインデックス。そのような楽曲位置情報がない場合-1。
        例外:
        IllegalArgumentException - timeがマイナス値
      • ceilPointOf

        public int ceilPointOf​(BmsAt at)
        指定楽曲位置以降(この位置を含む)で最小の楽曲位置を持つ楽曲位置情報のインデックスを返します。
        パラメータ:
        at - 楽曲位置
        戻り値:
        条件に該当するインデックス。そのような楽曲位置情報がない場合-1。
        例外:
        NullPointerException - atがnull
      • ceilPointOf

        public int ceilPointOf​(int measure,
                               double tick)
        指定楽曲位置以降(この位置を含む)で最小の楽曲位置を持つ楽曲位置情報のインデックスを返します。
        パラメータ:
        measure - 小節番号
        tick - 小節の刻み位置
        戻り値:
        条件に該当するインデックス。そのような楽曲位置情報がない場合-1。
      • ceilPointOf

        public int ceilPointOf​(double time)
        指定時間以降(この時間を含む)で最小の時間を持つ楽曲位置情報のインデックスを返します。
        パラメータ:
        time - 時間
        戻り値:
        条件に該当するインデックス。そのような楽曲位置情報がない場合-1。
        例外:
        IllegalArgumentException - timeがマイナス値
      • collectSoundTracks

        public Set<Integer> collectSoundTracks​(IntPredicate isCollect)
        サウンドのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

        chart.collectSoundTracks(0, Math.max(0, chart.getPointCount() - 1), isCollect);
        パラメータ:
        isCollect - ノートのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectSoundTracks(int, int, IntPredicate)
      • collectSoundTracks

        public Set<Integer> collectSoundTracks​(double timeBegin,
                                               double timeLast,
                                               IntPredicate isCollect)
        指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

         int start = chart.ceilPointOf(timeBegin);
         int last = chart.floorPointOf(timeLast);
         chart.collectSoundTracks(
             (start == -1) ? Integer.MAX_VALUE : start,
             (last == -1) ? 0 : last,
             isCollect
         );
        パラメータ:
        timeBegin - 収集開始時間(この時間を含む)
        timeLast - 収集終了時間(この時間を含む)
        isCollect - ノートのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        IllegalArgumentException - timeBegin, timeEnd が負の値
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectSoundTracks(int, int, IntPredicate)
      • collectSoundTracks

        public Set<Integer> collectSoundTracks​(BmsAt atBegin,
                                               BmsAt atLast,
                                               IntPredicate isCollect)
        指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

         int start = chart.ceilPointOf(atBegin);
         int last = chart.floorPointOf(atLast);
         chart.collectSoundTracks(
             (start == -1) ? Integer.MAX_VALUE : start,
             (last == -1) ? 0 : last,
             isCollect
         );
        パラメータ:
        atBegin - 収集開始楽曲位置(この位置を含む)
        atLast - 収集終了楽曲位置(この位置を含む)
        isCollect - ノートのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        NullPointerException - atBegin, atLast, isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectSoundTracks(int, int, IntPredicate)
      • collectSoundTracks

        public Set<Integer> collectSoundTracks​(int measureBegin,
                                               double tickBegin,
                                               int measureLast,
                                               double tickLast,
                                               IntPredicate isCollect)
        指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

         int start = chart.ceilPointOf(measureBegin, tickBegin);
         int last = chart.floorPointOf(measureLast, tickLast);
         chart.collectSoundTracks(
             (start == -1) ? Integer.MAX_VALUE : start,
             (last == -1) ? 0 : last,
             isCollect
         );
        パラメータ:
        measureBegin - 収集開始小節番号(この小節を含む)
        tickBegin - 収集開始刻み位置(この刻み位置を含む)
        measureLast - 収集終了小節番号(この小節を含む)
        tickLast - 収集終了刻み位置(この刻み位置を含む)
        isCollect - ノートのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectSoundTracks(int, int, IntPredicate)
      • collectSoundTracks

        public Set<Integer> collectSoundTracks​(int start,
                                               int last,
                                               IntPredicate isCollect)
        指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。

        具体的には「可視オブジェ」、「不可視オブジェ」、「BGM」のトラックIDが収集対象となります。

        可視オブジェでは操作を伴うノート(BeMusicNoteType.hasMovement() が true を返すノート) が収集対象となり、それ以外のノートは収集されません。

        トラックIDセットに含めるかどうかは isCollect 関数のテスト結果によって決定されます。 この関数の入力値はノートの生値になっているため、このノートから各種属性値を得るには BeMusicSound を使用してください。関数が false を返すと収集の対象外になります。

        返されたトラックIDセットは、走査すると昇順ソートされています。また、このセットの変更可否については 未定義となりますのでセットの変更を行う場合は別インスタンスへコピーしてください。

        パラメータ:
        start - 収集開始インデックス(この値を含む)
        last - 収集終了インデックス(この値を含む)
        isCollect - ノートのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        IllegalArgumentException - start, last が負の値
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
      • collectImageTracks

        public Set<Integer> collectImageTracks​(BiPredicate<Integer,​Integer> isCollect)
        イメージのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

        chart.collectImageTracks(0, Math.max(0, chart.getPointCount() - 1), isCollect);
        パラメータ:
        isCollect - イメージのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectImageTracks(int, int, BiPredicate)
      • collectImageTracks

        public Set<Integer> collectImageTracks​(double timeBegin,
                                               double timeLast,
                                               BiPredicate<Integer,​Integer> isCollect)
        指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

         int start = chart.ceilPointOf(timeBegin);
         int last = chart.floorPointOf(timeLast);
         chart.collectImageTracks(
             (start == -1) ? Integer.MAX_VALUE : start,
             (last == -1) ? 0 : last,
             isCollect
         );
        パラメータ:
        timeBegin - 収集開始時間(この時間を含む)
        timeLast - 収集終了時間(この時間を含む)
        isCollect - イメージのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        IllegalArgumentException - timeBegin, timeEnd が負の値
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectImageTracks(int, int, BiPredicate)
      • collectImageTracks

        public Set<Integer> collectImageTracks​(BmsAt atBegin,
                                               BmsAt atLast,
                                               BiPredicate<Integer,​Integer> isCollect)
        指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

         int start = chart.ceilPointOf(atBegin);
         int last = chart.floorPointOf(atLast);
         chart.collectImageTracks(
             (start == -1) ? Integer.MAX_VALUE : start,
             (last == -1) ? 0 : last,
             isCollect
         );
        パラメータ:
        atBegin - 収集開始楽曲位置(この位置を含む)
        atLast - 収集終了楽曲位置(この位置を含む)
        isCollect - イメージのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        NullPointerException - atBegin, atLast, isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectImageTracks(int, int, BiPredicate)
      • collectImageTracks

        public Set<Integer> collectImageTracks​(int measureBegin,
                                               double tickBegin,
                                               int measureLast,
                                               double tickLast,
                                               BiPredicate<Integer,​Integer> isCollect)
        指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。

        当メソッドは以下のコードと等価です。

         int start = chart.ceilPointOf(measureBegin, tickBegin);
         int last = chart.floorPointOf(measureLast, tickLast);
         chart.collectImageTracks(
             (start == -1) ? Integer.MAX_VALUE : start,
             (last == -1) ? 0 : last,
             isCollect
         );
        パラメータ:
        measureBegin - 収集開始小節番号(この小節を含む)
        tickBegin - 収集開始刻み位置(この刻み位置を含む)
        measureLast - 収集終了小節番号(この小節を含む)
        tickLast - 収集終了刻み位置(この刻み位置を含む)
        isCollect - イメージのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
        関連項目:
        collectImageTracks(int, int, BiPredicate)
      • collectImageTracks

        public Set<Integer> collectImageTracks​(int start,
                                               int last,
                                               BiPredicate<Integer,​Integer> isCollect)
        指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。

        具体的には「BGA」、「BGAレイヤー」、「プレーミス画像」のトラックIDが収集対象となります。

        トラックIDセットに含めるかどうかは isCollect 関数のテスト結果によって決定されます。 この関数の入力値は第1引数がイメージ種別を表す整数値、第2引数がそのイメージのトラックIDとなっています。 イメージ種別は 0=BGA, 1=BGAレイヤー, 2=プレーミス画像 となっています。種別によって収集有無を決定したい場合は この値を参照してください。関数が false を返すと収集の対象外になります。

        返されたトラックIDセットは、走査すると昇順ソートされています。また、このセットの変更可否については 未定義となりますのでセットの変更を行う場合は別インスタンスへコピーしてください。

        パラメータ:
        start - 収集開始インデックス(この値を含む)
        last - 収集終了インデックス(この値を含む)
        isCollect - イメージのトラックIDを収集するかを決定するテスト関数
        戻り値:
        昇順ソートされたトラックIDセット
        例外:
        IllegalArgumentException - start, last が負の値
        NullPointerException - isCollect が null
        導入されたバージョン:
        0.10.0
      • computeActualPlayTime

        public double computeActualPlayTime​(IntToDoubleFunction getSoundTime)
        サウンド再生時間を考慮した実際の演奏時間を計算します。

        当メソッドは getPlayTime() とは異なり、実際のサウンドの再生時間を参照して最後のサウンドが 再生し終えるまでの時間を計算します。利用者はノートの生値から対応するサウンドの再生時間を秒単位で返す 関数を引数で渡してください。対応するサウンドを再生しない、または何らかの理由により再生時間が決定できない場合は 0 を返すようにし、負の値を返さないようにしてください。負の値を返した場合の計算結果は未定義となり、 期待する演奏時間を得られなくなる可能性があります。

        ノートの生値からサウンドのトラックIDを取得するには BeMusicSound.getTrackId(int) を使用します。

        パラメータ:
        getSoundTime - 指定されたノートの生値に対応するサウンドの再生時間を返す関数
        戻り値:
        最後のサウンドが再生し終えるまでの時間(秒単位)
        例外:
        NullPointerException - getSoundTime が null
        導入されたバージョン:
        0.10.0
        関連項目:
        getPlayTime(), BeMusicSound
      • onCreate

        protected void onCreate()
        BMS譜面オブジェクトが構築された時に実行されます。

        当メソッドが実行されるのはオブジェクトのベースクラスであるBeMusicChartの構築処理が完了した後です。 従って、クラスのGetterを使用することで構築済みの情報にアクセス可能な状態となっています。

        当メソッドの意図は、ベースクラスを拡張したクラスにおいて自身が必要とする情報を構築する機会を提供する ことにあります。メソッドはコンストラクタの最後で実行され、当メソッドの実行が完了する時には全ての情報構築が 完了していることが推奨されています。