コンテンツにスキップ

カスタムメッセージによる監視

を使うと、OSC Event Transport の 出力メッセージ が送信する値をカスタマイズできます。このページでは、OSC Event Transport からの出力メッセージをカスタマイズする方法を説明します。

Adding output message

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" と評価されます。

これらがどのように構築されるか、および関連情報を取得する方法のヒントについては、フィーチャー変数の構築 をご覧ください。

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” が含まれます。

デフォルトの出力メッセージを駆動する式の意味を理解しておくと役立ちます。

1 - (uptime % 1)

これは、毎秒 1 から 0 までカウントダウンします。uptimeグローバル変数 です。

track.description

これは現在のトラックの description です。すべての Resource には、式がどの Resource にアクセスしているかを確認するために使える description プロパティがあります。

track.trigger_note

このプロパティは Track ID に文書化されています。alt ドラッグ 技法で発見できます。

Timecode(currentTime)

Timecode 関数 を使って、トラック内の現在時刻を Timecode の文字列表現に変換します。結果は Timecode オブジェクトではなく、タイムコードのように見える文字列である点に注意してください。これは将来のバージョンのソフトウェアで変更される可能性があります。

transport.beatToTimecode(currentBeat).__str__()

TransportManager の beatToTimecode 関数は、現在のトラック時刻を TC タグと照合し、その時刻をグローバルタイムコード時刻として提供します。

.__str__() は、現在の式システムが Timecode オブジェクトを文字列にシームレスに変換できないという残念な問題です。

track.noteAtBeat(track.sectionToBeat(currentSection))

Track の noteAtBeat 関数は、正確な拍にある場合にノートをルックアップするために使われます。たとえば、track.noteAtBeat(currentBeat) は、再生ヘッドがノートのちょうど上にある場合にのみノートを返します。

この式は、最も近いセクションを参照することで、より有用な情報を提供しようとします。Track の sectionToBeat は、現在のセクション番号を対応する拍に変換し、そのセクションの開始時の拍にあるノートをルックアップできるようにします。

track.noteAtBeat(track.sectionToBeat(currentSection + 1))

この関数は上記の Current section name と非常に似ています。ただし、現在のセクションをルックアップする代わりに、currentSection + 1(つまり次のセクション)をルックアップします。

format::{currentFeatureName:s} +{Timecode(currentTime - currentFeatureTime):s} {nextFeatureName:s} -{Timecode(nextFeatureTime - currentTime):s}

この式は、既知のフィーチャーポイント(ノートまたはタグ)に対する、現在のトラック内の位置の読みやすい概要を提供しようとします。

transport.volume

Transport の現在の音量は、alt ドラッグ 技法で発見できます。

transport.brightness

Transport の現在のマスター輝度は、alt ドラッグ 技法で発見できます。

track.bpmAt(currentBeat)

クオンタイズされたトラックを扱うとき、BPM はセクション間で変わることがあります。Track の bpmAt 関数は、検査できるように拍から BPM に変換します。

transport.player.playMode.__str__()

TransportManager には player という TrackPlayer メンバーがあります。これは、再生ヘッドの現在の状態に関連するいくつかの値を格納します。playMode メンバーは、現在のトランスポートの状態を enum 値として提供します。__str__() 呼び出しは、ユーザーに表示するためにそれを文字列に変換します。

説明
トラックの名前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() で見つけられます。無効な拍、またはノートやタグのない拍が渡された場合、関数は空の文字列を返します。

上記の情報を使って、さまざまなフィーチャー変数の構築をエミュレートできます(これらは非常に長いため、便宜変数が存在することに注意してください)。変数 currentFeatureBeatnextFeatureBeat は通常は存在しませんが、文書化の目的で他の変数の構築を簡素化するために使われます。

フィーチャー変数
currentFeatureBeatmax(track.findBeatOfLastNote(currentBeat), track.findBeatOfLastTag(currentBeat))
nextFeatureBeatmin(track.findBeatOfNextNote(currentBeat), track.findBeatOfNextTag(currentBeat))
currentFeatureTimetrack.beatToTime(currentFeatureBeat)
nextFeatureTimetrack.beatToTime(nextFeatureBeat)
currentFeatureNameformat::{track.noteAtBeat(currentFeatureBeat)}|{track.tagAtBeat(currentFeatureBeat)}
nextFeatureNameformat::{track.noteAtBeat(nextFeatureBeat)}|{track.tagAtBeat(nextFeatureBeat)}