演出機器を自動的に動作させるクリックとして使われるタイムコードについて書きたいと思います。


目次

 

タイムコードとは

 本来は動画を扱うための物ですが、舞台やイベントの現場では機器の動作を同期させたり定時動作を自動化するための汎用制御信号として用います。規格名は「SMPTE12M」に定義される「LTC(Linear Time Code)」と呼ばれる物です。「SMPTE」とは「Society of Motion Pictures an Television Engineers(米国映画テレビ技術者協会)」のことであり、日本語では「エス・エム・ピー・ティー・イー」又は「シンプティ」と読みます。
 規格の目的は動画のフレームのタイムアドレスを表す物です。動画は言わば超高速紙芝居ですが、何番目の画像かを時刻表現に近い形式で表します。ですから、演出器具を動かすためのクリックでもなければ、時刻を表すための物でもありません。性質上、その様に使えるだけです。
 信号の電気的特性は、映像用の磁気テープでは音声トラックに書かれていたこともあり、一般的な音声信号とほぼ同等に扱うことが出来ます。

 注意ですが、世間でタイムコードと呼ばれるシステムはこれだけではありません。動画に全く関係無いところで全く違うタイムコードが使われていることもあります。所構わず「タイムコードすなわちLTC」として話を進めると事故の基になります。

 以下は、「SMPTEデジタル規格集3=TC,SDTIほか=(宇野潤三訳、兼六館出版、ISBN4-87462-045-0)」を参考にしています。

 なお、LTCは地上波デジタルテレビ放送が始まる前の地上波アナログテレビ放送の時代に策定された物です。この記事はLTCについてですから、テレビ放送についての情報は地上波アナログテレビ放送を前提とした物になります。

フレームのタイムアドレス

 「動画は超高速紙芝居」と書きましたが、動画は静止画を一定の間隔で差し替えることで動いているように見せる手法です。動画をスロー再生する(静止画を切り替える間隔を長くする)とカクカクと動きが飛び々々に見えると思いますが、静止画を切り替える間隔を一定以上に短くすると滑らかに動いている様に錯覚することが動画の原理です。
 撮った動画を単に放映するだけなら不要なことかもしれませんが、動画の構成や編集が複雑になってきますと静止画単位で管理した方がよくなってきて、それぞれにナンバリングをする様になったのだと思います。

 動画では静止画単位をフレームと呼びますが、それぞれに重複しないアドレス(ナンバー)を割付け、記録媒体にフレームの画像情報と並列に記録します。この様式が「タイムコード」であり、それぞれのフレームを表す物がタイムアドレスとなります。
 タイムアドレスがあると便利ですが、最初のフレームから単に連番を付けるだけでは桁数が多くなって管理が簡単とは言えません。動画は時間に対して一定の動作をしますので「何分何秒目」と表した方が直感的にわかりやすいので時刻表現に近い形としたのだと思います。一般的には「何時:何分:何秒:何フレーム」と表します。最後の「何フレーム」は1秒の間のフレームの通し番号です。「0時0分0秒0フレーム」から始まり「23時59分59秒29(24,23)フレーム」までカウントできます。

動画のフォーマット

 そもそもが動画を静止画単位で管理するためのナンバリングですから、動画のフォーマットの基本を理解しておくべきです。
 LTCを理解するためには次の二つが重要です。

フレームレート

 1秒間に静止画が何枚あるか、という単位です。これが何種類もあります。単位表記は「fps」です。「フレーム・パー・セコンド( Frames par Second )」の略です。1秒間のフレーム数を表します。つまり、フレームレートとは何fpsであるか、という意味です。

 主だったフレームレートは次の通りです。

 【用語解説】NTSC(エヌティーエスシー)やPAL(パル)とはテレビ送信の規格。NTSCは主にアメリカ合衆国やカナダ、日本などで用いられ、PALは主にヨーロッパや旧ソビエト連邦圏で用いられています。

ドロップフレーム(DF) / ノンドロップフレーム(NDF)

SMPTE12MとLTC

 最も古く、現在でも基本となっているタイムコードの規格が「SMPTE12M」です。この中に「LTC (Linear Time Code)」が定義されています。
 LTCはフレームと並列で保存される80bit長のデジタル符号です。規格の主な内容は80bitのデータフォーマット、変調方式、電気的特性です。規格から計算される物ですが、ビットレート(送信速度)も重要な情報です。

