●動画出力
次は動画についてだ。
この例では、テレビにテストパターンを表示させている。つまり、この例は動画の波形の生成以上のことは何にもしちゃいない。そうなんだけれども、僕はテストパターンをテレビに動画のアウトプットとして表示している。
何をやっているか説明しよう。これが基本的な波形だ。ビデオには多くのスタンダードが存在する。最もシンプルなものは、モノクロのものだ。そして、非常に特殊なタイミングというものが存在する。諸君はそのタイミングに合わせなきゃならないんだ。
そのタイミングで諸君は0.3Vと1Vの間で波形を作り出すことになるのだけれども、これにより動画のシグナルの強度が得られる。
そして、この例の場合、基板はしょうもない感じになる。二個抵抗器が搭載されているだけだ。そして、ここでやらなくちゃならないのは、超高速に動画の波形を生成するってことだ。
そして、僕は自分自身のためにデジタルアナログ変換器を作った。こいつは超高速で処理できる。だから、基板側には2つの抵抗器だけ搭載しているんだ。
そして、僕はビデオデバイスに接続されるコネクタを搭載している。ビデオデバイスは単体のものだ。標準的な75オームの抵抗値だ。
そして、これらの抵抗は各々がオン、オフ、トライステート(3ステート)にすることができる。
そして、オフにするのか、オンにするのか、それともトライステートにするのかを選択することにより、僕は多様な電圧レベルを生成することができる。
しかし、それは非常に高速で、僕がやらなきゃならないことはピンの値を設定するだけだ。
自作デジタルアナログ変換器を作って、ピンをフリップさせることに動画入力により信号を送るんだ。
●Cコード
それでは、ここでCコードを見てみよう。
僕が何を行なっていのかというと、テストパターンをループさせている。ビットをフリッピングさせて動画の波形を出力することによってね。
ここで、僕はメモリにテストパターンを保存する。そして、書き出すためのビットをフリップさせる。
そうやって、動画を合成するんだ。
そして、現在、諸君はビデオモニターや小型のテレビを数十ドルで入手することができる。
それはシンプルなテストパターンだ。
Fab Academyの受講者だったJamesは今回の課題に対して素晴らしいものを作り上げた。ここで、彼はSPI周辺機器を用いてビデオをストリーム再生させた。そうやってもっと複雑な例を示した。
そして、これはビデオゲームの一部を作っているんだ。
そういうわけで、これはより複雑な動画インプリメンテーションの素晴らしい例だ。これを彼は作ったんだ。
そして、僕はいくつか野心的なプロジェクトへのリンクを貼っておこう。
tvoutはArduinoで動画出力を行おうっていうプロジェクトだ。
https://code.google.com/archive/p/arduino-tvout
Thinner ClientはFabに関する講座で生まれた初期のプロジェクトだ。小さなターミナル全体を作っている。つまり、これは完全なるテキストターミナルを作るプロジェクトなんだ。
そして、Xmegaはクロック数を高速にすることができるAVRファミリだ。諸君はXmegaをクラップすることができる。実際にオーバークロックさせることができる。
そして、このようにXmegaを用いているプロジェクトは山のようにある。この例では、オーバークロッキングさせて、ソフトウェアでフルカラーのビデオシステムを生成するということを行なっている。
そして、これははるかに野心的なプロジェクトだ。
これは60fpsの256色のNTSCだ。そうするには、諸君が目にする全てのものがマイクロコードにより合成される。これを高速にやらなきゃならないんだけれども、Xmegaは他のものと同様のAVRファミリなのだけれど、ただ高速バージョンなんだよね。そしてこれは先ほどの処理を行うのに十分な速度だ。諸君は動画プレイヤーを制作している多くのプロジェクトを見つけることができるだろう。
そして、これはコーディングもビデオ再生も全てXMegaで行なっている例だ。
よし。そういうわけで、この小さなプロセッサは動画を生成するのに十分なくらい高速ってことが分かったね。
こうすれば、諸君はモニタやテレビ、プロジェクタなどを用いることができる。そして、これらは多くの動画入力を処理することができる。
(つづく) 講義の目次は 【和訳版】FabAcademy 2016 からご覧ください。 ※この記事は FabAcademy 2016 におけるニール・ガーシェンフェルド教授(MIT)による講義動画をもとに作成しました。正確な訳ではないので間違っていたら指摘いただけるとありがたいです。