クラス BeMusicChart
- Object
-
- BeMusicChart
-
- すべての実装されたインタフェース:
Iterable<BeMusicPoint>
public class BeMusicChart extends Object implements Iterable<BeMusicPoint>
BMS譜面全体とその統計情報を表します。BMS譜面全体とは、楽曲位置情報である
BeMusicPointの集合(リスト)を示します。 当クラスが保有する楽曲位置情報は時間軸で昇順ソートされています。アプリケーションは当クラスが持つイテレータや 楽曲位置情報を取得するためのGetter、およびストリームを用いて楽曲位置情報を参照することができます。楽曲位置情報の集合からは様々な分析を行うことができ、代表的な統計情報の収集は当クラスの構築時に行われます。 統計情報にはGetterからアクセスすることが可能で、アプリケーションの要求に応じてそれらの情報を活用することが 可能になっています。より高度な統計情報を集計したい場合は
BeMusicStatisticsBuilderを参照してください。また、小節番号・刻み位置や時間を用いて時間軸への高速なアクセスを行ったり、条件を指定して楽曲位置情報を 検索する等の機能を提供し、Be-Musicに関するアプリケーション開発のアシストを行います。
当クラスが持つ情報や機能では足りない場合には、当クラスを拡張し、処理や機能を追加してください。そのための 処理実装は
onCreate()で行うことを想定しています。- 導入されたバージョン:
- 0.0.1
-
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 BeMusicChart()BMS譜面オブジェクトを構築します。
-
メソッドの概要
すべてのメソッド staticメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 intceilPointOf(double time)指定時間以降(この時間を含む)で最小の時間を持つ楽曲位置情報のインデックスを返します。intceilPointOf(int measure, double tick)指定楽曲位置以降(この位置を含む)で最小の楽曲位置を持つ楽曲位置情報のインデックスを返します。intceilPointOf(BmsAt at)指定楽曲位置以降(この位置を含む)で最小の楽曲位置を持つ楽曲位置情報のインデックスを返します。Set<Integer>collectImageTracks(double timeBegin, double timeLast, BiPredicate<Integer,Integer> isCollect)指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。Set<Integer>collectImageTracks(int measureBegin, double tickBegin, int measureLast, double tickLast, BiPredicate<Integer,Integer> isCollect)指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。Set<Integer>collectImageTracks(int start, int last, BiPredicate<Integer,Integer> isCollect)指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。Set<Integer>collectImageTracks(BmsAt atBegin, BmsAt atLast, BiPredicate<Integer,Integer> isCollect)指定した範囲の楽曲位置情報に記録されているイメージのトラックIDを収集します。Set<Integer>collectImageTracks(BiPredicate<Integer,Integer> isCollect)イメージのトラックIDを収集します。Set<Integer>collectSoundTracks(double timeBegin, double timeLast, IntPredicate isCollect)指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。Set<Integer>collectSoundTracks(int measureBegin, double tickBegin, int measureLast, double tickLast, IntPredicate isCollect)指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。Set<Integer>collectSoundTracks(int start, int last, IntPredicate isCollect)指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。Set<Integer>collectSoundTracks(BmsAt atBegin, BmsAt atLast, IntPredicate isCollect)指定した範囲の楽曲位置情報に記録されているサウンドのトラックIDを収集します。Set<Integer>collectSoundTracks(IntPredicate isCollect)サウンドのトラックIDを収集します。doublecomputeActualPlayTime(IntToDoubleFunction getSoundTime)サウンド再生時間を考慮した実際の演奏時間を計算します。doublecomputeActualPlayTime(IntToDoubleFunction getSoundTime, IntToDoubleFunction getBgaTime, IntToDoubleFunction getLayerTime, IntToDoubleFunction getMissTime, ToDoubleFunction<String> getTextTime)各要素を考慮した実際の演奏時間を計算します。static BeMusicChartcreate(List<BeMusicPoint> list)指定した楽曲位置情報リストを用いてBMS譜面オブジェクトを構築します。static <S extends BeMusicChart>
Screate(List<BeMusicPoint> list, Supplier<S> creator)指定した楽曲位置情報リストを用いてBMS譜面オブジェクトを構築します。intfloorPointOf(double time)指定時間以前(この時間を含む)で最大の時間を持つ楽曲位置情報のインデックスを返します。intfloorPointOf(int measure, double tick)指定楽曲位置以前(この位置を含む)で最大の楽曲位置を持つ楽曲位置情報のインデックスを返します。intfloorPointOf(BmsAt at)指定楽曲位置以前(この位置を含む)で最大の楽曲位置を持つ楽曲位置情報のインデックスを返します。byte[]generateAudioHash(Map<Integer,String> wavs)楽曲ハッシュを生成します。intgetChangeBpmCount()BPM変化回数を取得します。intgetChangeScrollCount()スクロール速度の変化回数を取得します。intgetLongNoteCount()ロングノート数を取得します。intgetLongNoteCount(BeMusicDevice device)指定入力デバイスのロングノート数を取得します。intgetLongNoteCount(BeMusicLane lane)指定レーンのロングノート数を取得します。doublegetMaxBpm()この譜面の最大BPMを取得します。doublegetMinBpm()この譜面の最小BPMを取得します。intgetMineCount()地雷オブジェの数を取得します。intgetMineCount(BeMusicDevice device)指定入力デバイスの地雷オブジェ数を取得します。intgetMineCount(BeMusicLane lane)指定レーンの地雷オブジェ数を取得します。intgetNoteCount()総ノート数を取得します。intgetNoteCount(BeMusicDevice device)指定入力デバイスの総ノート数を取得します。intgetNoteCount(BeMusicLane lane)指定レーンの総ノート数を取得します。doublegetPlayTime()この譜面の演奏時間を秒単位で取得します。BeMusicPointgetPoint(int index)楽曲位置情報を取得します。intgetPointCount()楽曲位置情報の数を取得します。List<BeMusicPoint>getPoints()楽曲位置情報リストのコピーを取得します。doublegetPrimaryBpm()この譜面の主要BPMを取得します。doublegetRecommendTotal1()推奨TOTAL値を取得します。doublegetRecommendTotal2()推奨TOTAL値を取得します。BeMusicScratchModegetScratchMode()スクラッチモードを取得します。intgetStopCount()譜面停止回数を取得します。booleanhasAnimation()アニメーション有無を取得します。booleanhasBga()BGA有無を取得します。booleanhasBgm()BGM有無を取得します。booleanhasChangeBpm()BPM変化有無を取得します。booleanhasChangeScroll()スクロール速度の変化有無を取得します。booleanhasChangeSpeed()速度変更有無を取得します。booleanhasGimmick()ギミック有無を取得します。booleanhasLayer()BGAレイヤー有無を取得します。booleanhasLongNote()ロングノート有無を取得します。booleanhasLongNote(BeMusicDevice device)指定入力デバイスのロングノート有無を取得します。booleanhasLongNote(BeMusicLane lane)指定レーンのロングノート有無を取得します。booleanhasMine()地雷オブジェ有無を取得します。booleanhasMine(BeMusicDevice device)指定入力デバイスの地雷オブジェ有無を取得します。booleanhasMine(BeMusicLane lane)指定レーンの地雷オブジェ有無を取得します。booleanhasMiss()ミス時に表示するBGA有無を取得します。booleanhasStop()譜面停止有無を取得します。intindexOf(int beginIndex, int endIndex, Predicate<BeMusicPoint> tester)楽曲位置情報リストの指定範囲から指定条件に該当する最初の楽曲位置情報のインデックスを返します。intindexOf(Predicate<BeMusicPoint> tester)楽曲位置情報リスト全体から指定条件に該当する最初の楽曲位置情報のインデックスを返します。Iterator<BeMusicPoint>iterator()intlastIndexOf(int beginIndex, int endIndex, Predicate<BeMusicPoint> tester)楽曲位置情報リストの指定範囲から指定条件に該当する最後の楽曲位置情報のインデックスを返します。intlastIndexOf(Predicate<BeMusicPoint> tester)楽曲位置情報リスト全体から指定条件に該当する最後の楽曲位置情報のインデックスを返します。protected voidonCreate()BMS譜面オブジェクトが構築された時に実行されます。Stream<BeMusicPoint>points()楽曲位置情報リストを走査するストリームを返します。Stream<BeMusicPoint>points(int start, int end)指定範囲の楽曲位置情報リストを走査するストリームを返します。-
クラスから継承されたメソッド Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
インタフェースから継承されたメソッド Iterable
forEach, spliterator
-
-
-
-
コンストラクタの詳細
-
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がnullNullPointerException- creatorがnullNullPointerException- 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
-
getMinBpm
public double getMinBpm()
この譜面の最小BPMを取得します。楽曲位置のない譜面では0を返します。
getPlayTime()が返す時間よりも後方で設定されるBPMは含まれません。 当メソッドが返す値はBmsContent.getMinBpm()とは異なる場合があることに注意してください。また、
BeMusicChartBuilderで走査する楽曲位置を制限して譜面データを構築した場合、 当メソッドは期待と異なる値を返す可能性があります。当メソッドから返す値が正確な値を示すことを期待するのであれば 全ての要素を含めて譜面データを構築するようにしてください。- 戻り値:
- 最小BPM
- 導入されたバージョン:
- 0.11.0
-
getMaxBpm
public double getMaxBpm()
この譜面の最大BPMを取得します。楽曲位置のない譜面では0を返します。
getPlayTime()が返す時間よりも後方で設定されるBPMは含まれません。 当メソッドが返す値はBmsContent.getMaxBpm()とは異なる場合があることに注意してください。また、
BeMusicChartBuilderで走査する楽曲位置を制限して譜面データを構築した場合、 当メソッドは期待と異なる値を返す可能性があります。当メソッドから返す値が正確な値を示すことを期待するのであれば 全ての要素を含めて譜面データを構築するようにしてください。- 戻り値:
- 最大BPM
- 導入されたバージョン:
- 0.11.0
-
getPrimaryBpm
public double getPrimaryBpm()
この譜面の主要BPMを取得します。主要BPMとは、同一BPMが占める時間範囲が最も大きいBPMを指します。
楽曲位置のない譜面では0を返します。
2つ以上の同一時間範囲を持つBPMが存在した場合、最初に登場したBPMが採用されます。
有効なBPMの時間範囲は
getPlayTime()が返す時間までです。それ以降に設定されるBPMや時間範囲は 主要BPMを決定する時間範囲には含まれません。また、
BeMusicChartBuilderで走査する楽曲位置を制限して譜面データを構築した場合、 当メソッドは期待と異なる値を返す可能性があります。当メソッドから返す値が正確な値を示すことを期待するのであれば 全ての要素を含めて譜面データを構築するようにしてください。- 戻り値:
- 主要BPM
- 導入されたバージョン:
- 0.11.0
-
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有無
-
hasLayer
public boolean hasLayer()
BGAレイヤー有無を取得します。- 戻り値:
- BGAレイヤー有無
- 導入されたバージョン:
- 0.11.0
-
hasMiss
public boolean hasMiss()
ミス時に表示するBGA有無を取得します。- 戻り値:
- ミス時に表示するBGA有無
- 導入されたバージョン:
- 0.11.0
-
hasAnimation
public boolean hasAnimation()
アニメーション有無を取得します。当メソッドはBGA, BGAレイヤー, ミス時BGAのいずれかが存在する場合にtrueを返します。
- 戻り値:
- アニメーション有無
- 導入されたバージョン:
- 0.11.0
- 関連項目:
BeMusicPoint.hasAnimation()
-
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()
-
iterator
public Iterator<BeMusicPoint> iterator()
- 定義:
iteratorインタフェース内Iterable<BeMusicPoint>
-
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)
サウンド再生時間を考慮した実際の演奏時間を計算します。当メソッドは以下のコードと等価です。
chart.computeActualPlayTime(getSoundTime, null, null, null, null);
- パラメータ:
getSoundTime- 指定されたノートの生値に対応するサウンドの再生時間を返す関数- 戻り値:
- 最後のサウンドが再生し終えるまでの時間(秒単位)
- 例外:
NullPointerException- getSoundTime が null- 導入されたバージョン:
- 0.10.0
- 関連項目:
computeActualPlayTime(IntToDoubleFunction, IntToDoubleFunction, IntToDoubleFunction, IntToDoubleFunction, ToDoubleFunction)
-
computeActualPlayTime
public double computeActualPlayTime(IntToDoubleFunction getSoundTime, IntToDoubleFunction getBgaTime, IntToDoubleFunction getLayerTime, IntToDoubleFunction getMissTime, ToDoubleFunction<String> getTextTime)
各要素を考慮した実際の演奏時間を計算します。当メソッドは
getPlayTime()とは異なり、実際のサウンドの再生時間やBGAの表示時間等を参照して 全ての要素が再生・表示し終えるまでの時間を計算します。getSoundTime はノートの生値から対応するサウンドの再生時間を秒単位で返す関数を引数で渡してください。 対応するサウンドを再生しない、または何らかの理由により再生時間が決定できない場合は0を返すようにし、 負の値を返さないようにしてください。負の値を返した場合の計算結果は未定義となり、 期待する演奏時間を得られなくなる可能性があります。ノートの生値からサウンドのトラックIDを取得するには
BeMusicSound.getTrackId(int)を使用します。getBgaTime, getLayerTime, getMissTime には当該画像・映像コンテンツを表すインデックス値が渡されます。 そのコンテンツが表示指示されてから何秒の間表示されるべきかの時間を返してください。 サウンドと同様に負の値を返してはいけません。
getTextTime には表示されるべきテキストの内容が文字列で渡されます。その文字列が表示指示されてから何秒の間 表示されるべきかの時間を返してください。他の要素と同様に負の値を返してはいけません。
どの関数にも null を指定することができます。 null を指定するとその関数に対応する要素が演奏時間計算の対象から除外されます。
- パラメータ:
getSoundTime- 指定されたノートの生値に対応するサウンドの再生時間を返す関数、またはnullgetBgaTime- BGAの表示時間を返す関数、またはnullgetLayerTime- BGAレイヤーの表示時間を返す関数、またはnullgetMissTime- ミス時に表示するBGAの表示時間を返す関数、またはnullgetTextTime- テキストの表示時間を返す関数、またはnull- 戻り値:
- 最後の要素が再生し終えるまでの時間(秒単位)
- 導入されたバージョン:
- 0.11.0
- 関連項目:
getPlayTime()
-
generateAudioHash
public byte[] generateAudioHash(Map<Integer,String> wavs)
楽曲ハッシュを生成します。楽曲ハッシュとは、この譜面データと指定された#WAVマップの組み合わせで実際に再生される音声から生成される SHA-256ハッシュのことを指します。楽曲ハッシュを使用することで、異なる譜面データで同一の楽曲になるかを 検証することが可能になります。
#WAVマップには譜面データ生成元と同一のBMSコンテンツから生成されたものを指定してください。 このマップは
BeMusicHeader.getWavs()を使用して取得することができます。 互換性のない#WAVマップを指定すると正しいハッシュ値が生成されなくなるので注意してください。 また、#WAVマップ定義のうち、使用されていないものは楽曲ハッシュ計算の対象から外れます。当メソッドが生成する楽曲ハッシュは、本当に音声データをロードし譜面データを再生した結果の波形データを用いて 生成するわけではなく、音声再生の元になるデータの定義内容を参照してハッシュ値を生成します。 具体的には以下の情報がハッシュ値生成に使用されます。
- #WAVのトラックID(メタ情報のインデックス値)
- #WAVに記述したファイル名
- 音声鳴動を伴う楽曲位置の時間
- 可視オブジェ・BGMのトラックID (不可視オブジェは考慮されない)
- 楽曲位置で鳴動する音声のトラックIDリスト
以上の仕様で楽曲ハッシュが生成されます。 当メソッドが検証する点を要約すると「どの音が」、「どのタイミングで鳴動するか」の2点になります。 このため、以下のようなケースでは合成された音声鳴動が同じであれば同一の楽曲ハッシュが生成されます。
- 使用されていない#WAVのトラックID、ファイル名が変化した
- 初期BPMが異なっても音声が鳴動するタイミングが全く同じ(※)
- BPM変更・譜面停止が挿入されても音声が鳴動するタイミングが全く同じ(※)
- シングルプレー・ダブルプレーが変わっても鳴動する音声の増減が無い
- 音声の鳴動元の可視オブジェ・BGMが入れ替わった
- 同一楽曲位置内でBGMの定義順番が入れ替わった
- 可視オブジェの単押し・長押しが入れ替わってもトラックIDが同じ
- 可視オブジェの長押し終了の位置が前後した
- 未定義の#WAVのトラックID(いわゆる無音オブジェ)が可視オブジェ・BGMに追加・削除・編集された
- ロングノートモードのLNとCN/HCNが入れ替わったが、長押しスクラッチが存在しない
- ロングノートモードのCNとHCNが入れ替わった(スクラッチあり)
- 不可視オブジェの定義内容が変化した
- 地雷オブジェの増減があった
- BGA/BGAレイヤー/ミス時に表示するBGA/テキストが挿入・削除された
※時間計算の精度落ちにより異なる楽曲ハッシュになる場合があります
逆に、以下のいずれかの条件に1つでも該当すると楽曲ハッシュは変化します。
- 使用されている#WAVに記述されたファイル名が変化した(アルファベット大小も含む)
- 全体的な楽曲構成に変化は無いが、再生開始タイミングが前後にずれた
- 可視オブジェ・BGMの定義に増減があった
- 可視オブジェ・BGMの定義に増減は無いが、鳴動する音声(トラックID)が1つでも変わった
- ロングノートモードのLNとCN/HCNが入れ替わり、且つ長押しスクラッチが存在する
拡張情報が使用されている譜面データ(元データがBMSONフォーマットの譜面データ)には対応していません。 そのような譜面データではnullを返します。
- パラメータ:
wavs- #WAVマップ- 戻り値:
- 楽曲ハッシュ
- 例外:
NullPointerException- wavsがnull- 導入されたバージョン:
- 0.11.0
- 関連項目:
BeMusicHeader.getWavs()
-
onCreate
protected void onCreate()
BMS譜面オブジェクトが構築された時に実行されます。当メソッドが実行されるのはオブジェクトのベースクラスである
BeMusicChartの構築処理が完了した後です。 従って、クラスのGetterを使用することで構築済みの情報にアクセス可能な状態となっています。当メソッドの意図は、ベースクラスを拡張したクラスにおいて自身が必要とする情報を構築する機会を提供する ことにあります。メソッドはコンストラクタの最後で実行され、当メソッドの実行が完了する時には全ての情報構築が 完了していることが推奨されています。
-
-