電気的特性

 +4dB音声LINE信号に近似し互換性があります。

変調方式

 デジタル信号は0か1かの数値を表し、電気的には数値が0なら電圧が0v、数値が1なら電圧が規定値とするのが基本です。しかし、このまま長距離の送受信は出来ませんので、戻すことを前提に装置が送受信しやすい電気的な変更を加えます。これを「変調」と呼びます。
 LTCではデジタル符号変調方式の一つである「差動バイフェーズ」を使います。

差動バイフェーズ

 単線で表現します。クロックなどの制御信号線はありません。
 単位時間内の電圧変化の回数で0か1を表現します。電圧値ではありません。
 以下には「電圧が反転」とする文言がありますが、規定値プラスだった電圧が規定値マイナスへ、規定値マイナスだった電圧が規定値プラスに変化することを表しています。

 文章ではイメージしにくいかもしれませんが、単位時間の始まりと終わりで必ず電圧が反転し、1の場合だけ単位時間の半分で電圧の反転が追加されます。

ビットレート

 シリアルなデジタル信号ですから送信速度も大事な設定値です。
 1フレームの送信時間と80bitの送信時間が等しいので、タイムコードのビットレートはフレームレートに比例します。

データフォーマット

データの内容

 80bitのデジタル符号で表します。実際の順番はバラバラですが、大雑把に分類すると次の情報が記されます。

データのフォーマット

 80bitの内訳は次の通りです。

データフォーマット表

ビット名  称補 足
0フレームの
1の位
0bit目BCD表記
数値範囲0-9
11bit目
22bit目
33bit目
4第1
バイナリグループ
使用しない場合=0
使用する場合は
それぞれの設定値
5
6
7
ビット名  称補 足
8フレームの
10の位
0bit目BCD表記
数値範囲0-2
91bit目
10NTSCモノクロ 30fps未定義通常=0
NTSCカラー 29.97fpsドロップフレームフラグDF=1 / NDF=0
PAL 25fps未定義通常=0
フィルム 24fps未定義通常=0
11NTSCモノクロ 30fps未定義通常=0
NTSCカラー 29.97fpsカラーフレームフラグカラー=1 / モノクロ=0
PAL 25fpsカラーフレームフラグカラー=1 / モノクロ=0
フィルム 24fps未定義通常=0
12第2
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
13
14
15
ビット名  称補 足
16秒の1の位0bit目BCD表記
数値範囲0-9
171bit目
182bit目
193bit目
20第3
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
21
22
23
ビット名  称補 足
24秒の10の位0bit目BCD表記
数値範囲0-5
251bit目
262bit目
27NTSCモノクロ 30fps極性補正フラグ計算により定義
NTSCカラー 29.97fps
PAL 25fpsバイナリグループフラグ0設定値は別表
フィルム 24fps極性補正フラグ計算により定義
28第4
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
29
30
31
ビット名  称補 足
32分の1の位0bit目BCD表記
数値範囲0-9
331bit目
342bit目
353bit目
36第5
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
37
38
39
ビット名  称補 足
40分の10の位0bit目BCD表記
数値範囲0-5
411bit目
422bit目
43NTSCモノクロ 30fpsバイナリグループフラグ0設定値は別表
NTSCカラー 29.97fps
PAL 25fpsバイナリグループフラグ2
フィルム 24fpsバイナリグループフラグ0
44第6
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
45
46
47
ビット名  称補 足
48時の1の位0bit目BCD表記
数値範囲0-9
491bit目
502bit目
513bit目
52第7
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
53
54
55
ビット名  称補 足
56時の10の位0bit目BCD表記
数値範囲0-2
571bit目
58NTSCモノクロ 30fpsバイナリグループフラグ1設定値は別表
NTSCカラー 29.97fps
PAL 25fps
フィルム 24fps
59NTSCモノクロ 30fpsバイナリグループフラグ2設定値は別表
NTSCカラー 29.97fps
PAL 25fps極性補正フラグ計算により定義
フィルム 24fpsバイナリグループフラグ2設定値は別表
60第8
バイナリグループ
使用しない場合=0
使用する場合は
モードによる設定値
61
62
63
ビット名  称補 足
64同期ワード0bit目固定値=0
651bit目=0
662bit目=1
673bit目=1
684bit目=1
695bit目=1
706bit目=1
717bit目=1
ビット名  称補 足
72同期ワード8bit目固定値=1
739bit目=1
7410bit目=1
7511bit目=1
7612bit目=1
7713bit目=1
7814bit目=0
7915bit目=1

