openFrameworksでマルチモニタの時に、ofSetFullscreen()を使わずに全画面化する

f:id:miso_engine:20180119221819p:plain

OSはWindows10で、画面配置はこんな感じ。左の画面はオペレーション用にoFの画面を表示せず、右の2つの表示用画面(720P x 2 = 1280 x 1440)にまたがってフルスクリーンにしたかったのです。

main.cppでofGLFWWindowSettingsを使ってウィンドウのサイズと場所を指定し、decoratedをfalseにすると出来る。簡単ですね。このdecoratedオプション、デフォルトだとtrueで、その場合だとウィンドウの枠が表示されるんですな。

Beyond Interaction[改訂第2版] -クリエイティブ・コーディングのためのopenFrameworks実践ガイド

Beyond Interaction[改訂第2版] -クリエイティブ・コーディングのためのopenFrameworks実践ガイド

TouchDesignerのチャンネルをCHOPとスクリプトで自在に扱う

猫も杓子もTouchDesigner(以下TD)の昨今ですが、仕事で触ってみたのでノウハウをまとめてみる。僕のスキルとしては基本的にスクリプトでクリエイティブコーディングしてきてて、TDみたいなビジュアルなやつはMaxやPdをたまーに触ってたくらい。

TDのキモはチャンネル

TDはチャンネルという概念がポイントだと思う。チャンネルはチャンネル名に数値が紐付いてるもので、TD上では緑の線がチャンネルそのものを表している。チャンネルが持てる数値は1つの数値だけではなく、過去の数値群も持てる。これを分かりやすく実感する例が、Trail CHOP。下記画像のとおり、Trail CHOPがLFO CHOPで作られた数値を貯めていってグラフにして表示している。
f:id:miso_engine:20171227172541p:plain

CHOPは複数チャンネル扱える

初心者以外には当たり前な話だと思うのだが、CHOPは複数チャンネル扱える。パラメータウィンドウのChannel項目でチャンネル名を足していくと増える。簡単ですね。同じ処理をするなら単純にチャンネルを増やしていけば良い。
f:id:miso_engine:20171227172610p:plain
チャンネルを分けるならSelect CHOP、束ねるならMerge CHOP。
f:id:miso_engine:20171227172622p:plain

チャンネルを入力にPythonで処理したいならScript CHOPがおすすめ

スクリプトを書くOPは各種用意されているけど、一番のオススメはScript CHOP。スクリプトへのチャンネルの入力と出力をTD上で明示的に出来て、他のCHOPと同じように扱えるので。ここでは、オフセットをチャンネルごとに設定するためのシンプルなコードを書いてる。スクリプト以外でも出来そうだけど、書いちゃった方が早い。Pythonだし。
f:id:miso_engine:20171227172637p:plain

def onCook(scriptOp):
	scriptOp.clear()
	
	a = scriptOp.inputs[0]
	scriptOp.copy(a)
	

	for (count, chan) in enumerate(scriptOp.chans()):
		for i in range(0, scriptOp.numSamples):
			if count % 2 == 1:
				chan[i] -= 0.12
			elif count == 0:
				chan[i] += 0.25
			else:
				chan[i] -= 0.25
	
	return

Pythonのコード書くときは、OPSnippetsと下記リファレンスとにらめっこしながらって感じでやっている。
https://www.derivative.ca/wiki099/index.php?title=Category:Python

注意点

Pythonのところでエラーが出るとそこでめっちゃ時間食ってFPSがズドンと落ちるので注意。

余談

自在に出来るような気がしてきた……!ってところでTD以外に移行することになったのでエイヤッとまとめた。みなさん頑張りましょう。

Visual Thinking with TouchDesigner - プロが選ぶリアルタイムレンダリング&プロトタイピングの極意

Visual Thinking with TouchDesigner - プロが選ぶリアルタイムレンダリング&プロトタイピングの極意

  • 作者: 松山周平,松波直秀,ベン・ヴォイト,サムワンズガーデン
  • 出版社/メーカー: ビー・エヌ・エヌ新社
  • 発売日: 2017/09/15
  • メディア: 単行本
  • この商品を含むブログを見る

microbitでMicroPythonが簡単で便利、そして楽しい

先日した仕事で、無線のセンサータグ的な要件にピッタリだったので、microbitをMicroPython使って開発したんだけど、これが簡単、便利、楽しいの三拍子が揃っててよかった。
f:id:miso_engine:20171214181310j:plain

microbitのいいところ

  • 2000円程度と高くない
  • 入力と出力が標準装備
    • 入力:スイッチが2つ
    • 出力:5x5で配置された25個のLEDディスプレイ
      • 文字や画像を表示・スクロールするライブラリが標準装備
      • Pythonのエラーがディスプレイにスクロール表示される
  • BLE搭載
    • BLE機能は実際に使わなかったのだけど、microbit同士で簡単に通信できるBluetoothライブラリが添付されている
  • Webコンパイラ
  • 加速度センサ搭載
  • ドライバ不要
  • 日本語リファレンス完備
  • ワニ口クリップでIOポートを簡単に繋げる
  • 基板がかわいい

MicroPythonのいいところ

  • 書くのが楽
  • Pythonなのでコードが読みやすい
  • 対話式インタプリタで変数の情報とかを読み出せてデバッグが超楽
  • muというIDEが軽くて補完の機能も良い

microbit & MicroPythonのよくないところ

  • ポートが金属として露出しているのでちょっと気を抜くと触ってセンサの値がとんでもないことになりがち
  • MicroPythonの開発環境からは今のところ一意のIDを読み出せなさそう & プログラムを書き込むたびに記憶領域が吹っ飛ぶからID持たせるのが大変

コード例

左のボタンを押したらハート、右のボタンを押したらキリンが表示されるプログラム。たった7行で書ける。

全体的に

microbitというハードの良さとMicroPythonとその他のソフト環境の良さ、その2つが相まってArduinoより体感で4倍ぐらい快適だった。特に入出力がデフォルトであって、microbit自身がエラーを報告してくれるところ。Arduinoだと色々買って繋げてライブラリを入れてようやくこの環境になるので。とはいえ、ライブラリの導入とかをしてないので、もっと大規模な開発になってくるとまだわからないのだが、AdafruitもPython推していくみたいだし、下記記事で書かれているように、開発は簡単なPythonでやって、性能とかバッテリ寿命とかシビアな本番環境は別の言語、環境で開発する、というのはかなり現実的だと思う。
Make: Japan | AdafruitがCircuitPythonへ移行
f:id:miso_engine:20171205114453j:plain
色違いがたくさんあるのも楽しい。

micro:bit(マイクロビット)

micro:bit(マイクロビット)

*1:まぁ最近は普通か