カスタムメッセージによる監視
式 を使うと、OSC Event Transport の 出力メッセージ が送信する値をカスタマイズできます。このページでは、OSC Event Transport からの出力メッセージをカスタマイズする方法を説明します。
メッセージの追加
Section titled “メッセージの追加”
Output Messages リストの下部にある + ボタンをクリックすると、新しい行が追加されます。行は、選択されて編集可能な OSC アドレスのエントリで始まります。すべてのメッセージ行は、有効であるために一意で空白でない OSC アドレスを持つ必要があります。
アドレスを入力したら、何が追加されているかを把握するために Description 列のノートが役立つことがあります。あるいは、すぐに Edit… ボタンを押して、目的の値を作成する式の入力を始めることもできます。
無効な式は Edit… ボタンを赤くします。エラーは、ボタンのマウスホバーテキストで説明されます。
OSC Event Transport には、OSC Event Transport が接続されているトランスポートへのアクセスを提供するために使える、いくつかの ローカルシステム変数 があります。
Resource variables(リソース変数)
Section titled “Resource variables(リソース変数)”トランスポートの現在のコンテキストへのアクセスは、Transport を構成する Resource にアクセスすることで実現します。これらの変数からはフィールドを参照できます。これは Designer の内部オブジェクトに直接アクセスしており、変更される可能性があるため、すべてのフィールドが文書化されているわけではありません。
transport- Event Transport が監視している Transport Manager。track- トランスポート内の現在のトラック。
Track time variables(トラック時間変数)
Section titled “Track time variables(トラック時間変数)”トラック内の現在のセクションや時間を見つけることは、これらの変数を提供することで簡素化されます。
currentBeat- トラック上の現在の拍(Quantiser で使用)。currentTime- トラック上の現在時刻。currentSection- トラック上の現在のセクション番号(最初のセクションは0)。currentSectionName- 現在のセクションの開始時の名前(ノート)。nextSectionName- 次のセクションの開始時の名前(ノート)。currentSectionTag- 現在のセクションのタグ(例: TC 時間)。nextSectionTag- 次のセクションのタグ。
Feature variables(フィーチャー変数)
Section titled “Feature variables(フィーチャー変数)”フィーチャーはノートまたはタグのいずれかです。最も近いノートまたはタグに対して相対的に参照すると便利です。これらの変数は、その情報をこれらの変数に格納することで、複雑なルックアップのセットを処理します。
currentFeatureTime- 現在のトラック位置より前の最も近いフィーチャーの時間。フィーチャーが存在しない場合は0.0と評価されます。currentFeatureName- 現在のトラック位置より前の最も近いフィーチャーの名前。フィーチャーが存在しない場合は"Start"と評価されます。nextFeatureTime- 現在のトラック位置より後の次のフィーチャーの時間。フィーチャーが存在しない場合はtrack.lengthInSecと評価されます。nextFeatureName- 現在のトラック位置より後の次のフィーチャーの名前。フィーチャーが存在しない場合は"End"と評価されます。
これらがどのように構築されるか、および関連情報を取得する方法のヒントについては、フィーチャー変数の構築 をご覧ください。
Function variable(関数変数)
Section titled “Function variable(関数変数)”Timecode は、時間(秒、例: currentTime)をタイムコード形式の文字列 “HH:MM:SS.FF” に変換する特殊な関数スタイルの変数です。
Timecode status(タイムコードステータス)
Section titled “Timecode status(タイムコードステータス)”タイムコード や タイムコードモードレイヤー を扱うとき、ステータスがレイヤーによってシステムに強制されたモードでオーバーライドされるため、transport.statusString が関連情報を提供できないことがあります。
タイムコードモードのオーバーライドに関係なくタイムコード情報を提供したい場合は、transport.tcStatusString 変数を使います。これは、それ以上の処理を行わない生のタイムコードステータスを提供します。これにはたとえばプリロール情報が含まれます。
Fade status(フェードステータス)
Section titled “Fade status(フェードステータス)”セッションのフィード出力ステータスを監視できると便利な場合があります。これは 出力フィールド に表示され、feedOutputMode 変数を介してアクセスできます。これには、現在の出力モードに応じて “Fade up”、“Fade down”、または “Output hold” が含まれます。
デフォルトの出力メッセージ
Section titled “デフォルトの出力メッセージ”デフォルトの出力メッセージを駆動する式の意味を理解しておくと役立ちます。
Heartbeat
Section titled “Heartbeat”1 - (uptime % 1)
これは、毎秒 1 から 0 までカウントダウンします。uptime は グローバル変数 です。
Track name
Section titled “Track name”track.description
これは現在のトラックの description です。すべての Resource には、式がどの Resource にアクセスしているかを確認するために使える description プロパティがあります。
Track ID
Section titled “Track ID”track.trigger_note
このプロパティは Track ID に文書化されています。alt ドラッグ 技法で発見できます。
Track position
Section titled “Track position”Timecode(currentTime)
Timecode 関数 を使って、トラック内の現在時刻を Timecode の文字列表現に変換します。結果は Timecode オブジェクトではなく、タイムコードのように見える文字列である点に注意してください。これは将来のバージョンのソフトウェアで変更される可能性があります。
Timecode
Section titled “Timecode”transport.beatToTimecode(currentBeat).__str__()
TransportManager の beatToTimecode 関数は、現在のトラック時刻を TC タグと照合し、その時刻をグローバルタイムコード時刻として提供します。
.__str__() は、現在の式システムが Timecode オブジェクトを文字列にシームレスに変換できないという残念な問題です。
Current section name
Section titled “Current section name”track.noteAtBeat(track.sectionToBeat(currentSection))
Track の noteAtBeat 関数は、正確な拍にある場合にノートをルックアップするために使われます。たとえば、track.noteAtBeat(currentBeat) は、再生ヘッドがノートのちょうど上にある場合にのみノートを返します。
この式は、最も近いセクションを参照することで、より有用な情報を提供しようとします。Track の sectionToBeat は、現在のセクション番号を対応する拍に変換し、そのセクションの開始時の拍にあるノートをルックアップできるようにします。
Next section name
Section titled “Next section name”track.noteAtBeat(track.sectionToBeat(currentSection + 1))
この関数は上記の Current section name と非常に似ています。ただし、現在のセクションをルックアップする代わりに、currentSection + 1(つまり次のセクション)をルックアップします。
Section hint
Section titled “Section hint”format::{currentFeatureName:s} +{Timecode(currentTime - currentFeatureTime):s} {nextFeatureName:s} -{Timecode(nextFeatureTime - currentTime):s}
この式は、既知のフィーチャーポイント(ノートまたはタグ)に対する、現在のトラック内の位置の読みやすい概要を提供しようとします。
Volume
Section titled “Volume”transport.volume
Transport の現在の音量は、alt ドラッグ 技法で発見できます。
Brightness
Section titled “Brightness”transport.brightness
Transport の現在のマスター輝度は、alt ドラッグ 技法で発見できます。
track.bpmAt(currentBeat)
クオンタイズされたトラックを扱うとき、BPM はセクション間で変わることがあります。Track の bpmAt 関数は、検査できるように拍から BPM に変換します。
Play mode
Section titled “Play mode”transport.player.playMode.__str__()
TransportManager には player という TrackPlayer メンバーがあります。これは、再生ヘッドの現在の状態に関連するいくつかの値を格納します。playMode メンバーは、現在のトランスポートの状態を enum 値として提供します。__str__() 呼び出しは、ユーザーに表示するためにそれを文字列に変換します。
Example expressions(式の例)
Section titled “Example expressions(式の例)”| 説明 | 式 |
|---|---|
| トラックの名前 | track.description |
| トランスポートの名前 | transport.description |
| トランスポートのエンゲージステータス | transport.engaged |
| 現在のセクションの最初の拍 | track.sectionToBeat(currentSection) |
| 現在のトラック時刻(拍)を秒に変換 | track.beatToTime(currentBeat) |
| 現在のトラック時刻(秒)を拍に変換 | track.timeToBeat(currentTime) |
| 次のトラックフィーチャーまでの残り時間 | Timecode(nextFeatureTime - currentTime) |
| 最後のトラックフィーチャーからの経過時間 | Timecode(currentTime - currentFeatureTime) |
| 現在のセクションの経過時間 | Timecode(currentBeat - track.sectionToBeat(currentSection)) |
| 現在のセクションの残り時間 | Timecode(track.sectionToBeat(currentSection + 1)-(currentBeat)) |
| 現在入力されているタイムコード | transport.timecode.current.__str__() |
| 現在の Transport Manager の監視ステータス(例: timecode) | transport.monitorString |
| 現在の Transport Manager のステータス(例: “No matching timecode”) | transport.statusString |
| 現在の Transport Manager の生のタイムコードステータス(例: “stopped”) | transport.tcStatusString |
Constructing feature variables(フィーチャー変数の構築)
Section titled “Constructing feature variables(フィーチャー変数の構築)”変数 currentFeature* と nextFeature* は、ユーザーの利便性のために OSC event transport によって構築されます。フィーチャーは、現在のトラック上の ノート と タグ から構成されます。
このセクションでは、カスタムレポートのために低レベルの情報へのアクセスを可能にするために、それらがどのように構築されるかについての情報を追加します。ここで使われる関数は残り続けることが保証されているわけではありませんが、非常に安定した内部 API です。
まず、ノートまたはタグの拍が見つけられます:
| アクション | 関数 | 見つからない場合の値 |
|---|---|---|
| 次のノート | track.findBeatOfNextNote(currentBeat) | 1.7976931348623157E+308 |
| 前のノート | track.findBeatOfLastNote(currentBeat) | -1.0 |
| 次のタグ | track.findBeatOfNextTag(currentBeat) | 1.7976931348623157E+308 |
| 前のタグ | track.findBeatOfLastTag(currentBeat) | -1.0 |
結果は時間ではなく拍である点に注意してください。track.beatToTime() を使うと拍をトラック時刻に変換でき、Timecode() を使うとその時刻をタイムコードとして表示できます。
ノートまたはタグの名前は、track.noteAtBeat() または track.tagAtBeat() で見つけられます。無効な拍、またはノートやタグのない拍が渡された場合、関数は空の文字列を返します。
上記の情報を使って、さまざまなフィーチャー変数の構築をエミュレートできます(これらは非常に長いため、便宜変数が存在することに注意してください)。変数 currentFeatureBeat と nextFeatureBeat は通常は存在しませんが、文書化の目的で他の変数の構築を簡素化するために使われます。
フィーチャー変数 | 式 |
|---|---|
currentFeatureBeat | max(track.findBeatOfLastNote(currentBeat), track.findBeatOfLastTag(currentBeat)) |
nextFeatureBeat | min(track.findBeatOfNextNote(currentBeat), track.findBeatOfNextTag(currentBeat)) |
currentFeatureTime | track.beatToTime(currentFeatureBeat) |
nextFeatureTime | track.beatToTime(nextFeatureBeat) |
currentFeatureName | format::{track.noteAtBeat(currentFeatureBeat)}|{track.tagAtBeat(currentFeatureBeat)} |
nextFeatureName | format::{track.noteAtBeat(nextFeatureBeat)}|{track.tagAtBeat(nextFeatureBeat)} |