microchip社のPIC16マイコンでタイムコード機器を作る

 今はmicrochip社のPIC16マイコン以外にも安価で優秀なマイコンが数多くありますが、マイコンを使い始めた当初、私にも理解出来て安価に開発環境を整えられたマイコンがこれだったので今も愛用しています。当時はCコンパイラが大変高価だったため、その名残で未だにアセンブラで書いています。
 PICマイコンは拡張ミッドレンジ16系を用います。上位機種に比べて処理能力や機能は劣りますが、今はRaspberryPiと組み合わせて使うことが多く、お互いにお互いの弱点を補ってくれるので不足はありません。今回のLTCを扱う上ではとても便利です。

 それでは基本となる処理方針を考えていきましょう。
 LTCの実態である差動バイフェースはシリアル信号の一種ですが、これを専門的に扱うモジュールもライブラリもPIC16系にはありません。高級OSにおけるデバイスドライバに相当する部位から書くのですが、シリアル信号では基底クロックの精度と汎用性が重要になりますから、クロックソースをどうやって作るかを考えてみます。

タイムコードのクロックソース

 LTCは1,940~2,400bpsの差動バイフェーズ信号です。これに用いる基底クロックをPIC内で作ります。基底クロックは差動バイフェーズの性質上送信速度の倍ですから3,880~4,800Hzです。
 マイコンに与えるクロック(Fosc)は32MHzとします。8MHzの水晶発振子を用い内部の4倍PLLで32HMzとします。1命令クロックはパイプラインの都合でFosc/4となり8MHzです。
 基底クロックはPIC内のタイマであるTMR1をコンペアモードで起こします。コンペアモードとは、命令クロックでカウントされるTMR1とCCPxレジスタの値が一致すると割り込みを発生し、TMR1をクリアする機能なので、設定周期を発生させるのに便利な機能です。

基本的な考え方

 高度な分周機能を持ったPLLを用いれば簡単なことですが、8MHzのタイマの単純なカウントだけで必要な基底クロックを起こすにはちょっとした小細工をします。
 PICのコンペアモードは、CCPxレジスタに値を設定しておけば、TMR1の値がこれと同じになった瞬間にフラグ(一致フラグ)が立つ機能です。通常はCCPxを一定値で使いますが、一致回数に対し一定の周期でCCPxレジスタの値を増減すれば長い目で見ると辻褄を合わせられます。クロック周期の増減は0.5%未満なので、波形の立ち上がり立下り誤差に吸収される程度だと思います。

フレームレート毎の補正の仕方

 LTCは1時間単位で帳尻が合うことを前提にしていますのでその様に計算します。PICマイコンの1時間当たりの総クロックカウント数と、LTCの基底クロックを起こすTMR1の総クロックカウント数が同じになるようなCCPxレジスタの増減規則を見つけたいと思います。

 クロックはすべての基本ですから、出来るだけ正確を目指したいものです。

差動バイフェーズのデコード

 受信ではLTCを10バイトのデータにすることが最初の作業でしょう。
 そのためにもビットを正確に受信しなければなりません。

差動バイフェーズのビット受信

 ソフトウェア的に処理し、対応範囲を24~30fpsとします。
 差動バイフェーズは値が一定でも信号が常に反転していますから、PICではI/O入力の変化割り込みを用いるのが最適でしょう。その名の通り、I/Oの入力が変化すると割り込みが発生する機能です。
 PIC内での処理ですから、波長の長短は秒数よりも上記のカウンタのカウント数で考えた方が近道です。可能ならば24fpsでも30fpsでも同じ処理で済ませたいので検討します。

ビットデータを格納し、タイムコードとして扱える様にする

 ビットデータを得たなら一時スタックレジスタに保存する。

 受け取るのは時刻の刻みにも等しい物なので、正しい長さの信号であるかを評価する意味はあまり無いと思う。同期ワードが出現した瞬間に受信したデータに書かれた時刻が真であるとして良いと思う。


 ・・・以下、まとめ中。


トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-01-12 (水) 09:46:40