クラス 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宣言を活用するべきではありません。
唯一の例外は"encoding"要素です。この要素はBMSライブラリにおいて当該コンテンツの外部データへの入出力において、 指定した文字セットでBMSコンテンツをエンコード・デコードすることを強制します。この要素はBMSライブラリが提唱する唯一の 共通要素であり、BMSライブラリを利用する全てのアプリケーションに対して利用用途を強制します。BMS宣言の参照・編集には以下のAPIを利用します。
- BMS宣言を追加する:
addDeclaration(String, String)
- BMS宣言を消去する:
removeDeclaration(String)
- BMS宣言の存在確認:
containsDeclaration(String)
- BMS宣言を取得する:
getDeclaration(String)
,getDeclarations()
- BMS宣言に記述された文字セットを取得する:
getEncoding()
メタ情報
メタ情報は当該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, BmsNote.Tester)
- ノートを列挙する:
enumNotes(int, int, int, double, int, double, BmsNote.Tester)
- ノート一覧を取得:
listNotes(int, int, int, double, int, double, BmsNote.Tester)
- ノート数を数える:
countNotes(int, int, int, double, int, double, BmsNote.Tester)
- ノートを追加する:
putNote(int, int, int, double, int, BmsNote.Creator)
- ノートを消去する:
removeNote(int, int, int, int, BmsNote.Tester)
時間軸そのものの編集、および時間軸に関する情報の参照を行うための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コンテンツを含め単一のオブジェクトへ複数のスレッドから アクセスした場合には、ドキュメントに記載の動作内容およびその後の動作の整合性を保証対象外としています。 複数のスレッドから単一のオブジェクトを操作する予定がある場合には、個々のアプリケーションの責任でマルチスレッド対策を 行うようにしてください。
-
-
ネストされたクラスの概要
ネストされたクラス 修飾子とタイプ クラス 説明 static interface
BmsContent.Creator
BMSコンテンツを生成するI/Fを提供します。
-
コンストラクタの概要
コンストラクタ コンストラクタ 説明 BmsContent(BmsSpec spec)
新しいBMSコンテンツオブジェクトを構築します。
-
メソッドの概要
すべてのメソッド インスタンス・メソッド concreteメソッド 修飾子とタイプ メソッド 説明 void
addDeclaration(String name, String value)
指定した名前のBMS宣言を追加します。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, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。int
countNotes(int measure, double tick, BmsNote.Tester isCounting)
指定楽曲位置のノートの数を数えます。int
countNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。int
countNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。int
countNotes(BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。int
countNotes(BmsAt at, BmsNote.Tester isCounting)
指定楽曲位置のノートの数を数えます。int
countNotes(BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。void
endEdit()
BMSコンテンツを参照モードに変更します。void
enumNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。void
enumNotes(int measure, double tick, BmsNote.Tester enumNote)
指定楽曲位置のノートを列挙します。void
enumNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。void
enumNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。void
enumNotes(BmsAt atBegin, BmsAt atEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。void
enumNotes(BmsAt at, BmsNote.Tester enumNote)
指定楽曲位置のノートを列挙します。void
enumNotes(BmsNote.Tester enumNote)
指定範囲のノートを列挙します。byte[]
generateHash()
BMSコンテンツの内容からハッシュ値を計算し、結果を返します。long
getChangeBpmCount()
BPM変化回数を取得します。int
getChannelDataCount(int channel, int measure)
指定小節に格納されたチャンネルデータの数を取得します。String
getDeclaration(String name)
指定した名前のBMS宣言の値を取得します。Map<String,String>
getDeclarations()
全てのBMS宣言の名前と値の一覧を取得します。Charset
getEncoding()
BMSコンテンツを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()
楽曲の小節数を取得します。int
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()
譜面停止回数を取得します。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, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(int measure, double tick, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(BmsAt at, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。List<BmsNote>
listNotes(BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。protected void
onBeginEdit()
beginEdit()
が呼ばれ、動作モードが編集モードに遷移した時に呼ばれます。protected void
onEndEdit(boolean isRecalculateTime)
endEdit()
が呼ばれ、動作モードが参照モードに遷移した時に呼ばれます。BmsNote
pointOf(int measureFrom, double tickFrom, BmsNote.Tester judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。BmsNote
pointOf(BmsAt atFrom, BmsNote.Tester judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。double
pointToTime(int measure, double tick)
小節番号・刻み位置を時間(秒)に変換します。double
pointToTime(BmsAt at)
小節番号・刻み位置を時間(秒)に変換します。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, BmsNote.Creator 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, BmsNote.Creator createNote)
譜面に新しいノートを追加します。BmsNote
putNote(int channel, int index, BmsAt at, int value)
譜面に新しいノートを追加します。<T extends BmsNote>
TputNote(int channel, int index, BmsAt at, int value, BmsNote.Creator createNote)
譜面に新しいノートを追加します。BmsNote
putNote(int channel, BmsAt at, int value)
譜面に新しいノートを追加します。<T extends BmsNote>
TputNote(int channel, BmsAt at, int value, BmsNote.Creator createNote)
譜面に新しいノートを追加します。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, BmsNote.Tester isRemoveTarget)
指定範囲の選択されたノートを消去します。boolean
removeNote(int channel, int index, BmsAt at)
ノートを消去します。int
removeNote(int measureBegin, int measureEnd, BmsNote.Tester isRemoveTarget)
指定範囲の選択されたノートを消去します。boolean
removeNote(int channel, BmsAt at)
ノートを消去します。int
removeNote(BmsNote.Tester isRemoveTarget)
選択されたノートを消去します。BmsPoint
seekNextPoint(int measure, double tick, boolean inclusiveFrom, BmsChannel.Tester chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノート、小節データ、または小節線を検索し、その楽曲位置を返します。BmsPoint
seekNextPoint(int measure, double tick, boolean inclusiveFrom, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。BmsPoint
seekNextPoint(BmsAt at, boolean inclusiveFrom, BmsChannel.Tester chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。BmsPoint
seekNextPoint(BmsAt at, boolean inclusiveFrom, 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)
単体メタ情報に値を設定します。void
swapChannel(int channel1, int channel2)
指定チャンネル同士のデータ内容を入れ替えます。void
swapChannel(int channel1, int index1, int channel2, int index2)
指定チャンネル同士のデータ内容を入れ替えます。Stream<BmsElement>
timeline()
タイムライン全体を操作するストリームを返します。Stream<BmsElement>
timeline(int measure, double tick)
タイムラインの指定楽曲位置のみを走査するストリームを返します。Stream<BmsElement>
timeline(int measureBegin, double tickBegin, int measureEnd, double tickEnd)
タイムラインの指定楽曲位置の範囲を走査するストリームを返します。Stream<BmsElement>
timeline(BmsAt at)
タイムラインの指定楽曲位置のみを走査するストリームを返します。Stream<BmsElement>
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
-
-
メソッドの詳細
-
getSpec
public final BmsSpec getSpec()
BMSコンテンツに関連付けたBMS仕様を取得します。- 戻り値:
- BMS仕様
-
addDeclaration
public final void addDeclaration(String name, String value)
指定した名前のBMS宣言を追加します。同じ名前のBMS宣言が存在する場合は新しい値で上書きします。
名前はアルファベットの大文字と小文字を区別して扱います。
名前は1文字目が英字かアンダースコア、2文字目以降は英数字かアンダースコアでなければなりません。 値に使用する文字で、必要なものはエスケープしなければなりません。(例:\")
- パラメータ:
name
- BMS宣言の名称value
- 値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullNullPointerException
- valueがnullIllegalArgumentException
- nameの書式が不正IllegalArgumentException
- valueの書式が不正
-
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宣言は
addDeclaration(java.lang.String, java.lang.String)
で登録された順で一覧化されます。- 戻り値:
- BMS宣言の名前と値のマップ
-
getEncoding
public final Charset getEncoding()
BMSコンテンツをBMSフォーマットとして入出力する際の文字セットを取得します。文字セットはBMS宣言の"encoding"に指定します。
文字セットの指定がない場合は
BmsSpec.getStandardCharset()
で返される文字セットを返します。"encoding"に認識できない文字セット名を指定して本メソッドを呼び出すとIllegalStateExceptionをスローします。
- 戻り値:
- 文字セット
- 例外:
IllegalStateException
- BMS宣言の"encoding"に認識できない文字セット名を指定している
-
setSingleMeta
public final void setSingleMeta(String name, Object value)
単体メタ情報に値を設定します。値にnullを設定することで当該メタ情報の値を消去します。これは、値を指定しないことを意味し、
getSingleMeta(java.lang.String)
で値を取得した場合には、そのメタ情報の初期値を返します。 しかし、値は消去されているためcontainsSingleMeta(java.lang.String)
はfalseを返すことに 注意してください。- パラメータ:
name
- メタ情報の名称value
- 設定する値- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- nameがnullIllegalArgumentException
- 名称に合致するメタ情報が存在しないClassCastException
- valueが設定先メタ情報のデータ型に変換できないIllegalArgumentException
- 初期BPMメタ情報にBmsSpec.BPM_MIN
未満またはBmsSpec.BPM_MAX
超過の値を設定しようとした
-
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)
-
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
- 名称・単位に合致するメタ情報が存在しない
-
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
- 動作モードが編集モードではない
-
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, BmsNote.Tester judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。引数atFromから検索開始位置の小節番号・刻み位置を取り出します。
それ以外の処理はpointOf(int, double, BmsNote.Tester)
と同じです。- パラメータ:
atFrom
- 楽曲位置judge
- 条件一致判定を行う述語- 戻り値:
- 最初に条件に一致したノート。見つからなかった場合はnull。
- 例外:
NullPointerException
- atFromがnull
-
pointOf
public final BmsNote pointOf(int measureFrom, double tickFrom, BmsNote.Tester judge)
条件に該当するノートを検索し、最初に見つかったノートを返します。検索は、原点の楽曲位置から進行方向に向かって行われます。
- パラメータ:
measureFrom
- 検索開始位置を示す小節番号tickFrom
- 検索開始位置を示す刻み位置judge
- 条件一致判定を行う述語- 戻り値:
- 最初に条件に一致したノート。見つからなかった場合はnull。
- 例外:
IllegalArgumentException
- 検索開始位置の小節番号にノート・小節データが存在し得ない値を指定したIllegalArgumentException
- 検索開始位置の刻み位置にマイナス値または当該小節の刻み数以上の値を指定したNullPointerException
- judgeがnull
-
enumNotes
public final void enumNotes(BmsNote.Tester enumNote)
指定範囲のノートを列挙します。全てのノートを列挙対象とします。
それ以外の処理はenumNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
enumNote
- ノートを通知するテスター- 例外:
NullPointerException
- enumNoteがnull
-
enumNotes
public final void enumNotes(BmsAt at, BmsNote.Tester enumNote)
指定楽曲位置のノートを列挙します。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はenumNotes(int, double, BmsNote.Tester)
と同じです。- パラメータ:
at
- 楽曲位置enumNote
- ノートを通知するテスター- 例外:
NullPointerException
- atがnull
-
enumNotes
public final void enumNotes(int measure, double tick, BmsNote.Tester enumNote)
指定楽曲位置のノートを列挙します。当メソッドは指定された小節番号、刻み位置のノートをピンポイントで列挙します。楽曲位置が少しでもずれている ノートは列挙対象とはなりません。範囲列挙を行いたい場合は他のオーバーロードメソッドを使用してください。
テスターの戻り値にfalseを指定することで列挙を中断することが出来ます。
- パラメータ:
measure
- 列挙対象とする小節番号tick
- 列挙対象とする刻み位置enumNote
- ノートを通知するテスター- 例外:
IllegalArgumentException
- measureがマイナス値または小節数以上IllegalArgumentException
- tickがマイナス値または当該小節の刻み数以上NullPointerException
- enumNoteがnull
-
enumNotes
public final void enumNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。全チャンネルを列挙対象とします。
それ以外の処理はenumNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
measureBegin
- 列挙範囲を示す最小の小節番号tickBegin
- 列挙範囲を示す最小の小節番号の刻み位置measureEnd
- 列挙範囲を示す最大の小節番号tickEnd
- 列挙範囲を示す最大の小節番号の刻み位置(この位置を含まない)enumNote
- ノートを通知するテスター
-
enumNotes
public final void enumNotes(BmsAt atBegin, BmsAt atEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。全チャンネルを列挙対象とします。
引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はenumNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
atBegin
- 列挙範囲を示す最小の楽曲位置atEnd
- 列挙範囲を示す最大の楽曲位置(この位置を含まない)enumNote
- ノートを通知するテスター- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
enumNotes
public final void enumNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はenumNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
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, BmsNote.Tester enumNote)
指定範囲のノートを列挙します。見つかったノートは指定のテスターに通知されます。テスターの戻り値にfalseを指定すると列挙を中断します。
小節数が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(BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。全てのノートを取得対象とします。
それ以外の処理はlistNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
isCollect
- 取得有無を決定する述語- 戻り値:
- ノートのリスト
-
listNotes
public final List<BmsNote> listNotes(BmsAt at, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はlistNotes(int, double, BmsNote.Tester)
と同じです。- パラメータ:
at
- 楽曲位置isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
NullPointerException
- atがnull
-
listNotes
public final List<BmsNote> listNotes(int measure, double tick, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。当メソッドは指定された小節番号、刻み位置のノートをピンポイントで取得します。楽曲位置が少しでもずれている ノートは取得対象とはなりません。範囲取得を行いたい場合は他のオーバーロードメソッドを使用してください。
ノートは指定のテスターに通知されます。テスターの戻り値にfalseを指定すると取得対象から除外できます。
- パラメータ:
measure
- 取得対象とする小節番号tick
- 取得対象とする刻み位置isCollect
- 取得有無を決定するテスター- 戻り値:
- ノートのリスト
- 例外:
IllegalArgumentException
- measureがマイナス値または小節数以上IllegalArgumentException
- tickがマイナス値または当該小節の刻み数以上NullPointerException
- isCollectがnull
-
listNotes
public final List<BmsNote> listNotes(BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。全チャンネルを取得対象とします。
引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はlistNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
atBegin
- 取得対象範囲を示す最小の楽曲位置atEnd
- 取得対象範囲を示す最大の楽曲位置(この位置を含まない)isCollect
- 取得有無を決定する述語- 戻り値:
- ノートのリスト
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
listNotes
public final List<BmsNote> listNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はlistNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
channelBegin
- 取得対象範囲を示す最小のチャンネル番号channelEnd
- 取得対象範囲を示す最大のチャンネル番号(この番号を含まない)atBegin
- 取得対象範囲を示す最小の楽曲位置atEnd
- 取得対象範囲を示す最大の楽曲位置(この位置を含まない)isCollect
- 取得有無を決定する述語- 戻り値:
- ノートのリスト
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
listNotes
public final List<BmsNote> listNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester isCollect)
複数のノートをリスト形式で取得します。全チャンネルを取得対象とします。
それ以外の処理はlistNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
measureBegin
- 取得対象範囲を示す最小の小節番号tickBegin
- 取得対象範囲を示す最小の小節番号の刻み位置measureEnd
- 取得対象範囲を示す最大の小節番号tickEnd
- 取得対象範囲を示す最大の小節番号の刻み位置(この位置を含まない)isCollect
- 取得有無を決定する述語- 戻り値:
- ノートのリスト
-
listNotes
public final List<BmsNote> listNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester 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(BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。全ノートをカウント対象にします。
それ以外の処理はcountNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
isCounting
- カウント有無を決定する述語- 戻り値:
- 条件に一致したノートの数
-
countNotes
public final int countNotes(BmsAt at, BmsNote.Tester isCounting)
指定楽曲位置のノートの数を数えます。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はcountNotes(int, double, BmsNote.Tester)
と同じです。- パラメータ:
at
- 楽曲位置isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
NullPointerException
- atがnull
-
countNotes
public final int countNotes(int measure, double tick, BmsNote.Tester isCounting)
指定楽曲位置のノートの数を数えます。ノートは指定のテスターに通知されます。テスターでtrueを返すとそのノートがカウント対象になります。
- パラメータ:
measure
- カウント対象とする小節番号tick
- カウント対象とする刻み位置isCounting
- カウント有無を決定するテスター- 戻り値:
- 条件に一致したノートの数
- 例外:
IllegalArgumentException
- measureがマイナス値または小節数以上IllegalArgumentException
- tickがマイナス値または当該小節の刻み数以上NullPointerException
- isCountingがnull
-
countNotes
public final int countNotes(BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。全チャンネルをカウント対象にします。
引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はcountNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
atBegin
- カウント範囲を示す最小の楽曲位置atEnd
- カウント範囲を示す最大の楽曲位置(この位置を含まない)isCounting
- カウント有無を決定する述語- 戻り値:
- 条件に一致したノートの数
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
countNotes
public final int countNotes(int channelBegin, int channelEnd, BmsAt atBegin, BmsAt atEnd, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。引数atBegin, atEndから小節番号・刻み位置を取り出します。
それ以外の処理はcountNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
channelBegin
- カウント範囲を示す最小のチャンネル番号channelEnd
- カウント範囲を示す最大のチャンネル番号(この番号を含まない)atBegin
- カウント範囲を示す最小の楽曲位置atEnd
- カウント範囲を示す最大の楽曲位置(この位置を含まない)isCounting
- カウント有無を決定する述語- 戻り値:
- 条件に一致したノートの数
- 例外:
NullPointerException
- atBeginがnullNullPointerException
- atEndがnull
-
countNotes
public final int countNotes(int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester isCounting)
条件に一致するノートの数を数えます。全チャンネルをカウント対象にします。
それ以外の処理はcountNotes(int, int, int, double, int, double, BmsNote.Tester)
と同じです。- パラメータ:
measureBegin
- カウント範囲を示す最小の小節番号tickBegin
- カウント範囲を示す最小の小節番号の刻み位置measureEnd
- カウント範囲を示す最大の小節番号tickEnd
- カウント範囲を示す最大の小節番号の刻み位置(この位置を含まない)isCounting
- カウント有無を決定する述語- 戻り値:
- 条件に一致したノートの数
-
countNotes
public final int countNotes(int channelBegin, int channelEnd, int measureBegin, double tickBegin, int measureEnd, double tickEnd, BmsNote.Tester 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, BmsNote.Creator)
と同じです。- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final BmsNote putNote(int channel, BmsAt at, int value)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
引数atから小節番号・小節の刻み位置を取り出します。
ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, BmsNote.Creator)
と同じです。- パラメータ:
channel
- チャンネル番号at
- 楽曲位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final BmsNote putNote(int channel, int index, int measure, double tick, int value)
譜面に新しいノートを追加します。ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, BmsNote.Creator)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスmeasure
- 小節番号tick
- 小節の刻み位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final BmsNote putNote(int channel, int index, BmsAt at, int value)
譜面に新しいノートを追加します。引数atから小節番号・小節の刻み位置を取り出します。
ノートオブジェクトはBmsNoteを使用します。
それ以外の処理はputNote(int, int, int, double, int, BmsNote.Creator)
と同じです。- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置value
- ノートの値- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final <T extends BmsNote> T putNote(int channel, int measure, double tick, int value, BmsNote.Creator createNote)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
それ以外の処理はputNote(int, int, int, double, int, BmsNote.Creator)
と同じです。- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号measure
- 小節番号tick
- 小節の刻み位置value
- ノートの値createNote
- ノートオブジェクトを生成するサプライヤ- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final <T extends BmsNote> T putNote(int channel, BmsAt at, int value, BmsNote.Creator createNote)
譜面に新しいノートを追加します。チャンネルインデックスは0固定です。
引数atから小節番号・小節の刻み位置を取り出します。
それ以外の処理はputNote(int, int, int, double, int, BmsNote.Creator)
と同じです。- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号at
- 楽曲位置value
- ノートの値createNote
- ノートオブジェクトを生成するサプライヤ- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final <T extends BmsNote> T putNote(int channel, int index, BmsAt at, int value, BmsNote.Creator createNote)
譜面に新しいノートを追加します。引数atから小節番号・小節の刻み位置を取り出します。
それ以外の処理はputNote(int, int, int, double, int, BmsNote.Creator)
と同じです。- 型パラメータ:
T
- 追加するノートのデータ型- パラメータ:
channel
- チャンネル番号index
- チャンネルインデックスat
- 楽曲位置value
- ノートの値createNote
- ノートオブジェクトを生成するサプライヤ- 戻り値:
- 譜面に追加された新しいノートオブジェクト
-
putNote
public final <T extends BmsNote> T putNote(int channel, int index, int measure, double tick, int value, BmsNote.Creator createNote)
譜面に新しいノートを追加します。指定した場所に既にノートが存在する場合は新しいノートで上書きします。
ノートを追加できるチャンネルは、データ型が配列型であるチャンネルのみです。
複数のデータを保有可能なチャンネルに対してのみ、チャンネルインデックスに1以上の値を指定できます。 複数データに非対応のチャンネルには必ず0を指定してください。
ノートに拡張データを持たせる場合は、createNoteサプライヤからBmsNoteを継承したオブジェクトを返し、 そのオブジェクトに対して拡張データを設定してください。オブジェクトのインスタンスはBMSコンテンツ内部でも 管理されるようになります。
ノートの値に設定可能な値の範囲は16進配列の場合は1~255、36進配列の場合は1~1295になります。
ノートの値に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
- 16進配列チャンネル指定時、ノートの値にBmsSpec.VALUE_16_MIN
未満、BmsSpec.VALUE_16_MAX
超過の値を指定したIllegalArgumentException
- 36進配列チャンネル指定時、ノートの値にBmsSpec.VALUE_MIN
未満、BmsSpec.VALUE_MAX
超過の値を指定した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(BmsNote.Tester isRemoveTarget)
選択されたノートを消去します。- パラメータ:
isRemoveTarget
- 消去対象ノートを選択する述語- 戻り値:
- 消去されたノートの個数
- 例外:
IllegalStateException
- 動作モードが編集モードではないNullPointerException
- isRemoveTargetがnull
-
removeNote
public final int removeNote(int measureBegin, int measureEnd, BmsNote.Tester isRemoveTarget)
指定範囲の選択されたノートを消去します。チャンネルの選択範囲は全チャンネルになります。
それ以外の処理はremoveNote(int, int, int, int, BmsNote.Tester)
と同じです。- パラメータ:
measureBegin
- 消去対象の最小小節番号measureEnd
- 消去対象の最大小節番号(この小節を含まない)isRemoveTarget
- 指定範囲で消去対象を選択する述語- 戻り値:
- 消去されたノートの個数
-
removeNote
public final int removeNote(int channelBegin, int channelEnd, int measureBegin, int measureEnd, BmsNote.Tester 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 int getMeasureTickCount(int measure)
小節の刻み数を取得します。小節番号には
BmsSpec.MEASURE_MIN
~BmsSpec.MEASURE_MAX
を指定することができます。小節の刻み数は、
BmsSpec.TICK_COUNT_DEFAULT
にその小節の小節長を乗算した値となります。小節長に極端に 小さい値を設定すると計算上の小節の刻み数が1未満になることがありますが、当メソッドが返す最小の刻み数は 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, BmsChannel.Tester, 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, BmsChannel.Tester, BmsPoint)
と同じです。- パラメータ:
measure
- 検索を開始する小節番号tick
- 検索を開始する刻み位置inclusiveFrom
- 指定楽曲位置を検索対象に含めるかどうかoutPoint
- 直近のノートの楽曲位置- 戻り値:
- 引数outPointが示すBmsPointオブジェクトの参照
-
seekNextPoint
public final BmsPoint seekNextPoint(BmsAt at, boolean inclusiveFrom, BmsChannel.Tester chTester, BmsPoint outPoint)
指定楽曲位置より後の位置に存在する直近のノートを検索し、その楽曲位置を返します。引数atから小節番号、刻み位置を取り出します。
それ以外の処理はseekNextPoint(int, double, boolean, BmsChannel.Tester, BmsPoint)
と同じです。- パラメータ:
at
- 検索を開始する楽曲位置inclusiveFrom
- 指定楽曲位置を検索対象に含めるかどうかchTester
- チャンネルを検索対象とするかを判定するテスターoutPoint
- 直近のノートの楽曲位置- 戻り値:
- 引数outPointが示すBmsPointオブジェクトの参照
- 例外:
NullPointerException
- atがnull
-
seekNextPoint
public final BmsPoint seekNextPoint(int measure, double tick, boolean inclusiveFrom, BmsChannel.Tester 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<BmsElement> 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<BmsElement> 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<BmsElement> timeline()
タイムライン全体を操作するストリームを返します。返されたタイムラインストリームは楽曲位置の前方から後方に向かってタイムラインを走査し、タイムライン要素を 小節線・小節データ・ノートの順で列挙します。列挙されたタイムライン要素はJava標準のストリームAPIによって 様々な処理を行うことができるようになっています。
当メソッドが返すストリームは、タイムライン全体から全チャンネルのタイムライン要素を列挙します。 ストリームの利用方法についてはJavaリファレンスのストリームAPI(java.util.stream)を参照してください。
- 戻り値:
- タイムライン全体を操作するストリーム
-
timeline
public final Stream<BmsElement> 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<BmsElement> 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
- 走査終了楽曲位置が走査開始楽曲位置と同じまたは手前の楽曲位置を示している
-
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
- 動作モードが編集モードではない
-
-