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

クラス BeMusicScore

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

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

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

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

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

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

    • コンストラクタの概要

      コンストラクタ 
      コンストラクタ 説明
      BeMusicScore()
      BMS譜面オブジェクトを構築します。
    • メソッドの概要

      すべてのメソッド staticメソッド インスタンス・メソッド concreteメソッド 
      修飾子とタイプ メソッド 説明
      int ceilPointOf​(double time)
      指定時間以降(この時間を含む)で最小の時間を持つ楽曲位置情報のインデックスを返します。
      int ceilPointOf​(int measure, double tick)
      指定楽曲位置以降(この位置を含む)で最小の楽曲位置を持つ楽曲位置情報のインデックスを返します。
      int ceilPointOf​(BmsAt at)
      指定楽曲位置以降(この位置を含む)で最小の楽曲位置を持つ楽曲位置情報のインデックスを返します。
      static BeMusicScore create​(List<BeMusicPoint> list)
      指定した楽曲位置情報リストを用いてBMS譜面オブジェクトを構築します。
      static <S extends BeMusicScore>
      S
      create​(List<BeMusicPoint> list, Supplier<S> creator)
      指定した楽曲位置情報リストを用いてBMS譜面オブジェクトを構築します。
      int floorPointOf​(double time)
      指定時間以前(この時間を含む)で最大の時間を持つ楽曲位置情報のインデックスを返します。
      int floorPointOf​(int measure, double tick)
      指定楽曲位置以前(この位置を含む)で最大の楽曲位置を持つ楽曲位置情報のインデックスを返します。
      int floorPointOf​(BmsAt at)
      指定楽曲位置以前(この位置を含む)で最大の楽曲位置を持つ楽曲位置情報のインデックスを返します。
      int getChangeBpmCount()
      BPM変化回数を取得します。
      int getLandmineCount()
      地雷オブジェの数を取得します。
      int getLandmineCount​(BeMusicDevice device)
      指定入力デバイスの地雷オブジェ数を取得します。
      BeMusicPoint getLastPlayablePoint()
      最後の操作可能ノートを持つ楽曲位置情報を取得します。
      int getLongNoteCount()
      ロングノート数を取得します。
      int getLongNoteCount​(BeMusicDevice device)
      指定入力デバイスのロングノート数を取得します。
      int getNoteCount()
      総ノート数を取得します。
      int getNoteCount​(BeMusicDevice device)
      指定入力デバイスの総ノート数を取得します。
      double getPlayTime()
      この譜面の演奏時間を秒単位で取得します。
      BeMusicPoint getPoint​(int index)
      楽曲位置情報を取得します。
      int getPointCount()
      楽曲位置情報の数を取得します。
      List<BeMusicPoint> getPoints()
      楽曲位置情報リストのコピーを取得します。
      double getRecommendTotal1()
      推奨TOTAL値を取得します。
      double getRecommendTotal2()
      推奨TOTAL値を取得します。
      int getStopCount()
      譜面停止回数を取得します。
      boolean hasBga()
      BGA有無を取得します。
      boolean hasBgm()
      BGM有無を取得します。
      boolean hasChangeBpm()
      BPM変化有無を取得します。
      boolean hasLandmine()
      地雷オブジェ有無を取得します。
      boolean hasLongNote()
      ロングノート有無を取得します。
      boolean hasStop()
      譜面停止有無を取得します。
      int indexOf​(int beginIndex, int endIndex, Predicate<BeMusicPoint> tester)
      楽曲位置情報リストの指定範囲から指定条件に該当する最初の楽曲位置情報のインデックスを返します。
      int indexOf​(Predicate<BeMusicPoint> tester)
      楽曲位置情報リスト全体から指定条件に該当する最初の楽曲位置情報のインデックスを返します。
      Iterator<BeMusicPoint> iterator()
      int lastIndexOf​(int beginIndex, int endIndex, Predicate<BeMusicPoint> tester)
      楽曲位置情報リストの指定範囲から指定条件に該当する最後の楽曲位置情報のインデックスを返します。
      int lastIndexOf​(Predicate<BeMusicPoint> tester)
      楽曲位置情報リスト全体から指定条件に該当する最後の楽曲位置情報のインデックスを返します。
      protected void onCreate()
      BMS譜面オブジェクトが構築された時に実行されます。
      Stream<BeMusicPoint> stream()
      楽曲位置情報リストを走査するストリームを返します。
    • コンストラクタの詳細

      • BeMusicScore

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

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

    • メソッドの詳細

      • create

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        public final BeMusicPoint getLastPlayablePoint()
        最後の操作可能ノートを持つ楽曲位置情報を取得します。

        譜面が空の場合、当メソッドはBeMusicPoint.EMPTYを返します。

        戻り値:
        最後の操作可能ノートを持つ楽曲位置情報
      • getPlayTime

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

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

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

        戻り値:
        この譜面の演奏時間
      • getChangeBpmCount

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

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

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

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

         #TOTAL = 7.605 * N / (0.01 * N + 6.5)
         ※N = 総ノート数
        戻り値:
        推奨TOTAL値
      • getRecommendTotal2

        public final 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値
      • hasLongNote

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

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

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

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

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

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

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

        楽曲位置情報リストは、楽曲位置の時間で昇順ソートされていることを保証します。類似の情報として「表示位置」 がありますが、楽曲位置情報リストがこの情報で昇順ソートされていることを期待するべきではありません。

        戻り値:
        楽曲位置情報リストを走査するストリーム
      • indexOf

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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