[TouchDesigner]Timecode CHOP: シーケンスベースの時間管理がタイムコードで便利に

![TouchDesigner](https://img.shields.io/badge/TouchDesigner-2023.11880-36476a?style=flat-square)

`Timecode CHOP`が、シーケンス（タイムライン）ベースで動作するプロジェクトを開発するのに便利です。2023.11290で追加されたCHOPで、これまでのタイムラインや`Timer CHOP`を使った実装よりもお薦めです。

`Timecode CHOP`は、`00:01:39:10`といった書き方をするタイムコード形式で、時刻を指定し、動画を再生することができます。また、フレームや時・分・秒・フレームを個別に設定してタイムコード文字列を生成するなど、シーケンスベースのプロジェクトで直感的に時間（時刻）を扱えるようになります。

### サンプルファイル
https://github.com/arkwknsk/touchdesigner/tree/master/tips/tips-timecode

# Timecode CHOPの主な使い方

### 単独動作 (Sequentioal)
Timecodeを単独でどうさせる場合は、プロパティの`Mode`を`Sequential`を選んでください。`Init`で初期化し、`Start`でスタートさせることができます。
<img width="428" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/30caad3c-a136-5df4-ea69-28beab709d15.png">

タイムラインと違うタイムコードで動作していることを確認できます。`timecode1`のタイムコードは、`info1 DAT`の`timecode`の行で確認できます。

![TouchDesigner_2023_11880___Users_ken_Documents_toe_tips-timecode_tips-timecode_toe__と_toe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/cb1f0bba-c429-f80a-c29f-be03ffe43609.png)

### 動画ファイルの再生位置を参照する (OP Reference)
`Mode`を`OP Reference`に設定。動画ファイルの再生位置に合わせて、`Timecode CHOP`が更新されます。

動画ファイルをベースにした演出を行う場合などに使えます。単純に、動画ファイルのタイムコードを取り出して表示するという使い方もありそうです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/04328241-4bcf-f437-5a4a-7b28556382a7.png)
プロパティの`OP`に、参照したい`Movie File In TOP`のパスと名前を入れます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/5473d3ba-6bd2-29dd-3c48-65df9c23a2e6.png)

`op`をexpressionで指定することもできます。`timecode CHOP`に対応したTOP, CHOPは、`Timecode class`を内部に持っていて、これをプロパティで参照することができます。
<img width="431" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/e674bfe7-c1b4-af2a-e879-91ab488fff5d.png">

### frame番号で指定する (Specify Index)

frameの番号(index)で直接指定します。`Mode`は、`Specify Index`で設定。

![スクリーンショット 2024-09-28 14.50.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/bc40883d-1a18-fb3b-8222-6b51dbe97f66.png)

プロパティの`Index`にReferenceなどで、frame indexを指定します。このサンプルでは、`Slider1`を操作すると、1〜100のindexの値が送られるようにして、timecodeを変更できるようにしています。

<img width="430" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/4ff8121f-2699-9d33-23d3-c88322e9c5b2.png">


### タイムラインを参照 (Locked to Timeline)

タイムラインのTimecodeを参照します。`Mode`は、`Locked to Timeline`を設定します。タイムラインのタイムコードを画面かUIに表示したいときに使えます。この方法で、他のモードのTimecodeも`Text TOP`などに出力できます。

![スクリーンショット 2024-09-28 15.03.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/c2a36e2d-7a95-fd56-74e9-ae55197e0509.png)


# 細かい設定方法
Timecode CHOPを使う上で便利は設定方法です。

### 開始位置を指定する
Cueの位置を指定するように、Timecode CHOPの開始位置を指定する方法です。

![スクリーンショット 2024-09-28 15.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/3c89c229-666c-1e67-9a8b-564401fa5c30.png)

このサンプルでは、`timecode5`で開始位置のTimecodeを指定し、そのTimecodeが`timecode6`の開始位置に設定されます。

`timecode5`は次のような設定をします。
![スクリーンショット 2024-09-28 15.16.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/ad674634-cf0f-796d-65d3-1f373e21c7d3.png)

`Mode`は、`Timecode String`を選択し、`Timecode String`で、文字列で開始位置にしたいタイムコードを入力します。`Timecode6`の`Mode`は、`Sequentioal`などに設定しましょう。

最後に、`timecode5`のoutputを`timecode6`のinputに接続します。`timecode6`をInitし、Startすると、`timecode5`から再生されます。タイムコードのオフセットやキュー位置での呼び出しなどに使えます。

### 終了位置を指定する
`Timecode CHOP`を単独で再生する場合の終了位置を指定する方法です。

プロパティの`Custom Length`を`On`にします。`Length`で、終了位置（長さ）を指定します。

![スクリーンショット 2024-09-28 15.22.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55390/46446f53-d722-1adf-2026-e6f8faed94eb.png)

このサンプルでは、3秒を指定しています。3秒後、タイムコードは止まります。ループ再生したい場合は、`Cycle`を`On`にします。