クラス BmsContent
- Object
-
- BmsContent
-
public class BmsContent extends Object
1個のBMSデータを表すBMSライブラリのメインオブジェクトです。BMSで記述された1個のデータを格納するコンテナであり、そのデータに対して参照・編集を行うためのあらゆる機能を提供します。
当クラスが提供するAPIは、大きく分けて以下の利用シーンを想定しています。
- BMSコンテンツを参照し、メタ情報や時間軸を解析してBMSコンテンツを再生するアプリケーション(BMSプレイヤー)
- BMSコンテンツを作成・編集し、その工程を直感的・視覚的にプレゼンテーションするアプリケーション(BMSエディタ)
上記利用シーンにおいて操作しやすい機能を提供し、BMSコンテンツの参照・編集を統一的なアプローチで管理します。
BMSプレイヤーのようにリアルタイム性を求められるシーンでは頻繁なデータ参照が必要になります。当クラスのデータ参照 においては、API呼び出し時の動的なメモリの確保・解放を極力行わず、高速なアプリケーションが開発することができる ようになっています。データ構成について
BMSコンテンツが保有するデータは、「BMS宣言」「メタ情報」「チャンネル(時間軸上のデータ)」から成り立っています。 BMS宣言を除くデータにおいては、そのデータ書式をBmsSpec
によって決定付けられたBMS仕様に沿うように強制されます。 BMS仕様に違反するデータはBMSコンテンツ内には受け入れられないため、データの整合性は保証されます。BMS宣言
BMS宣言は当該BMSコンテンツに付与される付加的な情報です。メタ情報とは異なりこの情報の内容には特に決まったルールは無く、 特定のアプリケーションに対して独自の解釈を指示したりする自由な記述として活用することができます。アプリケーションには BMS宣言を考慮する義務はないため、BMSコンテンツの制作者は不特定多数のアプリケーションに何らかの振る舞いを期待する目的で BMS宣言を活用するべきではありません。
BMS宣言の参照・編集には以下のAPIを利用します。
- BMS宣言を追加する:
putDeclaration(String, String)
- BMS宣言を消去する:
removeDeclaration(String)
- BMS宣言の存在確認:
containsDeclaration(String)
- BMS宣言を取得する:
getDeclaration(String)
,getDeclarations()
メタ情報
メタ情報は当該BMSコンテンツの内容・属性・状態等を表す様々な情報です。メタ情報の定義内容はBMS仕様によって決定されており、 BMSコンテンツへの情報登録は、このBMS仕様に基づいて行われなければなりません。BMSの特性上、登録義務のあるメタ情報は 存在せず、未登録の情報については全て規定の初期値が設定されているものと見なされます。メタ情報の参照・編集には以下のAPIを利用します。
- メタ情報を取得する:
getMeta(String, BmsUnit, int)
,getSingleMeta(String)
,getMultipleMeta(String, int)
,getIndexedMeta(String, int)
- メタ情報を設定する:
setMeta(String, BmsUnit, int, Object)
,setSingleMeta(String, Object)
,setMultipleMeta(String, int, Object)
,setIndexedMeta(String, int, Object)
- メタ情報の件数取得:
getMetaCount(String, BmsUnit)
,getSingleMetaCount(String)
,getMultipleMetaCount(String)
,getIndexedMetaCount(String)
- メタ情報の登録確認:
containsMeta(String, BmsUnit, int)
,containsSingleMeta(String)
,containsMultipleMeta(String, int)
,containsIndexedMeta(String, int)
- 複数のメタ情報取得:
getMultipleMetas(String)
,getIndexedMetas(String)
- 初期BPMの取得・設定:
getInitialBpm()
,setInitialBpm(double)
チャンネル
チャンネルは当該BMSコンテンツの情報のうち、時間軸上に配置される情報を指します。チャンネルにはそれぞれ番号が割り当てられ、 データ型等の属性が付与されています。時間軸は「小節番号」と「小節の刻み位置」によって管理されます。BMSコンテンツでは チャンネル上のデータを「小節データ(MeasureValue)」および「ノート(Note)」という種類のデータに分解します。小節データは 1チャンネル1小節について1個だけ設定可能なデータで、チャンネルのデータ型が配列型ではないデータが対象になります。 小節データを特定するのに必要な情報は「チャンネル番号」「小節番号」であり、小節の刻み位置は必要ありません。 一方、ノートはチャンネルのデータ型が配列型のものが対象になり、こちらはデータの特定に「小節の刻み位置」を必要とします。
但し「重複可能チャンネル」の場合、データを解決するのに「チャンネルインデックス」が必要になってきます。これは、 重複データを一次元配列として扱っているためです。小節データ・ノートを扱うには、それぞれ別のAPIが必要になります。必要APIの一覧は下記を参照してください。
小節データを扱うAPI- 小節データを取得する:
getMeasureValue(int, int, int)
- 小節データの登録確認:
containsMeasureValue(int, int, int)
- 小節データを設定する:
setMeasureValue(int, int, Object)
ノートを扱うAPI
- ノートを取得する(位置指定):
getNote(int, int, int, double)
- 後退位置のノートを取得する:
getPreviousNote(int, int, int, double, boolean)
- 前進位置のノートを取得する:
getNextNote(int, int, int, double, boolean)
- ノートから解決済みメタ情報を取得:
getResolvedNoteValue(int, int, int, double)
- ノートを検索する:
pointOf(int, double, Predicate)
- ノートを列挙する:
enumNotes(int, int, int, double, int, double, Consumer)
- ノート一覧を取得:
listNotes(int, int, int, double, int, double, Predicate)
- ノート数を数える:
countNotes(int, int, int, double, int, double, Predicate)
- ノートを追加する:
putNote(int, int, int, double, int, Supplier)
- ノートを消去する:
removeNote(int, int, int, int, Predicate)
時間軸そのものの編集、および時間軸に関する情報の参照を行うためのAPIについては下記を参照してください。 これには、時間軸の計算や変換処理等のユーティリティAPIも含みます。
- 小節数を取得する:
getMeasureCount()
- 小節の刻み数を取得する:
getMeasureTickCount(int)
- チャンネルのデータ数取得:
getChannelDataCount(int, int)
- 小節を挿入する:
insertMeasure(int, int)
- 小節を消去する:
removeMeasure(int, int)
- チャンネルのデータ入れ替え:
swapChannel(int, int, int, int)
- 楽曲位置を移動する:
seekPoint(int, double, double, BmsPoint)
- 楽曲位置を時間に変換:
pointToTime(int, double)
- 時間を楽曲位置に変換:
timeToPoint(double, BmsPoint)
タイムライン要素編集ポリシーについて
BMSコンテンツの小節データ・ノートのようなタイムライン要素の編集は、そのデータ構造の特性上、データの内容によっては 時間に関する内部データの再計算が必要になる場合があります。例えば、全時間軸のうち、真ん中付近の小節の小節長を 変更したとします。そうすると、その小節以降のタイムライン要素への到達時間が変更されることになり、内部で管理している 時間に関するデータの再計算が発生します。
再計算が完了するまでの間、時間に関するデータに不整合が発生している状態となりますので、BMSコンテンツではその間は 時間に関係するAPIへのアクセスが禁止されます。このアクセスが禁止されている状態のことを「編集モード」と呼称します。動作モードについて
BMSコンテンツでは、上述した事情により動作モードを2つ持っています。- 参照モード
このモードではタイムライン要素の全ての読み取りAPIへのアクセスを許可します。時間に関する内部データの計算が 完了している状態を指し、時間計算を行うAPIも不整合を起こすことなく動作できます。逆に、このモードでは全ての 「編集を伴うAPI」が禁止されます。参照モードでこれらのAPIにアクセスすると例外をスローするため注意が必要です。 - 編集モード
データの編集を行う場合に必要なモードです。編集モードの間は「時間に関するデータを必要とするデータ読み取りAPI」への アクセスを全て禁止状態にします。そうすることでBMSコンテンツから、データ不整合のある情報を提供することを防止し、 アプリケーションへの情報提供の質を高めます。このモードでは、参照モードではできなかった全ての「データ編集を伴うAPI」 へのアクセスを可能とします。
上述した動作モードへの遷移を行う専用のAPIが用意されています。
beginEdit()
を呼び出すと「編集モード」へ遷移します。 このAPIを呼び出した直後から全ての「データ編集を伴うAPI」へのアクセスが可能となります。編集モードを完了し「参照モード」へ 戻すにはendEdit()
を呼び出します。このAPIを呼び出すと、編集モードの間に行われた変更内容から時間に関する内部データの 再計算が開始され、それが完了すると参照モードに遷移します。
BMSコンテンツのデフォルトの動作モードは参照モードです。すぐにデータの編集を行いたい場合はbeginEdit()
を 呼び出してください。マルチスレッド対策について
BMSコンテンツは、高速なデータアクセスを必要とするアプリケーションに配慮するため、BMSライブラリの設計ポリシーとして マルチスレッドへの対策を行っていません。そのため、BMSコンテンツを含め単一のオブジェクトへ複数のスレッドから アクセスした場合には、ドキュメントに記載の動作内容およびその後の動作の整合性を保証対象外としています。 複数のスレッドから単一のオブジェクトを操作する予定がある場合には、個々のアプリケーションの責任でマルチスレッド対策を 行うようにしてください。データサイズについて
BMSコンテンツは複数の要素から成る多くのデータ同士が複雑にリンクして構成されています。 楽曲の長さ・構成内容によっては数万~数十万オブジェクトが生成され、BMSコンテンツのサイズが数MBから数十MBになる可能性があります。 また、BMSコンテンツを扱うアプリケーションの特性上、同時に複数の画像や音声データがメモリ上に展開されることが予想されます。 そのため、複数のBMSコンテンツをメモリ上に展開することはアプリケーションの省メモリ設計の観点から推奨されません。 BMSコンテンツから必要な情報を取り出した後は速やかにオブジェクトを破棄してください。
-
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 BmsContent(BmsContent src)
指定されたBMSコンテンツと同じ内容の新しいBMSコンテンツオブジェクトを構築します。BmsContent(BmsContent src, Function<BmsDeclarationElement,String> cnvDecl, Function<BmsMetaElement,Object> cnvMeta, Function<BmsMeasureValue,Object> cnvMv, UnaryOperator<BmsNote> cnvNote)
指定されたBMSコンテンツをコピー元とした新しいBMSコンテンツオブジェクトを構築します。BmsContent(BmsSpec spec)
新しいBMSコンテンツオブジェクトを構築します。
-
メソッドの概要
すべてのメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 protected void
assertIsEditMode()
動作モードが編集モードかどうかをテストするアサーションprotected void
assertIsReferenceMode()
動作モードが参照モードかどうかをテストするアサーションvoid
beginEdit()
BMSコンテンツを編集モードに変更します。boolean
containsDeclaration(String name)
指定した名前のBMS宣言が存在するかを判定します。boolean
containsIndexedMeta(String name, int index)
索引付きメタ情報に値が設定されているかどうか判定します。boolean
containsMeasureValue(int channel, int measure)
小節に小節データが登録されているかどうかを返します。boolean
containsMeasureValue(int channel, int index, int measure)
小節に小節データが登録されているかどうかを返します。boolean
containsMeta(BmsMetaKey key)
指定したメタ情報キーに該当するメタ情報に1件以上値が設定されているかどうか判定します。boolean
containsMeta(BmsMetaKey key, int index)
指定したメタ情報キー・インデックスに該当するメタ情報に値が設定されているかどうか判定します。boolean
containsMeta(String name, BmsUnit unit)
指定した名称・単位のメタ情報に1件以上値が設定されているかどうか判定します。boolean
containsMeta(String name, BmsUnit unit, int index)
指定した名称・単位・インデックスのメタ情報に値が設定されているかどうか判定します。boolean
containsMultipleMeta(String name, int index)
重複可能メタ情報に値が設定されているかどうか判定します。boolean
containsSingleMeta(String name)
単体メタ情報に値が設定されているかどうかを判定します。int
countNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。int
countNotes(int measure, double tick, Predicate<BmsNote> isCounting)
指定楽曲位置のノートの数を数えます。int
countNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。int
countNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。int
countNotes(BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。int
countNotes(BmsAt at, Predicate<BmsNote> isCounting)
指定楽曲位置のノートの数を数えます。int
countNotes(Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。Stream<BmsDeclarationElement>
declarations()
BMSコンテンツに登録されたBMS宣言を登録順に走査するストリームを返します。void
edit(Runnable editor)
BMSコンテンツを編集モードに変更し、指定したエディタ関数を実行します。void
endEdit()
BMSコンテンツを参照モードに変更します。void
enumNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。void
enumNotes(int measure, double tick, Consumer<BmsNote> enumNote)
指定楽曲位置のノートを列挙します。void
enumNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。void
enumNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。void
enumNotes(BmsAt atBegin, BmsAt atEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。void
enumNotes(BmsAt at, Consumer<BmsNote> enumNote)
指定楽曲位置のノートを列挙します。void
enumNotes(Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。byte[]
generateHash()
BMSコンテンツの内容からハッシュ値を計算し、結果を返します。long
getChangeBpmCount()
BPM変化回数を取得します。int
getChannelDataCount(int channel, int measure)
指定小節に格納されたデータの数を取得します。String
getDeclaration(String name)
指定した名前のBMS宣言の値を取得します。Map<String,String>
getDeclarations()
全てのBMS宣言の名前と値の一覧を取得します。<T> T
getIndexedMeta(String name, int index)
索引付き可能メタ情報の値を取得します。int
getIndexedMetaCount(String name)
索引付きメタ情報の数を取得します。<T> Map<Integer,T>
getIndexedMetas(String name)
索引付きメタ情報の値マップを取得します。double
getInitialBpm()
初期BPMを取得します。double
getMaxBpm()
最大BPMを取得します。int
getMeasureCount()
楽曲の小節数を取得します。double
getMeasureTickCount(int measure)
小節の刻み数を取得します。<T> T
getMeasureValue(int channel, int measure)
小節に設定された小節データを取得します。<T> T
getMeasureValue(int channel, int index, int measure)
小節に設定された小節データを取得します。<T> T
getMeta(BmsMetaKey key)
指定したメタ情報キーに該当するメタ情報の値を取得します。<T> T
getMeta(BmsMetaKey key, int index)
指定したメタ情報キーに該当するメタ情報の値を取得します。<T> T
getMeta(String name, BmsUnit unit, int index)
指定した名称・単位のメタ情報の値を取得します。int
getMetaCount(BmsMetaKey key)
指定したメタ情報キーに該当するメタ情報の数を取得します。int
getMetaCount(String name, BmsUnit unit)
指定した名称・単位のメタ情報の数を取得します。double
getMinBpm()
最小BPMを取得します。<T> T
getMultipleMeta(String name, int index)
重複可能メタ情報の値を取得します。int
getMultipleMetaCount(String name)
重複可能メタ情報の数を取得します。<T> List<T>
getMultipleMetas(String name)
重複可能メタ情報の値リストを取得します。BmsNote
getNextNote(int channel, int measure, double tick, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。BmsNote
getNextNote(int channel, int index, int measure, double tick, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。BmsNote
getNextNote(int channel, int index, BmsAt at, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。BmsNote
getNextNote(int channel, BmsAt at, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。BmsNote
getNote(int channel, int measure, double tick)
1個のノートを取得します。BmsNote
getNote(int channel, int index, int measure, double tick)
1個のノートを取得します。BmsNote
getNote(int channel, int index, BmsAt at)
1個のノートを取得します。BmsNote
getNote(int channel, BmsAt at)
1個のノートを取得します。BmsNote
getPreviousNote(int channel, int measure, double tick, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。BmsNote
getPreviousNote(int channel, int index, int measure, double tick, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。BmsNote
getPreviousNote(int channel, int index, BmsAt at, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。BmsNote
getPreviousNote(int channel, BmsAt at, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。Object
getResolvedNoteValue(int channel, int measure, double tick)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。Object
getResolvedNoteValue(int channel, int index, int measure, double tick)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。Object
getResolvedNoteValue(int channel, int index, BmsAt at)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。Object
getResolvedNoteValue(int channel, BmsAt at)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。Object
getResolvedNoteValue(BmsNote note)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。<T> T
getSingleMeta(String name)
単体メタ情報の値を取得します。int
getSingleMetaCount(String name)
単体メタ情報の数を取得します。BmsSpec
getSpec()
BMSコンテンツに関連付けたBMS仕様を取得します。long
getStopCount()
譜面停止回数を取得します。Stream<BmsMetaElement>
indexedMetas()
このBMSコンテンツの索引付きメタ情報を走査します。Stream<BmsMetaElement>
indexedMetas(String name)
指定した名前の索引付きメタ情報を走査します。void
insertMeasure(int measureWhere)
指定位置に小節を挿入します。void
insertMeasure(int measureWhere, int count)
指定位置に小節を挿入します。boolean
isEditMode()
現在の動作モードが「編集モード」であるかどうかを返します。boolean
isReferenceMode()
現在の動作モードが「参照モード」であるかどうかを返します。List<BmsNote>
listNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(int measure, double tick, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(BmsAt at, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。Stream<BmsMetaElement>
metas()
このBMSコンテンツのメタ情報を走査します。Stream<BmsMetaElement>
multipleMetas()
このBMSコンテンツの複数メタ情報を走査します。Stream<BmsMetaElement>
multipleMetas(String name)
指定した名前の複数メタ情報を走査します。protected void
onBeginEdit()
beginEdit()
が呼ばれ、動作モードが編集モードに遷移した時に呼ばれます。protected void
onEndEdit(boolean isRecalculateTime)
endEdit()
が呼ばれ、動作モードが参照モードに遷移した時に呼ばれます。BmsNote
pointOf(int measureFrom, double tickFrom, Predicate<BmsNote> judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。BmsNote
pointOf(BmsAt atFrom, Predicate<BmsNote> judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。double
pointToTime(int measure, double tick)
小節番号・刻み位置を時間(秒)に変換します。double
pointToTime(BmsAt at)
小節番号・刻み位置を時間(秒)に変換します。void
putDeclaration(BmsDeclarationElement declaration)
指定したBMS宣言を追加します。void
putDeclaration(String name, String value)
指定した名前のBMS宣言を追加します。void
putMeta(BmsMetaElement meta)
指定したメタ情報要素をBMSコンテンツに追加します。void
putMultipleMeta(String name, Object value)
指定した重複可能メタ情報のリスト末尾に値を挿入します。BmsNote
putNote(int channel, int measure, double tick, int value)
譜面に新しいノートを追加します。<T extends BmsNote>
TputNote(int channel, int measure, double tick, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。BmsNote
putNote(int channel, int index, int measure, double tick, int value)
譜面に新しいノートを追加します。<T extends BmsNote>
TputNote(int channel, int index, int measure, double tick, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。BmsNote
putNote(int channel, int index, BmsAt at, int value)
譜面に新しいノートを追加します。<T extends BmsNote>
TputNote(int channel, int index, BmsAt at, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。BmsNote
putNote(int channel, BmsAt at, int value)
譜面に新しいノートを追加します。<T extends BmsNote>
TputNote(int channel, BmsAt at, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。void
putTimeline(BmsTimelineElement timeline)
指定したメタ情報要素をBMSコンテンツに追加します。boolean
removeDeclaration(String name)
指定した名前のBMS宣言を消去します。void
removeMeasure(int measureWhere)
指定位置の小節を消去します。void
removeMeasure(int measureWhere, int count)
指定位置の小節を消去します。boolean
removeNote(int channel, int measure, double tick)
ノートを消去します。boolean
removeNote(int channel, int index, int measure, double tick)
ノートを消去します。int
removeNote(int channelBegin, int channelEnd, int measureBegin, int measureEnd, Predicate<BmsNote> isRemoveTarget)
指定範囲の選択されたノートを消去します。boolean
removeNote(int channel, int index, BmsAt at)
ノートを消去します。int
removeNote(int measureBegin, int measureEnd, Predicate<BmsNote> isRemoveTarget)
指定範囲の選択されたノートを消去します。boolean
removeNote(int channel, BmsAt at)
ノートを消去します。int
removeNote(Predicate<BmsNote> isRemoveTarget)
選択されたノートを消去します。BmsPoint
seekNextPoint(int measure, double tick, boolean inclusiveFrom, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。BmsPoint
seekNextPoint(int measure, double tick, boolean inclusiveFrom, IntPredicate chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノート、小節データ、または小節線を検索し、その楽曲位置を返します。BmsPoint
seekNextPoint(BmsAt at, boolean inclusiveFrom, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。BmsPoint
seekNextPoint(BmsAt at, boolean inclusiveFrom, IntPredicate chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。BmsPoint
seekPoint(int measureFrom, double tickFrom, double offsetTick, BmsPoint outPoint)
原点の楽曲位置から指定刻み数分だけ移動した楽曲位置を計算します。BmsPoint
seekPoint(BmsAt atFrom, double offsetTick, BmsPoint outPoint)
原点の楽曲位置から指定刻み数分だけ移動した楽曲位置を計算します。void
setIndexedMeta(String name, int index, Object value)
索引付きメタ情報に値を設定します。void
setInitialBpm(double bpm)
初期BPMを設定します。void
setMeasureValue(int channel, int index, int measure, Object value)
小節に値を設定します。void
setMeasureValue(int channel, int measure, Object value)
小節に値を設定します。void
setMeta(BmsMetaKey key, int index, Object value)
指定したメタ情報キーに該当するメタ情報に値を設定します。void
setMeta(BmsMetaKey key, Object value)
指定したメタ情報キーに該当するメタ情報に値を設定します。void
setMeta(String name, BmsUnit unit, int index, Object value)
指定した名称・単位のメタ情報に値を設定します。void
setMultipleMeta(String name, int index, Object value)
重複可能メタ情報に値を設定します。void
setSingleMeta(String name, Object value)
単体メタ情報に値を設定します。Stream<BmsMetaElement>
singleMetas()
このBMSコンテンツの単体メタ情報を走査します。void
swapChannel(int channel1, int channel2)
指定チャンネル同士のデータ内容を入れ替えます。void
swapChannel(int channel1, int index1, int channel2, int index2)
指定チャンネル同士のデータ内容を入れ替えます。Stream<BmsTimelineElement>
timeline()
タイムライン全体を操作するストリームを返します。Stream<BmsTimelineElement>
timeline(int measure, double tick)
タイムラインの指定楽曲位置のみを走査するストリームを返します。Stream<BmsTimelineElement>
timeline(int measureBegin, double tickBegin, int measureEnd, double tickEnd)
タイムラインの指定楽曲位置の範囲を走査するストリームを返します。Stream<BmsTimelineElement>
timeline(BmsAt at)
タイムラインの指定楽曲位置のみを走査するストリームを返します。Stream<BmsTimelineElement>
timeline(BmsAt atBegin, BmsAt atEnd)
タイムラインの指定楽曲位置の範囲を走査するストリームを返します。BmsPoint
timeToPoint(double timeSec, BmsPoint outPoint)
時間(秒)を楽曲位置(小節番号/刻み位置)に変換します。
-
-
-
コンストラクタの詳細
-
BmsContent
public BmsContent(BmsSpec spec)
新しいBMSコンテンツオブジェクトを構築します。BMSコンテンツ構築直後のデータは空になっています。データを構築するには本クラスの各種メソッドを使用しますが、 BMSファイルを読み込んでBMSコンテンツを生成する場合は
BmsLoader
を使用することを推奨します。- パラメータ:
spec
- コンテンツに関連付けるBMS仕様- 例外:
NullPointerException
- specがnull
-
BmsContent
public BmsContent(BmsContent src)
指定されたBMSコンテンツと同じ内容の新しいBMSコンテンツオブジェクトを構築します。入力BMSコンテンツから全てのBMS宣言、メタ情報、小節データ、及びノートをコピーし、 指定されたBMSコンテンツと同じ内容になるように初期化します。
入力BMSコンテンツは参照モードでなければなりません。編集モードのBMSコンテンツを指定すると例外をスローします。
- パラメータ:
src
- コピー元BMSコンテンツ- 例外:
NullPointerException
- srcがnullIllegalArgumentException
- srcが編集モード
-
BmsContent
public BmsContent(BmsContent src, Function<BmsDeclarationElement,String> cnvDecl, Function<BmsMetaElement,Object> cnvMeta, Function<BmsMeasureValue,Object> cnvMv, UnaryOperator<BmsNote> cnvNote)
指定されたBMSコンテンツをコピー元とした新しいBMSコンテンツオブジェクトを構築します。このコンストラクタではコピー元BMSコンテンツの各値を変換しながら新しいBMSコンテンツオブジェクトを構築する機能を提供します。 変換処理は引数にてデータコンバータ関数として渡します。変換の必要がないデータのコンバータにはnullを指定してください。
BMS宣言、メタ情報、小節データのコンバータでは入力として各要素データを受け取り、変換後の値を返します。 メタ情報、小節データでは各要素のデータ型に適合しないデータを返すと例外がスローされるので注意してください。 コピーしたくない要素はnullを返すことで当該要素のコピーをスキップできます。
メタ情報に限り、値の設定されていない単体メタ情報もコンバータ関数に入力されます。 この動作仕様は、値の設定されていない単体メタ情報への値の設定を行いたいケースへ対応するためです。 値の設定有無は
BmsMetaElement.isContain()
で判定してください。ノートのコンバータではノートのアドレス、値の全てを変換対象とすることができます。 変換を行う場合は
BmsNote.newNote(int, int, int, double, int)
で新しいノートのインスタンスを生成してください。 チャンネル番号には配列型を指定してください。それ以外の型のチャンネルを指定すると例外がスローされます。 また、重複可能チャンネルから重複不可チャンネルへの変換を行うと、チャンネルインデックスが1以上のノートを転送する際にエラーとなります。入力BMSコンテンツは参照モードでなければなりません。編集モードのBMSコンテンツを指定すると例外をスローします。
- パラメータ:
src
- コピー元BMSコンテンツcnvDecl
- BMS宣言変換関数またはnullcnvMeta
- メタ情報変換関数またはnullcnvMv
- 小節データ変換関数またはnullcnvNote
- ノート変換関数またはnull- 例外:
NullPointerException
- srcがnullIllegalArgumentException
- srcが編集モードClassCastException
- メタ情報・小節データの変換で、当該要素のデータ型に適合しないデータを返したIllegalArgumentException
- メタ情報の変換で、初期BPMメタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- メタ情報の変換で、BPM変更メタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- メタ情報の変換で、譜面停止時間メタ情報にBmsSpec.STOP_MIN
未満またはBmsSpec.STOP_MAX
超過の値を設定しようとしたIllegalArgumentException
- 小節データの変換で、小節長にBmsSpec.LENGTH_MIN
未満またはBmsSpec.LENGTH_MAX
超過の値を設定しようとしたIllegalArgumentException
- ノートの変換で、BmsSpec.CHANNEL_MIN
未満またはBmsSpec.CHANNEL_MAX
超過のチャンネル番号を返したIllegalArgumentException
- ノートの変換で、BMS仕様に存在しないチャンネル番号を返したIllegalArgumentException
- ノートの変換で、配列型以外のチャンネル番号を返したIndexOutOfBoundsException
- ノートの変換で、コピー先の重複不可チャンネルへチャンネルインデックスが1以上のノートをコピーしようとしたIllegalArgumentException
- ノートの変換で、小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- ノートの変換で、小節の刻み位置がマイナス値または当該小節の刻み数以上IllegalArgumentException
- ノートの変換で、ノートの値に0を指定したIllegalArgumentException
- ノートの変換で、ノートの値にBmsSpec.VALUE_MIN
未満またはBmsSpec.VALUE_MAX
超過の値を指定した
-
-
メソッドの詳細
-
getSpec
public final BmsSpec getSpec()
BMSコンテンツに関連付けたBMS仕様を取得します。- 戻り値:
- BMS仕様
-
putDeclaration
public final void putDeclaration(String name, String value)
指定した名前のBMS宣言を追加します。同じ名前のBMS宣言が存在する場合は新しい値で上書きします。
名前はアルファベットの大文字と小文字を区別して扱います。
名前は1文字目が英字かアンダースコア、2文字目以降は英数字かアンダースコアでなければなりません。 値に使用する文字で、必要なものはエスケープしなければなりません。(例:\")
- パラメータ:
name
- BMS宣言の名称value
- 値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullNullPointerException
- valueがnullIllegalArgumentException
- nameの書式が不正IllegalArgumentException
- valueの書式が不正
-
putDeclaration
public final void putDeclaration(BmsDeclarationElement declaration)
指定したBMS宣言を追加します。同じ名前のBMS宣言が存在する場合は新しい値で上書きします。
- パラメータ:
declaration
- 追加対象のBMS宣言- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- declarationがnull
-
removeDeclaration
public final boolean removeDeclaration(String name)
指定した名前のBMS宣言を消去します。- パラメータ:
name
- BMS宣言の名称- 戻り値:
- 該当するBMS宣言を消去した場合はtrue、BMS宣言が存在しない場合はfalse
- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnull
-
containsDeclaration
public final boolean containsDeclaration(String name)
指定した名前のBMS宣言が存在するかを判定します。- パラメータ:
name
- BMS宣言の名称- 戻り値:
- 該当するBMS宣言が存在する場合はtrue、存在しない場合はfalse
- 例外:
NullPointerException
- nameがnull
-
getDeclaration
public final String getDeclaration(String name)
指定した名前のBMS宣言の値を取得します。- パラメータ:
name
- BMS宣言の名称- 戻り値:
- 該当するBMS宣言の値、存在しない場合はnull
- 例外:
NullPointerException
- nameがnull
-
getDeclarations
public final Map<String,String> getDeclarations()
全てのBMS宣言の名前と値の一覧を取得します。当メソッドはBMSコンテンツが保有する全てのBMS宣言マップのコピーを返します。 当メソッド呼び出し後にBMSコンテンツにBMS宣言を追加しても返されたマップには反映されません。
BMS宣言は
putDeclaration(String, String)
等で登録された順で一覧化されます。- 戻り値:
- BMS宣言の名前と値のマップ
-
declarations
public final Stream<BmsDeclarationElement> declarations()
BMSコンテンツに登録されたBMS宣言を登録順に走査するストリームを返します。- 戻り値:
- BMS宣言を走査するストリーム
-
setSingleMeta
public final void setSingleMeta(String name, Object value)
単体メタ情報に値を設定します。値にnullを設定することで当該メタ情報の値を消去します。これは、値を指定しないことを意味し、
getSingleMeta(java.lang.String)
で値を取得した場合には、そのメタ情報の初期値を返します。 しかし、値は消去されているためcontainsSingleMeta(java.lang.String)
はfalseを返すことに注意してください。指定のメタ情報が基数選択メタ情報の場合、設定可能な値はnull, 16, 36, 62のいずれかのみになります。 それ以外の値を指定しようとすると例外がスローされます。また、基数選択メタ情報を更新したとしても、 基数選択が影響するデータが自動的に範囲内に収められる等の処理は行われません。 選択された基数が作用するのはBMSコンテンツを標準フォーマットで出力しようとする時です。 詳細な動作仕様については
BmsStandardSaver
を参照してください。- パラメータ:
name
- メタ情報の名称value
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないClassCastException
- valueが設定先メタ情報のデータ型に変換できないIllegalArgumentException
- 初期BPMメタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- 基数選択メタ情報にnull, 16, 36, 62以外の値を設定しようとした
-
setMultipleMeta
public final void setMultipleMeta(String name, int index, Object value)
重複可能メタ情報に値を設定します。重複可能メタ情報には値を複数登録できます。メタ情報は可変長リストで管理されており、リストのどの部分に 値を設定するかはインデックス値で決定します。インデックス値までの領域に値が存在しない場合、歯抜けの領域には 当該メタ情報の初期値が自動で設定されます。
値を消去するには、値にnullを指定します。消去した値より後ろの値は左詰めされます。
重複可能メタ情報のリスト末尾に値を挿入したい場合は
putMultipleMeta(java.lang.String, java.lang.Object)
を使用することを推奨します。- パラメータ:
name
- メタ情報の名称index
- 設定位置を示すインデックスvalue
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないIndexOutOfBoundsException
- indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外ClassCastException
- valueが設定先メタ情報のデータ型に変換できない
-
setIndexedMeta
public final void setIndexedMeta(String name, int index, Object value)
索引付きメタ情報に値を設定します。索引付きメタ情報とは、メタ情報の名称の後ろに00~ZZのインデックス値を付加したメタ情報のことを指します。
値を消去するには、値にnullを指定します。重複可能メタ情報とは異なり、リストの左詰めは行われません。
- パラメータ:
name
- メタ情報の名称index
- 設定箇所を示すインデックスvalue
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないIndexOutOfBoundsException
- indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外ClassCastException
- valueが設定先メタ情報のデータ型に変換できないIllegalArgumentException
- BPM変更メタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- 譜面停止時間メタ情報にBmsSpec.STOP_MIN
未満またはBmsSpec.STOP_MAX
超過の値を設定しようとした
-
setMeta
public final void setMeta(BmsMetaKey key, Object value)
指定したメタ情報キーに該当するメタ情報に値を設定します。設定の処理内容については、単位ごとのメタ情報設定メソッドの説明を参照してください。
複数・索引付きメタ情報の場合、インデックス0の値を設定します。
- パラメータ:
key
- メタ情報キーvalue
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しないClassCastException
- valueが設定先メタ情報のデータ型に変換できないIllegalArgumentException
- 初期BPMメタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- BPM変更メタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- 譜面停止時間メタ情報にBmsSpec.STOP_MIN
未満またはBmsSpec.STOP_MAX
超過の値を設定しようとした- 関連項目:
setSingleMeta(java.lang.String, java.lang.Object)
,setMultipleMeta(java.lang.String, int, java.lang.Object)
,setIndexedMeta(java.lang.String, int, java.lang.Object)
-
setMeta
public final void setMeta(BmsMetaKey key, int index, Object value)
指定したメタ情報キーに該当するメタ情報に値を設定します。設定の処理内容については、単位ごとのメタ情報設定メソッドの説明を参照してください。
単体メタ情報に値を設定する場合、インデックスには0を指定してください。
- パラメータ:
key
- メタ情報キーindex
- 設定先のインデックスvalue
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しないIndexOutOfBoundsException
- 構成単位が単体の時、indexが0以外IndexOutOfBoundsException
- 構成単位が複数の時、indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IndexOutOfBoundsException
- 構成単位が索引付きの時、indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外ClassCastException
- valueが設定先メタ情報のデータ型に変換できないIllegalArgumentException
- 初期BPMメタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- BPM変更メタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- 譜面停止時間メタ情報にBmsSpec.STOP_MIN
未満またはBmsSpec.STOP_MAX
超過の値を設定しようとした- 関連項目:
setSingleMeta(java.lang.String, java.lang.Object)
,setMultipleMeta(java.lang.String, int, java.lang.Object)
,setIndexedMeta(java.lang.String, int, java.lang.Object)
-
setMeta
public final void setMeta(String name, BmsUnit unit, int index, Object value)
指定した名称・単位のメタ情報に値を設定します。設定の処理内容については、単位ごとのメタ情報設定メソッドの説明を参照してください。
単体メタ情報に値を設定する場合、インデックスには0を指定してください。
- パラメータ:
name
- メタ情報の名称unit
- メタ情報の単位index
- 設定先のインデックスvalue
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullNullPointerException
- unitがnullIllegalArgumentException
- name, unitに合致するメタ情報が存在しないIndexOutOfBoundsException
- unitがSINGLE
の時、indexが0以外IndexOutOfBoundsException
- unitがMULTIPLE
の時、indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IndexOutOfBoundsException
- unitがINDEXED
の時、indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外ClassCastException
- valueが設定先メタ情報のデータ型に変換できないIllegalArgumentException
- 初期BPMメタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- BPM変更メタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとしたIllegalArgumentException
- 譜面停止時間メタ情報にBmsSpec.STOP_MIN
未満またはBmsSpec.STOP_MAX
超過の値を設定しようとした- 関連項目:
setSingleMeta(java.lang.String, java.lang.Object)
,setMultipleMeta(java.lang.String, int, java.lang.Object)
,setIndexedMeta(java.lang.String, int, java.lang.Object)
-
putMeta
public final void putMeta(BmsMetaElement meta)
指定したメタ情報要素をBMSコンテンツに追加します。当メソッドは同一、または互換性のあるBMS仕様を持つ別のBMSコンテンツで走査したメタ情報を追加する時に使用することを想定しています。 互換性のないBMS仕様を持つBMSコンテンツを走査した結果取得したメタ情報要素を指定するとBMS仕様違反によりメタ情報を追加できない可能性があり、 多くの場合例外がスローされる結果になります。原則として同一のBMS仕様を持つBMSコンテンツ間のメタ情報の転送に使用することを強く推奨します。
データが未登録のメタ情報要素を指定した場合、BMSコンテンツからそのメタ情報のデータを消去します。 また、複数・索引付きメタ情報で、当該メタ情報のデータが0個を表すメタ情報要素(
BmsMetaElement.getIndex()
がマイナス値を示す) を指定した場合、当メソッドは何も行いません。- パラメータ:
meta
- メタ情報要素- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- metaがnullClassCastException
- メタ情報の値が設定先メタ情報のデータ型に変換できない
-
putMultipleMeta
public final void putMultipleMeta(String name, Object value)
指定した重複可能メタ情報のリスト末尾に値を挿入します。このメソッドでは、値にnullを指定することによる消去は行えません。
- パラメータ:
name
- メタ情報の名称value
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullNullPointerException
- valueがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないIndexOutOfBoundsException
- リストが一杯でこれ以上値を挿入できないClassCastException
- valueが設定先メタ情報のデータ型に変換できない
-
getSingleMeta
public final <T> T getSingleMeta(String name)
単体メタ情報の値を取得します。メタ情報に値が設定されていない場合、そのメタ情報の初期値を返します。値が設定されているかどうかを 判定したい場合は
containsSingleMeta(java.lang.String)
を使用してください。取得した値のデータ型を判別したい場合はメタ情報のデータ型を参照し、
BmsType.getNativeType()
が 返す値を調べます。メタ情報のデータ型が明確に判明している場合は直接キャストして構いません。- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
name
- メタ情報の名称- 戻り値:
- メタ情報の値
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getMultipleMeta
public final <T> T getMultipleMeta(String name, int index)
重複可能メタ情報の値を取得します。メタ情報に値が設定されていない場合、そのメタ情報の初期値を返します。値が設定されているかどうかを 判定したい場合は
containsMultipleMeta(java.lang.String, int)
を使用してください。取得した値のデータ型を判別したい場合はメタ情報のデータ型を参照し、
BmsType.getNativeType()
が 返す値を調べます。メタ情報のデータ型が明確に判明している場合は直接キャストして構いません。- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
name
- メタ情報の名称index
- インデックス- 戻り値:
- メタ情報の値
- 例外:
NullPointerException
- nameがnullIndexOutOfBoundsException
- indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getIndexedMeta
public final <T> T getIndexedMeta(String name, int index)
索引付き可能メタ情報の値を取得します。メタ情報に値が設定されていない場合、そのメタ情報の初期値を返します。値が設定されているかどうかを 判定したい場合は
containsIndexedMeta(java.lang.String, int)
を使用してください。取得した値のデータ型を判別したい場合はメタ情報のデータ型を参照し、
BmsType.getNativeType()
が 返す値を調べます。メタ情報のデータ型が明確に判明している場合は直接キャストして構いません。- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
name
- メタ情報の名称index
- インデックス- 戻り値:
- メタ情報の値
- 例外:
NullPointerException
- nameがnullIndexOutOfBoundsException
- indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外IllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getMeta
public final <T> T getMeta(BmsMetaKey key)
指定したメタ情報キーに該当するメタ情報の値を取得します。取得の処理内容については、単位ごとのメタ情報取得メソッドの説明を参照してください。
複数・索引付きメタ情報の場合、インデックス0の値を取得します。
- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
key
- メタ情報キー- 戻り値:
- メタ情報の値
- 例外:
NullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しない- 関連項目:
getSingleMeta(java.lang.String)
,getMultipleMeta(java.lang.String, int)
,getIndexedMeta(java.lang.String, int)
-
getMeta
public final <T> T getMeta(BmsMetaKey key, int index)
指定したメタ情報キーに該当するメタ情報の値を取得します。取得の処理内容については、単位ごとのメタ情報取得メソッドの説明を参照してください。
単体メタ情報に値を設定する場合、インデックスには0を指定してください。
- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
key
- メタ情報キーindex
- 設定先のインデックス- 戻り値:
- メタ情報の値
- 例外:
NullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しないIndexOutOfBoundsException
- 構成単位が単体の時、indexが0以外IndexOutOfBoundsException
- 構成単位が複数の時、indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IndexOutOfBoundsException
- 構成単位が索引付きの時、indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外- 関連項目:
getSingleMeta(java.lang.String)
,getMultipleMeta(java.lang.String, int)
,getIndexedMeta(java.lang.String, int)
-
getMeta
public final <T> T getMeta(String name, BmsUnit unit, int index)
指定した名称・単位のメタ情報の値を取得します。取得の処理内容については、単位ごとのメタ情報取得メソッドの説明を参照してください。
単体メタ情報に値を設定する場合、インデックスには0を指定してください。
- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
name
- メタ情報の名称unit
- メタ情報の単位index
- 設定先のインデックス- 戻り値:
- メタ情報の値
- 例外:
NullPointerException
- nameがnullNullPointerException
- unitがnullIllegalArgumentException
- name, unitに合致するメタ情報が存在しないIndexOutOfBoundsException
- unitがSINGLE
の時、indexが0以外IndexOutOfBoundsException
- unitがMULTIPLE
の時、indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IndexOutOfBoundsException
- unitがINDEXED
の時、indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外- 関連項目:
getSingleMeta(java.lang.String)
,getMultipleMeta(java.lang.String, int)
,getIndexedMeta(java.lang.String, int)
-
getMultipleMetas
public final <T> List<T> getMultipleMetas(String name)
重複可能メタ情報の値リストを取得します。- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
name
- メタ情報の名称- 戻り値:
- 重複可能メタ情報の値リスト
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getIndexedMetas
public final <T> Map<Integer,T> getIndexedMetas(String name)
索引付きメタ情報の値マップを取得します。このメソッドで取得できるマップに格納されるのは明示的に値を設定された索引のみです。
getIndexedMeta(java.lang.String, int)
では未設定の索引の値は初期値を返しますが、返されるマップに同じ索引を指定しても nullが返ることに注意してください。- 型パラメータ:
T
- メタ情報のデータ型- パラメータ:
name
- メタ情報の名称- 戻り値:
- 索引付きメタ情報の値マップ
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getSingleMetaCount
public final int getSingleMetaCount(String name)
単体メタ情報の数を取得します。単体メタ情報は1件のデータからなる情報です。値が設定されている場合に1を返します。
- パラメータ:
name
- メタ情報の名称- 戻り値:
- メタ情報の数
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getMultipleMetaCount
public final int getMultipleMetaCount(String name)
重複可能メタ情報の数を取得します。- パラメータ:
name
- メタ情報の名称- 戻り値:
- メタ情報の数
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getIndexedMetaCount
public final int getIndexedMetaCount(String name)
索引付きメタ情報の数を取得します。- パラメータ:
name
- メタ情報の名称- 戻り値:
- メタ情報の数
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
getMetaCount
public final int getMetaCount(BmsMetaKey key)
指定したメタ情報キーに該当するメタ情報の数を取得します。取得の処理内容については、単位ごとのメタ情報件数取得メソッドの説明を参照してください。
- パラメータ:
key
- メタ情報キー- 戻り値:
- メタ情報の数
- 例外:
NullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しない- 関連項目:
getSingleMetaCount(java.lang.String)
,getMultipleMetaCount(java.lang.String)
,getIndexedMetaCount(java.lang.String)
-
getMetaCount
public final int getMetaCount(String name, BmsUnit unit)
指定した名称・単位のメタ情報の数を取得します。取得の処理内容については、単位ごとのメタ情報件数取得メソッドの説明を参照してください。
- パラメータ:
name
- メタ情報の名称unit
- メタ情報の単位- 戻り値:
- メタ情報の数
- 例外:
NullPointerException
- nameがnullNullPointerException
- unitがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない- 関連項目:
getSingleMetaCount(java.lang.String)
,getMultipleMetaCount(java.lang.String)
,getIndexedMetaCount(java.lang.String)
-
containsSingleMeta
public final boolean containsSingleMeta(String name)
単体メタ情報に値が設定されているかどうかを判定します。- パラメータ:
name
- メタ情報の名称- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しない
-
containsMultipleMeta
public final boolean containsMultipleMeta(String name, int index)
重複可能メタ情報に値が設定されているかどうか判定します。- パラメータ:
name
- メタ情報の名称index
- インデックス- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないIndexOutOfBoundsException
- indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外
-
containsIndexedMeta
public final boolean containsIndexedMeta(String name, int index)
索引付きメタ情報に値が設定されているかどうか判定します。- パラメータ:
name
- メタ情報の名称index
- インデックス- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないIndexOutOfBoundsException
- indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外
-
containsMeta
public final boolean containsMeta(BmsMetaKey key)
指定したメタ情報キーに該当するメタ情報に1件以上値が設定されているかどうか判定します。単体メタ情報の場合、そのメタ情報に値が設定されていればtrueを返します。複数・索引付きメタ情報の場合、そのメタ情報に1件でも 値が設定されていればtrueを返します。登録先インデックスの値は問いません。
- パラメータ:
key
- メタ情報キー- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しない
-
containsMeta
public final boolean containsMeta(BmsMetaKey key, int index)
指定したメタ情報キー・インデックスに該当するメタ情報に値が設定されているかどうか判定します。判定の処理内容については、単位ごとの判定メソッドの説明を参照してください。
単体メタ情報に値を設定する場合、インデックスには0を指定してください。
- パラメータ:
key
- メタ情報キーindex
- インデックス- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- keyがnullIllegalArgumentException
- メタ情報キーに合致するメタ情報が存在しないIndexOutOfBoundsException
- 構成単位が単体の時、indexが0以外IndexOutOfBoundsException
- 構成単位が複数の時、indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IndexOutOfBoundsException
- 構成単位が索引付きの時、indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外- 関連項目:
containsSingleMeta(java.lang.String)
,containsMultipleMeta(java.lang.String, int)
,containsIndexedMeta(java.lang.String, int)
-
containsMeta
public final boolean containsMeta(String name, BmsUnit unit, int index)
指定した名称・単位・インデックスのメタ情報に値が設定されているかどうか判定します。判定の処理内容については、単位ごとの判定メソッドの説明を参照してください。
単体メタ情報に値を設定する場合、インデックスには0を指定してください。
- パラメータ:
name
- メタ情報の名称unit
- メタ情報の単位index
- インデックス- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- nameがnullNullPointerException
- unitがnullIllegalArgumentException
- 名称・単位に合致するメタ情報が存在しないIndexOutOfBoundsException
- unitがSINGLE
の時、indexが0以外IndexOutOfBoundsException
- unitがMULTIPLE
の時、indexが0~BmsSpec.MULTIPLE_META_INDEX_MAX
の範囲外IndexOutOfBoundsException
- unitがINDEXED
の時、indexが0~BmsSpec.INDEXED_META_INDEX_MAX
の範囲外- 関連項目:
containsSingleMeta(java.lang.String)
,containsMultipleMeta(java.lang.String, int)
,containsIndexedMeta(java.lang.String, int)
-
containsMeta
public final boolean containsMeta(String name, BmsUnit unit)
指定した名称・単位のメタ情報に1件以上値が設定されているかどうか判定します。単体メタ情報の場合、そのメタ情報に値が設定されていればtrueを返します。複数・索引付きメタ情報の場合、そのメタ情報に1件でも 値が設定されていればtrueを返します。登録先インデックスの値は問いません。
- パラメータ:
name
- メタ情報の名称unit
- メタ情報の単位- 戻り値:
- 値が設定されている場合true
- 例外:
NullPointerException
- nameがnullNullPointerException
- unitがnullIllegalArgumentException
- 名称・単位に合致するメタ情報が存在しない
-
metas
public final Stream<BmsMetaElement> metas()
このBMSコンテンツのメタ情報を走査します。当メソッドはBMSコンテンツに設定されたBMS仕様に基づき、全てのメタ情報を走査します。 データの登録有無に関わらず、BMS仕様に登録された全てのメタ情報が走査対象になります。 走査されたメタ情報にデータが登録されているかどうかは
BmsMetaElement.isContain()
で調べてください。当メソッドでメタ情報を走査すると、単体・複数・索引付きの順でメタ情報の名称順に昇順で走査されます。 特定の構成単位のみ走査したい場合は
singleMetas()
,multipleMetas()
,indexedMetas()
を使用するほうがより効率的に操作することができます。複数・索引付きメタ情報では、当該メタ情報のデータが0件の時にインデックスが-1のメタ情報要素を走査します。 この要素には値は格納されておらず、
BmsMetaElement.getValue()
等で値を取得しても当該メタ情報の初期値を返します。当メソッドは編集モード時には使用できません。使用すると例外をスローします。 また、走査を行っている最中に編集モードに遷移してメタ情報を更新した場合、走査中の結果がどのようになるかは未定義です。
- 戻り値:
- メタ情報を走査するストリーム
- 例外:
IllegalStateException
- 動作モードが編集モード
-
singleMetas
public final Stream<BmsMetaElement> singleMetas()
このBMSコンテンツの単体メタ情報を走査します。当メソッドはBMSコンテンツに設定されたBMS仕様に基づき、全ての単体メタ情報を走査します。 データの登録有無に関わらず、BMS仕様に登録された全ての単体メタ情報が走査対象になります。 走査された単体メタ情報にデータが登録されているかどうかは
BmsMetaElement.isContain()
で調べてください。当メソッドで単体メタ情報を走査すると、メタ情報の名称順に昇順で走査されます。
当メソッドは編集モード時には使用できません。使用すると例外をスローします。 また、走査を行っている最中に編集モードに遷移して単体メタ情報を更新した場合、走査中の結果がどのようになるかは未定義です。
- 戻り値:
- 単体メタ情報を走査するストリーム
- 例外:
IllegalStateException
- 動作モードが編集モード
-
multipleMetas
public final Stream<BmsMetaElement> multipleMetas()
このBMSコンテンツの複数メタ情報を走査します。当メソッドはBMSコンテンツに設定されたBMS仕様に基づき、全ての複数メタ情報を走査します。 データの登録有無に関わらず、BMS仕様に登録された全ての複数メタ情報が走査対象になります。 走査された複数メタ情報にデータが登録されているかどうかは
BmsMetaElement.isContain()
で調べてください。当メソッドで複数メタ情報を走査すると、メタ情報の名称順に昇順で走査されます。
複数メタ情報では、当該メタ情報のデータが0件の時にインデックスが-1のメタ情報要素を走査します。 この要素には値は格納されておらず、
BmsMetaElement.getValue()
等で値を取得しても当該メタ情報の初期値を返します。当メソッドは編集モード時には使用できません。使用すると例外をスローします。 また、走査を行っている最中に編集モードに遷移して複数メタ情報を更新した場合、走査中の結果がどのようになるかは未定義です。
- 戻り値:
- 複数メタ情報を走査するストリーム
- 例外:
IllegalStateException
- 動作モードが編集モード
-
multipleMetas
public final Stream<BmsMetaElement> multipleMetas(String name)
指定した名前の複数メタ情報を走査します。当メソッドは指定した名前の複数メタ情報が走査対象になります。 走査された複数メタ情報にデータが登録されているかどうかは
BmsMetaElement.isContain()
で調べてください。当該メタ情報のデータが0件の時にインデックスが-1のメタ情報要素を走査します。 この要素には値は格納されておらず、
BmsMetaElement.getValue()
等で値を取得しても当該メタ情報の初期値を返します。当メソッドは編集モード時には使用できません。使用すると例外をスローします。 また、走査を行っている最中に編集モードに遷移して複数メタ情報を更新した場合、走査中の結果がどのようになるかは未定義です。
- パラメータ:
name
- 走査対象の複数メタ情報の名前- 戻り値:
- 複数メタ情報を走査するストリーム
- 例外:
IllegalStateException
- 動作モードが編集モードNullPointerException
- nameがnullIllegalArgumentException
- nameに該当する複数メタ情報がBMS仕様に存在しない
-
indexedMetas
public final Stream<BmsMetaElement> indexedMetas()
このBMSコンテンツの索引付きメタ情報を走査します。当メソッドはBMSコンテンツに設定されたBMS仕様に基づき、全ての索引付きメタ情報を走査します。 データの登録有無に関わらず、BMS仕様に登録された全ての索引付きメタ情報が走査対象になります。 走査された索引付きメタ情報にデータが登録されているかどうかは
BmsMetaElement.isContain()
で調べてください。当メソッドで索引付きメタ情報を走査すると、メタ情報の名称順に昇順で走査されます。
索引付きメタ情報では、当該メタ情報のデータが0件の時にインデックスが-1のメタ情報要素を走査します。 この要素には値は格納されておらず、
BmsMetaElement.getValue()
等で値を取得しても当該メタ情報の初期値を返します。当メソッドは編集モード時には使用できません。使用すると例外をスローします。 また、走査を行っている最中に編集モードに遷移して索引付きメタ情報を更新した場合、走査中の結果がどのようになるかは未定義です。
- 戻り値:
- 索引付きメタ情報を走査するストリーム
- 例外:
IllegalStateException
- 動作モードが編集モード
-
indexedMetas
public final Stream<BmsMetaElement> indexedMetas(String name)
指定した名前の索引付きメタ情報を走査します。当メソッドは指定した名前の索引付きメタ情報が走査対象になります。 走査された索引付きメタ情報にデータが登録されているかどうかは
BmsMetaElement.isContain()
で調べてください。当該メタ情報のデータが0件の時にインデックスが-1のメタ情報要素を走査します。 この要素には値は格納されておらず、
BmsMetaElement.getValue()
等で値を取得しても当該メタ情報の初期値を返します。当メソッドは編集モード時には使用できません。使用すると例外をスローします。 また、走査を行っている最中に編集モードに遷移して索引付きメタ情報を更新した場合、走査中の結果がどのようになるかは未定義です。
- パラメータ:
name
- 走査対象の索引付きメタ情報の名前- 戻り値:
- 索引付きメタ情報を走査するストリーム
- 例外:
IllegalStateException
- 動作モードが編集モードNullPointerException
- nameがnullIllegalArgumentException
- nameに該当する索引付きメタ情報がBMS仕様に存在しない
-
getInitialBpm
public final double getInitialBpm()
初期BPMを取得します。初期BPMはBMSの共通仕様で、どのようなBMS仕様にも必ずメタ情報に存在します。このメソッドを呼び出すと
getSingleMeta(String)
を呼び出して初期BPMメタ情報から値を取得した時と同等の処理を行います。- 戻り値:
- 初期BPM
-
setInitialBpm
public final void setInitialBpm(double bpm)
初期BPMを設定します。初期BPMはBMSの共通仕様で、どのようなBMS仕様にも必ずメタ情報に存在します。このメソッドを呼び出すと
setSingleMeta(String, Object)
を呼び出して初期BPMメタ情報に値を設定した時と同等の 処理を行います。- パラメータ:
bpm
- 初期BPM- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- bpmがBmsSpec.BPM_MIN
未満、またはBmsSpec.BPM_MAX
超過
-
getMinBpm
public final double getMinBpm()
最小BPMを取得します。この値は参照モードの場合のみ取得可能です。
- 戻り値:
- 最小BPM
- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
getMaxBpm
public final double getMaxBpm()
最大BPMを取得します。この値は参照モードの場合のみ取得可能です。
- 戻り値:
- 最大BPM
- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
getChangeBpmCount
public final long getChangeBpmCount()
BPM変化回数を取得します。この値は参照モードの場合のみ取得可能です。
- 戻り値:
- BPM変化回数
- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
getStopCount
public final long getStopCount()
譜面停止回数を取得します。この値は参照モードの場合のみ取得可能です。
- 戻り値:
- 譜面停止回数
- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
beginEdit
public final void beginEdit()
BMSコンテンツを編集モードに変更します。このメソッドを呼び出すことでBMSコンテンツに対するデータの更新が行えるようになります。それと同時に、 いくつかのメソッドの呼び出しが制限されます。
既に編集モードになっている状態でこのメソッドを呼び出してはいけません。
- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
endEdit
public final void endEdit()
BMSコンテンツを参照モードに変更します。このメソッドを呼び出すことでBMSコンテンツに対するデータの更新を終了します。編集モードで変更された メタ情報とノートから楽曲の時間とBPMに関する情報の再計算が行われ、呼び出し制限のかかっていたメソッドが 再び呼び出せるようになります。
既に参照モードになっている状態でこのメソッドを呼び出してはいけません。
- 例外:
IllegalStateException
- 動作モードが編集モードではない
-
edit
public final void edit(Runnable editor)
BMSコンテンツを編集モードに変更し、指定したエディタ関数を実行します。当メソッドは
beginEdit()
~編集~endEdit()
の操作を簡略化するためのものです。 この一連の手順をメソッド内で実行します。エディタ関数内で例外がスローされると、それをスローする前に自動的に
endEdit()
を実行し編集を終了します。 ただしError系(OutOfMemoryError等)はキャッチされません。Error系がスローされた後でendEdit()
が呼ばれても、複数の理由により処理中に再度Error系がスローされる可能性が高いためです。エディタ関数内で
endEdit()
を呼び出すと、当メソッド終了時には呼び出されません。当メソッドはBMSコンテンツに対して軽微な編集を1~2個行いたい場合に利用することを推奨します。 例えば、以下のような編集を行いたい場合に有効な選択肢となります。
c.edit(() -> c.setSingleMeta("#TITLE", "My Love Song"));
- パラメータ:
editor
- 編集を行うエディタ関数- 例外:
IllegalStateException
- 動作モードが参照モードではないNullPointerException
- editorがnull
-
isReferenceMode
public final boolean isReferenceMode()
現在の動作モードが「参照モード」であるかどうかを返します。- 戻り値:
- 参照モードである場合true
- 関連項目:
beginEdit()
,endEdit()
-
isEditMode
public final boolean isEditMode()
現在の動作モードが「編集モード」であるかどうかを返します。- 戻り値:
- 編集モードである場合true
- 関連項目:
beginEdit()
,endEdit()
-
onBeginEdit
protected void onBeginEdit()
beginEdit()
が呼ばれ、動作モードが編集モードに遷移した時に呼ばれます。当メソッドは、編集モードに遷移した時、継承先のクラスにて特別な処理を行う場合のトリガとして使用することを想定しています。
当メソッドの実行中は動作モードを変更できません。
beginEdit()
,endEdit()
を呼び出しても何も起こりません。
-
onEndEdit
protected void onEndEdit(boolean isRecalculateTime)
endEdit()
が呼ばれ、動作モードが参照モードに遷移した時に呼ばれます。当メソッドは、参照モードに遷移した時、継承先のクラスにて特別な処理を行う場合のトリガとして使用することを想定しています。当メソッドが 呼ばれるのは、小節ごとの時間とBPMに関する情報の再計算が完了した後です。
当メソッドの実行中は動作モードを変更できません。
beginEdit()
,endEdit()
を呼び出しても何も起こりません。- パラメータ:
isRecalculateTime
- 時間の再計算が発生したかどうか。
-
getMeasureValue
public final <T> T getMeasureValue(int channel, int measure)
小節に設定された小節データを取得します。チャンネルインデックスには0を指定します。
それ以外の処理はgetMeasureValue(int, int, int)
と同じです。- 型パラメータ:
T
- 小節データのデータ型- パラメータ:
channel
- チャンネル番号measure
- 小節番号- 戻り値:
- 小節データ
-
getMeasureValue
public final <T> T getMeasureValue(int channel, int index, int measure)
小節に設定された小節データを取得します。指定するチャンネルのデータ型は値型でなければなりません。
小節にデータが設定されていない場合、指定チャンネルの初期値を返します。 また、返された小節データの型は指定チャンネルのデータ型に対応したネイティブ型(実際のデータ型)になるので、ネイティブ型に キャストしてください。ネイティブ型については
BmsType
を参照してください。- 型パラメータ:
T
- 小節データのデータ型- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号- 戻り値:
- 小節データ
- 例外:
IllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のインデックスを指定したIllegalArgumentException
- 指定チャンネルのデータ型が値型ではないIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過
-
setMeasureValue
public final void setMeasureValue(int channel, int measure, Object value)
小節に値を設定します。チャンネルインデックスには0を指定します。
それ以外の処理はsetMeasureValue(int, int, int, Object)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号value
- 設定値
-
setMeasureValue
public final void setMeasureValue(int channel, int index, int measure, Object value)
小節に値を設定します。設定値にnullを指定すると、その小節から値を削除します。
複数のデータを保有可能なチャンネルに対してのみ、チャンネルインデックスに1以上の値を指定できます。 複数データに非対応のチャンネルには必ず0を指定してください。
小節に値を設定する前に、設定値をチャンネルに規定されているデータ型に変換します。但し、チャンネルのデータ型が任意型の場合は 設定値の参照をそのまま設定します。
当メソッドを使用して小節長を変更しようとする場合、その値はBMSライブラリで定める範囲内の値でなければなりません。 範囲外の値を指定すると例外がスローされます。
- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号value
- 設定値- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- データ重複不許可のチャンネルで0以外のインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- チャンネルのデータ型が値型、任意型ではないClassCastException
- valueをチャンネルのデータ型に変換できないIllegalArgumentException
- 小節長にBmsSpec.LENGTH_MIN
未満またはBmsSpec.LENGTH_MAX
超過の値を設定しようとした
-
containsMeasureValue
public final boolean containsMeasureValue(int channel, int measure)
小節に小節データが登録されているかどうかを返します。チャンネルインデックスには0を指定します。
それ以外の処理はcontainsMeasureValue(int, int, int)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号- 戻り値:
- 指定小節に小節データが存在する場合true
-
containsMeasureValue
public final boolean containsMeasureValue(int channel, int index, int measure)
小節に小節データが登録されているかどうかを返します。指定するチャンネルのデータ型は値型でなければなりません。
- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号- 戻り値:
- 指定小節に小節データが存在する場合true
- 例外:
IllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のインデックスを指定したIllegalArgumentException
- 指定チャンネルのデータ型が値型ではないIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過
-
getNote
public final BmsNote getNote(int channel, BmsAt at)
1個のノートを取得します。チャンネルインデックスには0を指定します。
引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetNote(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置- 戻り値:
- ノート
- 例外:
NullPointerException
- atがnull
-
getNote
public final BmsNote getNote(int channel, int index, BmsAt at)
1個のノートを取得します。引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetNote(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置- 戻り値:
- ノート
- 例外:
NullPointerException
- atがnull
-
getNote
public final BmsNote getNote(int channel, int measure, double tick)
1個のノートを取得します。チャンネルインデックスには0を指定します。
それ以外の処理はgetNote(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- ノート
-
getNote
public final BmsNote getNote(int channel, int index, int measure, double tick)
1個のノートを取得します。指定位置にノートが存在しない場合はnullを返します。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- ノート
- 例外:
IllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスにマイナス値を指定したIndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のチャンネルインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- 小節の刻み位置にマイナス値または当該小節の刻み数以上の値を指定したIllegalArgumentException
- 指定チャンネルのデータ型が配列型ではない
-
getPreviousNote
public final BmsNote getPreviousNote(int channel, BmsAt at, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。チャンネルインデックスには0を指定します。
引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetPreviousNote(int, int, int, double, boolean)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
- 例外:
NullPointerException
- atがnull
-
getPreviousNote
public final BmsNote getPreviousNote(int channel, int index, BmsAt at, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetPreviousNote(int, int, int, double, boolean)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
- 例外:
NullPointerException
- atがnull
-
getPreviousNote
public final BmsNote getPreviousNote(int channel, int measure, double tick, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。チャンネルインデックスには0を指定します。
それ以外の処理はgetPreviousNote(int, int, int, double, boolean)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
-
getPreviousNote
public final BmsNote getPreviousNote(int channel, int index, int measure, double tick, boolean inclusiveFrom)
指定位置から後退方向に存在する最初のノートを取得します。存在しない場合はnullを返します。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
- 例外:
IllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスにマイナス値を指定したIndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のチャンネルインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満または小節数以上IllegalArgumentException
- 小節の刻み位置にマイナス値または当該小節の刻み数以上を指定したIllegalArgumentException
- 指定チャンネルのデータ型が配列型ではない
-
getNextNote
public final BmsNote getNextNote(int channel, BmsAt at, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。チャンネルインデックスには0を指定します。
引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetNextNote(int, int, int, double, boolean)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
- 例外:
NullPointerException
- atがnull
-
getNextNote
public final BmsNote getNextNote(int channel, int index, BmsAt at, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetNextNote(int, int, int, double, boolean)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
- 例外:
NullPointerException
- atがnull
-
getNextNote
public final BmsNote getNextNote(int channel, int measure, double tick, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。チャンネルインデックスには0を指定します。
それ以外の処理はgetNextNote(int, int, int, double, boolean)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
-
getNextNote
public final BmsNote getNextNote(int channel, int index, int measure, double tick, boolean inclusiveFrom)
指定位置から進行方向に存在する最初のノートを取得します。存在しない場合はnullを返します。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置inclusiveFrom
- 指定位置を検索対象に含めるかどうか- 戻り値:
- 見つかったノート
- 例外:
IllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスにマイナス値を指定したIndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のチャンネルインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満または小節数以上IllegalArgumentException
- 小節の刻み位置にマイナス値または当該小節の刻み数以上を指定したIllegalArgumentException
- 指定チャンネルのデータ型が配列型ではない
-
getResolvedNoteValue
public final Object getResolvedNoteValue(BmsNote note)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。引数noteからチャンネル番号・インデックス、小節番号・刻み位置を取り出します。
それ以外の処理はgetResolvedNoteValue(int, int, int, double)
と同じです。- パラメータ:
note
- ノート- 戻り値:
- 参照先メタ情報から取り出したデータ
- 例外:
NullPointerException
- noteがnull
-
getResolvedNoteValue
public final Object getResolvedNoteValue(int channel, BmsAt at)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。チャンネルインデックスには0を指定します
引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetResolvedNoteValue(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置- 戻り値:
- 参照先メタ情報から取り出したデータ
- 例外:
NullPointerException
- atがnull
-
getResolvedNoteValue
public final Object getResolvedNoteValue(int channel, int index, BmsAt at)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。引数atから小節番号・刻み位置を取り出します。
それ以外の処理はgetResolvedNoteValue(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置- 戻り値:
- 参照先メタ情報から取り出したデータ
- 例外:
NullPointerException
- atがnull
-
getResolvedNoteValue
public final Object getResolvedNoteValue(int channel, int measure, double tick)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。チャンネルインデックスには0を指定します
それ以外の処理はgetResolvedNoteValue(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- 参照先メタ情報から取り出したデータ
-
getResolvedNoteValue
public final Object getResolvedNoteValue(int channel, int index, int measure, double tick)
指定位置のノートの値から参照メタ情報のデータを照合し、照合結果を返します。参照先メタ情報のないチャンネルを指定した場合、そのノートの値をLong型に変換して返します。
参照先メタ情報のインデックス(=ノートの値)に割り当てられたデータが存在しない場合、そのメタ情報の 初期値を返します。
- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- 参照先メタ情報から取り出したデータ
- 例外:
IllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のチャンネルインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- マイナス値または当該小節の刻み数以上の刻み位置を指定したIllegalArgumentException
- 指定チャンネルのデータ型が配列型ではない
-
pointOf
public final BmsNote pointOf(BmsAt atFrom, Predicate<BmsNote> judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。引数atFromから検索開始位置の小節番号・刻み位置を取り出します。
それ以外の処理はpointOf(int, double, Predicate)
と同じです。- パラメータ:
atFrom
- 楽曲位置judge
- 条件一致判定を行うテスター- 戻り値:
- 最初に条件に一致したノート。見つからなかった場合はnull。
- 例外:
NullPointerException
- atFromがnull
-
pointOf
public final BmsNote pointOf(int measureFrom, double tickFrom, Predicate<BmsNote> judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。検索は、原点の楽曲位置から進行方向に向かって行われます。
- パラメータ:
measureFrom
- 検索開始位置を示す小節番号tickFrom
- 検索開始位置を示す刻み位置judge
- 条件一致判定を行うテスター- 戻り値:
- 最初に条件に一致したノート。見つからなかった場合はnull。
- 例外:
IllegalArgumentException
- 検索開始位置の小節番号にノート・小節データが存在し得ない値を指定したIllegalArgumentException
- 検索開始位置の刻み位置にマイナス値または当該小節の刻み数以上の値を指定したNullPointerException
- judgeがnull
-
enumNotes
public final void enumNotes(Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。全てのノートを列挙対象とします。
それ以外の処理はenumNotes(int, int, int, double, int, double, Consumer)
と同じです。- パラメータ:
enumNote
- ノートを通知する関数- 例外:
NullPointerException
- enumNoteがnull
-
enumNotes
public final void enumNotes(BmsAt at, Consumer<BmsNote> enumNote)
指定楽曲位置のノートを列挙します。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はenumNotes(int, double, Consumer)
と同じです。- パラメータ:
at
- 楽曲位置enumNote
- ノートを通知する関数- 例外:
NullPointerException
- atがnull
-
enumNotes
public final void enumNotes(int measure, double tick, Consumer<BmsNote> enumNote)
指定楽曲位置のノートを列挙します。当メソッドは指定された小節番号、刻み位置のノートをピンポイントで列挙します。楽曲位置が少しでもずれている ノートは列挙対象とはなりません。範囲列挙を行いたい場合は他のオーバーロードメソッドを使用してください。
- パラメータ:
measure
- 列挙対象とする小節番号tick
- 列挙対象とする刻み位置enumNote
- ノートを通知する関数- 例外:
IllegalArgumentException
- measureがマイナス値または小節数以上IllegalArgumentException
- tickがマイナス値または当該小節の刻み数以上NullPointerException
- enumNoteがnull
-
enumNotes
public final void enumNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。全チャンネルを列挙対象とします。
それ以外の処理はenumNotes(int, int, int, double, int, double, Consumer)
と同じです。- パラメータ:
measureBegin
- 列挙範囲を示す最小の小節番号tickBegin
- 列挙範囲を示す最小の小節番号の刻み位置measureEnd
- 列挙範囲を示す最大の小節番号tickEnd
- 列挙範囲を示す最大の小節番号の刻み位置(この位置を含まない)enumNote
- ノートを通知する関数
-
enumNotes
public final void enumNotes(BmsAt atBegin, BmsAt atEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。全チャンネルを列挙対象とします。
引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はenumNotes(int, int, int, double, int, double, Consumer)
と同じです。- パラメータ:
atBegin
- 列挙範囲を示す最小の楽曲位置atEnd
- 列挙範囲を示す最大の楽曲位置(この位置を含まない)enumNote
- ノートを通知する関数- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
enumNotes
public final void enumNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はenumNotes(int, int, int, double, int, double, Consumer)
と同じです。- パラメータ:
channelBegin
- 列挙範囲を示す最小のチャンネル番号channelEnd
- 列挙範囲を示す最大のチャンネル番号(この番号を含まない)atBegin
- 列挙範囲を示す最小の楽曲位置atEnd
- 列挙範囲を示す最大の楽曲位置(この位置を含まない)enumNote
- ノートを通知する関数- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
enumNotes
public final void enumNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, Consumer<BmsNote> enumNote)
指定範囲のノートを列挙します。見つかったノートは指定の関数に通知されます。
小節数が0(ノートが全く追加されていない)のコンテンツに対して当メソッドを呼び出すと何も行われません。
- パラメータ:
channelBegin
- 列挙範囲を示す最小のチャンネル番号channelEnd
- 列挙範囲を示す最大のチャンネル番号(この番号を含まない)measureBegin
- 列挙範囲を示す最小の小節番号tickBegin
- 列挙範囲を示す最小の小節番号の刻み位置measureEnd
- 列挙範囲を示す最大の小節番号tickEnd
- 列挙範囲を示す最大の小節番号の刻み位置(この位置を含まない)enumNote
- ノートを通知する関数- 例外:
IllegalArgumentException
- channelBeginに小節データ・ノートを登録できないチャンネル番号を指定したIllegalArgumentException
- channelEndにBmsSpec.CHANNEL_MAX
を超える値を指定したIllegalArgumentException
- measureBeginにBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過の値を指定したIllegalArgumentException
- tickBeginにマイナス値または当該小節の刻み数以上の値を指定したIllegalArgumentException
- measureEndにBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過の値を指定したIllegalArgumentException
- tickEndにマイナス値、当該小節の刻み数以上、または小節番号==小節数の時に0以外の値を指定したNullPointerException
- enumNoteがnull
-
listNotes
public final List<BmsNote> listNotes(Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。全てのノートを取得対象とします。
それ以外の処理はlistNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
-
listNotes
public final List<BmsNote> listNotes(BmsAt at, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はlistNotes(int, double, Predicate)
と同じです。- パラメータ:
at
- 楽曲位置isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
NullPointerException
- atがnull
-
listNotes
public final List<BmsNote> listNotes(int measure, double tick, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。当メソッドは指定された小節番号、刻み位置のノートをピンポイントで取得します。楽曲位置が少しでもずれている ノートは取得対象とはなりません。範囲取得を行いたい場合は他のオーバーロードメソッドを使用してください。
ノートは指定のテスターに通知されます。テスターの戻り値にfalseを指定すると取得対象から除外できます。
- パラメータ:
measure
- 取得対象とする小節番号tick
- 取得対象とする刻み位置isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
IllegalArgumentException
- measureがマイナス値または小節数以上IllegalArgumentException
- tickがマイナス値または当該小節の刻み数以上NullPointerException
- isCollectがnull
-
listNotes
public final List<BmsNote> listNotes(BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。全チャンネルを取得対象とします。
引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はlistNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
atBegin
- 取得対象範囲を示す最小の楽曲位置atEnd
- 取得対象範囲を示す最大の楽曲位置(この位置を含まない)isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
listNotes
public final List<BmsNote> listNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はlistNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
channelBegin
- 取得対象範囲を示す最小のチャンネル番号channelEnd
- 取得対象範囲を示す最大のチャンネル番号(この番号を含まない)atBegin
- 取得対象範囲を示す最小の楽曲位置atEnd
- 取得対象範囲を示す最大の楽曲位置(この位置を含まない)isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
listNotes
public final List<BmsNote> listNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。全チャンネルを取得対象とします。
それ以外の処理はlistNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
measureBegin
- 取得対象範囲を示す最小の小節番号tickBegin
- 取得対象範囲を示す最小の小節番号の刻み位置measureEnd
- 取得対象範囲を示す最大の小節番号tickEnd
- 取得対象範囲を示す最大の小節番号の刻み位置(この位置を含まない)isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
-
listNotes
public final List<BmsNote> listNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCollect)
複数のノートをリスト形式で取得します。ノートは指定のテスターに通知されます。テスターの戻り値にfalseを指定すると取得対象から除外できます。
- パラメータ:
channelBegin
- 取得対象範囲を示す最小のチャンネル番号channelEnd
- 取得対象範囲を示す最大のチャンネル番号(この番号を含まない)measureBegin
- 取得対象範囲を示す最小の小節番号tickBegin
- 取得対象範囲を示す最小の小節番号の刻み位置measureEnd
- 取得対象範囲を示す最大の小節番号tickEnd
- 取得対象範囲を示す最大の小節番号の刻み位置(この位置を含まない)isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
IllegalArgumentException
- channelBeginにBmsSpec.CHANNEL_MIN
未満またはBmsSpec.CHANNEL_MAX
を超える値を指定したIllegalArgumentException
- channelEndにBmsSpec.CHANNEL_MIN
未満またはBmsSpec.CHANNEL_MAX
+1を超える値を指定したIllegalArgumentException
- measureBeginにBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過の値を指定したIllegalArgumentException
- tickBeginにマイナス値または当該小節の刻み数以上の値を指定したIllegalArgumentException
- measureEndにBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過の値を指定したIllegalArgumentException
- tickEndにマイナス値、当該小節の刻み数以上、または小節番号==小節数の時に0以外の値を指定したNullPointerException
- isCollectがnull
-
countNotes
public final int countNotes(Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。全ノートをカウント対象にします。
それ以外の処理はcountNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
-
countNotes
public final int countNotes(BmsAt at, Predicate<BmsNote> isCounting)
指定楽曲位置のノートの数を数えます。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はcountNotes(int, double, Predicate)
と同じです。- パラメータ:
at
- 楽曲位置isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
NullPointerException
- atがnull
-
countNotes
public final int countNotes(int measure, double tick, Predicate<BmsNote> isCounting)
指定楽曲位置のノートの数を数えます。ノートは指定のテスターに通知されます。テスターでtrueを返すとそのノートがカウント対象になります。
- パラメータ:
measure
- カウント対象とする小節番号tick
- カウント対象とする刻み位置isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
IllegalArgumentException
- measureがマイナス値または小節数以上IllegalArgumentException
- tickがマイナス値または当該小節の刻み数以上NullPointerException
- isCountingがnull
-
countNotes
public final int countNotes(BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。全チャンネルをカウント対象にします。
引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はcountNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
atBegin
- カウント範囲を示す最小の楽曲位置atEnd
- カウント範囲を示す最大の楽曲位置(この位置を含まない)isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
countNotes
public final int countNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はcountNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
channelBegin
- カウント範囲を示す最小のチャンネル番号channelEnd
- カウント範囲を示す最大のチャンネル番号(この番号を含まない)atBegin
- カウント範囲を示す最小の楽曲位置atEnd
- カウント範囲を示す最大の楽曲位置(この位置を含まない)isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
countNotes
public final int countNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。全チャンネルをカウント対象にします。
それ以外の処理はcountNotes(int, int, int, double, int, double, Predicate)
と同じです。- パラメータ:
measureBegin
- カウント範囲を示す最小の小節番号tickBegin
- カウント範囲を示す最小の小節番号の刻み位置measureEnd
- カウント範囲を示す最大の小節番号tickEnd
- カウント範囲を示す最大の小節番号の刻み位置(この位置を含まない)isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
-
countNotes
public final int countNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, Predicate<BmsNote> isCounting)
条件に一致するノートの数を数えます。ノートは指定のテスターに通知されます。テスターでtrueを返すとそのノートがカウント対象になります。
- パラメータ:
channelBegin
- カウント範囲を示す最小のチャンネル番号channelEnd
- カウント範囲を示す最大のチャンネル番号(この番号を含まない)measureBegin
- カウント範囲を示す最小の小節番号tickBegin
- カウント範囲を示す最小の小節番号の刻み位置measureEnd
- カウント範囲を示す最大の小節番号tickEnd
- カウント範囲を示す最大の小節番号の刻み位置(この位置を含まない)isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
IllegalArgumentException
- channelBeginにBmsSpec.CHANNEL_MIN
未満またはBmsSpec.CHANNEL_MAX
を超える値を指定したIllegalArgumentException
- channelEndにBmsSpec.CHANNEL_MIN
未満またはBmsSpec.CHANNEL_MAX
+1を超える値を指定したIllegalArgumentException
- measureBeginにBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過の値を指定したIllegalArgumentException
- tickBeginにマイナス値または当該小節の刻み数以上の値を指定したIllegalArgumentException
- measureEndにBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過の値を指定したIllegalArgumentException
- tickEndにマイナス値、当該小節の刻み数以上、または小節番号==小節数の時に0以外の値を指定したNullPointerException
- isCountingがnull
-
putNote
public final BmsNote putNote(int channel, int measure, double tick, int value)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final BmsNote putNote(int channel, BmsAt at, int value)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
引数atから小節番号・小節の刻み位置を取り出します。
ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final BmsNote putNote(int channel, int index, int measure, double tick, int value)
譜面に新しいノートを追加します。ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final BmsNote putNote(int channel, int index, BmsAt at, int value)
譜面に新しいノートを追加します。引数atから小節番号・小節の刻み位置を取り出します。
ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final <T extends BmsNote> T putNote(int channel, int measure, double tick, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置value
- ノートの値createNote
- ノートオブジェクトを生成する関数- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final <T extends BmsNote> T putNote(int channel, BmsAt at, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
引数atから小節番号・小節の刻み位置を取り出します。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号at
- 楽曲位置value
- ノートの値createNote
- ノートオブジェクトを生成する関数- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final <T extends BmsNote> T putNote(int channel, int index, BmsAt at, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。引数atから小節番号・小節の刻み位置を取り出します。
それ以外の処理はputNote(int, int, int, double, int, Supplier)
と同じです。- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置value
- ノートの値createNote
- ノートオブジェクトを生成する関数- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 関連項目:
putNote(int, int, int, double, int, Supplier)
-
putNote
public final <T extends BmsNote> T putNote(int channel, int index, int measure, double tick, int value, Supplier<BmsNote> createNote)
譜面に新しいノートを追加します。指定した場所に既にノートが存在する場合は新しいノートで上書きします。
ノートを追加できるチャンネルは、データ型が配列型であるチャンネルのみです。
複数のデータを保有可能なチャンネルに対してのみ、チャンネルインデックスに1以上の値を指定できます。 複数データに非対応のチャンネルには必ず0を指定してください。
ノートに拡張データを持たせる場合は、createNote関数からBmsNoteを継承したオブジェクトを返し、 そのオブジェクトに対して拡張データを設定してください。オブジェクトのインスタンスはBMSコンテンツ内部でも 管理されるようになります。
ノートに設定可能な値の範囲は
BmsSpec.VALUE_MIN
~BmsSpec.VALUE_MAX
になります。 これは、チャンネルのデータ型がBmsType.ARRAY16
・BmsType.ARRAY36
のどちらであっても同様です。 ただし、それぞれのデータ型で以下の範囲外の値を持つノートが1個でも存在すると、 BMSコンテンツを標準フォーマットで出力できなくなります。BmsType.ARRAY16
の場合:BmsSpec.VALUE_16_MIN
~BmsSpec.VALUE_16_MAX
BmsType.ARRAY36
の場合:BmsSpec.VALUE_36_MIN
~BmsSpec.VALUE_36_MAX
また、ノートの値に0を指定することはできません。値0は「ノートとして存在しない」ことを示す特殊な値として扱われます。 そのためBMSライブラリでは、明確に存在するノートに対して値0を設定することを許可していません。
- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置value
- ノートの値createNote
- ノートオブジェクトを生成する関数- 戻り値:
- 譜面に追加された新しいノートオブジェクト
- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のチャンネルインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- 小節の刻み位置がマイナス値または当該小節の刻み数以上IllegalArgumentException
- 指定チャンネルのデータ型が配列型ではないIllegalArgumentException
- ノートの値に0を指定したNullPointerException
- createNoteがnullIllegalArgumentException
- createNoteの結果がnull
-
removeNote
public final boolean removeNote(int channel, int measure, double tick)
ノートを消去します。チャンネルインデックスには0を指定します。
それ以外の処理はremoveNote(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- 指定位置にノートが存在し消去した場合はtrue、それ以外はfalse。
-
removeNote
public final boolean removeNote(int channel, BmsAt at)
ノートを消去します。チャンネルインデックスには0を指定します。
引数atから小節番号・小節の刻み位置を取り出します。
それ以外の処理はremoveNote(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置- 戻り値:
- 指定位置にノートが存在し消去した場合はtrue、それ以外はfalse。
- 例外:
NullPointerException
- atがnull
-
removeNote
public final boolean removeNote(int channel, int index, BmsAt at)
ノートを消去します。引数atから小節番号・小節の刻み位置を取り出します。
それ以外の処理はremoveNote(int, int, int, double)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置- 戻り値:
- 指定位置にノートが存在し消去した場合はtrue、それ以外はfalse。
- 例外:
NullPointerException
- atがnull
-
removeNote
public final boolean removeNote(int channel, int index, int measure, double tick)
ノートを消去します。指定できるチャンネルは、データ型が配列型であるチャンネルのみです。
複数のデータを保有可能なチャンネルに対してのみ、チャンネルインデックスに1以上の値を指定できます。 複数データに非対応のチャンネルには必ず0を指定してください。
- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- 指定位置にノートが存在し消去した場合はtrue、それ以外はfalse。
- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のインデックスを指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- 小節の刻み位置がマイナス値または当該小節の刻み数以上IllegalArgumentException
- 指定チャンネルのデータ型が配列型ではない
-
removeNote
public final int removeNote(Predicate<BmsNote> isRemoveTarget)
選択されたノートを消去します。- パラメータ:
isRemoveTarget
- 消去対象ノートを選択するテスター- 戻り値:
- 消去されたノートの個数
- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- isRemoveTargetがnull
-
removeNote
public final int removeNote(int measureBegin, int measureEnd, Predicate<BmsNote> isRemoveTarget)
指定範囲の選択されたノートを消去します。チャンネルの選択範囲は全チャンネルになります。
それ以外の処理はremoveNote(int, int, int, int, Predicate)
と同じです。- パラメータ:
measureBegin
- 消去対象の最小小節番号measureEnd
- 消去対象の最大小節番号(この小節を含まない)isRemoveTarget
- 指定範囲で消去対象を選択するテスター- 戻り値:
- 消去されたノートの個数
-
removeNote
public final int removeNote(int channelBegin, int channelEnd, int measureBegin, int measureEnd, Predicate<BmsNote> isRemoveTarget)
指定範囲の選択されたノートを消去します。- パラメータ:
channelBegin
- 消去対象の最小チャンネル番号channelEnd
- 消去対象の最大チャンネル番号(この番号を含まない)measureBegin
- 消去対象の最小小節番号measureEnd
- 消去対象の最大小節番号(この小節を含まない)isRemoveTarget
- 指定範囲で消去対象を選択するテスター- 戻り値:
- 消去されたノートの個数
- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- channelBeginに小節データ・ノートを登録できないチャンネル番号を指定したIllegalArgumentException
- channelEndにBmsSpec.CHANNEL_MAX
より大きいチャンネル番号を指定したIllegalArgumentException
- measureBeginにノート・小節データの存在し得ない小節番号を指定したIllegalArgumentException
- measureEndに現在の小節数より大きい小節番号を指定したNullPointerException
- isRemoveTargetがnull
-
getMeasureCount
public final int getMeasureCount()
楽曲の小節数を取得します。- 戻り値:
- 小節数
-
getMeasureTickCount
public final double getMeasureTickCount(int measure)
小節の刻み数を取得します。小節番号には
BmsSpec.MEASURE_MIN
~BmsSpec.MEASURE_MAX
を指定することができます。小節の刻み数は、
BmsSpec.TICK_COUNT_DEFAULT
にその小節の小節長を乗算した値となります。 小節長に極端に小さい値を設定すると計算上の小節の刻み数が1未満になることがあります。- パラメータ:
measure
- 小節番号- 戻り値:
- 小節の刻み数
- 例外:
IllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過
-
getChannelDataCount
public final int getChannelDataCount(int channel, int measure)
指定小節に格納されたデータの数を取得します。小節番号には
BmsSpec.MEASURE_MIN
~BmsSpec.MEASURE_MAX
を指定することができます。データは通常1個まで格納可能ですが、重複可能チャンネルにすることで小節に複数のデータを 格納することができるようになります。
- パラメータ:
channel
- チャンネル番号measure
- 小節番号- 戻り値:
- データの数
- 例外:
IllegalArgumentException
- 小節データ・ノートを登録できないチャンネル番号を指定したIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過
-
insertMeasure
public final void insertMeasure(int measureWhere)
指定位置に小節を挿入します。挿入位置に1個の小節を挿入します。
それ以外の処理はinsertMeasure(int, int)
と同じです。- パラメータ:
measureWhere
- 挿入位置の小節番号
-
insertMeasure
public final void insertMeasure(int measureWhere, int count)
指定位置に小節を挿入します。小節を挿入すると、挿入位置よりも後ろの小節データは後ろにずれます。
挿入された小節は、小節データが未設定でノートがない状態になります。また、小節長は4/4拍子になります。
挿入の結果、小節の数が
BmsSpec.MEASURE_MAX_COUNT
を超えないように注意してください。- パラメータ:
measureWhere
- 挿入位置の小節番号count
- 挿入する小節数- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- 挿入位置に現在の小節数より大きい小節番号を指定したIllegalArgumentException
- 挿入する小節数にマイナス値を指定したIllegalArgumentException
- 挿入により小節数がBmsSpec.MEASURE_MAX_COUNT
を超える
-
removeMeasure
public final void removeMeasure(int measureWhere)
指定位置の小節を消去します。消去位置の小節を1個消去します。
それ以外の処理はremoveMeasure(int, int)
と同じです。- パラメータ:
measureWhere
- 消去位置の小節番号
-
removeMeasure
public final void removeMeasure(int measureWhere, int count)
指定位置の小節を消去します。小節を消去すると、消去位置よりも後ろの小節データは手前にずれます。
小節の存在しない領域を巻き込んで消去しないように注意してください。
- パラメータ:
measureWhere
- 消去位置の小節番号count
- 消去する小節数- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- 消去位置に現在の小節数より大きい小節番号を指定したIllegalArgumentException
- 消去する小節数にマイナス値を指定したIllegalArgumentException
- 存在しない小節を消去しようとした
-
swapChannel
public final void swapChannel(int channel1, int channel2)
指定チャンネル同士のデータ内容を入れ替えます。チャンネルインデックスは入れ替え対象チャンネル1,2共に0を指定します。
それ以外の処理はswapChannel(int, int, int, int)
と同じです。- パラメータ:
channel1
- 入れ替え対象チャンネル1の番号channel2
- 入れ替え対象チャンネル2の番号
-
swapChannel
public final void swapChannel(int channel1, int index1, int channel2, int index2)
指定チャンネル同士のデータ内容を入れ替えます。入れ替え対象のチャンネルのデータ型は完全に一致していなければなりません。また、小節長変更、 BPM変更、譜面停止チャンネルを入れ替え対象として指定することはできません。
- パラメータ:
channel1
- 入れ替え対象チャンネル1の番号index1
- 入れ替え対象チャンネル1のインデックスchannel2
- 入れ替え対象チャンネル2の番号index2
- 入れ替え対象チャンネル2のインデックス- 例外:
IllegalStateException
- 動作モードが編集モードではないIllegalArgumentException
- BMS仕様にないチャンネル番号を指定したIndexOutOfBoundsException
- チャンネルインデックスがマイナス値IndexOutOfBoundsException
- 重複不許可のチャンネルで0以外のインデックスを指定したIllegalArgumentException
- 指定チャンネルが小節長変更・BPM変更・譜面停止のいずれかだったIllegalArgumentException
- チャンネル1,2のデータ型が一致しない
-
seekPoint
public final BmsPoint seekPoint(BmsAt atFrom, double offsetTick, BmsPoint outPoint)
原点の楽曲位置から指定刻み数分だけ移動した楽曲位置を計算します。引数atFromから原点の小節番号・刻み位置を取り出します。
それ以外の処理はseekPoint(int, double, double, BmsPoint)
と同じです。- パラメータ:
atFrom
- 原点の楽曲位置offsetTick
- 移動量を示す刻み数outPoint
- 移動後の楽曲位置を格納する楽曲位置オブジェクト- 戻り値:
- 引数で指定した楽曲位置オブジェクト
- 例外:
NullPointerException
- atFromがnull
-
seekPoint
public final BmsPoint seekPoint(int measureFrom, double tickFrom, double offsetTick, BmsPoint outPoint)
原点の楽曲位置から指定刻み数分だけ移動した楽曲位置を計算します。進行方向への移動での最大値は、小節番号=小節数, 刻み位置=0となります。
後退方向への移動での最小値は、小節番号=0, 刻み位置=0となります。
いずれの場合も有効な楽曲位置を超えた位置を示すことはありません。刻み位置による移動では、小節長の設定値の影響を受けますが、BPMと譜面停止時間の影響は受けません。
計算結果は引数outPointに対して小節番号・刻み位置を設定して返します。
- パラメータ:
measureFrom
- 原点の小節番号tickFrom
- 原点の刻み位置offsetTick
- 移動量を示す刻み数outPoint
- 移動後の楽曲位置を格納する楽曲位置オブジェクト- 戻り値:
- 引数で指定した楽曲位置オブジェクト
- 例外:
IllegalArgumentException
- 原点の小節番号にノート・小節データが存在し得ない値を指定したIllegalArgumentException
- 原点の刻み位置にマイナス値または当該小節の刻み数以上の値を指定したNullPointerException
- outPointがnull
-
seekNextPoint
public final BmsPoint seekNextPoint(BmsAt at, boolean inclusiveFrom, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。引数atから小節番号、刻み位置を取り出します。
全てのチャンネルを検索対象とします。
それ以外の処理はseekNextPoint(int, double, boolean, IntPredicate, BmsPoint)
と同じです。- パラメータ:
at
- 検索を開始する楽曲位置inclusiveFrom
- 指定楽曲位置を検索対象に含めるかどうかoutPoint
- 直近のノートの楽曲位置- 戻り値:
- 引数outPointが示すBmsPointオブジェクトの参照
- 例外:
NullPointerException
- atがnull
-
seekNextPoint
public final BmsPoint seekNextPoint(int measure, double tick, boolean inclusiveFrom, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。全てのチャンネルを検索対象とします。
それ以外の処理はseekNextPoint(int, double, boolean, IntPredicate, BmsPoint)
と同じです。- パラメータ:
measure
- 検索を開始する小節番号tick
- 検索を開始する刻み位置inclusiveFrom
- 指定楽曲位置を検索対象に含めるかどうかoutPoint
- 直近のノートの楽曲位置- 戻り値:
- 引数outPointが示すBmsPointオブジェクトの参照
-
seekNextPoint
public final BmsPoint seekNextPoint(BmsAt at, boolean inclusiveFrom, IntPredicate chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はseekNextPoint(int, double, boolean, IntPredicate, BmsPoint)
と同じです。- パラメータ:
at
- 検索を開始する楽曲位置inclusiveFrom
- 指定楽曲位置を検索対象に含めるかどうかchTester
- チャンネルを検索対象とするかを判定するテスターoutPoint
- 直近のノートの楽曲位置- 戻り値:
- 引数outPointが示すBmsPointオブジェクトの参照
- 例外:
NullPointerException
- atがnull
-
seekNextPoint
public final BmsPoint seekNextPoint(int measure, double tick, boolean inclusiveFrom, IntPredicate chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノート、小節データ、または小節線を検索し、その楽曲位置を返します。特定のチャンネルのノートを検索対象にしたくない場合は引数chTesterでfalseを返すことで検索対象外に することができます。但しこのテスターは頻繁に呼び出される可能性があるのでできるだけ軽い処理とするべきです。
楽曲の末端まで対象のノートが存在しなかった場合、楽曲位置は小節番号=小節数、刻み位置0を示します。
当メソッドでは、検索する過程で小節番号が変化した際に次の小節を表す小節線を、特別なチャンネル番号である
BmsSpec.CHANNEL_MEASURE
としてチャンネルのテスターに渡します。小節が変化した際の小節先頭を検知したい 場合は先述のチャンネル番号を検査合格にすることでそれが可能になります。ノート、小節データのない空の楽曲に対して当メソッドを呼び出した場合、検索開始楽曲位置のアサーションは 行われず、小節番号0、刻み位置0の楽曲位置を返します。
処理結果は引数outPointで指定されたBmsPointオブジェクトに格納されます。また、メソッドの戻り値として outPointが示す参照を返します。
- パラメータ:
measure
- 検索を開始する小節番号tick
- 検索を開始する刻み位置inclusiveFrom
- 指定楽曲位置を検索対象に含めるかどうかchTester
- チャンネルを検索対象とするかを判定するテスターoutPoint
- 直近のノートの楽曲位置- 戻り値:
- 引数outPointが示すBmsPointオブジェクトの参照
- 例外:
IllegalArgumentException
- 小節番号がマイナス値または小節数以上IllegalArgumentException
- 小節の刻み位置がマイナス値または当該小節の刻み数以上NullPointerException
- chTesterがnullNullPointerException
- outPointがnull
-
timeline
public final Stream<BmsTimelineElement> timeline(BmsAt at)
タイムラインの指定楽曲位置のみを走査するストリームを返します。返されたタイムラインストリームは楽曲位置の前方から後方に向かってタイムラインを走査し、タイムライン要素を 小節線・小節データ・ノートの順で列挙します。列挙されたタイムライン要素はJava標準のストリームAPIによって 様々な処理を行うことができるようになっています。当メソッドでは指定された楽曲位置のみを走査します。
ストリームの利用方法についてはJavaリファレンスのストリームAPI(java.util.stream)を参照してください。
- パラメータ:
at
- 楽曲位置- 戻り値:
- 指定楽曲位置のみを走査するストリーム
- 例外:
NullPointerException
- atがnullIllegalArgumentException
- 小節番号がマイナス値IllegalArgumentException
- 小節の刻み位置がBmsSpec.TICK_MIN
以外の時、小節番号が小節数以上IllegalArgumentException
- 小節の刻み位置がBmsSpec.TICK_MIN
の時、小節番号が小節数超過IllegalArgumentException
- 小節の刻み位置がBmsSpec.TICK_MIN
未満、またはBmsSpec.TICK_MAX
超過
-
timeline
public final Stream<BmsTimelineElement> timeline(int measure, double tick)
タイムラインの指定楽曲位置のみを走査するストリームを返します。返されたタイムラインストリームは楽曲位置の前方から後方に向かってタイムラインを走査し、タイムライン要素を 小節線・小節データ・ノートの順で列挙します。列挙されたタイムライン要素はJava標準のストリームAPIによって 様々な処理を行うことができるようになっています。当メソッドでは指定された楽曲位置のみを走査します。
ストリームの利用方法についてはJavaリファレンスのストリームAPI(java.util.stream)を参照してください。
- パラメータ:
measure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- 指定楽曲位置のみを走査するストリーム
- 例外:
IllegalArgumentException
- 小節番号がマイナス値IllegalArgumentException
- 小節の刻み位置がBmsSpec.TICK_MIN
以外の時、小節番号が小節数以上IllegalArgumentException
- 小節の刻み位置がBmsSpec.TICK_MIN
の時、小節番号が小節数超過IllegalArgumentException
- 小節の刻み位置がBmsSpec.TICK_MIN
未満、またはBmsSpec.TICK_MAX
超過
-
timeline
public final Stream<BmsTimelineElement> timeline()
タイムライン全体を操作するストリームを返します。返されたタイムラインストリームは楽曲位置の前方から後方に向かってタイムラインを走査し、タイムライン要素を 小節線・小節データ・ノートの順で列挙します。列挙されたタイムライン要素はJava標準のストリームAPIによって 様々な処理を行うことができるようになっています。
当メソッドが返すストリームは、タイムライン全体から全チャンネルのタイムライン要素を列挙します。 ストリームの利用方法についてはJavaリファレンスのストリームAPI(java.util.stream)を参照してください。
- 戻り値:
- タイムライン全体を操作するストリーム
-
timeline
public final Stream<BmsTimelineElement> timeline(BmsAt atBegin, BmsAt atEnd)
タイムラインの指定楽曲位置の範囲を走査するストリームを返します。返されたタイムラインストリームは楽曲位置の前方から後方に向かってタイムラインを走査し、タイムライン要素を 小節線・小節データ・ノートの順で列挙します。列挙されたタイムライン要素はJava標準のストリームAPIによって 様々な処理を行うことができるようになっています。
ストリームの利用方法についてはJavaリファレンスのストリームAPI(java.util.stream)を参照してください。
- パラメータ:
atBegin
- 走査開始楽曲位置atEnd
- 走査終了楽曲位置(この楽曲位置の小節の刻み位置を含まない)- 戻り値:
- タイムラインの指定楽曲位置の範囲を走査するストリーム
- 例外:
NullPointerException
- atBeginまたはatEndがnullIllegalArgumentException
- 走査開始/終了楽曲位置の小節番号がマイナス値IllegalArgumentException
- 走査終了楽曲位置の小節の刻み位置がBmsSpec.TICK_MIN
以外の時、小節番号が小節数以上IllegalArgumentException
- 走査終了楽曲位置の小節の刻み位置がBmsSpec.TICK_MIN
の時、小節番号が小節数超過IllegalArgumentException
- 走査開始/終了楽曲位置の楽曲位置の小節の刻み位置がBmsSpec.TICK_MIN
未満、またはBmsSpec.TICK_MAX
超過IllegalArgumentException
- atEndがatBeginと同じまたは手前の楽曲位置を示している
-
timeline
public final Stream<BmsTimelineElement> timeline(int measureBegin, double tickBegin, int measureEnd, double tickEnd)
タイムラインの指定楽曲位置の範囲を走査するストリームを返します。返されたタイムラインストリームは楽曲位置の前方から後方に向かってタイムラインを走査し、タイムライン要素を 小節線・小節データ・ノートの順で列挙します。列挙されたタイムライン要素はJava標準のストリームAPIによって 様々な処理を行うことができるようになっています。
ストリームの利用方法についてはJavaリファレンスのストリームAPI(java.util.stream)を参照してください。
- パラメータ:
measureBegin
- 走査開始楽曲位置の小節番号tickBegin
- 走査開始楽曲位置の小節の刻み位置measureEnd
- 走査終了楽曲位置の小節番号tickEnd
- 走査終了楽曲位置の小節の刻み位置(この位置を含まない)- 戻り値:
- タイムラインの指定楽曲位置の範囲を走査するストリーム
- 例外:
IllegalArgumentException
- 走査開始/終了楽曲位置の小節番号がマイナス値IllegalArgumentException
- 走査楽曲位置の小節の刻み位置がBmsSpec.TICK_MIN
以外の時、小節番号が小節数以上IllegalArgumentException
- 走査楽曲位置の小節の刻み位置がBmsSpec.TICK_MIN
の時、小節番号が小節数超過IllegalArgumentException
- 走査開始/終了楽曲位置の小節の刻み位置がBmsSpec.TICK_MIN
未満、またはBmsSpec.TICK_MAX
超過IllegalArgumentException
- 走査終了楽曲位置が走査開始楽曲位置と同じまたは手前の楽曲位置を示している
-
putTimeline
public final void putTimeline(BmsTimelineElement timeline)
指定したメタ情報要素をBMSコンテンツに追加します。当メソッドは同一、または互換性のあるBMS仕様を持つ別のBMSコンテンツで走査したタイムライン要素を追加する時に使用することを想定しています。 互換性のないBMS仕様を持つBMSコンテンツを走査した結果取得したタイムライン要素を指定すると、 BMS仕様違反によりタイムライン要素を追加できない可能性があり多くの場合例外がスローされる結果になります。 原則として同一のBMS仕様を持つBMSコンテンツ間のタイムライン要素の転送に使用することを強く推奨します。
当メソッドで小節線を表すタイムライン要素入力しても何も行いません。追加する要素は小節データ、ノートです。 それぞれの要素追加の仕様については関連項目に記載のメソッドを参照してください。 基本的には例外も前述のメソッドに準拠した形でスローされます。
- パラメータ:
timeline
- タイムライン要素- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- timelineがnull- 関連項目:
setMeasureValue(int, int, int, Object)
,putNote(int, int, int, double, int, Supplier)
-
pointToTime
public final double pointToTime(BmsAt at)
小節番号・刻み位置を時間(秒)に変換します。引数atから小節番号・刻み位置を取り出します。
それ以外の処理はpointToTime(int, double)
と同じです。- パラメータ:
at
- 楽曲位置- 戻り値:
- 時間(秒)
- 例外:
NullPointerException
- atがnull
-
pointToTime
public final double pointToTime(int measure, double tick)
小節番号・刻み位置を時間(秒)に変換します。このメソッドは参照モードの場合のみ呼び出すことができます。
小節長が極端に短く、BPMが極端に高い譜面では浮動小数点演算の精度上の理由により、tickと(tick+1)の時間が 全く同じ値を示すことがあります(小節をまたぐ場合も同様)。一般的な小節長・BPMではこのような問題は発生しません。
- パラメータ:
measure
- 小節番号tick
- 小節の刻み位置- 戻り値:
- 時間(秒)
- 例外:
IllegalStateException
- 動作モードが参照モードではないIllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MIN
未満またはBmsSpec.MEASURE_MAX
超過IllegalArgumentException
- 小節番号がBmsSpec.MEASURE_MAX_COUNT
の時、小節の刻み位置に0以外を指定したIllegalArgumentException
- 小節の刻み位置にマイナス値または当該小節の刻み数以上の値を指定した
-
timeToPoint
public final BmsPoint timeToPoint(double timeSec, BmsPoint outPoint)
時間(秒)を楽曲位置(小節番号/刻み位置)に変換します。このメソッドは参照モードの場合のみ呼び出すことができます。
指定した時間が楽曲の総時間を超える場合、返される楽曲位置は小節番号が小節数、刻み位置が0になります。
- パラメータ:
timeSec
- 時間(秒)outPoint
- 楽曲位置を格納する楽曲位置オブジェクト- 戻り値:
- 引数で指定した楽曲位置オブジェクト
- 例外:
IllegalStateException
- 動作モードが参照モードではないIllegalArgumentException
- 時間にマイナス値を指定したNullPointerException
- outPointがnull
-
generateHash
public final byte[] generateHash()
BMSコンテンツの内容からハッシュ値を計算し、結果を返します。当メソッドの目的は「プレーに影響する変更が行われたかどうかを検出すること」にあります。この目的を果たすために、BMSコンテンツの基準となる BMS仕様に登録されたメタ情報とチャンネルは「同一性チェックを行うかどうか」の情報を保有しています。同一性チェックを行うメタ情報・チャンネルの データ内容をハッシュ値計算の要素として抽出し、その要素からハッシュ値を計算します。
プレーに影響しない(とBMS仕様で定められた)情報は、どのように修正されてもハッシュ値が変化することはありません。例えば、譜面には 直接関係のないバックグラウンドアニメーションなどは後から差し替えてもハッシュ値が変化する(別の譜面として認識される)べきではありません。 このように、制作者側に対してプレーする譜面以外の箇所に対して後から更新する自由度が割り当てられます。
逆に、全く同じタイトル、アーティスト、BPM等でも、プレー可能なチャンネルのノートを移動するような修正が加えられた場合当然ながら別譜面と 認識されるべきであり、そのような情報が「同一性チェック対象の情報」となり得ることになります。
当メソッドの処理には時間がかかります。また、処理中は多くのメモリ領域を使用することになるため、何度も呼び出すとアプリケーションの パフォーマンスが大幅に低下する可能性があります。当メソッドの呼び出し回数は極力減らすようアプリケーションを設計してください。
- 戻り値:
- BMSコンテンツから算出されたハッシュ値
- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
assertIsReferenceMode
protected void assertIsReferenceMode()
動作モードが参照モードかどうかをテストするアサーション- 例外:
IllegalStateException
- 動作モードが参照モードではない
-
assertIsEditMode
protected void assertIsEditMode()
動作モードが編集モードかどうかをテストするアサーション- 例外:
IllegalStateException
- 動作モードが編集モードではない
-
-